duckdb 0.7.2-dev0.0 → 0.7.2-dev1034.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (590) hide show
  1. package/binding.gyp +12 -7
  2. package/lib/duckdb.d.ts +55 -2
  3. package/lib/duckdb.js +20 -1
  4. package/package.json +1 -1
  5. package/src/connection.cpp +1 -2
  6. package/src/database.cpp +1 -1
  7. package/src/duckdb/extension/icu/icu-extension.cpp +4 -0
  8. package/src/duckdb/extension/icu/icu-list-range.cpp +207 -0
  9. package/src/duckdb/extension/icu/icu-table-range.cpp +194 -0
  10. package/src/duckdb/extension/icu/include/icu-list-range.hpp +17 -0
  11. package/src/duckdb/extension/icu/include/icu-table-range.hpp +17 -0
  12. package/src/duckdb/extension/json/include/json_common.hpp +1 -0
  13. package/src/duckdb/extension/json/include/json_functions.hpp +2 -0
  14. package/src/duckdb/extension/json/include/json_serializer.hpp +77 -0
  15. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +147 -0
  16. package/src/duckdb/extension/json/json_functions/read_json.cpp +6 -5
  17. package/src/duckdb/extension/json/json_functions.cpp +12 -4
  18. package/src/duckdb/extension/json/json_scan.cpp +2 -2
  19. package/src/duckdb/extension/json/json_serializer.cpp +217 -0
  20. package/src/duckdb/extension/parquet/column_reader.cpp +94 -15
  21. package/src/duckdb/extension/parquet/column_writer.cpp +0 -1
  22. package/src/duckdb/extension/parquet/include/column_reader.hpp +1 -2
  23. package/src/duckdb/extension/parquet/include/decode_utils.hpp +5 -4
  24. package/src/duckdb/extension/parquet/include/generated_column_reader.hpp +1 -11
  25. package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +2 -1
  26. package/src/duckdb/extension/parquet/parquet-extension.cpp +12 -2
  27. package/src/duckdb/extension/parquet/parquet_reader.cpp +1 -1
  28. package/src/duckdb/extension/parquet/parquet_statistics.cpp +26 -32
  29. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +16 -6
  30. package/src/duckdb/src/catalog/catalog.cpp +34 -5
  31. package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +4 -0
  32. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +2 -21
  33. package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +7 -6
  34. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +3 -3
  35. package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +20 -1
  36. package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +8 -2
  37. package/src/duckdb/src/catalog/catalog_set.cpp +1 -0
  38. package/src/duckdb/src/catalog/default/default_functions.cpp +3 -0
  39. package/src/duckdb/src/catalog/dependency_list.cpp +12 -0
  40. package/src/duckdb/src/catalog/duck_catalog.cpp +34 -7
  41. package/src/duckdb/src/common/arrow/arrow_appender.cpp +48 -4
  42. package/src/duckdb/src/common/arrow/arrow_converter.cpp +1 -1
  43. package/src/duckdb/src/common/box_renderer.cpp +109 -23
  44. package/src/duckdb/src/common/enums/expression_type.cpp +8 -222
  45. package/src/duckdb/src/common/enums/join_type.cpp +3 -22
  46. package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
  47. package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
  48. package/src/duckdb/src/common/exception.cpp +15 -1
  49. package/src/duckdb/src/common/field_writer.cpp +1 -0
  50. package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
  51. package/src/duckdb/src/common/preserved_error.cpp +7 -5
  52. package/src/duckdb/src/common/serializer/buffered_deserializer.cpp +4 -0
  53. package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +15 -2
  54. package/src/duckdb/src/common/serializer/enum_serializer.cpp +1176 -0
  55. package/src/duckdb/src/common/sort/sort_state.cpp +5 -7
  56. package/src/duckdb/src/common/sort/sorted_block.cpp +0 -1
  57. package/src/duckdb/src/common/string_util.cpp +4 -1
  58. package/src/duckdb/src/common/types/bit.cpp +166 -87
  59. package/src/duckdb/src/common/types/blob.cpp +1 -1
  60. package/src/duckdb/src/common/types/chunk_collection.cpp +2 -2
  61. package/src/duckdb/src/common/types/column_data_collection.cpp +39 -2
  62. package/src/duckdb/src/common/types/column_data_collection_segment.cpp +11 -6
  63. package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
  64. package/src/duckdb/src/common/types/time.cpp +13 -0
  65. package/src/duckdb/src/common/types/value.cpp +320 -154
  66. package/src/duckdb/src/common/types/vector.cpp +155 -127
  67. package/src/duckdb/src/common/types.cpp +313 -153
  68. package/src/duckdb/src/common/vector_operations/vector_cast.cpp +2 -1
  69. package/src/duckdb/src/execution/aggregate_hashtable.cpp +10 -5
  70. package/src/duckdb/src/execution/column_binding_resolver.cpp +21 -5
  71. package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -1
  72. package/src/duckdb/src/execution/index/art/art.cpp +6 -5
  73. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +4 -5
  74. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +117 -26
  75. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
  76. package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +5 -3
  77. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +64 -17
  78. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -2
  79. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +12 -4
  80. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +6 -11
  81. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +3 -1
  82. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +6 -3
  83. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +6 -14
  84. package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +2 -2
  85. package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +34 -0
  86. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +20 -5
  87. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +20 -40
  88. package/src/duckdb/src/execution/partitionable_hashtable.cpp +14 -2
  89. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +21 -16
  90. package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +97 -0
  91. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +95 -47
  92. package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +5 -8
  93. package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +14 -5
  94. package/src/duckdb/src/execution/physical_plan_generator.cpp +3 -0
  95. package/src/duckdb/src/execution/window_segment_tree.cpp +173 -1
  96. package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +0 -6
  97. package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +99 -95
  98. package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +269 -0
  99. package/src/duckdb/src/function/aggregate/distributive/bool.cpp +2 -0
  100. package/src/duckdb/src/function/aggregate/distributive/count.cpp +3 -4
  101. package/src/duckdb/src/function/aggregate/distributive/first.cpp +1 -0
  102. package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -0
  103. package/src/duckdb/src/function/aggregate/distributive/sum.cpp +19 -16
  104. package/src/duckdb/src/function/aggregate/distributive_functions.cpp +1 -0
  105. package/src/duckdb/src/function/aggregate/holistic/approximate_quantile.cpp +5 -2
  106. package/src/duckdb/src/function/aggregate/holistic/mode.cpp +1 -1
  107. package/src/duckdb/src/function/aggregate/holistic/quantile.cpp +16 -1
  108. package/src/duckdb/src/function/aggregate/nested/list.cpp +8 -8
  109. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +58 -16
  110. package/src/duckdb/src/function/cast/bit_cast.cpp +0 -2
  111. package/src/duckdb/src/function/cast/blob_cast.cpp +0 -1
  112. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  113. package/src/duckdb/src/function/cast/enum_casts.cpp +25 -3
  114. package/src/duckdb/src/function/cast/list_casts.cpp +17 -4
  115. package/src/duckdb/src/function/cast/map_cast.cpp +5 -2
  116. package/src/duckdb/src/function/cast/string_cast.cpp +36 -10
  117. package/src/duckdb/src/function/cast/struct_cast.cpp +24 -4
  118. package/src/duckdb/src/function/cast/time_casts.cpp +2 -2
  119. package/src/duckdb/src/function/cast/union_casts.cpp +33 -7
  120. package/src/duckdb/src/function/function_binder.cpp +1 -8
  121. package/src/duckdb/src/function/scalar/bit/bitstring.cpp +100 -0
  122. package/src/duckdb/src/function/scalar/date/current.cpp +0 -2
  123. package/src/duckdb/src/function/scalar/date/date_diff.cpp +0 -1
  124. package/src/duckdb/src/function/scalar/date/date_part.cpp +18 -26
  125. package/src/duckdb/src/function/scalar/date/date_sub.cpp +0 -1
  126. package/src/duckdb/src/function/scalar/date/date_trunc.cpp +10 -14
  127. package/src/duckdb/src/function/scalar/generic/stats.cpp +2 -4
  128. package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +4 -146
  129. package/src/duckdb/src/function/scalar/list/flatten.cpp +5 -12
  130. package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
  131. package/src/duckdb/src/function/scalar/list/list_concat.cpp +8 -12
  132. package/src/duckdb/src/function/scalar/list/list_extract.cpp +5 -12
  133. package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +7 -3
  134. package/src/duckdb/src/function/scalar/list/list_value.cpp +6 -10
  135. package/src/duckdb/src/function/scalar/map/map.cpp +47 -1
  136. package/src/duckdb/src/function/scalar/map/map_entries.cpp +61 -0
  137. package/src/duckdb/src/function/scalar/map/map_extract.cpp +68 -26
  138. package/src/duckdb/src/function/scalar/map/map_keys_values.cpp +97 -0
  139. package/src/duckdb/src/function/scalar/math/numeric.cpp +101 -17
  140. package/src/duckdb/src/function/scalar/math_functions.cpp +3 -0
  141. package/src/duckdb/src/function/scalar/nested_functions.cpp +3 -0
  142. package/src/duckdb/src/function/scalar/operators/add.cpp +0 -9
  143. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +29 -48
  144. package/src/duckdb/src/function/scalar/operators/bitwise.cpp +0 -63
  145. package/src/duckdb/src/function/scalar/operators/multiply.cpp +5 -6
  146. package/src/duckdb/src/function/scalar/operators/subtract.cpp +0 -6
  147. package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -6
  148. package/src/duckdb/src/function/scalar/string/hex.cpp +201 -0
  149. package/src/duckdb/src/function/scalar/string/instr.cpp +2 -6
  150. package/src/duckdb/src/function/scalar/string/length.cpp +2 -6
  151. package/src/duckdb/src/function/scalar/string/like.cpp +2 -6
  152. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
  153. package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
  154. package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
  155. package/src/duckdb/src/function/scalar/string/substring.cpp +2 -6
  156. package/src/duckdb/src/function/scalar/string_functions.cpp +2 -0
  157. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +5 -10
  158. package/src/duckdb/src/function/scalar/struct/struct_insert.cpp +11 -14
  159. package/src/duckdb/src/function/scalar/struct/struct_pack.cpp +6 -7
  160. package/src/duckdb/src/function/table/arrow.cpp +5 -2
  161. package/src/duckdb/src/function/table/arrow_conversion.cpp +25 -1
  162. package/src/duckdb/src/function/table/checkpoint.cpp +5 -1
  163. package/src/duckdb/src/function/table/read_csv.cpp +55 -0
  164. package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +2 -2
  165. package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -2
  166. package/src/duckdb/src/function/table/table_scan.cpp +1 -1
  167. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  168. package/src/duckdb/src/function/table_function.cpp +30 -11
  169. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -0
  170. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +1 -1
  171. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +6 -8
  172. package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +3 -0
  173. package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +2 -1
  174. package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +8 -2
  175. package/src/duckdb/src/include/duckdb/common/constants.hpp +0 -19
  176. package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
  177. package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
  178. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +7 -4
  179. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
  180. package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
  181. package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
  182. package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -1
  183. package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +2 -1
  184. package/src/duckdb/src/include/duckdb/common/exception.hpp +69 -2
  185. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +12 -4
  186. package/src/duckdb/src/include/duckdb/common/{http_stats.hpp → http_state.hpp} +18 -4
  187. package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
  188. package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +45 -0
  189. package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +6 -1
  190. package/src/duckdb/src/include/duckdb/common/serializer/buffered_deserializer.hpp +4 -2
  191. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +8 -2
  192. package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
  193. package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
  194. package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
  195. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
  196. package/src/duckdb/src/include/duckdb/common/serializer.hpp +13 -0
  197. package/src/duckdb/src/include/duckdb/common/string_util.hpp +25 -0
  198. package/src/duckdb/src/include/duckdb/common/types/bit.hpp +12 -7
  199. package/src/duckdb/src/include/duckdb/common/types/time.hpp +3 -0
  200. package/src/duckdb/src/include/duckdb/common/types/value.hpp +17 -48
  201. package/src/duckdb/src/include/duckdb/common/types/value_map.hpp +1 -1
  202. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -1
  203. package/src/duckdb/src/include/duckdb/common/types.hpp +45 -8
  204. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +2 -2
  205. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +1 -0
  206. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +2 -2
  207. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
  208. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_cross_product.hpp +2 -0
  209. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_file_handle.hpp +1 -0
  210. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +6 -0
  211. package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_projection.hpp +5 -0
  212. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +3 -0
  213. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +1 -3
  214. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +54 -0
  215. package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +5 -0
  216. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +18 -6
  217. package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +84 -0
  218. package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +2 -2
  219. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +28 -64
  220. package/src/duckdb/src/include/duckdb/function/function_binder.hpp +3 -6
  221. package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +4 -0
  222. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +138 -0
  223. package/src/duckdb/src/include/duckdb/function/scalar/math_functions.hpp +8 -0
  224. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +59 -0
  225. package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
  226. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +4 -0
  227. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
  228. package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +12 -1
  229. package/src/duckdb/src/include/duckdb/function/table_function.hpp +10 -0
  230. package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -0
  231. package/src/duckdb/src/include/duckdb/main/client_data.hpp +3 -3
  232. package/src/duckdb/src/include/duckdb/main/config.hpp +3 -0
  233. package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +2 -0
  234. package/src/duckdb/src/include/duckdb/main/database.hpp +1 -0
  235. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +2 -0
  236. package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +2 -0
  237. package/src/duckdb/src/include/duckdb/main/relation/explain_relation.hpp +2 -1
  238. package/src/duckdb/src/include/duckdb/main/relation.hpp +2 -1
  239. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
  240. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  241. package/src/duckdb/src/include/duckdb/optimizer/rule/list.hpp +1 -0
  242. package/src/duckdb/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp +24 -0
  243. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +4 -0
  244. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
  245. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
  246. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
  247. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
  248. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
  249. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
  250. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
  251. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -0
  252. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
  253. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
  254. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +4 -2
  255. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
  256. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
  257. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
  258. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
  259. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +4 -2
  260. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
  261. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
  262. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +5 -1
  263. package/src/duckdb/src/include/duckdb/parser/parsed_data/{alter_function_info.hpp → alter_scalar_function_info.hpp} +13 -13
  264. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +47 -0
  265. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +6 -0
  266. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_function_info.hpp +2 -1
  267. package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
  268. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
  269. package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
  270. package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
  271. package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
  272. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +13 -2
  273. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
  274. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
  275. package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +28 -0
  276. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
  277. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
  278. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
  279. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
  280. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
  281. package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
  282. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +87 -0
  283. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  284. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
  285. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
  286. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -0
  287. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +33 -0
  288. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -0
  289. package/src/duckdb/src/include/duckdb/planner/binder.hpp +15 -4
  290. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +3 -0
  291. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +3 -0
  292. package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +64 -0
  293. package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -2
  294. package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +4 -1
  295. package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +2 -2
  296. package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +9 -38
  297. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
  298. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  299. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
  300. package/src/duckdb/src/include/duckdb/planner/operator/logical_asof_join.hpp +22 -0
  301. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -2
  302. package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +3 -0
  303. package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +8 -2
  304. package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +2 -0
  305. package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +76 -44
  306. package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -2
  307. package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
  308. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  309. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
  310. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +1 -1
  311. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  312. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
  313. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +1 -1
  314. package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +5 -2
  315. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +3 -3
  316. package/src/duckdb/src/include/duckdb/storage/index.hpp +4 -3
  317. package/src/duckdb/src/include/duckdb/storage/meta_block_reader.hpp +7 -0
  318. package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +93 -29
  319. package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +22 -3
  320. package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +8 -6
  321. package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +41 -0
  322. package/src/duckdb/src/include/duckdb/storage/statistics/node_statistics.hpp +26 -0
  323. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +114 -0
  324. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
  325. package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -7
  326. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +74 -0
  327. package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +42 -0
  328. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +2 -3
  329. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
  330. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +6 -3
  331. package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
  332. package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +7 -5
  333. package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
  334. package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +6 -2
  335. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +10 -6
  336. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +8 -5
  337. package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +37 -0
  338. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +10 -1
  339. package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +4 -3
  340. package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +271 -26
  341. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
  342. package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +0 -1
  343. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
  344. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -2
  345. package/src/duckdb/src/include/duckdb.h +50 -2
  346. package/src/duckdb/src/include/duckdb.hpp +0 -1
  347. package/src/duckdb/src/main/capi/pending-c.cpp +16 -3
  348. package/src/duckdb/src/main/capi/result-c.cpp +27 -1
  349. package/src/duckdb/src/main/capi/stream-c.cpp +25 -0
  350. package/src/duckdb/src/main/client_context.cpp +38 -34
  351. package/src/duckdb/src/main/client_data.cpp +7 -6
  352. package/src/duckdb/src/main/config.cpp +70 -1
  353. package/src/duckdb/src/main/database.cpp +19 -2
  354. package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
  355. package/src/duckdb/src/main/prepared_statement.cpp +4 -0
  356. package/src/duckdb/src/main/query_profiler.cpp +17 -15
  357. package/src/duckdb/src/main/relation/explain_relation.cpp +3 -3
  358. package/src/duckdb/src/main/relation.cpp +3 -2
  359. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -0
  360. package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
  361. package/src/duckdb/src/optimizer/filter_combiner.cpp +1 -1
  362. package/src/duckdb/src/optimizer/filter_pullup.cpp +3 -1
  363. package/src/duckdb/src/optimizer/filter_pushdown.cpp +14 -8
  364. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +105 -71
  365. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +31 -12
  366. package/src/duckdb/src/optimizer/optimizer.cpp +1 -0
  367. package/src/duckdb/src/optimizer/pullup/pullup_from_left.cpp +2 -2
  368. package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +33 -5
  369. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +1 -1
  370. package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +3 -0
  371. package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +5 -12
  372. package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +2 -2
  373. package/src/duckdb/src/optimizer/pushdown/pushdown_single_join.cpp +1 -1
  374. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +1 -0
  375. package/src/duckdb/src/optimizer/rule/move_constants.cpp +10 -4
  376. package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +30 -0
  377. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +9 -2
  378. package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +9 -3
  379. package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +6 -7
  380. package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +14 -11
  381. package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
  382. package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +13 -15
  383. package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +0 -1
  384. package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +3 -75
  385. package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +7 -2
  386. package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -0
  387. package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +2 -3
  388. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +29 -32
  389. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +5 -5
  390. package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +3 -3
  391. package/src/duckdb/src/optimizer/statistics_propagator.cpp +2 -1
  392. package/src/duckdb/src/optimizer/unnest_rewriter.cpp +2 -2
  393. package/src/duckdb/src/parallel/meta_pipeline.cpp +0 -4
  394. package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
  395. package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
  396. package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
  397. package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
  398. package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
  399. package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
  400. package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
  401. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +17 -0
  402. package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
  403. package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
  404. package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
  405. package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
  406. package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
  407. package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
  408. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
  409. package/src/duckdb/src/parser/expression/star_expression.cpp +26 -6
  410. package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
  411. package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
  412. package/src/duckdb/src/parser/parsed_data/alter_info.cpp +7 -3
  413. package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +56 -0
  414. package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +51 -0
  415. package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
  416. package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +6 -0
  417. package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
  418. package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
  419. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +15 -1
  420. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
  421. package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
  422. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
  423. package/src/duckdb/src/parser/query_node.cpp +51 -1
  424. package/src/duckdb/src/parser/result_modifier.cpp +78 -0
  425. package/src/duckdb/src/parser/statement/multi_statement.cpp +18 -0
  426. package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
  427. package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
  428. package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
  429. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
  430. package/src/duckdb/src/parser/tableref/joinref.cpp +29 -0
  431. package/src/duckdb/src/parser/tableref/pivotref.cpp +373 -0
  432. package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
  433. package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
  434. package/src/duckdb/src/parser/tableref.cpp +49 -0
  435. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +11 -0
  436. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
  437. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +17 -2
  438. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +63 -42
  439. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
  440. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
  441. package/src/duckdb/src/parser/transform/helpers/transform_alias.cpp +12 -6
  442. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +24 -0
  443. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +7 -0
  444. package/src/duckdb/src/parser/transform/helpers/transform_orderby.cpp +0 -7
  445. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +3 -2
  446. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +4 -0
  447. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +4 -0
  448. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +179 -0
  449. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +3 -4
  450. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -0
  451. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -3
  452. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +12 -1
  453. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +121 -0
  454. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +2 -0
  455. package/src/duckdb/src/parser/transformer.cpp +15 -3
  456. package/src/duckdb/src/planner/bind_context.cpp +18 -25
  457. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +9 -7
  458. package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +4 -3
  459. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +23 -12
  460. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +3 -2
  461. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +176 -0
  462. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
  463. package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +163 -24
  464. package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +2 -2
  465. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +109 -94
  466. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +11 -0
  467. package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +9 -4
  468. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +5 -3
  469. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +3 -2
  470. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +9 -1
  471. package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
  472. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -8
  473. package/src/duckdb/src/planner/binder/statement/bind_logical_plan.cpp +17 -0
  474. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +4 -2
  475. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +19 -3
  476. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +366 -0
  477. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -1
  478. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -0
  479. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -13
  480. package/src/duckdb/src/planner/binder.cpp +19 -24
  481. package/src/duckdb/src/planner/bound_result_modifier.cpp +27 -1
  482. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +9 -2
  483. package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
  484. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +1 -1
  485. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +146 -0
  486. package/src/duckdb/src/planner/expression_binder/having_binder.cpp +6 -3
  487. package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -3
  488. package/src/duckdb/src/planner/expression_binder/select_binder.cpp +1 -132
  489. package/src/duckdb/src/planner/expression_binder.cpp +10 -3
  490. package/src/duckdb/src/planner/expression_iterator.cpp +17 -10
  491. package/src/duckdb/src/planner/filter/constant_filter.cpp +4 -6
  492. package/src/duckdb/src/planner/logical_operator.cpp +7 -2
  493. package/src/duckdb/src/planner/logical_operator_visitor.cpp +6 -0
  494. package/src/duckdb/src/planner/operator/logical_asof_join.cpp +8 -0
  495. package/src/duckdb/src/planner/operator/logical_distinct.cpp +3 -0
  496. package/src/duckdb/src/planner/planner.cpp +2 -1
  497. package/src/duckdb/src/planner/pragma_handler.cpp +10 -2
  498. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +3 -1
  499. package/src/duckdb/src/storage/buffer_manager.cpp +44 -46
  500. package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
  501. package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +4 -15
  502. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +10 -4
  503. package/src/duckdb/src/storage/checkpoint_manager.cpp +9 -3
  504. package/src/duckdb/src/storage/compression/bitpacking.cpp +28 -24
  505. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +43 -45
  506. package/src/duckdb/src/storage/compression/numeric_constant.cpp +9 -10
  507. package/src/duckdb/src/storage/compression/patas.cpp +1 -1
  508. package/src/duckdb/src/storage/compression/rle.cpp +19 -15
  509. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +5 -5
  510. package/src/duckdb/src/storage/data_table.cpp +20 -20
  511. package/src/duckdb/src/storage/index.cpp +12 -1
  512. package/src/duckdb/src/storage/local_storage.cpp +20 -23
  513. package/src/duckdb/src/storage/meta_block_reader.cpp +22 -0
  514. package/src/duckdb/src/storage/statistics/base_statistics.cpp +373 -128
  515. package/src/duckdb/src/storage/statistics/column_statistics.cpp +57 -3
  516. package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +8 -9
  517. package/src/duckdb/src/storage/statistics/list_stats.cpp +121 -0
  518. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +591 -0
  519. package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
  520. package/src/duckdb/src/storage/statistics/segment_statistics.cpp +2 -11
  521. package/src/duckdb/src/storage/statistics/string_stats.cpp +273 -0
  522. package/src/duckdb/src/storage/statistics/struct_stats.cpp +133 -0
  523. package/src/duckdb/src/storage/storage_info.cpp +2 -2
  524. package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +4 -10
  525. package/src/duckdb/src/storage/table/column_data.cpp +45 -46
  526. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +7 -8
  527. package/src/duckdb/src/storage/table/column_segment.cpp +13 -14
  528. package/src/duckdb/src/storage/table/list_column_data.cpp +41 -59
  529. package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
  530. package/src/duckdb/src/storage/table/row_group.cpp +38 -32
  531. package/src/duckdb/src/storage/table/row_group_collection.cpp +94 -78
  532. package/src/duckdb/src/storage/table/scan_state.cpp +22 -3
  533. package/src/duckdb/src/storage/table/standard_column_data.cpp +7 -6
  534. package/src/duckdb/src/storage/table/struct_column_data.cpp +16 -16
  535. package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
  536. package/src/duckdb/src/storage/table/update_segment.cpp +20 -18
  537. package/src/duckdb/src/storage/wal_replay.cpp +8 -5
  538. package/src/duckdb/src/storage/write_ahead_log.cpp +2 -2
  539. package/src/duckdb/src/transaction/commit_state.cpp +11 -7
  540. package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
  541. package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +35 -0
  542. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +36 -2
  543. package/src/duckdb/third_party/libpg_query/include/nodes/primnodes.hpp +3 -3
  544. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1022 -530
  545. package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +8 -0
  546. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24462 -22828
  547. package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
  548. package/src/duckdb/third_party/re2/re2/re2.h +2 -0
  549. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
  550. package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
  551. package/src/duckdb/ub_src_common_serializer.cpp +2 -0
  552. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  553. package/src/duckdb/ub_src_function_aggregate_distributive.cpp +2 -0
  554. package/src/duckdb/ub_src_function_scalar_bit.cpp +2 -0
  555. package/src/duckdb/ub_src_function_scalar_map.cpp +4 -0
  556. package/src/duckdb/ub_src_function_scalar_string.cpp +2 -0
  557. package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
  558. package/src/duckdb/ub_src_main_capi.cpp +2 -0
  559. package/src/duckdb/ub_src_optimizer_rule.cpp +2 -0
  560. package/src/duckdb/ub_src_parser.cpp +2 -0
  561. package/src/duckdb/ub_src_parser_parsed_data.cpp +4 -2
  562. package/src/duckdb/ub_src_parser_statement.cpp +2 -0
  563. package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
  564. package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
  565. package/src/duckdb/ub_src_parser_transform_tableref.cpp +2 -0
  566. package/src/duckdb/ub_src_planner_binder_expression.cpp +2 -0
  567. package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
  568. package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
  569. package/src/duckdb/ub_src_planner_operator.cpp +2 -0
  570. package/src/duckdb/ub_src_storage_statistics.cpp +6 -6
  571. package/src/duckdb/ub_src_storage_table.cpp +0 -2
  572. package/src/duckdb_node.hpp +2 -1
  573. package/src/statement.cpp +5 -5
  574. package/src/utils.cpp +27 -2
  575. package/test/extension.test.ts +44 -26
  576. package/test/syntax_error.test.ts +3 -1
  577. package/filelist.cache +0 -0
  578. package/src/duckdb/src/include/duckdb/main/loadable_extension.hpp +0 -59
  579. package/src/duckdb/src/include/duckdb/storage/statistics/list_statistics.hpp +0 -36
  580. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_statistics.hpp +0 -75
  581. package/src/duckdb/src/include/duckdb/storage/statistics/string_statistics.hpp +0 -49
  582. package/src/duckdb/src/include/duckdb/storage/statistics/struct_statistics.hpp +0 -36
  583. package/src/duckdb/src/include/duckdb/storage/statistics/validity_statistics.hpp +0 -45
  584. package/src/duckdb/src/parser/parsed_data/alter_function_info.cpp +0 -55
  585. package/src/duckdb/src/storage/statistics/list_statistics.cpp +0 -94
  586. package/src/duckdb/src/storage/statistics/numeric_statistics.cpp +0 -307
  587. package/src/duckdb/src/storage/statistics/string_statistics.cpp +0 -220
  588. package/src/duckdb/src/storage/statistics/struct_statistics.cpp +0 -108
  589. package/src/duckdb/src/storage/statistics/validity_statistics.cpp +0 -91
  590. package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
@@ -0,0 +1,97 @@
1
+ #include "duckdb/planner/expression/bound_function_expression.hpp"
2
+ #include "duckdb/common/string_util.hpp"
3
+ #include "duckdb/parser/expression/bound_expression.hpp"
4
+ #include "duckdb/function/scalar/nested_functions.hpp"
5
+ #include "duckdb/common/types/data_chunk.hpp"
6
+ #include "duckdb/common/pair.hpp"
7
+
8
+ namespace duckdb {
9
+
10
+ static void MapKeyValueFunction(DataChunk &args, ExpressionState &state, Vector &result,
11
+ Vector &(*get_child_vector)(Vector &)) {
12
+ D_ASSERT(result.GetType().id() == LogicalTypeId::LIST);
13
+ auto count = args.size();
14
+
15
+ auto &map = args.data[0];
16
+ D_ASSERT(map.GetType().id() == LogicalTypeId::MAP);
17
+ auto child = get_child_vector(map);
18
+
19
+ auto &entries = ListVector::GetEntry(result);
20
+ entries.Reference(child);
21
+
22
+ UnifiedVectorFormat map_data;
23
+ map.ToUnifiedFormat(count, map_data);
24
+
25
+ D_ASSERT(result.GetVectorType() == VectorType::FLAT_VECTOR);
26
+ FlatVector::SetData(result, map_data.data);
27
+ FlatVector::SetValidity(result, map_data.validity);
28
+ auto list_size = ListVector::GetListSize(map);
29
+ ListVector::SetListSize(result, list_size);
30
+ if (map.GetVectorType() == VectorType::DICTIONARY_VECTOR) {
31
+ result.Slice(*map_data.sel, count);
32
+ }
33
+ if (args.AllConstant()) {
34
+ result.SetVectorType(VectorType::CONSTANT_VECTOR);
35
+ }
36
+ result.Verify(count);
37
+ }
38
+
39
+ static void MapKeysFunction(DataChunk &args, ExpressionState &state, Vector &result) {
40
+ MapKeyValueFunction(args, state, result, MapVector::GetKeys);
41
+ }
42
+
43
+ static void MapValuesFunction(DataChunk &args, ExpressionState &state, Vector &result) {
44
+ MapKeyValueFunction(args, state, result, MapVector::GetValues);
45
+ }
46
+
47
+ static unique_ptr<FunctionData> MapKeyValueBind(ClientContext &context, ScalarFunction &bound_function,
48
+ vector<unique_ptr<Expression>> &arguments,
49
+ const LogicalType &(*type_func)(const LogicalType &)) {
50
+ if (arguments.size() != 1) {
51
+ throw InvalidInputException("Too many arguments provided, only expecting a single map");
52
+ }
53
+ auto &map = arguments[0]->return_type;
54
+
55
+ if (map.id() == LogicalTypeId::UNKNOWN) {
56
+ // Prepared statement
57
+ bound_function.arguments.emplace_back(LogicalTypeId::UNKNOWN);
58
+ bound_function.return_type = LogicalType(LogicalTypeId::SQLNULL);
59
+ return nullptr;
60
+ }
61
+
62
+ if (map.id() != LogicalTypeId::MAP) {
63
+ throw InvalidInputException("The provided argument is not a map");
64
+ }
65
+
66
+ auto &type = type_func(map);
67
+
68
+ bound_function.return_type = LogicalType::LIST(type);
69
+ return make_unique<VariableReturnBindData>(bound_function.return_type);
70
+ }
71
+
72
+ static unique_ptr<FunctionData> MapKeysBind(ClientContext &context, ScalarFunction &bound_function,
73
+ vector<unique_ptr<Expression>> &arguments) {
74
+ return MapKeyValueBind(context, bound_function, arguments, MapType::KeyType);
75
+ }
76
+
77
+ static unique_ptr<FunctionData> MapValuesBind(ClientContext &context, ScalarFunction &bound_function,
78
+ vector<unique_ptr<Expression>> &arguments) {
79
+ return MapKeyValueBind(context, bound_function, arguments, MapType::ValueType);
80
+ }
81
+
82
+ void MapKeysFun::RegisterFunction(BuiltinFunctions &set) {
83
+ //! the arguments and return types are actually set in the binder function
84
+ ScalarFunction fun("map_keys", {}, LogicalTypeId::LIST, MapKeysFunction, MapKeysBind);
85
+ fun.null_handling = FunctionNullHandling::DEFAULT_NULL_HANDLING;
86
+ fun.varargs = LogicalType::ANY;
87
+ set.AddFunction(fun);
88
+ }
89
+
90
+ void MapValuesFun::RegisterFunction(BuiltinFunctions &set) {
91
+ ScalarFunction fun("map_values", {}, LogicalTypeId::LIST, MapValuesFunction, MapValuesBind);
92
+ fun.null_handling = FunctionNullHandling::DEFAULT_NULL_HANDLING;
93
+ fun.varargs = LogicalType::ANY;
94
+ set.AddFunction(fun);
95
+ }
96
+
97
+ } // namespace duckdb
@@ -2,13 +2,13 @@
2
2
  #include "duckdb/common/vector_operations/vector_operations.hpp"
3
3
  #include "duckdb/function/scalar/trigonometric_functions.hpp"
4
4
  #include "duckdb/common/operator/abs.hpp"
5
+ #include "duckdb/common/operator/multiply.hpp"
5
6
  #include "duckdb/common/types/hugeint.hpp"
6
7
  #include "duckdb/common/types/cast_helpers.hpp"
7
8
  #include "duckdb/planner/expression/bound_function_expression.hpp"
8
9
  #include "duckdb/common/algorithm.hpp"
9
10
  #include "duckdb/execution/expression_executor.hpp"
10
11
  #include "duckdb/common/likely.hpp"
11
- #include "duckdb/storage/statistics/numeric_statistics.hpp"
12
12
  #include "duckdb/common/types/bit.hpp"
13
13
  #include <cmath>
14
14
  #include <errno.h>
@@ -77,25 +77,22 @@ static unique_ptr<BaseStatistics> PropagateAbsStats(ClientContext &context, Func
77
77
  auto &expr = input.expr;
78
78
  D_ASSERT(child_stats.size() == 1);
79
79
  // can only propagate stats if the children have stats
80
- if (!child_stats[0]) {
81
- return nullptr;
82
- }
83
- auto &lstats = (NumericStatistics &)*child_stats[0];
80
+ auto &lstats = child_stats[0];
84
81
  Value new_min, new_max;
85
82
  bool potential_overflow = true;
86
- if (!lstats.min.IsNull() && !lstats.max.IsNull()) {
83
+ if (NumericStats::HasMinMax(lstats)) {
87
84
  switch (expr.return_type.InternalType()) {
88
85
  case PhysicalType::INT8:
89
- potential_overflow = lstats.min.GetValue<int8_t>() == NumericLimits<int8_t>::Minimum();
86
+ potential_overflow = NumericStats::Min(lstats).GetValue<int8_t>() == NumericLimits<int8_t>::Minimum();
90
87
  break;
91
88
  case PhysicalType::INT16:
92
- potential_overflow = lstats.min.GetValue<int16_t>() == NumericLimits<int16_t>::Minimum();
89
+ potential_overflow = NumericStats::Min(lstats).GetValue<int16_t>() == NumericLimits<int16_t>::Minimum();
93
90
  break;
94
91
  case PhysicalType::INT32:
95
- potential_overflow = lstats.min.GetValue<int32_t>() == NumericLimits<int32_t>::Minimum();
92
+ potential_overflow = NumericStats::Min(lstats).GetValue<int32_t>() == NumericLimits<int32_t>::Minimum();
96
93
  break;
97
94
  case PhysicalType::INT64:
98
- potential_overflow = lstats.min.GetValue<int64_t>() == NumericLimits<int64_t>::Minimum();
95
+ potential_overflow = NumericStats::Min(lstats).GetValue<int64_t>() == NumericLimits<int64_t>::Minimum();
99
96
  break;
100
97
  default:
101
98
  return nullptr;
@@ -108,8 +105,8 @@ static unique_ptr<BaseStatistics> PropagateAbsStats(ClientContext &context, Func
108
105
  // no potential overflow
109
106
 
110
107
  // compute stats
111
- auto current_min = lstats.min.GetValue<int64_t>();
112
- auto current_max = lstats.max.GetValue<int64_t>();
108
+ auto current_min = NumericStats::Min(lstats).GetValue<int64_t>();
109
+ auto current_max = NumericStats::Max(lstats).GetValue<int64_t>();
113
110
 
114
111
  int64_t min_val, max_val;
115
112
 
@@ -125,16 +122,17 @@ static unique_ptr<BaseStatistics> PropagateAbsStats(ClientContext &context, Func
125
122
  } else {
126
123
  // if both current_min and current_max are > 0, then the abs is a no-op and can be removed entirely
127
124
  *input.expr_ptr = std::move(input.expr.children[0]);
128
- return std::move(child_stats[0]);
125
+ return child_stats[0].ToUnique();
129
126
  }
130
127
  new_min = Value::Numeric(expr.return_type, min_val);
131
128
  new_max = Value::Numeric(expr.return_type, max_val);
132
129
  expr.function.function = ScalarFunction::GetScalarUnaryFunction<AbsOperator>(expr.return_type);
133
130
  }
134
- auto stats = make_unique<NumericStatistics>(expr.return_type, std::move(new_min), std::move(new_max),
135
- StatisticsType::LOCAL_STATS);
136
- stats->validity_stats = lstats.validity_stats->Copy();
137
- return std::move(stats);
131
+ auto stats = NumericStats::CreateEmpty(expr.return_type);
132
+ NumericStats::SetMin(stats, new_min);
133
+ NumericStats::SetMax(stats, new_max);
134
+ stats.CopyValidity(lstats);
135
+ return stats.ToUnique();
138
136
  }
139
137
 
140
138
  template <class OP>
@@ -1164,4 +1162,90 @@ void EvenFun::RegisterFunction(BuiltinFunctions &set) {
1164
1162
  ScalarFunction::UnaryFunction<double, double, EvenOperator>));
1165
1163
  }
1166
1164
 
1165
+ //===--------------------------------------------------------------------===//
1166
+ // gcd
1167
+ //===--------------------------------------------------------------------===//
1168
+
1169
+ // should be replaced with std::gcd in a newer C++ standard
1170
+ template <class TA>
1171
+ TA GreatestCommonDivisor(TA left, TA right) {
1172
+ TA a = left;
1173
+ TA b = right;
1174
+
1175
+ // This protects the following modulo operations from a corner case,
1176
+ // where we would get a runtime error due to an integer overflow.
1177
+ if ((left == NumericLimits<TA>::Minimum() && right == -1) ||
1178
+ (left == -1 && right == NumericLimits<TA>::Minimum())) {
1179
+ return 1;
1180
+ }
1181
+
1182
+ while (true) {
1183
+ if (a == 0) {
1184
+ return TryAbsOperator::Operation<TA, TA>(b);
1185
+ }
1186
+ b %= a;
1187
+
1188
+ if (b == 0) {
1189
+ return TryAbsOperator::Operation<TA, TA>(a);
1190
+ }
1191
+ a %= b;
1192
+ }
1193
+ }
1194
+
1195
+ struct GreatestCommonDivisorOperator {
1196
+ template <class TA, class TB, class TR>
1197
+ static inline TR Operation(TA left, TB right) {
1198
+ return GreatestCommonDivisor(left, right);
1199
+ }
1200
+ };
1201
+
1202
+ void GreatestCommonDivisorFun::RegisterFunction(BuiltinFunctions &set) {
1203
+ ScalarFunctionSet funcs("gcd");
1204
+
1205
+ funcs.AddFunction(
1206
+ ScalarFunction({LogicalType::BIGINT, LogicalType::BIGINT}, LogicalType::BIGINT,
1207
+ ScalarFunction::BinaryFunction<int64_t, int64_t, int64_t, GreatestCommonDivisorOperator>));
1208
+ funcs.AddFunction(
1209
+ ScalarFunction({LogicalType::HUGEINT, LogicalType::HUGEINT}, LogicalType::HUGEINT,
1210
+ ScalarFunction::BinaryFunction<hugeint_t, hugeint_t, hugeint_t, GreatestCommonDivisorOperator>));
1211
+
1212
+ set.AddFunction(funcs);
1213
+ funcs.name = "greatest_common_divisor";
1214
+ set.AddFunction(funcs);
1215
+ }
1216
+
1217
+ //===--------------------------------------------------------------------===//
1218
+ // lcm
1219
+ //===--------------------------------------------------------------------===//
1220
+
1221
+ // should be replaced with std::lcm in a newer C++ standard
1222
+ struct LeastCommonMultipleOperator {
1223
+ template <class TA, class TB, class TR>
1224
+ static inline TR Operation(TA left, TB right) {
1225
+ if (left == 0 || right == 0) {
1226
+ return 0;
1227
+ }
1228
+ TR result;
1229
+ if (!TryMultiplyOperator::Operation<TA, TB, TR>(left, right / GreatestCommonDivisor(left, right), result)) {
1230
+ throw OutOfRangeException("lcm value is out of range");
1231
+ }
1232
+ return TryAbsOperator::Operation<TR, TR>(result);
1233
+ }
1234
+ };
1235
+
1236
+ void LeastCommonMultipleFun::RegisterFunction(BuiltinFunctions &set) {
1237
+ ScalarFunctionSet funcs("lcm");
1238
+
1239
+ funcs.AddFunction(
1240
+ ScalarFunction({LogicalType::BIGINT, LogicalType::BIGINT}, LogicalType::BIGINT,
1241
+ ScalarFunction::BinaryFunction<int64_t, int64_t, int64_t, LeastCommonMultipleOperator>));
1242
+ funcs.AddFunction(
1243
+ ScalarFunction({LogicalType::HUGEINT, LogicalType::HUGEINT}, LogicalType::HUGEINT,
1244
+ ScalarFunction::BinaryFunction<hugeint_t, hugeint_t, hugeint_t, LeastCommonMultipleOperator>));
1245
+
1246
+ set.AddFunction(funcs);
1247
+ funcs.name = "least_common_multiple";
1248
+ set.AddFunction(funcs);
1249
+ }
1250
+
1167
1251
  } // namespace duckdb
@@ -41,6 +41,9 @@ void BuiltinFunctions::RegisterMathFunctions() {
41
41
  Register<SignBitFun>();
42
42
  Register<IsInfiniteFun>();
43
43
  Register<IsFiniteFun>();
44
+
45
+ Register<GreatestCommonDivisorFun>();
46
+ Register<LeastCommonMultipleFun>();
44
47
  }
45
48
 
46
49
  } // namespace duckdb
@@ -22,6 +22,9 @@ void BuiltinFunctions::RegisterNestedFunctions() {
22
22
  Register<ListFlattenFun>();
23
23
  Register<MapFun>();
24
24
  Register<MapFromEntriesFun>();
25
+ Register<MapEntriesFun>();
26
+ Register<MapValuesFun>();
27
+ Register<MapKeysFun>();
25
28
  Register<MapExtractFun>();
26
29
  Register<UnionValueFun>();
27
30
  Register<UnionExtractFun>();
@@ -7,9 +7,6 @@
7
7
  #include "duckdb/common/types/interval.hpp"
8
8
  #include "duckdb/common/types/timestamp.hpp"
9
9
  #include "duckdb/common/types/hugeint.hpp"
10
- #include "duckdb/common/windows_undefs.hpp"
11
-
12
- #include <limits>
13
10
 
14
11
  namespace duckdb {
15
12
 
@@ -19,18 +16,12 @@ namespace duckdb {
19
16
  template <>
20
17
  float AddOperator::Operation(float left, float right) {
21
18
  auto result = left + right;
22
- if (!Value::FloatIsFinite(result)) {
23
- throw OutOfRangeException("Overflow in addition of float!");
24
- }
25
19
  return result;
26
20
  }
27
21
 
28
22
  template <>
29
23
  double AddOperator::Operation(double left, double right) {
30
24
  auto result = left + right;
31
- if (!Value::DoubleIsFinite(result)) {
32
- throw OutOfRangeException("Overflow in addition of double!");
33
- }
34
25
  return result;
35
26
  }
36
27
 
@@ -12,7 +12,6 @@
12
12
  #include "duckdb/common/vector_operations/vector_operations.hpp"
13
13
  #include "duckdb/function/scalar/operators.hpp"
14
14
  #include "duckdb/planner/expression/bound_function_expression.hpp"
15
- #include "duckdb/storage/statistics/numeric_statistics.hpp"
16
15
  #include "duckdb/function/scalar/nested_functions.hpp"
17
16
 
18
17
  #include <limits>
@@ -78,15 +77,15 @@ static scalar_function_t GetScalarBinaryFunction(PhysicalType type) {
78
77
  //===--------------------------------------------------------------------===//
79
78
  struct AddPropagateStatistics {
80
79
  template <class T, class OP>
81
- static bool Operation(LogicalType type, NumericStatistics &lstats, NumericStatistics &rstats, Value &new_min,
80
+ static bool Operation(LogicalType type, BaseStatistics &lstats, BaseStatistics &rstats, Value &new_min,
82
81
  Value &new_max) {
83
82
  T min, max;
84
83
  // new min is min+min
85
- if (!OP::Operation(lstats.min.GetValueUnsafe<T>(), rstats.min.GetValueUnsafe<T>(), min)) {
84
+ if (!OP::Operation(NumericStats::GetMin<T>(lstats), NumericStats::GetMin<T>(rstats), min)) {
86
85
  return true;
87
86
  }
88
87
  // new max is max+max
89
- if (!OP::Operation(lstats.max.GetValueUnsafe<T>(), rstats.max.GetValueUnsafe<T>(), max)) {
88
+ if (!OP::Operation(NumericStats::GetMax<T>(lstats), NumericStats::GetMax<T>(rstats), max)) {
90
89
  return true;
91
90
  }
92
91
  new_min = Value::Numeric(type, min);
@@ -97,13 +96,13 @@ struct AddPropagateStatistics {
97
96
 
98
97
  struct SubtractPropagateStatistics {
99
98
  template <class T, class OP>
100
- static bool Operation(LogicalType type, NumericStatistics &lstats, NumericStatistics &rstats, Value &new_min,
99
+ static bool Operation(LogicalType type, BaseStatistics &lstats, BaseStatistics &rstats, Value &new_min,
101
100
  Value &new_max) {
102
101
  T min, max;
103
- if (!OP::Operation(lstats.min.GetValueUnsafe<T>(), rstats.max.GetValueUnsafe<T>(), min)) {
102
+ if (!OP::Operation(NumericStats::GetMin<T>(lstats), NumericStats::GetMax<T>(rstats), min)) {
104
103
  return true;
105
104
  }
106
- if (!OP::Operation(lstats.max.GetValueUnsafe<T>(), rstats.min.GetValueUnsafe<T>(), max)) {
105
+ if (!OP::Operation(NumericStats::GetMax<T>(lstats), NumericStats::GetMin<T>(rstats), max)) {
107
106
  return true;
108
107
  }
109
108
  new_min = Value::Numeric(type, min);
@@ -136,14 +135,11 @@ static unique_ptr<BaseStatistics> PropagateNumericStats(ClientContext &context,
136
135
  auto &expr = input.expr;
137
136
  D_ASSERT(child_stats.size() == 2);
138
137
  // can only propagate stats if the children have stats
139
- if (!child_stats[0] || !child_stats[1]) {
140
- return nullptr;
141
- }
142
- auto &lstats = (NumericStatistics &)*child_stats[0];
143
- auto &rstats = (NumericStatistics &)*child_stats[1];
138
+ auto &lstats = child_stats[0];
139
+ auto &rstats = child_stats[1];
144
140
  Value new_min, new_max;
145
141
  bool potential_overflow = true;
146
- if (!lstats.min.IsNull() && !lstats.max.IsNull() && !rstats.min.IsNull() && !rstats.max.IsNull()) {
142
+ if (NumericStats::HasMinMax(lstats) && NumericStats::HasMinMax(rstats)) {
147
143
  switch (expr.return_type.InternalType()) {
148
144
  case PhysicalType::INT8:
149
145
  potential_overflow =
@@ -176,10 +172,11 @@ static unique_ptr<BaseStatistics> PropagateNumericStats(ClientContext &context,
176
172
  }
177
173
  expr.function.function = GetScalarIntegerFunction<BASEOP>(expr.return_type.InternalType());
178
174
  }
179
- auto stats = make_unique<NumericStatistics>(expr.return_type, std::move(new_min), std::move(new_max),
180
- StatisticsType::LOCAL_STATS);
181
- stats->validity_stats = ValidityStatistics::Combine(lstats.validity_stats, rstats.validity_stats);
182
- return std::move(stats);
175
+ auto result = NumericStats::CreateEmpty(expr.return_type);
176
+ NumericStats::SetMin(result, new_min);
177
+ NumericStats::SetMax(result, new_max);
178
+ result.CombineValidity(lstats, rstats);
179
+ return result.ToUnique();
183
180
  }
184
181
 
185
182
  template <class OP, class OPOVERFLOWCHECK, bool IS_SUBTRACT = false>
@@ -431,12 +428,12 @@ struct NegateOperator {
431
428
 
432
429
  template <>
433
430
  bool NegateOperator::CanNegate(float input) {
434
- return Value::FloatIsFinite(input);
431
+ return true;
435
432
  }
436
433
 
437
434
  template <>
438
435
  bool NegateOperator::CanNegate(double input) {
439
- return Value::DoubleIsFinite(input);
436
+ return true;
440
437
  }
441
438
 
442
439
  template <>
@@ -491,9 +488,9 @@ unique_ptr<FunctionData> DecimalNegateBind(ClientContext &context, ScalarFunctio
491
488
 
492
489
  struct NegatePropagateStatistics {
493
490
  template <class T>
494
- static bool Operation(LogicalType type, NumericStatistics &istats, Value &new_min, Value &new_max) {
495
- auto max_value = istats.max.GetValueUnsafe<T>();
496
- auto min_value = istats.min.GetValueUnsafe<T>();
491
+ static bool Operation(LogicalType type, BaseStatistics &istats, Value &new_min, Value &new_max) {
492
+ auto max_value = NumericStats::GetMax<T>(istats);
493
+ auto min_value = NumericStats::GetMin<T>(istats);
497
494
  if (!NegateOperator::CanNegate<T>(min_value) || !NegateOperator::CanNegate<T>(max_value)) {
498
495
  return true;
499
496
  }
@@ -510,13 +507,10 @@ static unique_ptr<BaseStatistics> NegateBindStatistics(ClientContext &context, F
510
507
  auto &expr = input.expr;
511
508
  D_ASSERT(child_stats.size() == 1);
512
509
  // can only propagate stats if the children have stats
513
- if (!child_stats[0]) {
514
- return nullptr;
515
- }
516
- auto &istats = (NumericStatistics &)*child_stats[0];
510
+ auto &istats = child_stats[0];
517
511
  Value new_min, new_max;
518
512
  bool potential_overflow = true;
519
- if (!istats.min.IsNull() && !istats.max.IsNull()) {
513
+ if (NumericStats::HasMinMax(istats)) {
520
514
  switch (expr.return_type.InternalType()) {
521
515
  case PhysicalType::INT8:
522
516
  potential_overflow =
@@ -542,12 +536,11 @@ static unique_ptr<BaseStatistics> NegateBindStatistics(ClientContext &context, F
542
536
  new_min = Value(expr.return_type);
543
537
  new_max = Value(expr.return_type);
544
538
  }
545
- auto stats = make_unique<NumericStatistics>(expr.return_type, std::move(new_min), std::move(new_max),
546
- StatisticsType::LOCAL_STATS);
547
- if (istats.validity_stats) {
548
- stats->validity_stats = istats.validity_stats->Copy();
549
- }
550
- return std::move(stats);
539
+ auto stats = NumericStats::CreateEmpty(expr.return_type);
540
+ NumericStats::SetMin(stats, new_min);
541
+ NumericStats::SetMax(stats, new_max);
542
+ stats.CopyValidity(istats);
543
+ return stats.ToUnique();
551
544
  }
552
545
 
553
546
  ScalarFunction SubtractFun::GetFunction(const LogicalType &type) {
@@ -662,7 +655,7 @@ void SubtractFun::RegisterFunction(BuiltinFunctions &set) {
662
655
  //===--------------------------------------------------------------------===//
663
656
  struct MultiplyPropagateStatistics {
664
657
  template <class T, class OP>
665
- static bool Operation(LogicalType type, NumericStatistics &lstats, NumericStatistics &rstats, Value &new_min,
658
+ static bool Operation(LogicalType type, BaseStatistics &lstats, BaseStatistics &rstats, Value &new_min,
666
659
  Value &new_max) {
667
660
  // statistics propagation on the multiplication is slightly less straightforward because of negative numbers
668
661
  // the new min/max depend on the signs of the input types
@@ -671,8 +664,8 @@ struct MultiplyPropagateStatistics {
671
664
  // etc
672
665
  // rather than doing all this switcheroo we just multiply all combinations of lmin/lmax with rmin/rmax
673
666
  // and check what the minimum/maximum value is
674
- T lvals[] {lstats.min.GetValueUnsafe<T>(), lstats.max.GetValueUnsafe<T>()};
675
- T rvals[] {rstats.min.GetValueUnsafe<T>(), rstats.max.GetValueUnsafe<T>()};
667
+ T lvals[] {NumericStats::GetMin<T>(lstats), NumericStats::GetMax<T>(lstats)};
668
+ T rvals[] {NumericStats::GetMin<T>(rstats), NumericStats::GetMax<T>(rstats)};
676
669
  T min = NumericLimits<T>::Maximum();
677
670
  T max = NumericLimits<T>::Minimum();
678
671
  // multiplications
@@ -803,18 +796,12 @@ void MultiplyFun::RegisterFunction(BuiltinFunctions &set) {
803
796
  template <>
804
797
  float DivideOperator::Operation(float left, float right) {
805
798
  auto result = left / right;
806
- if (!Value::FloatIsFinite(result)) {
807
- throw OutOfRangeException("Overflow in division of float!");
808
- }
809
799
  return result;
810
800
  }
811
801
 
812
802
  template <>
813
803
  double DivideOperator::Operation(double left, double right) {
814
804
  auto result = left / right;
815
- if (!Value::DoubleIsFinite(result)) {
816
- throw OutOfRangeException("Overflow in division of double!");
817
- }
818
805
  return result;
819
806
  }
820
807
 
@@ -946,9 +933,6 @@ template <>
946
933
  float ModuloOperator::Operation(float left, float right) {
947
934
  D_ASSERT(right != 0);
948
935
  auto result = std::fmod(left, right);
949
- if (!Value::FloatIsFinite(result)) {
950
- throw OutOfRangeException("Overflow in modulo of float!");
951
- }
952
936
  return result;
953
937
  }
954
938
 
@@ -956,9 +940,6 @@ template <>
956
940
  double ModuloOperator::Operation(double left, double right) {
957
941
  D_ASSERT(right != 0);
958
942
  auto result = std::fmod(left, right);
959
- if (!Value::DoubleIsFinite(result)) {
960
- throw OutOfRangeException("Overflow in modulo of double!");
961
- }
962
943
  return result;
963
944
  }
964
945
 
@@ -107,7 +107,6 @@ void BitwiseAndFun::RegisterFunction(BuiltinFunctions &set) {
107
107
  ScalarFunction({type, type}, type, GetScalarIntegerBinaryFunction<BitwiseANDOperator>(type)));
108
108
  }
109
109
  functions.AddFunction(ScalarFunction({LogicalType::BIT, LogicalType::BIT}, LogicalType::BIT, BitwiseANDOperation));
110
-
111
110
  set.AddFunction(functions);
112
111
  }
113
112
 
@@ -306,66 +305,4 @@ void RightShiftFun::RegisterFunction(BuiltinFunctions &set) {
306
305
  set.AddFunction(functions);
307
306
  }
308
307
 
309
- //===--------------------------------------------------------------------===//
310
- // get_bit
311
- //===--------------------------------------------------------------------===//
312
- struct GetBitOperator {
313
- template <class TA, class TB, class TR>
314
- static inline TR Operation(TA input, TB n) {
315
- if (n < 0 || (idx_t)n > Bit::BitLength(input) - 1) {
316
- throw OutOfRangeException("bit index %s out of valid range (0..%s)", NumericHelper::ToString(n),
317
- NumericHelper::ToString(Bit::BitLength(input) - 1));
318
- }
319
- return Bit::GetBit(input, n);
320
- }
321
- };
322
-
323
- void GetBitFun::RegisterFunction(BuiltinFunctions &set) {
324
- set.AddFunction(ScalarFunction("get_bit", {LogicalType::BIT, LogicalType::INTEGER}, LogicalType::INTEGER,
325
- ScalarFunction::BinaryFunction<string_t, int32_t, int32_t, GetBitOperator>));
326
- }
327
-
328
- //===--------------------------------------------------------------------===//
329
- // set_bit
330
- //===--------------------------------------------------------------------===//
331
- static void SetBitOperation(DataChunk &args, ExpressionState &state, Vector &result) {
332
- TernaryExecutor::Execute<string_t, int32_t, int32_t, string_t>(
333
- args.data[0], args.data[1], args.data[2], result, args.size(),
334
- [&](string_t input, int32_t n, int32_t new_value) {
335
- if (new_value != 0 && new_value != 1) {
336
- throw InvalidInputException("The new bit must be 1 or 0");
337
- }
338
- if (n < 0 || (idx_t)n > Bit::BitLength(input) - 1) {
339
- throw OutOfRangeException("bit index %s out of valid range (0..%s)", NumericHelper::ToString(n),
340
- NumericHelper::ToString(Bit::BitLength(input) - 1));
341
- }
342
- string_t target = StringVector::EmptyString(result, input.GetSize());
343
- Bit::SetBit(input, n, new_value, target);
344
- return target;
345
- });
346
- }
347
-
348
- void SetBitFun::RegisterFunction(BuiltinFunctions &set) {
349
- set.AddFunction(ScalarFunction("set_bit", {LogicalType::BIT, LogicalType::INTEGER, LogicalType::INTEGER},
350
- LogicalType::BIT, SetBitOperation));
351
- }
352
-
353
- //===--------------------------------------------------------------------===//
354
- // bit_position
355
- //===--------------------------------------------------------------------===//
356
- struct BitPositionOperator {
357
- template <class TA, class TB, class TR>
358
- static inline TR Operation(TA substring, TB input) {
359
- if (substring.GetSize() > input.GetSize()) {
360
- return 0;
361
- }
362
- return Bit::BitPosition(substring, input);
363
- }
364
- };
365
-
366
- void BitPositionFun::RegisterFunction(BuiltinFunctions &set) {
367
- set.AddFunction(ScalarFunction("bit_position", {LogicalType::BIT, LogicalType::BIT}, LogicalType::INTEGER,
368
- ScalarFunction::BinaryFunction<string_t, string_t, int32_t, BitPositionOperator>));
369
- }
370
-
371
308
  } // namespace duckdb
@@ -16,18 +16,12 @@ namespace duckdb {
16
16
  template <>
17
17
  float MultiplyOperator::Operation(float left, float right) {
18
18
  auto result = left * right;
19
- if (!Value::FloatIsFinite(result)) {
20
- throw OutOfRangeException("Overflow in multiplication of float!");
21
- }
22
19
  return result;
23
20
  }
24
21
 
25
22
  template <>
26
23
  double MultiplyOperator::Operation(double left, double right) {
27
24
  auto result = left * right;
28
- if (!Value::DoubleIsFinite(result)) {
29
- throw OutOfRangeException("Overflow in multiplication of double!");
30
- }
31
25
  return result;
32
26
  }
33
27
 
@@ -184,6 +178,11 @@ bool TryMultiplyOperator::Operation(int64_t left, int64_t right, int64_t &result
184
178
  return true;
185
179
  }
186
180
 
181
+ template <>
182
+ bool TryMultiplyOperator::Operation(hugeint_t left, hugeint_t right, hugeint_t &result) {
183
+ return Hugeint::TryMultiply(left, right, result);
184
+ }
185
+
187
186
  //===--------------------------------------------------------------------===//
188
187
  // multiply decimal with overflow check
189
188
  //===--------------------------------------------------------------------===//
@@ -15,18 +15,12 @@ namespace duckdb {
15
15
  template <>
16
16
  float SubtractOperator::Operation(float left, float right) {
17
17
  auto result = left - right;
18
- if (!Value::FloatIsFinite(result)) {
19
- throw OutOfRangeException("Overflow in subtraction of float!");
20
- }
21
18
  return result;
22
19
  }
23
20
 
24
21
  template <>
25
22
  double SubtractOperator::Operation(double left, double right) {
26
23
  auto result = left - right;
27
- if (!Value::DoubleIsFinite(result)) {
28
- throw OutOfRangeException("Overflow in subtraction of double!");
29
- }
30
24
  return result;
31
25
  }
32
26
 
@@ -4,7 +4,7 @@
4
4
  #include "duckdb/common/vector_operations/vector_operations.hpp"
5
5
  #include "duckdb/common/vector_operations/unary_executor.hpp"
6
6
  #include "duckdb/planner/expression/bound_function_expression.hpp"
7
- #include "duckdb/storage/statistics/string_statistics.hpp"
7
+
8
8
  #include "utf8proc.hpp"
9
9
 
10
10
  #include <string.h>
@@ -153,11 +153,7 @@ static unique_ptr<BaseStatistics> CaseConvertPropagateStats(ClientContext &conte
153
153
  auto &expr = input.expr;
154
154
  D_ASSERT(child_stats.size() == 1);
155
155
  // can only propagate stats if the children have stats
156
- if (!child_stats[0]) {
157
- return nullptr;
158
- }
159
- auto &sstats = (StringStatistics &)*child_stats[0];
160
- if (!sstats.has_unicode) {
156
+ if (!StringStats::CanContainUnicode(child_stats[0])) {
161
157
  expr.function.function = CaseConvertFunctionASCII<IS_UPPER>;
162
158
  }
163
159
  return nullptr;