duckdb 0.8.2-dev1.0 → 0.8.2-dev1182.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 (385) hide show
  1. package/binding.gyp +16 -14
  2. package/binding.gyp.in +1 -1
  3. package/configure.py +1 -1
  4. package/duckdb_extension_config.cmake +10 -0
  5. package/lib/duckdb.d.ts +59 -0
  6. package/lib/duckdb.js +21 -0
  7. package/package.json +1 -1
  8. package/src/duckdb/extension/icu/icu-dateadd.cpp +2 -2
  9. package/src/duckdb/extension/icu/icu-datefunc.cpp +1 -1
  10. package/src/duckdb/extension/icu/icu-datepart.cpp +2 -2
  11. package/src/duckdb/extension/icu/icu-datesub.cpp +2 -2
  12. package/src/duckdb/extension/icu/icu-datetrunc.cpp +1 -1
  13. package/src/duckdb/extension/icu/icu-list-range.cpp +1 -1
  14. package/src/duckdb/extension/icu/icu-makedate.cpp +7 -0
  15. package/src/duckdb/extension/icu/icu-strptime.cpp +4 -4
  16. package/src/duckdb/extension/icu/icu-table-range.cpp +5 -5
  17. package/src/duckdb/extension/icu/icu-timebucket.cpp +16 -16
  18. package/src/duckdb/extension/icu/icu-timezone.cpp +8 -8
  19. package/src/duckdb/extension/icu/{icu-extension.cpp → icu_extension.cpp} +29 -34
  20. package/src/duckdb/extension/icu/include/{icu-extension.hpp → icu_extension.hpp} +2 -2
  21. package/src/duckdb/extension/json/include/json_common.hpp +47 -231
  22. package/src/duckdb/extension/json/include/json_executors.hpp +49 -13
  23. package/src/duckdb/extension/json/include/{json-extension.hpp → json_extension.hpp} +2 -2
  24. package/src/duckdb/extension/json/include/json_functions.hpp +2 -1
  25. package/src/duckdb/extension/json/json_common.cpp +272 -40
  26. package/src/duckdb/extension/json/{json-extension.cpp → json_extension.cpp} +4 -4
  27. package/src/duckdb/extension/json/json_functions/json_structure.cpp +1 -1
  28. package/src/duckdb/extension/json/json_functions/json_transform.cpp +17 -37
  29. package/src/duckdb/extension/json/json_functions/json_type.cpp +1 -1
  30. package/src/duckdb/extension/json/json_functions.cpp +24 -24
  31. package/src/duckdb/extension/json/json_scan.cpp +3 -6
  32. package/src/duckdb/extension/parquet/column_reader.cpp +19 -21
  33. package/src/duckdb/extension/parquet/column_writer.cpp +77 -61
  34. package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +2 -2
  35. package/src/duckdb/extension/parquet/include/column_reader.hpp +14 -16
  36. package/src/duckdb/extension/parquet/include/column_writer.hpp +9 -7
  37. package/src/duckdb/extension/parquet/include/list_column_reader.hpp +2 -2
  38. package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +3 -3
  39. package/src/duckdb/extension/parquet/include/parquet_decimal_utils.hpp +3 -3
  40. package/src/duckdb/extension/parquet/include/parquet_file_metadata_cache.hpp +2 -2
  41. package/src/duckdb/extension/parquet/include/parquet_statistics.hpp +2 -2
  42. package/src/duckdb/extension/parquet/include/parquet_support.hpp +9 -11
  43. package/src/duckdb/extension/parquet/include/parquet_writer.hpp +24 -5
  44. package/src/duckdb/extension/parquet/include/string_column_reader.hpp +1 -1
  45. package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +2 -3
  46. package/src/duckdb/extension/parquet/include/zstd_file_system.hpp +2 -2
  47. package/src/duckdb/extension/parquet/{parquet-extension.cpp → parquet_extension.cpp} +190 -19
  48. package/src/duckdb/extension/parquet/parquet_reader.cpp +5 -5
  49. package/src/duckdb/extension/parquet/parquet_statistics.cpp +7 -6
  50. package/src/duckdb/extension/parquet/parquet_writer.cpp +79 -16
  51. package/src/duckdb/extension/parquet/zstd_file_system.cpp +2 -2
  52. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +1 -1
  53. package/src/duckdb/src/catalog/default/default_functions.cpp +16 -0
  54. package/src/duckdb/src/common/adbc/adbc.cpp +75 -10
  55. package/src/duckdb/src/common/adbc/driver_manager.cpp +6 -11
  56. package/src/duckdb/src/common/allocator.cpp +16 -4
  57. package/src/duckdb/src/common/arrow/arrow_appender.cpp +5 -10
  58. package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +0 -12
  59. package/src/duckdb/src/common/assert.cpp +3 -0
  60. package/src/duckdb/src/common/enum_util.cpp +42 -5
  61. package/src/duckdb/src/common/enums/logical_operator_type.cpp +4 -0
  62. package/src/duckdb/src/common/enums/optimizer_type.cpp +2 -0
  63. package/src/duckdb/src/common/enums/physical_operator_type.cpp +4 -0
  64. package/src/duckdb/src/common/file_system.cpp +15 -0
  65. package/src/duckdb/src/common/local_file_system.cpp +1 -1
  66. package/src/duckdb/src/common/multi_file_reader.cpp +181 -18
  67. package/src/duckdb/src/common/radix_partitioning.cpp +27 -9
  68. package/src/duckdb/src/common/row_operations/row_external.cpp +1 -1
  69. package/src/duckdb/src/common/sort/merge_sorter.cpp +9 -16
  70. package/src/duckdb/src/common/sort/partition_state.cpp +44 -11
  71. package/src/duckdb/src/common/types/batched_data_collection.cpp +7 -2
  72. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +9 -6
  73. package/src/duckdb/src/common/types/column/column_data_collection.cpp +17 -2
  74. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +15 -6
  75. package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
  76. package/src/duckdb/src/common/types/data_chunk.cpp +2 -2
  77. package/src/duckdb/src/common/types/date.cpp +9 -0
  78. package/src/duckdb/src/common/types/list_segment.cpp +24 -74
  79. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +3 -9
  80. package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +2 -0
  81. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +2 -2
  82. package/src/duckdb/src/common/types/validity_mask.cpp +33 -0
  83. package/src/duckdb/src/common/types/vector.cpp +15 -14
  84. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +6 -4
  85. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +2 -2
  86. package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +4 -4
  87. package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +4 -4
  88. package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +5 -4
  89. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +8 -8
  90. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +4 -3
  91. package/src/duckdb/src/core_functions/function_list.cpp +4 -2
  92. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +208 -42
  93. package/src/duckdb/src/core_functions/scalar/date/epoch.cpp +0 -17
  94. package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +19 -4
  95. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +4 -2
  96. package/src/duckdb/src/execution/aggregate_hashtable.cpp +34 -18
  97. package/src/duckdb/src/execution/index/art/art.cpp +149 -139
  98. package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +1 -1
  99. package/src/duckdb/src/execution/index/art/iterator.cpp +129 -207
  100. package/src/duckdb/src/execution/index/art/leaf.cpp +8 -37
  101. package/src/duckdb/src/execution/index/art/node.cpp +113 -120
  102. package/src/duckdb/src/execution/index/art/node16.cpp +1 -10
  103. package/src/duckdb/src/execution/index/art/node256.cpp +1 -9
  104. package/src/duckdb/src/execution/index/art/node4.cpp +12 -13
  105. package/src/duckdb/src/execution/index/art/node48.cpp +1 -11
  106. package/src/duckdb/src/execution/index/art/prefix.cpp +228 -350
  107. package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
  108. package/src/duckdb/src/execution/operator/aggregate/aggregate_object.cpp +1 -0
  109. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +8 -3
  110. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +32 -22
  111. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +512 -300
  112. package/src/duckdb/src/execution/operator/helper/physical_batch_collector.cpp +4 -3
  113. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +5 -5
  114. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +413 -282
  115. package/src/duckdb/src/execution/operator/join/physical_comparison_join.cpp +1 -1
  116. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +21 -10
  117. package/src/duckdb/src/execution/operator/join/physical_join.cpp +1 -1
  118. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +22 -3
  119. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +100 -13
  120. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +20 -0
  121. package/src/duckdb/src/execution/operator/persistent/csv_rejects_table.cpp +48 -0
  122. package/src/duckdb/src/execution/operator/persistent/parallel_csv_reader.cpp +2 -3
  123. package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +6 -4
  124. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +3 -2
  125. package/src/duckdb/src/execution/operator/persistent/physical_fixed_batch_copy.cpp +3 -3
  126. package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -1
  127. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +19 -0
  128. package/src/duckdb/src/execution/operator/set/physical_cte.cpp +160 -0
  129. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +15 -5
  130. package/src/duckdb/src/execution/partitionable_hashtable.cpp +41 -6
  131. package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +30 -5
  132. package/src/duckdb/src/execution/physical_operator.cpp +17 -14
  133. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +43 -10
  134. package/src/duckdb/src/execution/physical_plan/plan_cte.cpp +33 -0
  135. package/src/duckdb/src/execution/physical_plan/plan_recursive_cte.cpp +25 -4
  136. package/src/duckdb/src/execution/physical_plan_generator.cpp +4 -0
  137. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +290 -43
  138. package/src/duckdb/src/execution/window_segment_tree.cpp +286 -129
  139. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +2 -1
  140. package/src/duckdb/src/function/function.cpp +2 -0
  141. package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +212 -0
  142. package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +249 -0
  143. package/src/duckdb/src/function/scalar/compressed_materialization_functions.cpp +29 -0
  144. package/src/duckdb/src/function/scalar/list/list_resize.cpp +162 -0
  145. package/src/duckdb/src/function/scalar/nested_functions.cpp +1 -0
  146. package/src/duckdb/src/function/scalar/string/like.cpp +12 -4
  147. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +12 -5
  148. package/src/duckdb/src/function/table/copy_csv.cpp +8 -1
  149. package/src/duckdb/src/function/table/read_csv.cpp +100 -17
  150. package/src/duckdb/src/function/table/system/test_all_types.cpp +38 -18
  151. package/src/duckdb/src/function/table/table_scan.cpp +9 -0
  152. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  153. package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +1 -0
  154. package/src/duckdb/src/include/duckdb/common/allocator.hpp +2 -0
  155. package/src/duckdb/src/include/duckdb/common/bswap.hpp +42 -0
  156. package/src/duckdb/src/include/duckdb/common/enum_util.hpp +8 -0
  157. package/src/duckdb/src/include/duckdb/common/enums/cte_materialize.hpp +21 -0
  158. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +2 -1
  159. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +2 -0
  160. package/src/duckdb/src/include/duckdb/common/enums/optimizer_type.hpp +2 -0
  161. package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +2 -0
  162. package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +6 -4
  163. package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +10 -42
  164. package/src/duckdb/src/include/duckdb/common/mutex.hpp +3 -0
  165. package/src/duckdb/src/include/duckdb/common/radix.hpp +9 -20
  166. package/src/duckdb/src/include/duckdb/common/radix_partitioning.hpp +6 -21
  167. package/src/duckdb/src/include/duckdb/common/row_operations/row_operations.hpp +3 -3
  168. package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +13 -0
  169. package/src/duckdb/src/include/duckdb/common/types/batched_data_collection.hpp +3 -1
  170. package/src/duckdb/src/include/duckdb/common/types/column/column_data_allocator.hpp +1 -1
  171. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +6 -1
  172. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_segment.hpp +1 -1
  173. package/src/duckdb/src/include/duckdb/common/types/column/column_data_scan_states.hpp +3 -1
  174. package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +1 -1
  175. package/src/duckdb/src/include/duckdb/common/types/date.hpp +7 -5
  176. package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +6 -8
  177. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +0 -1
  178. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +1 -0
  179. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_states.hpp +3 -0
  180. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +9 -0
  181. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +4 -4
  182. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +3 -1
  183. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +1 -0
  184. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +3 -3
  185. package/src/duckdb/src/include/duckdb/core_functions/scalar/date_functions.hpp +24 -6
  186. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +21 -3
  187. package/src/duckdb/src/include/duckdb/execution/executor.hpp +3 -0
  188. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +4 -5
  189. package/src/duckdb/src/include/duckdb/execution/index/art/iterator.hpp +31 -27
  190. package/src/duckdb/src/include/duckdb/execution/index/art/leaf.hpp +6 -14
  191. package/src/duckdb/src/include/duckdb/execution/index/art/node.hpp +4 -10
  192. package/src/duckdb/src/include/duckdb/execution/index/art/node16.hpp +3 -6
  193. package/src/duckdb/src/include/duckdb/execution/index/art/node256.hpp +3 -6
  194. package/src/duckdb/src/include/duckdb/execution/index/art/node4.hpp +5 -8
  195. package/src/duckdb/src/include/duckdb/execution/index/art/node48.hpp +3 -6
  196. package/src/duckdb/src/include/duckdb/execution/index/art/prefix.hpp +63 -52
  197. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_asof_join.hpp +2 -10
  198. package/src/duckdb/src/include/duckdb/execution/operator/persistent/base_csv_reader.hpp +1 -1
  199. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_line_info.hpp +4 -3
  200. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +8 -1
  201. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_rejects_table.hpp +36 -0
  202. package/src/duckdb/src/include/duckdb/execution/operator/persistent/parallel_csv_reader.hpp +1 -1
  203. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_column_data_scan.hpp +10 -0
  204. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_cte.hpp +62 -0
  205. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_recursive_cte.hpp +8 -2
  206. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +5 -1
  207. package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +3 -0
  208. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +3 -0
  209. package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +10 -3
  210. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +51 -40
  211. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +1 -1
  212. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +2 -2
  213. package/src/duckdb/src/include/duckdb/function/built_in_functions.hpp +1 -0
  214. package/src/duckdb/src/include/duckdb/function/scalar/compressed_materialization_functions.hpp +49 -0
  215. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +1 -1
  216. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +5 -0
  217. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +2 -0
  218. package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +1 -1
  219. package/src/duckdb/src/include/duckdb/main/client_config.hpp +3 -0
  220. package/src/duckdb/src/include/duckdb/main/config.hpp +2 -0
  221. package/src/duckdb/src/include/duckdb/main/settings.hpp +21 -1
  222. package/src/duckdb/src/include/duckdb/optimizer/column_binding_replacer.hpp +47 -0
  223. package/src/duckdb/src/include/duckdb/optimizer/compressed_materialization.hpp +132 -0
  224. package/src/duckdb/src/include/duckdb/optimizer/deliminator.hpp +13 -16
  225. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +3 -0
  226. package/src/duckdb/src/include/duckdb/optimizer/join_order/estimated_properties.hpp +10 -1
  227. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_order_optimizer.hpp +1 -1
  228. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_relation.hpp +1 -1
  229. package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph.hpp +3 -0
  230. package/src/duckdb/src/include/duckdb/optimizer/matcher/set_matcher.hpp +13 -0
  231. package/src/duckdb/src/include/duckdb/optimizer/optimizer.hpp +3 -0
  232. package/src/duckdb/src/include/duckdb/optimizer/remove_duplicate_groups.hpp +40 -0
  233. package/src/duckdb/src/include/duckdb/optimizer/statistics_propagator.hpp +11 -3
  234. package/src/duckdb/src/include/duckdb/optimizer/topn_optimizer.hpp +2 -0
  235. package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +2 -0
  236. package/src/duckdb/src/include/duckdb/parallel/task_scheduler.hpp +5 -0
  237. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +2 -0
  238. package/src/duckdb/src/include/duckdb/parser/query_node/cte_node.hpp +54 -0
  239. package/src/duckdb/src/include/duckdb/parser/query_node/list.hpp +1 -0
  240. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -1
  241. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +1 -0
  242. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +15 -8
  243. package/src/duckdb/src/include/duckdb/planner/binder.hpp +8 -5
  244. package/src/duckdb/src/include/duckdb/planner/bound_tokens.hpp +1 -0
  245. package/src/duckdb/src/include/duckdb/planner/column_binding.hpp +4 -0
  246. package/src/duckdb/src/include/duckdb/planner/expression_binder/lateral_binder.hpp +0 -2
  247. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  248. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +2 -1
  249. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -5
  250. package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +7 -2
  251. package/src/duckdb/src/include/duckdb/planner/operator/logical_dependent_join.hpp +43 -0
  252. package/src/duckdb/src/include/duckdb/planner/operator/logical_materialized_cte.hpp +49 -0
  253. package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +5 -4
  254. package/src/duckdb/src/include/duckdb/planner/query_node/bound_cte_node.hpp +44 -0
  255. package/src/duckdb/src/include/duckdb/planner/query_node/list.hpp +1 -0
  256. package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +2 -2
  257. package/src/duckdb/src/include/duckdb/planner/subquery/has_correlated_expressions.hpp +4 -1
  258. package/src/duckdb/src/include/duckdb/planner/subquery/recursive_dependent_join_planner.hpp +31 -0
  259. package/src/duckdb/src/include/duckdb/planner/subquery/rewrite_correlated_expressions.hpp +8 -2
  260. package/src/duckdb/src/include/duckdb/planner/tableref/bound_cteref.hpp +5 -2
  261. package/src/duckdb/src/include/duckdb/storage/arena_allocator.hpp +1 -1
  262. package/src/duckdb/src/include/duckdb/storage/block_manager.hpp +3 -3
  263. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +1 -1
  264. package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +22 -0
  265. package/src/duckdb/src/include/duckdb/storage/single_file_block_manager.hpp +2 -0
  266. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +4 -0
  267. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +3 -0
  268. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +3 -2
  269. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +1 -3
  270. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -3
  271. package/src/duckdb/src/include/duckdb.h +28 -0
  272. package/src/duckdb/src/main/capi/arrow-c.cpp +155 -1
  273. package/src/duckdb/src/main/config.cpp +2 -0
  274. package/src/duckdb/src/main/extension/extension_helper.cpp +106 -99
  275. package/src/duckdb/src/main/settings/settings.cpp +40 -18
  276. package/src/duckdb/src/optimizer/column_binding_replacer.cpp +43 -0
  277. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -2
  278. package/src/duckdb/src/optimizer/compressed_materialization/compress_aggregate.cpp +140 -0
  279. package/src/duckdb/src/optimizer/compressed_materialization/compress_distinct.cpp +42 -0
  280. package/src/duckdb/src/optimizer/compressed_materialization/compress_order.cpp +65 -0
  281. package/src/duckdb/src/optimizer/compressed_materialization.cpp +478 -0
  282. package/src/duckdb/src/optimizer/deliminator.cpp +176 -321
  283. package/src/duckdb/src/optimizer/filter_pushdown.cpp +9 -0
  284. package/src/duckdb/src/optimizer/join_order/estimated_properties.cpp +7 -0
  285. package/src/duckdb/src/optimizer/join_order/join_node.cpp +2 -2
  286. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +113 -82
  287. package/src/duckdb/src/optimizer/join_order/join_relation_set.cpp +2 -6
  288. package/src/duckdb/src/optimizer/join_order/query_graph.cpp +22 -14
  289. package/src/duckdb/src/optimizer/optimizer.cpp +51 -14
  290. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +5 -5
  291. package/src/duckdb/src/optimizer/pushdown/pushdown_get.cpp +0 -1
  292. package/src/duckdb/src/optimizer/remove_duplicate_groups.cpp +127 -0
  293. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +4 -0
  294. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +154 -15
  295. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +65 -8
  296. package/src/duckdb/src/optimizer/statistics/operator/propagate_order.cpp +1 -1
  297. package/src/duckdb/src/optimizer/statistics_propagator.cpp +7 -5
  298. package/src/duckdb/src/optimizer/topn_optimizer.cpp +20 -10
  299. package/src/duckdb/src/parallel/executor.cpp +15 -0
  300. package/src/duckdb/src/parallel/pipeline_executor.cpp +7 -6
  301. package/src/duckdb/src/parallel/task_scheduler.cpp +11 -2
  302. package/src/duckdb/src/parser/common_table_expression_info.cpp +2 -0
  303. package/src/duckdb/src/parser/expression/lambda_expression.cpp +1 -1
  304. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +7 -0
  305. package/src/duckdb/src/parser/query_node/cte_node.cpp +75 -0
  306. package/src/duckdb/src/parser/query_node.cpp +18 -1
  307. package/src/duckdb/src/parser/tableref/joinref.cpp +3 -0
  308. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +55 -3
  309. package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +2 -0
  310. package/src/duckdb/src/parser/transform/expression/transform_multi_assign_reference.cpp +44 -0
  311. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +19 -1
  312. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +13 -0
  313. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +6 -1
  314. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +6 -1
  315. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -2
  316. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +14 -11
  317. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +11 -2
  318. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +6 -1
  319. package/src/duckdb/src/parser/transformer.cpp +15 -0
  320. package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +64 -0
  321. package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +26 -0
  322. package/src/duckdb/src/planner/binder/query_node/plan_recursive_cte_node.cpp +5 -5
  323. package/src/duckdb/src/planner/binder/query_node/plan_setop.cpp +4 -4
  324. package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +32 -29
  325. package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +11 -2
  326. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +32 -5
  327. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +116 -50
  328. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -1
  329. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -26
  330. package/src/duckdb/src/planner/binder/tableref/plan_subqueryref.cpp +3 -3
  331. package/src/duckdb/src/planner/binder.cpp +5 -0
  332. package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +4 -31
  333. package/src/duckdb/src/planner/expression_binder.cpp +3 -0
  334. package/src/duckdb/src/planner/expression_iterator.cpp +6 -0
  335. package/src/duckdb/src/planner/logical_operator.cpp +5 -0
  336. package/src/duckdb/src/planner/logical_operator_visitor.cpp +2 -0
  337. package/src/duckdb/src/planner/operator/logical_cteref.cpp +3 -1
  338. package/src/duckdb/src/planner/operator/logical_dependent_join.cpp +26 -0
  339. package/src/duckdb/src/planner/operator/logical_materialized_cte.cpp +21 -0
  340. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +90 -38
  341. package/src/duckdb/src/planner/subquery/has_correlated_expressions.cpp +22 -7
  342. package/src/duckdb/src/planner/subquery/rewrite_correlated_expressions.cpp +65 -7
  343. package/src/duckdb/src/storage/arena_allocator.cpp +1 -2
  344. package/src/duckdb/src/storage/buffer/block_manager.cpp +3 -0
  345. package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -0
  346. package/src/duckdb/src/storage/data_table.cpp +1 -1
  347. package/src/duckdb/src/storage/local_storage.cpp +3 -3
  348. package/src/duckdb/src/storage/single_file_block_manager.cpp +23 -0
  349. package/src/duckdb/src/storage/statistics/string_stats.cpp +21 -2
  350. package/src/duckdb/src/storage/storage_info.cpp +1 -1
  351. package/src/duckdb/src/storage/storage_manager.cpp +7 -2
  352. package/src/duckdb/src/storage/table/chunk_info.cpp +17 -0
  353. package/src/duckdb/src/storage/table/row_group.cpp +25 -9
  354. package/src/duckdb/src/storage/table/row_group_collection.cpp +19 -18
  355. package/src/duckdb/third_party/concurrentqueue/concurrentqueue.h +2 -2
  356. package/src/duckdb/third_party/concurrentqueue/lightweightsemaphore.h +76 -0
  357. package/src/duckdb/third_party/fast_float/fast_float/fast_float.h +2 -0
  358. package/src/duckdb/third_party/httplib/httplib.hpp +10 -1
  359. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +9 -0
  360. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +2 -1
  361. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +12487 -12331
  362. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +5 -5
  363. package/src/duckdb/ub_src_execution_index_art.cpp +0 -2
  364. package/src/duckdb/ub_src_execution_operator_persistent.cpp +2 -0
  365. package/src/duckdb/ub_src_execution_operator_set.cpp +2 -0
  366. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  367. package/src/duckdb/ub_src_function_scalar.cpp +2 -0
  368. package/src/duckdb/ub_src_function_scalar_compressed_materialization.cpp +4 -0
  369. package/src/duckdb/ub_src_function_scalar_list.cpp +2 -0
  370. package/src/duckdb/ub_src_optimizer.cpp +6 -0
  371. package/src/duckdb/ub_src_optimizer_compressed_materialization.cpp +6 -0
  372. package/src/duckdb/ub_src_optimizer_statistics_expression.cpp +0 -2
  373. package/src/duckdb/ub_src_parser_query_node.cpp +2 -0
  374. package/src/duckdb/ub_src_parser_transform_expression.cpp +2 -0
  375. package/src/duckdb/ub_src_planner_binder_query_node.cpp +4 -0
  376. package/src/duckdb/ub_src_planner_operator.cpp +4 -0
  377. package/src/duckdb_node.hpp +1 -0
  378. package/src/statement.cpp +103 -4
  379. package/test/columns.test.ts +243 -0
  380. package/test/test_all_types.test.ts +233 -0
  381. package/tsconfig.json +1 -0
  382. package/src/duckdb/src/execution/index/art/prefix_segment.cpp +0 -42
  383. package/src/duckdb/src/include/duckdb/execution/index/art/prefix_segment.hpp +0 -40
  384. package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +0 -118
  385. /package/src/duckdb/extension/parquet/include/{parquet-extension.hpp → parquet_extension.hpp} +0 -0
@@ -1,6 +1,6 @@
1
- // regr_sxx
1
+ // REGR_SXX(y, x)
2
2
  // Returns REGR_COUNT(y, x) * VAR_POP(x) for non-null pairs.
3
- // regrsyy
3
+ // REGR_SYY(y, x)
4
4
  // Returns REGR_COUNT(y, x) * VAR_POP(y) for non-null pairs.
5
5
 
6
6
  #include "duckdb/core_functions/aggregate/regression/regr_count.hpp"
@@ -48,17 +48,17 @@ struct RegrBaseOperation {
48
48
 
49
49
  struct RegrSXXOperation : RegrBaseOperation {
50
50
  template <class A_TYPE, class B_TYPE, class STATE, class OP>
51
- static void Operation(STATE &state, const A_TYPE &x, const B_TYPE &y, AggregateBinaryInput &idata) {
52
- RegrCountFunction::Operation<A_TYPE, B_TYPE, size_t, OP>(state.count, x, y, idata);
53
- STDDevBaseOperation::Execute<A_TYPE, StddevState>(state.var_pop, y);
51
+ static void Operation(STATE &state, const A_TYPE &y, const B_TYPE &x, AggregateBinaryInput &idata) {
52
+ RegrCountFunction::Operation<A_TYPE, B_TYPE, size_t, OP>(state.count, y, x, idata);
53
+ STDDevBaseOperation::Execute<A_TYPE, StddevState>(state.var_pop, x);
54
54
  }
55
55
  };
56
56
 
57
57
  struct RegrSYYOperation : RegrBaseOperation {
58
58
  template <class A_TYPE, class B_TYPE, class STATE, class OP>
59
- static void Operation(STATE &state, const A_TYPE &x, const B_TYPE &y, AggregateBinaryInput &idata) {
60
- RegrCountFunction::Operation<A_TYPE, B_TYPE, size_t, OP>(state.count, x, y, idata);
61
- STDDevBaseOperation::Execute<A_TYPE, StddevState>(state.var_pop, x);
59
+ static void Operation(STATE &state, const A_TYPE &y, const B_TYPE &x, AggregateBinaryInput &idata) {
60
+ RegrCountFunction::Operation<A_TYPE, B_TYPE, size_t, OP>(state.count, y, x, idata);
61
+ STDDevBaseOperation::Execute<A_TYPE, StddevState>(state.var_pop, y);
62
62
  }
63
63
  };
64
64
 
@@ -1,3 +1,4 @@
1
+ // REGR_SXY(y, x)
1
2
  // Returns REGR_COUNT(expr1, expr2) * COVAR_POP(expr1, expr2) for non-null pairs.
2
3
 
3
4
  #include "duckdb/core_functions/aggregate/regression/regr_count.hpp"
@@ -20,9 +21,9 @@ struct RegrSXYOperation {
20
21
  }
21
22
 
22
23
  template <class A_TYPE, class B_TYPE, class STATE, class OP>
23
- static void Operation(STATE &state, const A_TYPE &x, const B_TYPE &y, AggregateBinaryInput &idata) {
24
- RegrCountFunction::Operation<A_TYPE, B_TYPE, size_t, OP>(state.count, x, y, idata);
25
- CovarOperation::Operation<A_TYPE, B_TYPE, CovarState, OP>(state.cov_pop, x, y, idata);
24
+ static void Operation(STATE &state, const A_TYPE &y, const B_TYPE &x, AggregateBinaryInput &idata) {
25
+ RegrCountFunction::Operation<A_TYPE, B_TYPE, size_t, OP>(state.count, y, x, idata);
26
+ CovarOperation::Operation<A_TYPE, B_TYPE, CovarState, OP>(state.cov_pop, y, x, idata);
26
27
  }
27
28
 
28
29
  template <class STATE, class OP>
@@ -137,7 +137,9 @@ static StaticFunctionDefinition internal_functions[] = {
137
137
  DUCKDB_SCALAR_FUNCTION(EnumRangeFun),
138
138
  DUCKDB_SCALAR_FUNCTION(EnumRangeBoundaryFun),
139
139
  DUCKDB_SCALAR_FUNCTION_SET(EpochFun),
140
- DUCKDB_SCALAR_FUNCTION(EpochMsFun),
140
+ DUCKDB_SCALAR_FUNCTION_SET(EpochNanosecondsFun),
141
+ DUCKDB_SCALAR_FUNCTION_SET(EpochMicrosecondsFun),
142
+ DUCKDB_SCALAR_FUNCTION_SET(EpochMsFun),
141
143
  DUCKDB_SCALAR_FUNCTION_SET(EraFun),
142
144
  DUCKDB_SCALAR_FUNCTION(ErrorFun),
143
145
  DUCKDB_SCALAR_FUNCTION(EvenFun),
@@ -211,7 +213,7 @@ static StaticFunctionDefinition internal_functions[] = {
211
213
  DUCKDB_AGGREGATE_FUNCTION_SET(MadFun),
212
214
  DUCKDB_SCALAR_FUNCTION_SET(MakeDateFun),
213
215
  DUCKDB_SCALAR_FUNCTION(MakeTimeFun),
214
- DUCKDB_SCALAR_FUNCTION(MakeTimestampFun),
216
+ DUCKDB_SCALAR_FUNCTION_SET(MakeTimestampFun),
215
217
  DUCKDB_SCALAR_FUNCTION(MapFun),
216
218
  DUCKDB_SCALAR_FUNCTION(MapConcatFun),
217
219
  DUCKDB_SCALAR_FUNCTION(MapEntriesFun),
@@ -354,6 +354,49 @@ struct DatePart {
354
354
  }
355
355
  };
356
356
 
357
+ struct EpochNanosecondsOperator {
358
+ template <class TA, class TR>
359
+ static inline TR Operation(TA input) {
360
+ return input.micros * Interval::NANOS_PER_MICRO;
361
+ }
362
+
363
+ template <class T>
364
+ static unique_ptr<BaseStatistics> PropagateStatistics(ClientContext &context, FunctionStatisticsInput &input) {
365
+ return PropagateDatePartStatistics<T, EpochNanosecondsOperator>(input.child_stats);
366
+ }
367
+ };
368
+
369
+ struct EpochMicrosecondsOperator {
370
+ template <class TA, class TR>
371
+ static inline TR Operation(TA input) {
372
+ return input.micros;
373
+ }
374
+
375
+ template <class T>
376
+ static unique_ptr<BaseStatistics> PropagateStatistics(ClientContext &context, FunctionStatisticsInput &input) {
377
+ return PropagateDatePartStatistics<T, EpochMicrosecondsOperator>(input.child_stats);
378
+ }
379
+ };
380
+
381
+ struct EpochMillisOperator {
382
+ template <class TA, class TR>
383
+ static inline TR Operation(TA input) {
384
+ return input.micros / Interval::MICROS_PER_MSEC;
385
+ }
386
+
387
+ template <class T>
388
+ static unique_ptr<BaseStatistics> PropagateStatistics(ClientContext &context, FunctionStatisticsInput &input) {
389
+ return PropagateDatePartStatistics<T, EpochMillisOperator>(input.child_stats);
390
+ }
391
+
392
+ static void Inverse(DataChunk &input, ExpressionState &state, Vector &result) {
393
+ D_ASSERT(input.ColumnCount() == 1);
394
+
395
+ UnaryExecutor::Execute<int64_t, timestamp_t>(input.data[0], result, input.size(),
396
+ [&](int64_t input) { return Timestamp::FromEpochMs(input); });
397
+ }
398
+ };
399
+
357
400
  struct MicrosecondsOperator {
358
401
  template <class TA, class TR>
359
402
  static inline TR Operation(TA input) {
@@ -521,9 +564,8 @@ struct DatePart {
521
564
  }
522
565
 
523
566
  template <typename P>
524
- static inline bool HasPartValue(P *part_values, DatePartSpecifier part, P &value) {
525
- value = part_values[int(part)];
526
- return value;
567
+ static inline P HasPartValue(P *part_values, DatePartSpecifier part) {
568
+ return part_values[int(part)];
527
569
  }
528
570
 
529
571
  template <class TA, class TR>
@@ -535,28 +577,36 @@ struct DatePart {
535
577
  int32_t dd = 1;
536
578
  if (mask & YMD) {
537
579
  Date::Convert(input, yyyy, mm, dd);
538
- if (HasPartValue(part_values, DatePartSpecifier::YEAR, part_data)) {
580
+ part_data = HasPartValue(part_values, DatePartSpecifier::YEAR);
581
+ if (part_data) {
539
582
  part_data[idx] = yyyy;
540
583
  }
541
- if (HasPartValue(part_values, DatePartSpecifier::MONTH, part_data)) {
584
+ part_data = HasPartValue(part_values, DatePartSpecifier::MONTH);
585
+ if (part_data) {
542
586
  part_data[idx] = mm;
543
587
  }
544
- if (HasPartValue(part_values, DatePartSpecifier::DAY, part_data)) {
588
+ part_data = HasPartValue(part_values, DatePartSpecifier::DAY);
589
+ if (part_data) {
545
590
  part_data[idx] = dd;
546
591
  }
547
- if (HasPartValue(part_values, DatePartSpecifier::DECADE, part_data)) {
592
+ part_data = HasPartValue(part_values, DatePartSpecifier::DECADE);
593
+ if (part_data) {
548
594
  part_data[idx] = DecadeOperator::DecadeFromYear(yyyy);
549
595
  }
550
- if (HasPartValue(part_values, DatePartSpecifier::CENTURY, part_data)) {
596
+ part_data = HasPartValue(part_values, DatePartSpecifier::CENTURY);
597
+ if (part_data) {
551
598
  part_data[idx] = CenturyOperator::CenturyFromYear(yyyy);
552
599
  }
553
- if (HasPartValue(part_values, DatePartSpecifier::MILLENNIUM, part_data)) {
600
+ part_data = HasPartValue(part_values, DatePartSpecifier::MILLENNIUM);
601
+ if (part_data) {
554
602
  part_data[idx] = MillenniumOperator::MillenniumFromYear(yyyy);
555
603
  }
556
- if (HasPartValue(part_values, DatePartSpecifier::QUARTER, part_data)) {
604
+ part_data = HasPartValue(part_values, DatePartSpecifier::QUARTER);
605
+ if (part_data) {
557
606
  part_data[idx] = QuarterOperator::QuarterFromMonth(mm);
558
607
  }
559
- if (HasPartValue(part_values, DatePartSpecifier::ERA, part_data)) {
608
+ part_data = HasPartValue(part_values, DatePartSpecifier::ERA);
609
+ if (part_data) {
560
610
  part_data[idx] = EraOperator::EraFromYear(yyyy);
561
611
  }
562
612
  }
@@ -564,10 +614,12 @@ struct DatePart {
564
614
  // Week calculations
565
615
  if (mask & DOW) {
566
616
  auto isodow = Date::ExtractISODayOfTheWeek(input);
567
- if (HasPartValue(part_values, DatePartSpecifier::DOW, part_data)) {
617
+ part_data = HasPartValue(part_values, DatePartSpecifier::DOW);
618
+ if (part_data) {
568
619
  part_data[idx] = DayOfWeekOperator::DayOfWeekFromISO(isodow);
569
620
  }
570
- if (HasPartValue(part_values, DatePartSpecifier::ISODOW, part_data)) {
621
+ part_data = HasPartValue(part_values, DatePartSpecifier::ISODOW);
622
+ if (part_data) {
571
623
  part_data[idx] = isodow;
572
624
  }
573
625
  }
@@ -577,24 +629,29 @@ struct DatePart {
577
629
  int32_t ww = 0;
578
630
  int32_t iyyy = 0;
579
631
  Date::ExtractISOYearWeek(input, iyyy, ww);
580
- if (HasPartValue(part_values, DatePartSpecifier::WEEK, part_data)) {
632
+ part_data = HasPartValue(part_values, DatePartSpecifier::WEEK);
633
+ if (part_data) {
581
634
  part_data[idx] = ww;
582
635
  }
583
- if (HasPartValue(part_values, DatePartSpecifier::ISOYEAR, part_data)) {
636
+ part_data = HasPartValue(part_values, DatePartSpecifier::ISOYEAR);
637
+ if (part_data) {
584
638
  part_data[idx] = iyyy;
585
639
  }
586
- if (HasPartValue(part_values, DatePartSpecifier::YEARWEEK, part_data)) {
640
+ part_data = HasPartValue(part_values, DatePartSpecifier::YEARWEEK);
641
+ if (part_data) {
587
642
  part_data[idx] = YearWeekOperator::YearWeekFromParts(iyyy, ww);
588
643
  }
589
644
  }
590
645
 
591
646
  if (mask & EPOCH) {
592
- if (HasPartValue(part_values, DatePartSpecifier::EPOCH, part_data)) {
647
+ part_data = HasPartValue(part_values, DatePartSpecifier::EPOCH);
648
+ if (part_data) {
593
649
  part_data[idx] = Date::Epoch(input);
594
650
  }
595
651
  }
596
652
  if (mask & DOY) {
597
- if (HasPartValue(part_values, DatePartSpecifier::DOY, part_data)) {
653
+ part_data = HasPartValue(part_values, DatePartSpecifier::DOY);
654
+ if (part_data) {
598
655
  part_data[idx] = Date::ExtractDayOfTheYear(input);
599
656
  }
600
657
  }
@@ -798,6 +855,51 @@ int64_t DatePart::YearWeekOperator::Operation(dtime_t input) {
798
855
  throw NotImplementedException("\"time\" units \"yearweek\" not recognized");
799
856
  }
800
857
 
858
+ template <>
859
+ int64_t DatePart::EpochNanosecondsOperator::Operation(timestamp_t input) {
860
+ return Timestamp::GetEpochNanoSeconds(input);
861
+ }
862
+
863
+ template <>
864
+ int64_t DatePart::EpochNanosecondsOperator::Operation(date_t input) {
865
+ return Date::EpochNanoseconds(input);
866
+ }
867
+
868
+ template <>
869
+ int64_t DatePart::EpochNanosecondsOperator::Operation(interval_t input) {
870
+ return Interval::GetNanoseconds(input);
871
+ }
872
+
873
+ template <>
874
+ int64_t DatePart::EpochMicrosecondsOperator::Operation(timestamp_t input) {
875
+ return Timestamp::GetEpochMicroSeconds(input);
876
+ }
877
+
878
+ template <>
879
+ int64_t DatePart::EpochMicrosecondsOperator::Operation(date_t input) {
880
+ return Date::EpochMicroseconds(input);
881
+ }
882
+
883
+ template <>
884
+ int64_t DatePart::EpochMicrosecondsOperator::Operation(interval_t input) {
885
+ return Interval::GetMicro(input);
886
+ }
887
+
888
+ template <>
889
+ int64_t DatePart::EpochMillisOperator::Operation(timestamp_t input) {
890
+ return Timestamp::GetEpochMs(input);
891
+ }
892
+
893
+ template <>
894
+ int64_t DatePart::EpochMillisOperator::Operation(date_t input) {
895
+ return Date::EpochMilliseconds(input);
896
+ }
897
+
898
+ template <>
899
+ int64_t DatePart::EpochMillisOperator::Operation(interval_t input) {
900
+ return Interval::GetMilli(input);
901
+ }
902
+
801
903
  template <>
802
904
  int64_t DatePart::MicrosecondsOperator::Operation(timestamp_t input) {
803
905
  auto time = Timestamp::GetTime(input);
@@ -949,37 +1051,47 @@ void DatePart::StructOperator::Operation(int64_t **part_values, const dtime_t &i
949
1051
  int64_t *part_data;
950
1052
  if (mask & TIME) {
951
1053
  const auto micros = MicrosecondsOperator::Operation<dtime_t, int64_t>(input);
952
- if (HasPartValue(part_values, DatePartSpecifier::MICROSECONDS, part_data)) {
1054
+ part_data = HasPartValue(part_values, DatePartSpecifier::MICROSECONDS);
1055
+ if (part_data) {
953
1056
  part_data[idx] = micros;
954
1057
  }
955
- if (HasPartValue(part_values, DatePartSpecifier::MILLISECONDS, part_data)) {
1058
+ part_data = HasPartValue(part_values, DatePartSpecifier::MILLISECONDS);
1059
+ if (part_data) {
956
1060
  part_data[idx] = micros / Interval::MICROS_PER_MSEC;
957
1061
  }
958
- if (HasPartValue(part_values, DatePartSpecifier::SECOND, part_data)) {
1062
+ part_data = HasPartValue(part_values, DatePartSpecifier::SECOND);
1063
+ if (part_data) {
959
1064
  part_data[idx] = micros / Interval::MICROS_PER_SEC;
960
1065
  }
961
- if (HasPartValue(part_values, DatePartSpecifier::MINUTE, part_data)) {
1066
+ part_data = HasPartValue(part_values, DatePartSpecifier::MINUTE);
1067
+ if (part_data) {
962
1068
  part_data[idx] = MinutesOperator::Operation<dtime_t, int64_t>(input);
963
1069
  }
964
- if (HasPartValue(part_values, DatePartSpecifier::HOUR, part_data)) {
1070
+ part_data = HasPartValue(part_values, DatePartSpecifier::HOUR);
1071
+ if (part_data) {
965
1072
  part_data[idx] = HoursOperator::Operation<dtime_t, int64_t>(input);
966
1073
  }
967
1074
  }
968
1075
 
969
1076
  if (mask & EPOCH) {
970
- if (HasPartValue(part_values, DatePartSpecifier::EPOCH, part_data)) {
1077
+ part_data = HasPartValue(part_values, DatePartSpecifier::EPOCH);
1078
+ if (part_data) {
971
1079
  part_data[idx] = EpochOperator::Operation<dtime_t, int64_t>(input);
1080
+ ;
972
1081
  }
973
1082
  }
974
1083
 
975
1084
  if (mask & ZONE) {
976
- if (HasPartValue(part_values, DatePartSpecifier::TIMEZONE, part_data)) {
1085
+ part_data = HasPartValue(part_values, DatePartSpecifier::TIMEZONE);
1086
+ if (part_data) {
977
1087
  part_data[idx] = 0;
978
1088
  }
979
- if (HasPartValue(part_values, DatePartSpecifier::TIMEZONE_HOUR, part_data)) {
1089
+ part_data = HasPartValue(part_values, DatePartSpecifier::TIMEZONE_HOUR);
1090
+ if (part_data) {
980
1091
  part_data[idx] = 0;
981
1092
  }
982
- if (HasPartValue(part_values, DatePartSpecifier::TIMEZONE_MINUTE, part_data)) {
1093
+ part_data = HasPartValue(part_values, DatePartSpecifier::TIMEZONE_MINUTE);
1094
+ if (part_data) {
983
1095
  part_data[idx] = 0;
984
1096
  }
985
1097
  }
@@ -998,8 +1110,8 @@ void DatePart::StructOperator::Operation(int64_t **part_values, const timestamp_
998
1110
  Operation(part_values, t, idx, mask & ~EPOCH);
999
1111
 
1000
1112
  if (mask & EPOCH) {
1001
- int64_t *part_data;
1002
- if (HasPartValue(part_values, DatePartSpecifier::EPOCH, part_data)) {
1113
+ auto part_data = HasPartValue(part_values, DatePartSpecifier::EPOCH);
1114
+ if (part_data) {
1003
1115
  part_data[idx] = EpochOperator::Operation<timestamp_t, int64_t>(input);
1004
1116
  }
1005
1117
  }
@@ -1011,50 +1123,63 @@ void DatePart::StructOperator::Operation(int64_t **part_values, const interval_t
1011
1123
  int64_t *part_data;
1012
1124
  if (mask & YMD) {
1013
1125
  const auto mm = input.months % Interval::MONTHS_PER_YEAR;
1014
- if (HasPartValue(part_values, DatePartSpecifier::YEAR, part_data)) {
1126
+ part_data = HasPartValue(part_values, DatePartSpecifier::YEAR);
1127
+ if (part_data) {
1015
1128
  part_data[idx] = input.months / Interval::MONTHS_PER_YEAR;
1016
1129
  }
1017
- if (HasPartValue(part_values, DatePartSpecifier::MONTH, part_data)) {
1130
+ part_data = HasPartValue(part_values, DatePartSpecifier::MONTH);
1131
+ if (part_data) {
1018
1132
  part_data[idx] = mm;
1019
1133
  }
1020
- if (HasPartValue(part_values, DatePartSpecifier::DAY, part_data)) {
1134
+ part_data = HasPartValue(part_values, DatePartSpecifier::DAY);
1135
+ if (part_data) {
1021
1136
  part_data[idx] = input.days;
1022
1137
  }
1023
- if (HasPartValue(part_values, DatePartSpecifier::DECADE, part_data)) {
1138
+ part_data = HasPartValue(part_values, DatePartSpecifier::DECADE);
1139
+ if (part_data) {
1024
1140
  part_data[idx] = input.months / Interval::MONTHS_PER_DECADE;
1025
1141
  }
1026
- if (HasPartValue(part_values, DatePartSpecifier::CENTURY, part_data)) {
1142
+ part_data = HasPartValue(part_values, DatePartSpecifier::CENTURY);
1143
+ if (part_data) {
1027
1144
  part_data[idx] = input.months / Interval::MONTHS_PER_CENTURY;
1028
1145
  }
1029
- if (HasPartValue(part_values, DatePartSpecifier::MILLENNIUM, part_data)) {
1146
+ part_data = HasPartValue(part_values, DatePartSpecifier::MILLENNIUM);
1147
+ if (part_data) {
1030
1148
  part_data[idx] = input.months / Interval::MONTHS_PER_MILLENIUM;
1031
1149
  }
1032
- if (HasPartValue(part_values, DatePartSpecifier::QUARTER, part_data)) {
1150
+ part_data = HasPartValue(part_values, DatePartSpecifier::QUARTER);
1151
+ if (part_data) {
1033
1152
  part_data[idx] = mm / Interval::MONTHS_PER_QUARTER + 1;
1034
1153
  }
1035
1154
  }
1036
1155
 
1037
1156
  if (mask & TIME) {
1038
1157
  const auto micros = MicrosecondsOperator::Operation<interval_t, int64_t>(input);
1039
- if (HasPartValue(part_values, DatePartSpecifier::MICROSECONDS, part_data)) {
1158
+ part_data = HasPartValue(part_values, DatePartSpecifier::MICROSECONDS);
1159
+ if (part_data) {
1040
1160
  part_data[idx] = micros;
1041
1161
  }
1042
- if (HasPartValue(part_values, DatePartSpecifier::MILLISECONDS, part_data)) {
1162
+ part_data = HasPartValue(part_values, DatePartSpecifier::MILLISECONDS);
1163
+ if (part_data) {
1043
1164
  part_data[idx] = micros / Interval::MICROS_PER_MSEC;
1044
1165
  }
1045
- if (HasPartValue(part_values, DatePartSpecifier::SECOND, part_data)) {
1166
+ part_data = HasPartValue(part_values, DatePartSpecifier::SECOND);
1167
+ if (part_data) {
1046
1168
  part_data[idx] = micros / Interval::MICROS_PER_SEC;
1047
1169
  }
1048
- if (HasPartValue(part_values, DatePartSpecifier::MINUTE, part_data)) {
1170
+ part_data = HasPartValue(part_values, DatePartSpecifier::MINUTE);
1171
+ if (part_data) {
1049
1172
  part_data[idx] = MinutesOperator::Operation<interval_t, int64_t>(input);
1050
1173
  }
1051
- if (HasPartValue(part_values, DatePartSpecifier::HOUR, part_data)) {
1174
+ part_data = HasPartValue(part_values, DatePartSpecifier::HOUR);
1175
+ if (part_data) {
1052
1176
  part_data[idx] = HoursOperator::Operation<interval_t, int64_t>(input);
1053
1177
  }
1054
1178
  }
1055
1179
 
1056
1180
  if (mask & EPOCH) {
1057
- if (HasPartValue(part_values, DatePartSpecifier::EPOCH, part_data)) {
1181
+ part_data = HasPartValue(part_values, DatePartSpecifier::EPOCH);
1182
+ if (part_data) {
1058
1183
  part_data[idx] = EpochOperator::Operation<interval_t, int64_t>(input);
1059
1184
  }
1060
1185
  }
@@ -1466,6 +1591,47 @@ ScalarFunctionSet EpochFun::GetFunctions() {
1466
1591
  return GetTimePartFunction<DatePart::EpochOperator>();
1467
1592
  }
1468
1593
 
1594
+ ScalarFunctionSet EpochNanosecondsFun::GetFunctions() {
1595
+ using OP = DatePart::EpochNanosecondsOperator;
1596
+ auto operator_set = GetTimePartFunction<OP>();
1597
+
1598
+ // TIMESTAMP WITH TIME ZONE has the same representation as TIMESTAMP so no need to defer to ICU
1599
+ auto tstz_func = DatePart::UnaryFunction<timestamp_t, int64_t, OP>;
1600
+ auto tstz_stats = OP::template PropagateStatistics<timestamp_t>;
1601
+ operator_set.AddFunction(
1602
+ ScalarFunction({LogicalType::TIMESTAMP_TZ}, LogicalType::BIGINT, tstz_func, nullptr, nullptr, tstz_stats));
1603
+ return operator_set;
1604
+ }
1605
+
1606
+ ScalarFunctionSet EpochMicrosecondsFun::GetFunctions() {
1607
+ using OP = DatePart::EpochMicrosecondsOperator;
1608
+ auto operator_set = GetTimePartFunction<OP>();
1609
+
1610
+ // TIMESTAMP WITH TIME ZONE has the same representation as TIMESTAMP so no need to defer to ICU
1611
+ auto tstz_func = DatePart::UnaryFunction<timestamp_t, int64_t, OP>;
1612
+ auto tstz_stats = OP::template PropagateStatistics<timestamp_t>;
1613
+ operator_set.AddFunction(
1614
+ ScalarFunction({LogicalType::TIMESTAMP_TZ}, LogicalType::BIGINT, tstz_func, nullptr, nullptr, tstz_stats));
1615
+ return operator_set;
1616
+ }
1617
+
1618
+ ScalarFunctionSet EpochMsFun::GetFunctions() {
1619
+ using OP = DatePart::EpochMillisOperator;
1620
+ auto operator_set = GetTimePartFunction<OP>();
1621
+
1622
+ // TIMESTAMP WITH TIME ZONE has the same representation as TIMESTAMP so no need to defer to ICU
1623
+ auto tstz_func = DatePart::UnaryFunction<timestamp_t, int64_t, OP>;
1624
+ auto tstz_stats = OP::template PropagateStatistics<timestamp_t>;
1625
+ operator_set.AddFunction(
1626
+ ScalarFunction({LogicalType::TIMESTAMP_TZ}, LogicalType::BIGINT, tstz_func, nullptr, nullptr, tstz_stats));
1627
+
1628
+ // Legacy inverse BIGINT => TIMESTAMP
1629
+ operator_set.AddFunction(
1630
+ ScalarFunction({LogicalType::BIGINT}, LogicalType::TIMESTAMP, DatePart::EpochMillisOperator::Inverse));
1631
+
1632
+ return operator_set;
1633
+ }
1634
+
1469
1635
  ScalarFunctionSet MicrosecondsFun::GetFunctions() {
1470
1636
  return GetTimePartFunction<DatePart::MicrosecondsOperator>();
1471
1637
  }
@@ -20,23 +20,6 @@ static void EpochSecFunction(DataChunk &input, ExpressionState &state, Vector &r
20
20
  UnaryExecutor::Execute<int64_t, timestamp_t, EpochSecOperator>(input.data[0], result, input.size());
21
21
  }
22
22
 
23
- struct EpochMillisOperator {
24
- template <class INPUT_TYPE, class RESULT_TYPE>
25
- static RESULT_TYPE Operation(INPUT_TYPE input) {
26
- return Timestamp::FromEpochMs(input);
27
- }
28
- };
29
-
30
- static void EpochMillisFunction(DataChunk &input, ExpressionState &state, Vector &result) {
31
- D_ASSERT(input.ColumnCount() == 1);
32
-
33
- UnaryExecutor::Execute<int64_t, timestamp_t, EpochMillisOperator>(input.data[0], result, input.size());
34
- }
35
-
36
- ScalarFunction EpochMsFun::GetFunction() {
37
- return ScalarFunction({LogicalType::BIGINT}, LogicalType::TIMESTAMP, EpochMillisFunction);
38
- }
39
-
40
23
  ScalarFunction ToTimestampFun::GetFunction() {
41
24
  // to_timestamp is an alias from Postgres that converts the time in seconds to a timestamp
42
25
  return ScalarFunction({LogicalType::BIGINT}, LogicalType::TIMESTAMP, EpochSecFunction);
@@ -72,10 +72,21 @@ struct MakeTimestampOperator {
72
72
  const auto t = MakeTimeOperator::Operation<HR, MN, SS, dtime_t>(hr, mn, ss);
73
73
  return Timestamp::FromDatetime(d, t);
74
74
  }
75
+
76
+ template <typename T, typename RESULT_TYPE>
77
+ static RESULT_TYPE Operation(T micros) {
78
+ return timestamp_t(micros);
79
+ }
75
80
  };
76
81
 
77
82
  template <typename T>
78
83
  static void ExecuteMakeTimestamp(DataChunk &input, ExpressionState &state, Vector &result) {
84
+ if (input.ColumnCount() == 1) {
85
+ auto func = MakeTimestampOperator::Operation<T, timestamp_t>;
86
+ UnaryExecutor::Execute<T, timestamp_t>(input.data[0], result, input.size(), func);
87
+ return;
88
+ }
89
+
79
90
  D_ASSERT(input.ColumnCount() == 6);
80
91
 
81
92
  auto func = MakeTimestampOperator::Operation<T, T, T, T, T, double, timestamp_t>;
@@ -99,10 +110,14 @@ ScalarFunction MakeTimeFun::GetFunction() {
99
110
  ExecuteMakeTime<int64_t>);
100
111
  }
101
112
 
102
- ScalarFunction MakeTimestampFun::GetFunction() {
103
- return ScalarFunction({LogicalType::BIGINT, LogicalType::BIGINT, LogicalType::BIGINT, LogicalType::BIGINT,
104
- LogicalType::BIGINT, LogicalType::DOUBLE},
105
- LogicalType::TIMESTAMP, ExecuteMakeTimestamp<int64_t>);
113
+ ScalarFunctionSet MakeTimestampFun::GetFunctions() {
114
+ ScalarFunctionSet operator_set("make_timestamp");
115
+ operator_set.AddFunction(ScalarFunction({LogicalType::BIGINT, LogicalType::BIGINT, LogicalType::BIGINT,
116
+ LogicalType::BIGINT, LogicalType::BIGINT, LogicalType::DOUBLE},
117
+ LogicalType::TIMESTAMP, ExecuteMakeTimestamp<int64_t>));
118
+ operator_set.AddFunction(
119
+ ScalarFunction({LogicalType::BIGINT}, LogicalType::TIMESTAMP, ExecuteMakeTimestamp<int64_t>));
120
+ return operator_set;
106
121
  }
107
122
 
108
123
  } // namespace duckdb
@@ -74,7 +74,8 @@ struct StateVector {
74
74
  // destroy objects within the aggregate states
75
75
  auto &aggr = aggr_expr->Cast<BoundAggregateExpression>();
76
76
  if (aggr.function.destructor) {
77
- AggregateInputData aggr_input_data(aggr.bind_info.get(), Allocator::DefaultAllocator());
77
+ ArenaAllocator allocator(Allocator::DefaultAllocator());
78
+ AggregateInputData aggr_input_data(aggr.bind_info.get(), allocator);
78
79
  aggr.function.destructor(state_vector, aggr_input_data, count);
79
80
  }
80
81
  }
@@ -181,7 +182,8 @@ static void ListAggregatesFunction(DataChunk &args, ExpressionState &state, Vect
181
182
  auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
182
183
  auto &info = func_expr.bind_info->Cast<ListAggregatesBindData>();
183
184
  auto &aggr = info.aggr_expr->Cast<BoundAggregateExpression>();
184
- AggregateInputData aggr_input_data(aggr.bind_info.get(), Allocator::DefaultAllocator());
185
+ ArenaAllocator allocator(Allocator::DefaultAllocator());
186
+ AggregateInputData aggr_input_data(aggr.bind_info.get(), allocator);
185
187
 
186
188
  D_ASSERT(aggr.function.update);
187
189