duckdb 0.8.2-dev11.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 (381) hide show
  1. package/binding.gyp +14 -12
  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 +5 -7
  20. package/src/duckdb/extension/json/include/json_common.hpp +47 -231
  21. package/src/duckdb/extension/json/include/json_executors.hpp +49 -13
  22. package/src/duckdb/extension/json/include/json_functions.hpp +2 -1
  23. package/src/duckdb/extension/json/json_common.cpp +272 -40
  24. package/src/duckdb/extension/json/json_functions/json_structure.cpp +1 -1
  25. package/src/duckdb/extension/json/json_functions/json_transform.cpp +17 -37
  26. package/src/duckdb/extension/json/json_functions/json_type.cpp +1 -1
  27. package/src/duckdb/extension/json/json_functions.cpp +24 -24
  28. package/src/duckdb/extension/json/json_scan.cpp +3 -6
  29. package/src/duckdb/extension/parquet/column_reader.cpp +19 -21
  30. package/src/duckdb/extension/parquet/column_writer.cpp +77 -61
  31. package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +2 -2
  32. package/src/duckdb/extension/parquet/include/column_reader.hpp +14 -16
  33. package/src/duckdb/extension/parquet/include/column_writer.hpp +9 -7
  34. package/src/duckdb/extension/parquet/include/list_column_reader.hpp +2 -2
  35. package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +3 -3
  36. package/src/duckdb/extension/parquet/include/parquet_decimal_utils.hpp +3 -3
  37. package/src/duckdb/extension/parquet/include/parquet_file_metadata_cache.hpp +2 -2
  38. package/src/duckdb/extension/parquet/include/parquet_statistics.hpp +2 -2
  39. package/src/duckdb/extension/parquet/include/parquet_support.hpp +9 -11
  40. package/src/duckdb/extension/parquet/include/parquet_writer.hpp +24 -5
  41. package/src/duckdb/extension/parquet/include/string_column_reader.hpp +1 -1
  42. package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +2 -3
  43. package/src/duckdb/extension/parquet/include/zstd_file_system.hpp +2 -2
  44. package/src/duckdb/extension/parquet/parquet_extension.cpp +191 -19
  45. package/src/duckdb/extension/parquet/parquet_reader.cpp +5 -5
  46. package/src/duckdb/extension/parquet/parquet_statistics.cpp +7 -6
  47. package/src/duckdb/extension/parquet/parquet_writer.cpp +79 -16
  48. package/src/duckdb/extension/parquet/zstd_file_system.cpp +2 -2
  49. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +1 -1
  50. package/src/duckdb/src/catalog/default/default_functions.cpp +16 -0
  51. package/src/duckdb/src/common/adbc/adbc.cpp +75 -10
  52. package/src/duckdb/src/common/adbc/driver_manager.cpp +6 -11
  53. package/src/duckdb/src/common/allocator.cpp +14 -2
  54. package/src/duckdb/src/common/arrow/arrow_appender.cpp +5 -10
  55. package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +0 -12
  56. package/src/duckdb/src/common/assert.cpp +3 -0
  57. package/src/duckdb/src/common/enum_util.cpp +42 -5
  58. package/src/duckdb/src/common/enums/logical_operator_type.cpp +4 -0
  59. package/src/duckdb/src/common/enums/optimizer_type.cpp +2 -0
  60. package/src/duckdb/src/common/enums/physical_operator_type.cpp +4 -0
  61. package/src/duckdb/src/common/file_system.cpp +15 -0
  62. package/src/duckdb/src/common/local_file_system.cpp +1 -1
  63. package/src/duckdb/src/common/multi_file_reader.cpp +181 -18
  64. package/src/duckdb/src/common/radix_partitioning.cpp +27 -9
  65. package/src/duckdb/src/common/row_operations/row_external.cpp +1 -1
  66. package/src/duckdb/src/common/sort/merge_sorter.cpp +9 -16
  67. package/src/duckdb/src/common/sort/partition_state.cpp +44 -11
  68. package/src/duckdb/src/common/types/batched_data_collection.cpp +7 -2
  69. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +9 -6
  70. package/src/duckdb/src/common/types/column/column_data_collection.cpp +17 -2
  71. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +15 -6
  72. package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
  73. package/src/duckdb/src/common/types/data_chunk.cpp +2 -2
  74. package/src/duckdb/src/common/types/date.cpp +9 -0
  75. package/src/duckdb/src/common/types/list_segment.cpp +24 -74
  76. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +3 -9
  77. package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +2 -0
  78. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +2 -2
  79. package/src/duckdb/src/common/types/validity_mask.cpp +33 -0
  80. package/src/duckdb/src/common/types/vector.cpp +15 -14
  81. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +6 -4
  82. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +2 -2
  83. package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +4 -4
  84. package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +4 -4
  85. package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +5 -4
  86. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +8 -8
  87. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +4 -3
  88. package/src/duckdb/src/core_functions/function_list.cpp +4 -2
  89. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +208 -42
  90. package/src/duckdb/src/core_functions/scalar/date/epoch.cpp +0 -17
  91. package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +19 -4
  92. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +4 -2
  93. package/src/duckdb/src/execution/aggregate_hashtable.cpp +34 -18
  94. package/src/duckdb/src/execution/index/art/art.cpp +149 -139
  95. package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +1 -1
  96. package/src/duckdb/src/execution/index/art/iterator.cpp +129 -207
  97. package/src/duckdb/src/execution/index/art/leaf.cpp +8 -37
  98. package/src/duckdb/src/execution/index/art/node.cpp +113 -120
  99. package/src/duckdb/src/execution/index/art/node16.cpp +1 -10
  100. package/src/duckdb/src/execution/index/art/node256.cpp +1 -9
  101. package/src/duckdb/src/execution/index/art/node4.cpp +12 -13
  102. package/src/duckdb/src/execution/index/art/node48.cpp +1 -11
  103. package/src/duckdb/src/execution/index/art/prefix.cpp +228 -350
  104. package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
  105. package/src/duckdb/src/execution/operator/aggregate/aggregate_object.cpp +1 -0
  106. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +8 -3
  107. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +32 -22
  108. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +512 -300
  109. package/src/duckdb/src/execution/operator/helper/physical_batch_collector.cpp +4 -3
  110. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +5 -5
  111. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +413 -282
  112. package/src/duckdb/src/execution/operator/join/physical_comparison_join.cpp +1 -1
  113. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +21 -10
  114. package/src/duckdb/src/execution/operator/join/physical_join.cpp +1 -1
  115. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +22 -3
  116. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +100 -13
  117. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +20 -0
  118. package/src/duckdb/src/execution/operator/persistent/csv_rejects_table.cpp +48 -0
  119. package/src/duckdb/src/execution/operator/persistent/parallel_csv_reader.cpp +2 -3
  120. package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +6 -4
  121. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +3 -2
  122. package/src/duckdb/src/execution/operator/persistent/physical_fixed_batch_copy.cpp +3 -3
  123. package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -1
  124. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +19 -0
  125. package/src/duckdb/src/execution/operator/set/physical_cte.cpp +160 -0
  126. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +15 -5
  127. package/src/duckdb/src/execution/partitionable_hashtable.cpp +41 -6
  128. package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +30 -5
  129. package/src/duckdb/src/execution/physical_operator.cpp +17 -14
  130. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +43 -10
  131. package/src/duckdb/src/execution/physical_plan/plan_cte.cpp +33 -0
  132. package/src/duckdb/src/execution/physical_plan/plan_recursive_cte.cpp +25 -4
  133. package/src/duckdb/src/execution/physical_plan_generator.cpp +4 -0
  134. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +290 -43
  135. package/src/duckdb/src/execution/window_segment_tree.cpp +286 -129
  136. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +2 -1
  137. package/src/duckdb/src/function/function.cpp +2 -0
  138. package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +212 -0
  139. package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +249 -0
  140. package/src/duckdb/src/function/scalar/compressed_materialization_functions.cpp +29 -0
  141. package/src/duckdb/src/function/scalar/list/list_resize.cpp +162 -0
  142. package/src/duckdb/src/function/scalar/nested_functions.cpp +1 -0
  143. package/src/duckdb/src/function/scalar/string/like.cpp +12 -4
  144. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +12 -5
  145. package/src/duckdb/src/function/table/copy_csv.cpp +8 -1
  146. package/src/duckdb/src/function/table/read_csv.cpp +100 -17
  147. package/src/duckdb/src/function/table/system/test_all_types.cpp +38 -18
  148. package/src/duckdb/src/function/table/table_scan.cpp +9 -0
  149. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  150. package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +1 -0
  151. package/src/duckdb/src/include/duckdb/common/allocator.hpp +2 -0
  152. package/src/duckdb/src/include/duckdb/common/bswap.hpp +42 -0
  153. package/src/duckdb/src/include/duckdb/common/enum_util.hpp +8 -0
  154. package/src/duckdb/src/include/duckdb/common/enums/cte_materialize.hpp +21 -0
  155. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +2 -1
  156. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +2 -0
  157. package/src/duckdb/src/include/duckdb/common/enums/optimizer_type.hpp +2 -0
  158. package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +2 -0
  159. package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +6 -4
  160. package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +10 -42
  161. package/src/duckdb/src/include/duckdb/common/mutex.hpp +3 -0
  162. package/src/duckdb/src/include/duckdb/common/radix.hpp +9 -20
  163. package/src/duckdb/src/include/duckdb/common/radix_partitioning.hpp +6 -21
  164. package/src/duckdb/src/include/duckdb/common/row_operations/row_operations.hpp +3 -3
  165. package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +13 -0
  166. package/src/duckdb/src/include/duckdb/common/types/batched_data_collection.hpp +3 -1
  167. package/src/duckdb/src/include/duckdb/common/types/column/column_data_allocator.hpp +1 -1
  168. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +6 -1
  169. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_segment.hpp +1 -1
  170. package/src/duckdb/src/include/duckdb/common/types/column/column_data_scan_states.hpp +3 -1
  171. package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +1 -1
  172. package/src/duckdb/src/include/duckdb/common/types/date.hpp +7 -5
  173. package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +6 -8
  174. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +0 -1
  175. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +1 -0
  176. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_states.hpp +3 -0
  177. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +9 -0
  178. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +4 -4
  179. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +3 -1
  180. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +1 -0
  181. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +3 -3
  182. package/src/duckdb/src/include/duckdb/core_functions/scalar/date_functions.hpp +24 -6
  183. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +21 -3
  184. package/src/duckdb/src/include/duckdb/execution/executor.hpp +3 -0
  185. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +4 -5
  186. package/src/duckdb/src/include/duckdb/execution/index/art/iterator.hpp +31 -27
  187. package/src/duckdb/src/include/duckdb/execution/index/art/leaf.hpp +6 -14
  188. package/src/duckdb/src/include/duckdb/execution/index/art/node.hpp +4 -10
  189. package/src/duckdb/src/include/duckdb/execution/index/art/node16.hpp +3 -6
  190. package/src/duckdb/src/include/duckdb/execution/index/art/node256.hpp +3 -6
  191. package/src/duckdb/src/include/duckdb/execution/index/art/node4.hpp +5 -8
  192. package/src/duckdb/src/include/duckdb/execution/index/art/node48.hpp +3 -6
  193. package/src/duckdb/src/include/duckdb/execution/index/art/prefix.hpp +63 -52
  194. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_asof_join.hpp +2 -10
  195. package/src/duckdb/src/include/duckdb/execution/operator/persistent/base_csv_reader.hpp +1 -1
  196. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_line_info.hpp +4 -3
  197. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +8 -1
  198. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_rejects_table.hpp +36 -0
  199. package/src/duckdb/src/include/duckdb/execution/operator/persistent/parallel_csv_reader.hpp +1 -1
  200. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_column_data_scan.hpp +10 -0
  201. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_cte.hpp +62 -0
  202. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_recursive_cte.hpp +8 -2
  203. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +5 -1
  204. package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +3 -0
  205. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +3 -0
  206. package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +10 -3
  207. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +51 -40
  208. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +1 -1
  209. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +2 -2
  210. package/src/duckdb/src/include/duckdb/function/built_in_functions.hpp +1 -0
  211. package/src/duckdb/src/include/duckdb/function/scalar/compressed_materialization_functions.hpp +49 -0
  212. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +1 -1
  213. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +5 -0
  214. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +2 -0
  215. package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +1 -1
  216. package/src/duckdb/src/include/duckdb/main/client_config.hpp +3 -0
  217. package/src/duckdb/src/include/duckdb/main/config.hpp +2 -0
  218. package/src/duckdb/src/include/duckdb/main/settings.hpp +21 -1
  219. package/src/duckdb/src/include/duckdb/optimizer/column_binding_replacer.hpp +47 -0
  220. package/src/duckdb/src/include/duckdb/optimizer/compressed_materialization.hpp +132 -0
  221. package/src/duckdb/src/include/duckdb/optimizer/deliminator.hpp +13 -16
  222. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +3 -0
  223. package/src/duckdb/src/include/duckdb/optimizer/join_order/estimated_properties.hpp +10 -1
  224. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_order_optimizer.hpp +1 -1
  225. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_relation.hpp +1 -1
  226. package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph.hpp +3 -0
  227. package/src/duckdb/src/include/duckdb/optimizer/matcher/set_matcher.hpp +13 -0
  228. package/src/duckdb/src/include/duckdb/optimizer/optimizer.hpp +3 -0
  229. package/src/duckdb/src/include/duckdb/optimizer/remove_duplicate_groups.hpp +40 -0
  230. package/src/duckdb/src/include/duckdb/optimizer/statistics_propagator.hpp +11 -3
  231. package/src/duckdb/src/include/duckdb/optimizer/topn_optimizer.hpp +2 -0
  232. package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +2 -0
  233. package/src/duckdb/src/include/duckdb/parallel/task_scheduler.hpp +5 -0
  234. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +2 -0
  235. package/src/duckdb/src/include/duckdb/parser/query_node/cte_node.hpp +54 -0
  236. package/src/duckdb/src/include/duckdb/parser/query_node/list.hpp +1 -0
  237. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -1
  238. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +1 -0
  239. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +15 -8
  240. package/src/duckdb/src/include/duckdb/planner/binder.hpp +8 -5
  241. package/src/duckdb/src/include/duckdb/planner/bound_tokens.hpp +1 -0
  242. package/src/duckdb/src/include/duckdb/planner/column_binding.hpp +4 -0
  243. package/src/duckdb/src/include/duckdb/planner/expression_binder/lateral_binder.hpp +0 -2
  244. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  245. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +2 -1
  246. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -5
  247. package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +7 -2
  248. package/src/duckdb/src/include/duckdb/planner/operator/logical_dependent_join.hpp +43 -0
  249. package/src/duckdb/src/include/duckdb/planner/operator/logical_materialized_cte.hpp +49 -0
  250. package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +5 -4
  251. package/src/duckdb/src/include/duckdb/planner/query_node/bound_cte_node.hpp +44 -0
  252. package/src/duckdb/src/include/duckdb/planner/query_node/list.hpp +1 -0
  253. package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +2 -2
  254. package/src/duckdb/src/include/duckdb/planner/subquery/has_correlated_expressions.hpp +4 -1
  255. package/src/duckdb/src/include/duckdb/planner/subquery/recursive_dependent_join_planner.hpp +31 -0
  256. package/src/duckdb/src/include/duckdb/planner/subquery/rewrite_correlated_expressions.hpp +8 -2
  257. package/src/duckdb/src/include/duckdb/planner/tableref/bound_cteref.hpp +5 -2
  258. package/src/duckdb/src/include/duckdb/storage/arena_allocator.hpp +1 -1
  259. package/src/duckdb/src/include/duckdb/storage/block_manager.hpp +3 -3
  260. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +1 -1
  261. package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +22 -0
  262. package/src/duckdb/src/include/duckdb/storage/single_file_block_manager.hpp +2 -0
  263. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +4 -0
  264. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +3 -0
  265. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +3 -2
  266. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +1 -3
  267. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -3
  268. package/src/duckdb/src/include/duckdb.h +28 -0
  269. package/src/duckdb/src/main/capi/arrow-c.cpp +155 -1
  270. package/src/duckdb/src/main/config.cpp +2 -0
  271. package/src/duckdb/src/main/extension/extension_helper.cpp +96 -89
  272. package/src/duckdb/src/main/settings/settings.cpp +40 -18
  273. package/src/duckdb/src/optimizer/column_binding_replacer.cpp +43 -0
  274. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -2
  275. package/src/duckdb/src/optimizer/compressed_materialization/compress_aggregate.cpp +140 -0
  276. package/src/duckdb/src/optimizer/compressed_materialization/compress_distinct.cpp +42 -0
  277. package/src/duckdb/src/optimizer/compressed_materialization/compress_order.cpp +65 -0
  278. package/src/duckdb/src/optimizer/compressed_materialization.cpp +478 -0
  279. package/src/duckdb/src/optimizer/deliminator.cpp +176 -321
  280. package/src/duckdb/src/optimizer/filter_pushdown.cpp +9 -0
  281. package/src/duckdb/src/optimizer/join_order/estimated_properties.cpp +7 -0
  282. package/src/duckdb/src/optimizer/join_order/join_node.cpp +2 -2
  283. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +113 -82
  284. package/src/duckdb/src/optimizer/join_order/join_relation_set.cpp +2 -6
  285. package/src/duckdb/src/optimizer/join_order/query_graph.cpp +22 -14
  286. package/src/duckdb/src/optimizer/optimizer.cpp +51 -14
  287. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +5 -5
  288. package/src/duckdb/src/optimizer/pushdown/pushdown_get.cpp +0 -1
  289. package/src/duckdb/src/optimizer/remove_duplicate_groups.cpp +127 -0
  290. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +4 -0
  291. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +154 -15
  292. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +65 -8
  293. package/src/duckdb/src/optimizer/statistics/operator/propagate_order.cpp +1 -1
  294. package/src/duckdb/src/optimizer/statistics_propagator.cpp +7 -5
  295. package/src/duckdb/src/optimizer/topn_optimizer.cpp +20 -10
  296. package/src/duckdb/src/parallel/executor.cpp +15 -0
  297. package/src/duckdb/src/parallel/pipeline_executor.cpp +7 -6
  298. package/src/duckdb/src/parallel/task_scheduler.cpp +11 -2
  299. package/src/duckdb/src/parser/common_table_expression_info.cpp +2 -0
  300. package/src/duckdb/src/parser/expression/lambda_expression.cpp +1 -1
  301. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +7 -0
  302. package/src/duckdb/src/parser/query_node/cte_node.cpp +75 -0
  303. package/src/duckdb/src/parser/query_node.cpp +18 -1
  304. package/src/duckdb/src/parser/tableref/joinref.cpp +3 -0
  305. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +55 -3
  306. package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +2 -0
  307. package/src/duckdb/src/parser/transform/expression/transform_multi_assign_reference.cpp +44 -0
  308. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +19 -1
  309. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +13 -0
  310. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +6 -1
  311. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +6 -1
  312. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -2
  313. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +14 -11
  314. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +11 -2
  315. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +6 -1
  316. package/src/duckdb/src/parser/transformer.cpp +15 -0
  317. package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +64 -0
  318. package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +26 -0
  319. package/src/duckdb/src/planner/binder/query_node/plan_recursive_cte_node.cpp +5 -5
  320. package/src/duckdb/src/planner/binder/query_node/plan_setop.cpp +4 -4
  321. package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +32 -29
  322. package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +11 -2
  323. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +32 -5
  324. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +116 -50
  325. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -1
  326. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -26
  327. package/src/duckdb/src/planner/binder/tableref/plan_subqueryref.cpp +3 -3
  328. package/src/duckdb/src/planner/binder.cpp +5 -0
  329. package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +4 -31
  330. package/src/duckdb/src/planner/expression_binder.cpp +3 -0
  331. package/src/duckdb/src/planner/expression_iterator.cpp +6 -0
  332. package/src/duckdb/src/planner/logical_operator.cpp +5 -0
  333. package/src/duckdb/src/planner/logical_operator_visitor.cpp +2 -0
  334. package/src/duckdb/src/planner/operator/logical_cteref.cpp +3 -1
  335. package/src/duckdb/src/planner/operator/logical_dependent_join.cpp +26 -0
  336. package/src/duckdb/src/planner/operator/logical_materialized_cte.cpp +21 -0
  337. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +90 -38
  338. package/src/duckdb/src/planner/subquery/has_correlated_expressions.cpp +22 -7
  339. package/src/duckdb/src/planner/subquery/rewrite_correlated_expressions.cpp +65 -7
  340. package/src/duckdb/src/storage/arena_allocator.cpp +1 -2
  341. package/src/duckdb/src/storage/buffer/block_manager.cpp +3 -0
  342. package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -0
  343. package/src/duckdb/src/storage/data_table.cpp +1 -1
  344. package/src/duckdb/src/storage/local_storage.cpp +3 -3
  345. package/src/duckdb/src/storage/single_file_block_manager.cpp +23 -0
  346. package/src/duckdb/src/storage/statistics/string_stats.cpp +21 -2
  347. package/src/duckdb/src/storage/storage_info.cpp +1 -1
  348. package/src/duckdb/src/storage/storage_manager.cpp +7 -2
  349. package/src/duckdb/src/storage/table/chunk_info.cpp +17 -0
  350. package/src/duckdb/src/storage/table/row_group.cpp +25 -9
  351. package/src/duckdb/src/storage/table/row_group_collection.cpp +19 -18
  352. package/src/duckdb/third_party/concurrentqueue/concurrentqueue.h +2 -2
  353. package/src/duckdb/third_party/concurrentqueue/lightweightsemaphore.h +76 -0
  354. package/src/duckdb/third_party/fast_float/fast_float/fast_float.h +2 -0
  355. package/src/duckdb/third_party/httplib/httplib.hpp +10 -1
  356. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +9 -0
  357. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +2 -1
  358. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +12487 -12331
  359. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +5 -5
  360. package/src/duckdb/ub_src_execution_index_art.cpp +0 -2
  361. package/src/duckdb/ub_src_execution_operator_persistent.cpp +2 -0
  362. package/src/duckdb/ub_src_execution_operator_set.cpp +2 -0
  363. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  364. package/src/duckdb/ub_src_function_scalar.cpp +2 -0
  365. package/src/duckdb/ub_src_function_scalar_compressed_materialization.cpp +4 -0
  366. package/src/duckdb/ub_src_function_scalar_list.cpp +2 -0
  367. package/src/duckdb/ub_src_optimizer.cpp +6 -0
  368. package/src/duckdb/ub_src_optimizer_compressed_materialization.cpp +6 -0
  369. package/src/duckdb/ub_src_optimizer_statistics_expression.cpp +0 -2
  370. package/src/duckdb/ub_src_parser_query_node.cpp +2 -0
  371. package/src/duckdb/ub_src_parser_transform_expression.cpp +2 -0
  372. package/src/duckdb/ub_src_planner_binder_query_node.cpp +4 -0
  373. package/src/duckdb/ub_src_planner_operator.cpp +4 -0
  374. package/src/duckdb_node.hpp +1 -0
  375. package/src/statement.cpp +103 -4
  376. package/test/columns.test.ts +243 -0
  377. package/test/test_all_types.test.ts +233 -0
  378. package/tsconfig.json +1 -0
  379. package/src/duckdb/src/execution/index/art/prefix_segment.cpp +0 -42
  380. package/src/duckdb/src/include/duckdb/execution/index/art/prefix_segment.hpp +0 -40
  381. package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +0 -118
package/binding.gyp CHANGED
@@ -75,8 +75,9 @@
75
75
  "src/duckdb/ub_src_function.cpp",
76
76
  "src/duckdb/ub_src_function_cast.cpp",
77
77
  "src/duckdb/ub_src_function_pragma.cpp",
78
- "src/duckdb/ub_src_function_scalar_generic.cpp",
78
+ "src/duckdb/ub_src_function_scalar_compressed_materialization.cpp",
79
79
  "src/duckdb/ub_src_function_scalar.cpp",
80
+ "src/duckdb/ub_src_function_scalar_generic.cpp",
80
81
  "src/duckdb/ub_src_function_scalar_list.cpp",
81
82
  "src/duckdb/ub_src_function_scalar_operators.cpp",
82
83
  "src/duckdb/ub_src_function_scalar_sequence.cpp",
@@ -94,6 +95,7 @@
94
95
  "src/duckdb/ub_src_main_relation.cpp",
95
96
  "src/duckdb/ub_src_main_settings.cpp",
96
97
  "src/duckdb/ub_src_optimizer.cpp",
98
+ "src/duckdb/ub_src_optimizer_compressed_materialization.cpp",
97
99
  "src/duckdb/ub_src_optimizer_join_order.cpp",
98
100
  "src/duckdb/ub_src_optimizer_matcher.cpp",
99
101
  "src/duckdb/ub_src_optimizer_pullup.cpp",
@@ -237,18 +239,18 @@
237
239
  "src/duckdb/third_party/zstd/compress/zstd_lazy.cpp",
238
240
  "src/duckdb/third_party/zstd/compress/zstd_ldm.cpp",
239
241
  "src/duckdb/third_party/zstd/compress/zstd_opt.cpp",
240
- "src/duckdb/extension/icu/./icu_extension.cpp",
241
- "src/duckdb/extension/icu/./icu-list-range.cpp",
242
- "src/duckdb/extension/icu/./icu-datefunc.cpp",
243
242
  "src/duckdb/extension/icu/./icu-datepart.cpp",
244
- "src/duckdb/extension/icu/./icu-datetrunc.cpp",
243
+ "src/duckdb/extension/icu/./icu-timezone.cpp",
244
+ "src/duckdb/extension/icu/./icu-makedate.cpp",
245
245
  "src/duckdb/extension/icu/./icu-table-range.cpp",
246
+ "src/duckdb/extension/icu/./icu-datefunc.cpp",
247
+ "src/duckdb/extension/icu/./icu-list-range.cpp",
246
248
  "src/duckdb/extension/icu/./icu-dateadd.cpp",
247
- "src/duckdb/extension/icu/./icu-strptime.cpp",
248
249
  "src/duckdb/extension/icu/./icu-datesub.cpp",
249
- "src/duckdb/extension/icu/./icu-makedate.cpp",
250
- "src/duckdb/extension/icu/./icu-timezone.cpp",
251
250
  "src/duckdb/extension/icu/./icu-timebucket.cpp",
251
+ "src/duckdb/extension/icu/./icu-strptime.cpp",
252
+ "src/duckdb/extension/icu/./icu_extension.cpp",
253
+ "src/duckdb/extension/icu/./icu-datetrunc.cpp",
252
254
  "src/duckdb/ub_extension_icu_third_party_icu_common.cpp",
253
255
  "src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp",
254
256
  "src/duckdb/extension/icu/third_party/icu/stubdata/stubdata.cpp",
@@ -298,10 +300,10 @@
298
300
  ],
299
301
  "defines": [
300
302
  "NAPI_DISABLE_CPP_EXCEPTIONS=1",
301
- "NAPI_VERSION=5",
302
- "BUILD_PARQUET_EXTENSION",
303
- "BUILD_ICU_EXTENSION",
304
- "BUILD_JSON_EXTENSION"
303
+ "NAPI_VERSION=6",
304
+ "DUCKDB_EXTENSION_PARQUET_LINKED",
305
+ "DUCKDB_EXTENSION_ICU_LINKED",
306
+ "DUCKDB_EXTENSION_JSON_LINKED"
305
307
  ],
306
308
  "cflags_cc": [
307
309
  "-frtti",
package/binding.gyp.in CHANGED
@@ -17,7 +17,7 @@
17
17
  ],
18
18
  "defines": [
19
19
  "NAPI_DISABLE_CPP_EXCEPTIONS=1",
20
- "NAPI_VERSION=5",
20
+ "NAPI_VERSION=6",
21
21
  "${DEFINES}"
22
22
  ],
23
23
  "cflags_cc": [
package/configure.py CHANGED
@@ -20,7 +20,7 @@ scripts_dir = 'scripts'
20
20
  sys.path.append(scripts_dir)
21
21
  import package_build
22
22
 
23
- defines = ['BUILD_{}_EXTENSION'.format(ext.upper()) for ext in extensions]
23
+ defines = ['DUCKDB_EXTENSION_{}_LINKED'.format(ext.upper()) for ext in extensions]
24
24
 
25
25
  if os.environ.get('DUCKDB_NODE_BUILD_CACHE') == '1' and os.path.isfile(cache_file):
26
26
  with open(cache_file, 'rb') as f:
@@ -0,0 +1,10 @@
1
+ ################################################################################
2
+ # NodeJS DuckDB extension config
3
+ ################################################################################
4
+ #
5
+ # This is the default extension configuration for NodeJS builds. Basically it means that all these extensions are
6
+ # "baked in" to the NodeJS binaries Note that the configuration here is only when building Node using the main
7
+ # CMakeLists.txt file with the `BUILD_R` variable.
8
+ # TODO: unify this by making setup.py also use this configuration, making this the config for all Node builds
9
+ duckdb_extension_load(json)
10
+ duckdb_extension_load(icu)
package/lib/duckdb.d.ts CHANGED
@@ -171,6 +171,63 @@ export class Database {
171
171
  ): Promise<void>;
172
172
  }
173
173
 
174
+ export type GenericTypeInfo = {
175
+ id: string,
176
+ sql_type: string,
177
+ alias?: string,
178
+ }
179
+
180
+ export type StructTypeInfo = {
181
+ id: "STRUCT",
182
+ alias?: string,
183
+ sql_type: string,
184
+ children: TypeInfoChildren,
185
+ }
186
+
187
+ export type ListTypeInfo = {
188
+ id: "LIST",
189
+ alias?: string,
190
+ sql_type: string,
191
+ child: TypeInfo,
192
+ }
193
+
194
+ export type MapTypeInfo = {
195
+ id: "MAP",
196
+ alias?: string,
197
+ sql_type: string,
198
+ key: TypeInfo,
199
+ value: TypeInfo,
200
+ }
201
+
202
+ export type UnionTypeInfo = {
203
+ id: "UNION",
204
+ alias?: string,
205
+ sql_type: string,
206
+ children: TypeInfoChildren,
207
+ }
208
+
209
+ export type DecimalTypeInfo = {
210
+ id: "DECIMAL",
211
+ alias?: string,
212
+ sql_type: string,
213
+ width: number,
214
+ scale: number,
215
+ }
216
+
217
+ export type EnumTypeInfo = {
218
+ id: "ENUM",
219
+ alias?: string,
220
+ sql_type: string,
221
+ name: string,
222
+ values: string[],
223
+ }
224
+
225
+ export type TypeInfoChildren = { name: string, type: TypeInfo }[];
226
+
227
+ export type TypeInfo = GenericTypeInfo | StructTypeInfo | ListTypeInfo | MapTypeInfo | UnionTypeInfo | DecimalTypeInfo | EnumTypeInfo;
228
+
229
+ export type ColumnInfo = { name: string, type: TypeInfo };
230
+
174
231
  export class Statement {
175
232
  sql: string;
176
233
 
@@ -185,6 +242,8 @@ export class Statement {
185
242
  finalize(callback?: Callback<void>): void;
186
243
 
187
244
  run(...args: [...any, Callback<void>] | any[]): Statement;
245
+
246
+ columns(): ColumnInfo[];
188
247
  }
189
248
 
190
249
  export const ERROR: number;
package/lib/duckdb.js CHANGED
@@ -689,6 +689,27 @@ Statement.prototype.stream;
689
689
  */
690
690
  Statement.prototype.sql;
691
691
 
692
+ /**
693
+ * @method
694
+ * @return {ColumnInfo[]} - Array of column names and types
695
+ */
696
+ Statement.prototype.columns;
697
+
698
+ /**
699
+ * @typedef ColumnInfo
700
+ * @type {object}
701
+ * @property {string} name - Column name
702
+ * @property {TypeInfo} type - Column type
703
+ */
704
+
705
+ /**
706
+ * @typedef TypeInfo
707
+ * @type {object}
708
+ * @property {string} id - Type ID
709
+ * @property {string} [alias] - SQL type alias
710
+ * @property {string} sql_type - SQL type name
711
+ */
712
+
692
713
  /**
693
714
  * @typedef DuckDbError
694
715
  * @type {object}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "duckdb",
3
3
  "main": "./lib/duckdb.js",
4
4
  "types": "./lib/duckdb.d.ts",
5
- "version": "0.8.2-dev11.0",
5
+ "version": "0.8.2-dev1182.0",
6
6
  "description": "DuckDB node.js API",
7
7
  "gypfile": true,
8
8
  "dependencies": {
@@ -198,7 +198,7 @@ struct ICUDateAdd : public ICUDateFunc {
198
198
  D_ASSERT(args.ColumnCount() == 1);
199
199
 
200
200
  auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
201
- auto &info = (BindData &)*func_expr.bind_info;
201
+ auto &info = func_expr.bind_info->Cast<BindData>();
202
202
  CalendarPtr calendar(info.calendar->clone());
203
203
 
204
204
  auto end_date = Timestamp::GetCurrentTimestamp();
@@ -218,7 +218,7 @@ struct ICUDateAdd : public ICUDateFunc {
218
218
  D_ASSERT(args.ColumnCount() == 2);
219
219
 
220
220
  auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
221
- auto &info = (BindData &)*func_expr.bind_info;
221
+ auto &info = func_expr.bind_info->Cast<BindData>();
222
222
  CalendarPtr calendar(info.calendar->clone());
223
223
 
224
224
  BinaryExecutor::Execute<TA, TB, TR>(args.data[0], args.data[1], result, args.size(), [&](TA left, TB right) {
@@ -37,7 +37,7 @@ ICUDateFunc::BindData::BindData(ClientContext &context) {
37
37
  }
38
38
 
39
39
  bool ICUDateFunc::BindData::Equals(const FunctionData &other_p) const {
40
- auto &other = (const ICUDateFunc::BindData &)other_p;
40
+ auto &other = other_p.Cast<const BindData>();
41
41
  return *calendar == *other.calendar;
42
42
  }
43
43
 
@@ -271,7 +271,7 @@ struct ICUDatePart : public ICUDateFunc {
271
271
  auto &date_arg = args.data[1];
272
272
 
273
273
  auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
274
- auto &info = (BIND_TYPE &)*func_expr.bind_info;
274
+ auto &info = func_expr.bind_info->Cast<BIND_TYPE>();
275
275
  CalendarPtr calendar_ptr(info.calendar->clone());
276
276
  auto calendar = calendar_ptr.get();
277
277
 
@@ -293,7 +293,7 @@ struct ICUDatePart : public ICUDateFunc {
293
293
  static void StructFunction(DataChunk &args, ExpressionState &state, Vector &result) {
294
294
  using BIND_TYPE = BindAdapterData<int64_t>;
295
295
  auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
296
- auto &info = (BIND_TYPE &)*func_expr.bind_info;
296
+ auto &info = func_expr.bind_info->Cast<BIND_TYPE>();
297
297
  CalendarPtr calendar_ptr(info.calendar->clone());
298
298
  auto calendar = calendar_ptr.get();
299
299
 
@@ -96,7 +96,7 @@ struct ICUCalendarSub : public ICUDateFunc {
96
96
  auto &enddate_arg = args.data[2];
97
97
 
98
98
  auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
99
- auto &info = (BindData &)*func_expr.bind_info;
99
+ auto &info = func_expr.bind_info->Cast<BindData>();
100
100
  CalendarPtr calendar(info.calendar->clone());
101
101
 
102
102
  if (part_arg.GetVectorType() == VectorType::CONSTANT_VECTOR) {
@@ -218,7 +218,7 @@ struct ICUCalendarDiff : public ICUDateFunc {
218
218
  auto &enddate_arg = args.data[2];
219
219
 
220
220
  auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
221
- auto &info = (BindData &)*func_expr.bind_info;
221
+ auto &info = func_expr.bind_info->Cast<BindData>();
222
222
  CalendarPtr calendar_ptr(info.calendar->clone());
223
223
  auto calendar = calendar_ptr.get();
224
224
 
@@ -99,7 +99,7 @@ struct ICUDateTrunc : public ICUDateFunc {
99
99
  auto &date_arg = args.data[1];
100
100
 
101
101
  auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
102
- auto &info = (BindData &)*func_expr.bind_info;
102
+ auto &info = func_expr.bind_info->Cast<BindData>();
103
103
  CalendarPtr calendar(info.calendar->clone());
104
104
 
105
105
  if (part_arg.GetVectorType() == VectorType::CONSTANT_VECTOR) {
@@ -128,7 +128,7 @@ struct ICUListRange : public ICUDateFunc {
128
128
  D_ASSERT(args.ColumnCount() == 3);
129
129
 
130
130
  auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
131
- auto &bind_info = (BindData &)*func_expr.bind_info;
131
+ auto &bind_info = func_expr.bind_info->Cast<BindData>();
132
132
  CalendarPtr calendar_ptr(bind_info.calendar->clone());
133
133
  auto calendar = calendar_ptr.get();
134
134
 
@@ -85,6 +85,12 @@ struct ICUMakeTimestampTZFunc : public ICUDateFunc {
85
85
  return GetTime(calendar, micros);
86
86
  }
87
87
 
88
+ template <typename T>
89
+ static void FromMicros(DataChunk &input, ExpressionState &state, Vector &result) {
90
+ UnaryExecutor::Execute<T, timestamp_t>(input.data[0], result, input.size(),
91
+ [&](T micros) { return timestamp_t(micros); });
92
+ }
93
+
88
94
  template <typename T>
89
95
  static void Execute(DataChunk &input, ExpressionState &state, Vector &result) {
90
96
  auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
@@ -138,6 +144,7 @@ struct ICUMakeTimestampTZFunc : public ICUDateFunc {
138
144
  ScalarFunctionSet set(name);
139
145
  set.AddFunction(GetSenaryFunction<int64_t>(LogicalType::BIGINT));
140
146
  set.AddFunction(GetSeptenaryFunction<int64_t>(LogicalType::BIGINT));
147
+ set.AddFunction(ScalarFunction({LogicalType::BIGINT}, LogicalType::TIMESTAMP_TZ, FromMicros<int64_t>));
141
148
 
142
149
  CreateScalarFunctionInfo func_info(set);
143
150
  auto &catalog = Catalog::GetSystemCatalog(context);
@@ -249,8 +249,8 @@ struct ICUStrptime : public ICUDateFunc {
249
249
 
250
250
  static bool CastFromVarchar(Vector &source, Vector &result, idx_t count, CastParameters &parameters) {
251
251
  auto &cast_data = parameters.cast_data->Cast<CastData>();
252
- auto info = (BindData *)cast_data.info.get();
253
- CalendarPtr cal(info->calendar->clone());
252
+ auto &info = cast_data.info->Cast<BindData>();
253
+ CalendarPtr cal(info.calendar->clone());
254
254
 
255
255
  UnaryExecutor::ExecuteWithNulls<string_t, timestamp_t>(
256
256
  source, result, count, [&](string_t input, ValidityMask &mask, idx_t idx) {
@@ -476,8 +476,8 @@ struct ICUStrftime : public ICUDateFunc {
476
476
 
477
477
  static bool CastToVarchar(Vector &source, Vector &result, idx_t count, CastParameters &parameters) {
478
478
  auto &cast_data = parameters.cast_data->Cast<CastData>();
479
- auto info = (BindData *)cast_data.info.get();
480
- CalendarPtr calendar(info->calendar->clone());
479
+ auto &info = cast_data.info->Cast<BindData>();
480
+ CalendarPtr calendar(info.calendar->clone());
481
481
 
482
482
  UnaryExecutor::ExecuteWithNulls<timestamp_t, string_t>(source, result, count,
483
483
  [&](timestamp_t input, ValidityMask &mask, idx_t idx) {
@@ -55,7 +55,7 @@ struct ICUTableRange {
55
55
  bool greater_than_check;
56
56
 
57
57
  bool Equals(const FunctionData &other_p) const override {
58
- auto &other = (const BindData &)other_p;
58
+ auto &other = other_p.Cast<const BindData>();
59
59
  return other.start == start && other.end == end && other.increment == increment &&
60
60
  other.inclusive_bound == inclusive_bound && other.greater_than_check == greater_than_check &&
61
61
  *calendar == *other.calendar;
@@ -65,7 +65,7 @@ struct ICUTableRange {
65
65
  return make_uniq<BindData>(*this);
66
66
  }
67
67
 
68
- bool Finished(timestamp_t current_value) {
68
+ bool Finished(timestamp_t current_value) const {
69
69
  if (greater_than_check) {
70
70
  if (inclusive_bound) {
71
71
  return current_value > end;
@@ -139,15 +139,15 @@ struct ICUTableRange {
139
139
  };
140
140
 
141
141
  static unique_ptr<GlobalTableFunctionState> Init(ClientContext &context, TableFunctionInitInput &input) {
142
- auto &bind_data = (BindData &)*input.bind_data;
142
+ auto &bind_data = input.bind_data->Cast<BindData>();
143
143
  return make_uniq<State>(bind_data.start);
144
144
  }
145
145
 
146
146
  static void ICUTableRangeFunction(ClientContext &context, TableFunctionInput &data_p, DataChunk &output) {
147
- auto &bind_data = (BindData &)*data_p.bind_data;
147
+ auto &bind_data = data_p.bind_data->Cast<BindData>();
148
148
  CalendarPtr calendar_ptr(bind_data.calendar->clone());
149
149
  auto calendar = calendar_ptr.get();
150
- auto &state = (State &)*data_p.global_state;
150
+ auto &state = data_p.global_state->Cast<State>();
151
151
  if (state.finished) {
152
152
  return;
153
153
  }
@@ -75,8 +75,8 @@ struct ICUTimeBucket : public ICUDateFunc {
75
75
 
76
76
  static inline timestamp_t WidthConvertibleToDaysCommon(int32_t bucket_width_days, const timestamp_t ts,
77
77
  const timestamp_t origin, icu::Calendar *calendar) {
78
- static part_trunc_t trunc_days = TruncationFactory(DatePartSpecifier::DAY);
79
- static part_sub_t sub_days = SubtractFactory(DatePartSpecifier::DAY);
78
+ const auto trunc_days = TruncationFactory(DatePartSpecifier::DAY);
79
+ const auto sub_days = SubtractFactory(DatePartSpecifier::DAY);
80
80
 
81
81
  uint64_t tmp_micros = SetTime(calendar, ts);
82
82
  trunc_days(calendar, tmp_micros);
@@ -97,8 +97,8 @@ struct ICUTimeBucket : public ICUDateFunc {
97
97
 
98
98
  static inline timestamp_t WidthConvertibleToMonthsCommon(int32_t bucket_width_months, const timestamp_t ts,
99
99
  const timestamp_t origin, icu::Calendar *calendar) {
100
- static part_trunc_t trunc_months = TruncationFactory(DatePartSpecifier::MONTH);
101
- static part_sub_t sub_months = SubtractFactory(DatePartSpecifier::MONTH);
100
+ const auto trunc_months = TruncationFactory(DatePartSpecifier::MONTH);
101
+ const auto sub_months = SubtractFactory(DatePartSpecifier::MONTH);
102
102
 
103
103
  uint64_t tmp_micros = SetTime(calendar, ts);
104
104
  trunc_months(calendar, tmp_micros);
@@ -126,7 +126,7 @@ struct ICUTimeBucket : public ICUDateFunc {
126
126
  D_ASSERT(args.ColumnCount() == 2);
127
127
 
128
128
  auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
129
- auto &info = (BindData &)*func_expr.bind_info;
129
+ auto &info = func_expr.bind_info->Cast<BindData>();
130
130
  CalendarPtr calendar(info.calendar->clone());
131
131
 
132
132
  BinaryExecutor::Execute<TA, TB, TR>(args.data[0], args.data[1], result, args.size(), [&](TA left, TB right) {
@@ -139,7 +139,7 @@ struct ICUTimeBucket : public ICUDateFunc {
139
139
  D_ASSERT(args.ColumnCount() == 3);
140
140
 
141
141
  auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
142
- auto &info = (BindData &)*func_expr.bind_info;
142
+ auto &info = func_expr.bind_info->Cast<BindData>();
143
143
  CalendarPtr calendar(info.calendar->clone());
144
144
 
145
145
  TernaryExecutor::Execute<TA, TB, TC, TR>(
@@ -153,7 +153,7 @@ struct ICUTimeBucket : public ICUDateFunc {
153
153
  if (!Value::IsFinite(ts)) {
154
154
  return ts;
155
155
  }
156
- static timestamp_t origin = Timestamp::FromEpochMicroSeconds(DEFAULT_ORIGIN_MICROS_1);
156
+ const auto origin = Timestamp::FromEpochMicroSeconds(DEFAULT_ORIGIN_MICROS_1);
157
157
  return WidthConvertibleToMicrosCommon(bucket_width.micros, ts, origin, calendar);
158
158
  }
159
159
  };
@@ -163,7 +163,7 @@ struct ICUTimeBucket : public ICUDateFunc {
163
163
  if (!Value::IsFinite(ts)) {
164
164
  return ts;
165
165
  }
166
- static timestamp_t origin = Timestamp::FromEpochMicroSeconds(DEFAULT_ORIGIN_MICROS_1);
166
+ const auto origin = Timestamp::FromEpochMicroSeconds(DEFAULT_ORIGIN_MICROS_1);
167
167
  return WidthConvertibleToDaysCommon(bucket_width.days, ts, origin, calendar);
168
168
  }
169
169
  };
@@ -173,7 +173,7 @@ struct ICUTimeBucket : public ICUDateFunc {
173
173
  if (!Value::IsFinite(ts)) {
174
174
  return ts;
175
175
  }
176
- static timestamp_t origin = Timestamp::FromEpochMicroSeconds(DEFAULT_ORIGIN_MICROS_2);
176
+ const auto origin = Timestamp::FromEpochMicroSeconds(DEFAULT_ORIGIN_MICROS_2);
177
177
  return WidthConvertibleToMonthsCommon(bucket_width.months, ts, origin, calendar);
178
178
  }
179
179
  };
@@ -200,7 +200,7 @@ struct ICUTimeBucket : public ICUDateFunc {
200
200
  if (!Value::IsFinite(ts)) {
201
201
  return ts;
202
202
  }
203
- static timestamp_t origin = Timestamp::FromEpochMicroSeconds(DEFAULT_ORIGIN_MICROS_1);
203
+ const auto origin = Timestamp::FromEpochMicroSeconds(DEFAULT_ORIGIN_MICROS_1);
204
204
  return Add(calendar,
205
205
  WidthConvertibleToMicrosCommon(bucket_width.micros, Sub(calendar, ts, offset), origin, calendar),
206
206
  offset);
@@ -213,7 +213,7 @@ struct ICUTimeBucket : public ICUDateFunc {
213
213
  if (!Value::IsFinite(ts)) {
214
214
  return ts;
215
215
  }
216
- static timestamp_t origin = Timestamp::FromEpochMicroSeconds(DEFAULT_ORIGIN_MICROS_1);
216
+ const auto origin = Timestamp::FromEpochMicroSeconds(DEFAULT_ORIGIN_MICROS_1);
217
217
  return Add(calendar,
218
218
  WidthConvertibleToDaysCommon(bucket_width.days, Sub(calendar, ts, offset), origin, calendar),
219
219
  offset);
@@ -226,7 +226,7 @@ struct ICUTimeBucket : public ICUDateFunc {
226
226
  if (!Value::IsFinite(ts)) {
227
227
  return ts;
228
228
  }
229
- static timestamp_t origin = Timestamp::FromEpochMicroSeconds(DEFAULT_ORIGIN_MICROS_2);
229
+ const auto origin = Timestamp::FromEpochMicroSeconds(DEFAULT_ORIGIN_MICROS_2);
230
230
  return Add(calendar,
231
231
  WidthConvertibleToMonthsCommon(bucket_width.months, Sub(calendar, ts, offset), origin, calendar),
232
232
  offset);
@@ -358,7 +358,7 @@ struct ICUTimeBucket : public ICUDateFunc {
358
358
  D_ASSERT(args.ColumnCount() == 2);
359
359
 
360
360
  auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
361
- auto &info = (BindData &)*func_expr.bind_info;
361
+ auto &info = func_expr.bind_info->Cast<BindData>();
362
362
  CalendarPtr calendar_ptr(info.calendar->clone());
363
363
  auto calendar = calendar_ptr.get();
364
364
  SetTimeZone(calendar, string_t("UTC"));
@@ -414,7 +414,7 @@ struct ICUTimeBucket : public ICUDateFunc {
414
414
  D_ASSERT(args.ColumnCount() == 3);
415
415
 
416
416
  auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
417
- auto &info = (BindData &)*func_expr.bind_info;
417
+ auto &info = func_expr.bind_info->Cast<BindData>();
418
418
  CalendarPtr calendar_ptr(info.calendar->clone());
419
419
  auto calendar = calendar_ptr.get();
420
420
  SetTimeZone(calendar, string_t("UTC"));
@@ -479,7 +479,7 @@ struct ICUTimeBucket : public ICUDateFunc {
479
479
  D_ASSERT(args.ColumnCount() == 3);
480
480
 
481
481
  auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
482
- auto &info = (BindData &)*func_expr.bind_info;
482
+ auto &info = func_expr.bind_info->Cast<BindData>();
483
483
  CalendarPtr calendar_ptr(info.calendar->clone());
484
484
  auto calendar = calendar_ptr.get();
485
485
  SetTimeZone(calendar, string_t("UTC"));
@@ -547,7 +547,7 @@ struct ICUTimeBucket : public ICUDateFunc {
547
547
  D_ASSERT(args.ColumnCount() == 3);
548
548
 
549
549
  auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
550
- auto &info = (BindData &)*func_expr.bind_info;
550
+ auto &info = func_expr.bind_info->Cast<BindData>();
551
551
  CalendarPtr calendar_ptr(info.calendar->clone());
552
552
  auto calendar = calendar_ptr.get();
553
553
 
@@ -40,7 +40,7 @@ static duckdb::unique_ptr<GlobalTableFunctionState> ICUTimeZoneInit(ClientContex
40
40
  }
41
41
 
42
42
  static void ICUTimeZoneFunction(ClientContext &context, TableFunctionInput &data_p, DataChunk &output) {
43
- auto &data = (ICUTimeZoneData &)*data_p.global_state;
43
+ auto &data = data_p.global_state->Cast<ICUTimeZoneData>();
44
44
  idx_t index = 0;
45
45
  while (index < STANDARD_VECTOR_SIZE) {
46
46
  UErrorCode status = U_ZERO_ERROR;
@@ -125,8 +125,8 @@ struct ICUFromNaiveTimestamp : public ICUDateFunc {
125
125
 
126
126
  static bool CastFromNaive(Vector &source, Vector &result, idx_t count, CastParameters &parameters) {
127
127
  auto &cast_data = parameters.cast_data->Cast<CastData>();
128
- auto info = (BindData *)cast_data.info.get();
129
- CalendarPtr calendar(info->calendar->clone());
128
+ auto &info = cast_data.info->Cast<BindData>();
129
+ CalendarPtr calendar(info.calendar->clone());
130
130
 
131
131
  UnaryExecutor::Execute<timestamp_t, timestamp_t>(
132
132
  source, result, count, [&](timestamp_t input) { return Operation(calendar.get(), input); });
@@ -188,8 +188,8 @@ struct ICUToNaiveTimestamp : public ICUDateFunc {
188
188
 
189
189
  static bool CastToNaive(Vector &source, Vector &result, idx_t count, CastParameters &parameters) {
190
190
  auto &cast_data = parameters.cast_data->Cast<CastData>();
191
- auto info = (BindData *)cast_data.info.get();
192
- CalendarPtr calendar(info->calendar->clone());
191
+ auto &info = cast_data.info->Cast<BindData>();
192
+ CalendarPtr calendar(info.calendar->clone());
193
193
 
194
194
  UnaryExecutor::Execute<timestamp_t, timestamp_t>(
195
195
  source, result, count, [&](timestamp_t input) { return Operation(calendar.get(), input); });
@@ -225,7 +225,7 @@ struct ICULocalTimestampFunc : public ICUDateFunc {
225
225
  }
226
226
 
227
227
  bool Equals(const FunctionData &other_p) const override {
228
- auto &other = (const BindDataNow &)other_p;
228
+ auto &other = other_p.Cast<const BindDataNow>();
229
229
  if (now != other.now) {
230
230
  return false;
231
231
  }
@@ -247,7 +247,7 @@ struct ICULocalTimestampFunc : public ICUDateFunc {
247
247
 
248
248
  static timestamp_t GetLocalTimestamp(ExpressionState &state) {
249
249
  auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
250
- auto &info = (BindDataNow &)*func_expr.bind_info;
250
+ auto &info = func_expr.bind_info->Cast<BindDataNow>();
251
251
  CalendarPtr calendar_ptr(info.calendar->clone());
252
252
  auto calendar = calendar_ptr.get();
253
253
 
@@ -296,7 +296,7 @@ struct ICUTimeZoneFunc : public ICUDateFunc {
296
296
  template <typename OP>
297
297
  static void Execute(DataChunk &input, ExpressionState &state, Vector &result) {
298
298
  auto &func_expr = state.expr.Cast<BoundFunctionExpression>();
299
- auto &info = (BindData &)*func_expr.bind_info;
299
+ auto &info = func_expr.bind_info->Cast<BindData>();
300
300
  CalendarPtr calendar_ptr(info.calendar->clone());
301
301
  auto calendar = calendar_ptr.get();
302
302
 
@@ -65,17 +65,15 @@ struct IcuBindData : public FunctionData {
65
65
 
66
66
  static int32_t ICUGetSortKey(icu::Collator &collator, string_t input, duckdb::unique_ptr<char[]> &buffer,
67
67
  int32_t &buffer_size) {
68
- int32_t string_size =
69
- collator.getSortKey(icu::UnicodeString::fromUTF8(icu::StringPiece(input.GetData(), input.GetSize())),
70
- (uint8_t *)buffer.get(), buffer_size);
68
+ icu::UnicodeString unicode_string =
69
+ icu::UnicodeString::fromUTF8(icu::StringPiece(input.GetData(), input.GetSize()));
70
+ int32_t string_size = collator.getSortKey(unicode_string, reinterpret_cast<uint8_t *>(buffer.get()), buffer_size);
71
71
  if (string_size > buffer_size) {
72
72
  // have to resize the buffer
73
73
  buffer_size = string_size;
74
74
  buffer = duckdb::unique_ptr<char[]>(new char[buffer_size]);
75
75
 
76
- string_size =
77
- collator.getSortKey(icu::UnicodeString::fromUTF8(icu::StringPiece(input.GetData(), input.GetSize())),
78
- (uint8_t *)buffer.get(), buffer_size);
76
+ string_size = collator.getSortKey(unicode_string, reinterpret_cast<uint8_t *>(buffer.get()), buffer_size);
79
77
  }
80
78
  return string_size;
81
79
  }
@@ -187,7 +185,7 @@ static duckdb::unique_ptr<GlobalTableFunctionState> ICUCalendarInit(ClientContex
187
185
  }
188
186
 
189
187
  static void ICUCalendarFunction(ClientContext &context, TableFunctionInput &data_p, DataChunk &output) {
190
- auto &data = (ICUCalendarData &)*data_p.global_state;
188
+ auto &data = data_p.global_state->Cast<ICUCalendarData>();
191
189
  idx_t index = 0;
192
190
  while (index < STANDARD_VECTOR_SIZE) {
193
191
  if (!data.calendars) {