duckdb 0.8.1-dev65.0 → 0.8.1

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 (672) hide show
  1. package/binding.gyp +8 -8
  2. package/package.json +3 -1
  3. package/src/duckdb/extension/icu/icu-datepart.cpp +2 -2
  4. package/src/duckdb/extension/icu/icu-extension.cpp +1 -1
  5. package/src/duckdb/extension/icu/icu-makedate.cpp +5 -4
  6. package/src/duckdb/extension/icu/icu-strptime.cpp +1 -1
  7. package/src/duckdb/extension/icu/third_party/icu/i18n/nfsubs.cpp +0 -2
  8. package/src/duckdb/extension/json/buffered_json_reader.cpp +23 -14
  9. package/src/duckdb/extension/json/include/buffered_json_reader.hpp +6 -6
  10. package/src/duckdb/extension/json/include/json_common.hpp +13 -3
  11. package/src/duckdb/extension/json/include/json_executors.hpp +1 -1
  12. package/src/duckdb/extension/json/include/json_scan.hpp +5 -2
  13. package/src/duckdb/extension/json/json_functions/json_contains.cpp +5 -0
  14. package/src/duckdb/extension/json/json_functions/json_create.cpp +16 -16
  15. package/src/duckdb/extension/json/json_functions/json_merge_patch.cpp +3 -3
  16. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +2 -2
  17. package/src/duckdb/extension/json/json_functions/json_structure.cpp +5 -3
  18. package/src/duckdb/extension/json/json_functions/json_transform.cpp +12 -12
  19. package/src/duckdb/extension/json/json_functions/read_json.cpp +2 -1
  20. package/src/duckdb/extension/json/json_functions.cpp +6 -3
  21. package/src/duckdb/extension/json/json_scan.cpp +43 -27
  22. package/src/duckdb/extension/parquet/column_reader.cpp +57 -52
  23. package/src/duckdb/extension/parquet/column_writer.cpp +57 -45
  24. package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +1 -1
  25. package/src/duckdb/extension/parquet/include/column_reader.hpp +5 -4
  26. package/src/duckdb/extension/parquet/include/column_writer.hpp +24 -0
  27. package/src/duckdb/extension/parquet/include/decode_utils.hpp +6 -0
  28. package/src/duckdb/extension/parquet/include/list_column_reader.hpp +1 -1
  29. package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +4 -4
  30. package/src/duckdb/extension/parquet/include/parquet_rle_bp_decoder.hpp +4 -5
  31. package/src/duckdb/extension/parquet/include/resizable_buffer.hpp +4 -4
  32. package/src/duckdb/extension/parquet/include/row_number_column_reader.hpp +1 -1
  33. package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +1 -1
  34. package/src/duckdb/extension/parquet/parquet-extension.cpp +27 -2
  35. package/src/duckdb/extension/parquet/parquet_metadata.cpp +1 -1
  36. package/src/duckdb/extension/parquet/parquet_reader.cpp +18 -18
  37. package/src/duckdb/extension/parquet/parquet_statistics.cpp +23 -26
  38. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +2 -2
  39. package/src/duckdb/extension/parquet/parquet_writer.cpp +3 -3
  40. package/src/duckdb/extension/parquet/zstd_file_system.cpp +3 -3
  41. package/src/duckdb/src/catalog/catalog.cpp +5 -17
  42. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +7 -1
  43. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +121 -0
  44. package/src/duckdb/src/catalog/catalog_search_path.cpp +49 -12
  45. package/src/duckdb/src/catalog/catalog_set.cpp +1 -1
  46. package/src/duckdb/src/catalog/default/default_types.cpp +9 -84
  47. package/src/duckdb/src/catalog/dependency_manager.cpp +2 -2
  48. package/src/duckdb/src/common/adbc/adbc.cpp +118 -12
  49. package/src/duckdb/src/common/adbc/driver_manager.cpp +0 -20
  50. package/src/duckdb/src/common/arrow/arrow_appender.cpp +12 -12
  51. package/src/duckdb/src/common/arrow/arrow_converter.cpp +11 -12
  52. package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +11 -10
  53. package/src/duckdb/src/common/checksum.cpp +1 -1
  54. package/src/duckdb/src/common/compressed_file_system.cpp +6 -6
  55. package/src/duckdb/src/common/crypto/md5.cpp +9 -9
  56. package/src/duckdb/src/common/exception.cpp +4 -1
  57. package/src/duckdb/src/common/exception_format_value.cpp +24 -15
  58. package/src/duckdb/src/common/field_writer.cpp +1 -1
  59. package/src/duckdb/src/common/fsst.cpp +11 -6
  60. package/src/duckdb/src/common/gzip_file_system.cpp +8 -8
  61. package/src/duckdb/src/common/hive_partitioning.cpp +1 -1
  62. package/src/duckdb/src/common/local_file_system.cpp +11 -11
  63. package/src/duckdb/src/common/multi_file_reader.cpp +3 -0
  64. package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
  65. package/src/duckdb/src/common/pipe_file_system.cpp +2 -2
  66. package/src/duckdb/src/common/radix_partitioning.cpp +2 -2
  67. package/src/duckdb/src/common/random_engine.cpp +1 -1
  68. package/src/duckdb/src/common/row_operations/row_heap_gather.cpp +1 -1
  69. package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +5 -5
  70. package/src/duckdb/src/common/row_operations/row_match.cpp +1 -1
  71. package/src/duckdb/src/common/row_operations/row_radix_scatter.cpp +2 -2
  72. package/src/duckdb/src/common/row_operations/row_scatter.cpp +4 -4
  73. package/src/duckdb/src/common/serializer/binary_deserializer.cpp +1 -1
  74. package/src/duckdb/src/common/serializer/binary_serializer.cpp +3 -3
  75. package/src/duckdb/src/common/serializer.cpp +1 -1
  76. package/src/duckdb/src/common/sort/comparators.cpp +1 -1
  77. package/src/duckdb/src/common/sort/merge_sorter.cpp +7 -2
  78. package/src/duckdb/src/common/sort/partition_state.cpp +2 -2
  79. package/src/duckdb/src/common/types/bit.cpp +5 -5
  80. package/src/duckdb/src/common/types/blob.cpp +8 -8
  81. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +4 -4
  82. package/src/duckdb/src/common/types/column/column_data_collection.cpp +3 -3
  83. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +1 -1
  84. package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
  85. package/src/duckdb/src/common/types/hash.cpp +2 -2
  86. package/src/duckdb/src/common/types/hyperloglog.cpp +22 -21
  87. package/src/duckdb/src/common/types/list_segment.cpp +77 -49
  88. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +1 -1
  89. package/src/duckdb/src/common/types/row/row_data_collection_scanner.cpp +5 -4
  90. package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +5 -3
  91. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +61 -24
  92. package/src/duckdb/src/common/types/string_heap.cpp +1 -1
  93. package/src/duckdb/src/common/types/time.cpp +2 -8
  94. package/src/duckdb/src/common/types/timestamp.cpp +37 -1
  95. package/src/duckdb/src/common/types/value.cpp +3 -2
  96. package/src/duckdb/src/common/types/vector.cpp +98 -101
  97. package/src/duckdb/src/common/types/vector_cache.cpp +6 -6
  98. package/src/duckdb/src/common/types/vector_constants.cpp +2 -1
  99. package/src/duckdb/src/common/types.cpp +48 -33
  100. package/src/duckdb/src/common/vector_operations/boolean_operators.cpp +2 -2
  101. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +12 -12
  102. package/src/duckdb/src/common/vector_operations/vector_hash.cpp +13 -11
  103. package/src/duckdb/src/common/vector_operations/vector_storage.cpp +1 -1
  104. package/src/duckdb/src/core_functions/aggregate/algebraic/avg.cpp +30 -33
  105. package/src/duckdb/src/core_functions/aggregate/algebraic/covar.cpp +0 -4
  106. package/src/duckdb/src/core_functions/aggregate/distributive/approx_count.cpp +33 -36
  107. package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +53 -66
  108. package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +48 -48
  109. package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +44 -44
  110. package/src/duckdb/src/core_functions/aggregate/distributive/bool.cpp +32 -32
  111. package/src/duckdb/src/core_functions/aggregate/distributive/entropy.cpp +34 -34
  112. package/src/duckdb/src/core_functions/aggregate/distributive/kurtosis.cpp +30 -31
  113. package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +91 -103
  114. package/src/duckdb/src/core_functions/aggregate/distributive/product.cpp +17 -17
  115. package/src/duckdb/src/core_functions/aggregate/distributive/skew.cpp +25 -27
  116. package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +37 -38
  117. package/src/duckdb/src/core_functions/aggregate/distributive/sum.cpp +22 -22
  118. package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +49 -85
  119. package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +49 -51
  120. package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +116 -134
  121. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +63 -100
  122. package/src/duckdb/src/core_functions/aggregate/nested/histogram.cpp +24 -26
  123. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +22 -23
  124. package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +16 -18
  125. package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +22 -25
  126. package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +19 -24
  127. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +18 -23
  128. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +14 -18
  129. package/src/duckdb/src/core_functions/function_list.cpp +1 -0
  130. package/src/duckdb/src/core_functions/scalar/blob/base64.cpp +1 -1
  131. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +46 -46
  132. package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +3 -0
  133. package/src/duckdb/src/core_functions/scalar/date/strftime.cpp +2 -2
  134. package/src/duckdb/src/core_functions/scalar/generic/current_setting.cpp +1 -1
  135. package/src/duckdb/src/core_functions/scalar/generic/least.cpp +2 -2
  136. package/src/duckdb/src/core_functions/scalar/generic/stats.cpp +1 -1
  137. package/src/duckdb/src/core_functions/scalar/generic/system_functions.cpp +14 -0
  138. package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +4 -4
  139. package/src/duckdb/src/core_functions/scalar/list/flatten.cpp +2 -4
  140. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +26 -9
  141. package/src/duckdb/src/core_functions/scalar/list/list_lambdas.cpp +7 -9
  142. package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +1 -1
  143. package/src/duckdb/src/core_functions/scalar/map/cardinality.cpp +1 -1
  144. package/src/duckdb/src/core_functions/scalar/map/map.cpp +2 -2
  145. package/src/duckdb/src/core_functions/scalar/map/map_concat.cpp +4 -1
  146. package/src/duckdb/src/core_functions/scalar/map/map_extract.cpp +5 -9
  147. package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +6 -6
  148. package/src/duckdb/src/core_functions/scalar/string/starts_with.cpp +3 -2
  149. package/src/duckdb/src/core_functions/scalar/string/string_split.cpp +4 -4
  150. package/src/duckdb/src/core_functions/scalar/string/trim.cpp +1 -1
  151. package/src/duckdb/src/core_functions/scalar/union/union_extract.cpp +1 -1
  152. package/src/duckdb/src/execution/adaptive_filter.cpp +1 -1
  153. package/src/duckdb/src/execution/expression_executor/execute_case.cpp +10 -10
  154. package/src/duckdb/src/execution/expression_executor/execute_conjunction.cpp +7 -7
  155. package/src/duckdb/src/execution/expression_executor.cpp +28 -28
  156. package/src/duckdb/src/execution/index/art/art.cpp +110 -39
  157. package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +23 -5
  158. package/src/duckdb/src/execution/index/art/leaf.cpp +11 -11
  159. package/src/duckdb/src/execution/index/art/leaf_segment.cpp +10 -0
  160. package/src/duckdb/src/execution/index/art/node.cpp +48 -35
  161. package/src/duckdb/src/execution/index/art/node16.cpp +3 -0
  162. package/src/duckdb/src/execution/index/art/node256.cpp +1 -0
  163. package/src/duckdb/src/execution/index/art/node4.cpp +3 -0
  164. package/src/duckdb/src/execution/index/art/node48.cpp +2 -0
  165. package/src/duckdb/src/execution/index/art/prefix.cpp +2 -0
  166. package/src/duckdb/src/execution/join_hashtable.cpp +6 -4
  167. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_inner.cpp +4 -4
  168. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +2 -2
  169. package/src/duckdb/src/execution/operator/aggregate/distinct_aggregate_data.cpp +1 -1
  170. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +1 -1
  171. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +2 -2
  172. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +4 -4
  173. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +26 -9
  174. package/src/duckdb/src/execution/operator/filter/physical_filter.cpp +1 -1
  175. package/src/duckdb/src/execution/operator/helper/physical_reset.cpp +5 -2
  176. package/src/duckdb/src/execution/operator/helper/physical_set.cpp +5 -1
  177. package/src/duckdb/src/execution/operator/join/outer_join_marker.cpp +1 -1
  178. package/src/duckdb/src/execution/operator/join/perfect_hash_join_executor.cpp +1 -1
  179. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +2 -2
  180. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +4 -4
  181. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +3 -6
  182. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +3 -3
  183. package/src/duckdb/src/execution/operator/join/physical_nested_loop_join.cpp +3 -3
  184. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +3 -3
  185. package/src/duckdb/src/execution/operator/order/physical_top_n.cpp +1 -1
  186. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +2 -2
  187. package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +2 -2
  188. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -3
  189. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
  190. package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -2
  191. package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +1 -1
  192. package/src/duckdb/src/execution/operator/projection/physical_tableinout_function.cpp +1 -0
  193. package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +10 -5
  194. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +2 -1
  195. package/src/duckdb/src/execution/operator/scan/physical_expression_scan.cpp +1 -1
  196. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +2 -2
  197. package/src/duckdb/src/execution/operator/schema/physical_attach.cpp +0 -1
  198. package/src/duckdb/src/execution/operator/schema/physical_create_index.cpp +29 -3
  199. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +1 -1
  200. package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +1 -1
  201. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +1 -1
  202. package/src/duckdb/src/execution/physical_plan/plan_create_table.cpp +1 -1
  203. package/src/duckdb/src/execution/physical_plan_generator.cpp +2 -2
  204. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +1 -1
  205. package/src/duckdb/src/execution/reservoir_sample.cpp +20 -6
  206. package/src/duckdb/src/execution/window_segment_tree.cpp +8 -6
  207. package/src/duckdb/src/function/aggregate/distributive/count.cpp +159 -21
  208. package/src/duckdb/src/function/aggregate/distributive/first.cpp +68 -75
  209. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +14 -14
  210. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  211. package/src/duckdb/src/function/cast/decimal_cast.cpp +1 -1
  212. package/src/duckdb/src/function/cast/enum_casts.cpp +2 -2
  213. package/src/duckdb/src/function/cast/list_casts.cpp +2 -4
  214. package/src/duckdb/src/function/cast/string_cast.cpp +11 -11
  215. package/src/duckdb/src/function/cast/union_casts.cpp +2 -2
  216. package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +3 -2
  217. package/src/duckdb/src/function/pragma/pragma_queries.cpp +33 -23
  218. package/src/duckdb/src/function/scalar/generic/constant_or_null.cpp +1 -1
  219. package/src/duckdb/src/function/scalar/list/list_concat.cpp +2 -2
  220. package/src/duckdb/src/function/scalar/list/list_extract.cpp +4 -4
  221. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +3 -4
  222. package/src/duckdb/src/function/scalar/string/concat.cpp +8 -7
  223. package/src/duckdb/src/function/scalar/string/contains.cpp +4 -4
  224. package/src/duckdb/src/function/scalar/string/like.cpp +5 -5
  225. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +4 -4
  226. package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +6 -2
  227. package/src/duckdb/src/function/scalar/string/regexp.cpp +3 -3
  228. package/src/duckdb/src/function/scalar/string/strip_accents.cpp +1 -1
  229. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +1 -1
  230. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +27 -25
  231. package/src/duckdb/src/function/scalar_function.cpp +3 -3
  232. package/src/duckdb/src/function/table/arrow.cpp +6 -6
  233. package/src/duckdb/src/function/table/arrow_conversion.cpp +67 -61
  234. package/src/duckdb/src/function/table/checkpoint.cpp +4 -1
  235. package/src/duckdb/src/function/table/copy_csv.cpp +11 -7
  236. package/src/duckdb/src/function/table/glob.cpp +1 -1
  237. package/src/duckdb/src/function/table/pragma_last_profiling_output.cpp +1 -1
  238. package/src/duckdb/src/function/table/range.cpp +4 -4
  239. package/src/duckdb/src/function/table/read_csv.cpp +19 -21
  240. package/src/duckdb/src/function/table/repeat.cpp +5 -2
  241. package/src/duckdb/src/function/table/repeat_row.cpp +10 -3
  242. package/src/duckdb/src/function/table/system/duckdb_functions.cpp +1 -1
  243. package/src/duckdb/src/function/table/system/pragma_storage_info.cpp +4 -4
  244. package/src/duckdb/src/function/table/system/test_vector_types.cpp +82 -26
  245. package/src/duckdb/src/function/table/table_scan.cpp +4 -4
  246. package/src/duckdb/src/function/table/unnest.cpp +1 -1
  247. package/src/duckdb/src/function/table/version/pragma_version.cpp +3 -3
  248. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +2 -5
  249. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +2 -0
  250. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_catalog_entry.hpp +11 -1
  251. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +2 -2
  252. package/src/duckdb/src/include/duckdb/catalog/catalog_search_path.hpp +8 -2
  253. package/src/duckdb/src/include/duckdb/catalog/default/builtin_types/types.hpp +97 -0
  254. package/src/duckdb/src/include/duckdb/common/allocator.hpp +15 -4
  255. package/src/duckdb/src/include/duckdb/common/arrow/arrow_appender.hpp +1 -1
  256. package/src/duckdb/src/include/duckdb/common/arrow/arrow_buffer.hpp +7 -2
  257. package/src/duckdb/src/include/duckdb/common/arrow/arrow_converter.hpp +2 -3
  258. package/src/duckdb/src/include/duckdb/common/arrow/arrow_options.hpp +8 -1
  259. package/src/duckdb/src/include/duckdb/common/arrow/result_arrow_wrapper.hpp +0 -1
  260. package/src/duckdb/src/include/duckdb/common/bit_utils.hpp +16 -22
  261. package/src/duckdb/src/include/duckdb/common/crypto/md5.hpp +2 -2
  262. package/src/duckdb/src/include/duckdb/common/exception.hpp +5 -2
  263. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +3 -3
  264. package/src/duckdb/src/include/duckdb/common/file_system.hpp +11 -0
  265. package/src/duckdb/src/include/duckdb/common/fsst.hpp +2 -3
  266. package/src/duckdb/src/include/duckdb/common/radix.hpp +3 -3
  267. package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +1 -1
  268. package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +4 -1
  269. package/src/duckdb/src/include/duckdb/common/serializer.hpp +4 -4
  270. package/src/duckdb/src/include/duckdb/common/typedefs.hpp +30 -0
  271. package/src/duckdb/src/include/duckdb/common/types/column/partitioned_column_data.hpp +12 -0
  272. package/src/duckdb/src/include/duckdb/common/types/hyperloglog.hpp +6 -2
  273. package/src/duckdb/src/include/duckdb/common/types/null_value.hpp +1 -1
  274. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +12 -0
  275. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +10 -10
  276. package/src/duckdb/src/include/duckdb/common/types/time.hpp +2 -0
  277. package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +4 -14
  278. package/src/duckdb/src/include/duckdb/common/types/value.hpp +1 -1
  279. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +9 -0
  280. package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +18 -6
  281. package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +112 -76
  282. package/src/duckdb/src/include/duckdb/common/vector_operations/binary_executor.hpp +16 -15
  283. package/src/duckdb/src/include/duckdb/common/vector_operations/generic_executor.hpp +11 -11
  284. package/src/duckdb/src/include/duckdb/common/vector_operations/ternary_executor.hpp +23 -19
  285. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +3 -3
  286. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +20 -24
  287. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +36 -39
  288. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/stddev.hpp +57 -53
  289. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +8 -9
  290. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +16 -18
  291. package/src/duckdb/src/include/duckdb/core_functions/aggregate/sum_helpers.hpp +7 -8
  292. package/src/duckdb/src/include/duckdb/core_functions/scalar/generic_functions.hpp +9 -0
  293. package/src/duckdb/src/include/duckdb/core_functions/scalar/map_functions.hpp +2 -6
  294. package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +16 -36
  295. package/src/duckdb/src/include/duckdb/execution/expression_executor_state.hpp +14 -2
  296. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +13 -7
  297. package/src/duckdb/src/include/duckdb/execution/index/art/fixed_size_allocator.hpp +3 -0
  298. package/src/duckdb/src/include/duckdb/execution/index/art/leaf.hpp +1 -1
  299. package/src/duckdb/src/include/duckdb/execution/index/art/leaf_segment.hpp +2 -0
  300. package/src/duckdb/src/include/duckdb/execution/index/art/node.hpp +13 -3
  301. package/src/duckdb/src/include/duckdb/execution/index/art/node48.hpp +1 -0
  302. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_result_collector.hpp +3 -0
  303. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_buffer.hpp +1 -1
  304. package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +5 -2
  305. package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +12 -12
  306. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +9 -30
  307. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +95 -0
  308. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +13 -2
  309. package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +4 -4
  310. package/src/duckdb/src/include/duckdb/function/compression_function.hpp +44 -0
  311. package/src/duckdb/src/include/duckdb/function/copy_function.hpp +6 -6
  312. package/src/duckdb/src/include/duckdb/function/function.hpp +3 -3
  313. package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +4 -2
  314. package/src/duckdb/src/include/duckdb/function/macro_function.hpp +2 -2
  315. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +3 -3
  316. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +1 -1
  317. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +4 -3
  318. package/src/duckdb/src/include/duckdb/function/table_function.hpp +9 -8
  319. package/src/duckdb/src/include/duckdb/main/attached_database.hpp +4 -1
  320. package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +3 -1
  321. package/src/duckdb/src/include/duckdb/main/capi/cast/utils.hpp +1 -1
  322. package/src/duckdb/src/include/duckdb/main/config.hpp +5 -0
  323. package/src/duckdb/src/include/duckdb/main/database_manager.hpp +1 -0
  324. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +142 -136
  325. package/src/duckdb/src/include/duckdb/main/materialized_query_result.hpp +3 -0
  326. package/src/duckdb/src/include/duckdb/main/pending_query_result.hpp +3 -0
  327. package/src/duckdb/src/include/duckdb/main/query_result.hpp +23 -0
  328. package/src/duckdb/src/include/duckdb/main/relation.hpp +12 -0
  329. package/src/duckdb/src/include/duckdb/main/settings.hpp +19 -0
  330. package/src/duckdb/src/include/duckdb/main/stream_query_result.hpp +3 -0
  331. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  332. package/src/duckdb/src/include/duckdb/optimizer/unnest_rewriter.hpp +4 -0
  333. package/src/duckdb/src/include/duckdb/parallel/meta_pipeline.hpp +12 -3
  334. package/src/duckdb/src/include/duckdb/parser/base_expression.hpp +6 -12
  335. package/src/duckdb/src/include/duckdb/parser/constraint.hpp +2 -2
  336. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +1 -1
  337. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +1 -1
  338. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +1 -1
  339. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +1 -1
  340. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +1 -1
  341. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +1 -1
  342. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +1 -1
  343. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +1 -1
  344. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +1 -1
  345. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +1 -1
  346. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +1 -1
  347. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +1 -1
  348. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +1 -1
  349. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +1 -1
  350. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +1 -1
  351. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +1 -1
  352. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +1 -1
  353. package/src/duckdb/src/include/duckdb/parser/expression_map.hpp +1 -1
  354. package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +2 -2
  355. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -1
  356. package/src/duckdb/src/include/duckdb/parser/parser.hpp +2 -0
  357. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -2
  358. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +36 -5
  359. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +7 -4
  360. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +1 -1
  361. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +1 -1
  362. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -2
  363. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +1 -1
  364. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
  365. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +3 -3
  366. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +1 -1
  367. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +1 -1
  368. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +4 -3
  369. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +106 -92
  370. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -2
  371. package/src/duckdb/src/include/duckdb/planner/bound_constraint.hpp +2 -2
  372. package/src/duckdb/src/include/duckdb/planner/bound_query_node.hpp +2 -2
  373. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +37 -1
  374. package/src/duckdb/src/include/duckdb/planner/bound_tableref.hpp +2 -2
  375. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +1 -1
  376. package/src/duckdb/src/include/duckdb/planner/expression/bound_between_expression.hpp +1 -1
  377. package/src/duckdb/src/include/duckdb/planner/expression/bound_case_expression.hpp +1 -1
  378. package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +1 -1
  379. package/src/duckdb/src/include/duckdb/planner/expression/bound_columnref_expression.hpp +1 -1
  380. package/src/duckdb/src/include/duckdb/planner/expression/bound_comparison_expression.hpp +1 -1
  381. package/src/duckdb/src/include/duckdb/planner/expression/bound_conjunction_expression.hpp +1 -1
  382. package/src/duckdb/src/include/duckdb/planner/expression/bound_constant_expression.hpp +1 -1
  383. package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +1 -1
  384. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambda_expression.hpp +1 -1
  385. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambdaref_expression.hpp +1 -1
  386. package/src/duckdb/src/include/duckdb/planner/expression/bound_operator_expression.hpp +1 -1
  387. package/src/duckdb/src/include/duckdb/planner/expression/bound_parameter_expression.hpp +1 -1
  388. package/src/duckdb/src/include/duckdb/planner/expression/bound_reference_expression.hpp +1 -1
  389. package/src/duckdb/src/include/duckdb/planner/expression/bound_subquery_expression.hpp +1 -1
  390. package/src/duckdb/src/include/duckdb/planner/expression/bound_unnest_expression.hpp +1 -1
  391. package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +1 -1
  392. package/src/duckdb/src/include/duckdb/planner/expression.hpp +5 -7
  393. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
  394. package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +6 -0
  395. package/src/duckdb/src/include/duckdb/planner/filter/constant_filter.hpp +3 -0
  396. package/src/duckdb/src/include/duckdb/planner/filter/null_filter.hpp +6 -0
  397. package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +7 -2
  398. package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_to_file.hpp +6 -2
  399. package/src/duckdb/src/include/duckdb/planner/operator/logical_execute.hpp +4 -0
  400. package/src/duckdb/src/include/duckdb/planner/operator/logical_explain.hpp +5 -1
  401. package/src/duckdb/src/include/duckdb/planner/operator/logical_get.hpp +5 -1
  402. package/src/duckdb/src/include/duckdb/planner/operator/logical_pivot.hpp +3 -0
  403. package/src/duckdb/src/include/duckdb/planner/operator/logical_pragma.hpp +6 -2
  404. package/src/duckdb/src/include/duckdb/planner/operator/logical_prepare.hpp +4 -0
  405. package/src/duckdb/src/include/duckdb/planner/table_binding.hpp +26 -0
  406. package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +17 -0
  407. package/src/duckdb/src/include/duckdb/planner/tableref/bound_pivotref.hpp +3 -0
  408. package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/byte_reader.hpp +4 -0
  409. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.hpp +1 -1
  410. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  411. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_analyze.hpp +2 -2
  412. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  413. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +1 -1
  414. package/src/duckdb/src/include/duckdb/storage/in_memory_block_manager.hpp +13 -13
  415. package/src/duckdb/src/include/duckdb/storage/index.hpp +6 -4
  416. package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +1 -1
  417. package/src/duckdb/src/include/duckdb/storage/storage_extension.hpp +0 -6
  418. package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +12 -0
  419. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +1 -1
  420. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +25 -2
  421. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +12 -0
  422. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +1 -1
  423. package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +2 -1
  424. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +2 -2
  425. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +2 -1
  426. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +22 -0
  427. package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +2 -1
  428. package/src/duckdb/src/include/duckdb/storage/table/struct_column_data.hpp +2 -1
  429. package/src/duckdb/src/include/duckdb/storage/table_storage_info.hpp +0 -2
  430. package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +2 -2
  431. package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +2 -2
  432. package/src/duckdb/src/main/attached_database.cpp +8 -0
  433. package/src/duckdb/src/main/capi/appender-c.cpp +5 -5
  434. package/src/duckdb/src/main/capi/arrow-c.cpp +13 -13
  435. package/src/duckdb/src/main/capi/cast/from_decimal-c.cpp +1 -1
  436. package/src/duckdb/src/main/capi/cast/utils-c.cpp +1 -1
  437. package/src/duckdb/src/main/capi/config-c.cpp +3 -6
  438. package/src/duckdb/src/main/capi/data_chunk-c.cpp +17 -17
  439. package/src/duckdb/src/main/capi/duckdb-c.cpp +4 -4
  440. package/src/duckdb/src/main/capi/duckdb_value-c.cpp +4 -4
  441. package/src/duckdb/src/main/capi/logical_types-c.cpp +22 -21
  442. package/src/duckdb/src/main/capi/pending-c.cpp +6 -6
  443. package/src/duckdb/src/main/capi/prepared-c.cpp +10 -10
  444. package/src/duckdb/src/main/capi/replacement_scan-c.cpp +6 -6
  445. package/src/duckdb/src/main/capi/result-c.cpp +23 -23
  446. package/src/duckdb/src/main/capi/table_function-c.cpp +1 -1
  447. package/src/duckdb/src/main/client_context.cpp +7 -6
  448. package/src/duckdb/src/main/config.cpp +2 -0
  449. package/src/duckdb/src/main/database.cpp +1 -0
  450. package/src/duckdb/src/main/database_manager.cpp +22 -1
  451. package/src/duckdb/src/main/error_manager.cpp +1 -1
  452. package/src/duckdb/src/main/extension/extension_load.cpp +1 -1
  453. package/src/duckdb/src/main/query_result.cpp +6 -2
  454. package/src/duckdb/src/main/relation/create_table_relation.cpp +1 -1
  455. package/src/duckdb/src/main/relation/create_view_relation.cpp +1 -1
  456. package/src/duckdb/src/main/relation/delete_relation.cpp +1 -1
  457. package/src/duckdb/src/main/relation/explain_relation.cpp +1 -1
  458. package/src/duckdb/src/main/relation/insert_relation.cpp +1 -1
  459. package/src/duckdb/src/main/relation/update_relation.cpp +1 -1
  460. package/src/duckdb/src/main/relation/write_csv_relation.cpp +1 -1
  461. package/src/duckdb/src/main/relation/write_parquet_relation.cpp +1 -1
  462. package/src/duckdb/src/main/relation.cpp +1 -1
  463. package/src/duckdb/src/main/settings/settings.cpp +41 -6
  464. package/src/duckdb/src/optimizer/deliminator.cpp +12 -12
  465. package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -3
  466. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +10 -10
  467. package/src/duckdb/src/optimizer/matcher/expression_matcher.cpp +1 -1
  468. package/src/duckdb/src/optimizer/pullup/pullup_projection.cpp +2 -2
  469. package/src/duckdb/src/optimizer/regex_range_filter.cpp +2 -4
  470. package/src/duckdb/src/optimizer/rule/distributivity.cpp +2 -2
  471. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +6 -6
  472. package/src/duckdb/src/optimizer/statistics/operator/propagate_get.cpp +2 -2
  473. package/src/duckdb/src/optimizer/unnest_rewriter.cpp +27 -16
  474. package/src/duckdb/src/parallel/executor.cpp +39 -15
  475. package/src/duckdb/src/parallel/meta_pipeline.cpp +17 -3
  476. package/src/duckdb/src/parser/base_expression.cpp +2 -5
  477. package/src/duckdb/src/parser/column_definition.cpp +5 -8
  478. package/src/duckdb/src/parser/expression/between_expression.cpp +4 -4
  479. package/src/duckdb/src/parser/expression/case_expression.cpp +6 -6
  480. package/src/duckdb/src/parser/expression/cast_expression.cpp +4 -4
  481. package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -3
  482. package/src/duckdb/src/parser/expression/columnref_expression.cpp +4 -4
  483. package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -3
  484. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +2 -2
  485. package/src/duckdb/src/parser/expression/constant_expression.cpp +2 -2
  486. package/src/duckdb/src/parser/expression/function_expression.cpp +10 -14
  487. package/src/duckdb/src/parser/expression/lambda_expression.cpp +2 -2
  488. package/src/duckdb/src/parser/expression/operator_expression.cpp +4 -4
  489. package/src/duckdb/src/parser/expression/parameter_expression.cpp +2 -2
  490. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +3 -3
  491. package/src/duckdb/src/parser/expression/star_expression.cpp +9 -9
  492. package/src/duckdb/src/parser/expression/subquery_expression.cpp +5 -5
  493. package/src/duckdb/src/parser/expression/window_expression.cpp +13 -24
  494. package/src/duckdb/src/parser/parsed_data/create_info.cpp +0 -3
  495. package/src/duckdb/src/parser/parsed_expression.cpp +34 -18
  496. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +4 -4
  497. package/src/duckdb/src/parser/parser.cpp +98 -38
  498. package/src/duckdb/src/parser/query_node/select_node.cpp +6 -13
  499. package/src/duckdb/src/parser/query_node.cpp +7 -6
  500. package/src/duckdb/src/parser/result_modifier.cpp +25 -18
  501. package/src/duckdb/src/parser/statement/select_statement.cpp +3 -3
  502. package/src/duckdb/src/parser/tableref/basetableref.cpp +4 -4
  503. package/src/duckdb/src/parser/tableref/emptytableref.cpp +1 -1
  504. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +5 -5
  505. package/src/duckdb/src/parser/tableref/joinref.cpp +6 -6
  506. package/src/duckdb/src/parser/tableref/pivotref.cpp +10 -15
  507. package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -3
  508. package/src/duckdb/src/parser/tableref/table_function.cpp +3 -3
  509. package/src/duckdb/src/parser/tableref.cpp +12 -3
  510. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +7 -7
  511. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +4 -4
  512. package/src/duckdb/src/parser/transform/expression/transform_boolean_test.cpp +4 -4
  513. package/src/duckdb/src/parser/transform/expression/transform_case.cpp +8 -10
  514. package/src/duckdb/src/parser/transform/expression/transform_cast.cpp +7 -9
  515. package/src/duckdb/src/parser/transform/expression/transform_coalesce.cpp +3 -5
  516. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +22 -22
  517. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +2 -2
  518. package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +42 -44
  519. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +70 -75
  520. package/src/duckdb/src/parser/transform/expression/transform_grouping_function.cpp +4 -4
  521. package/src/duckdb/src/parser/transform/expression/transform_interval.cpp +7 -7
  522. package/src/duckdb/src/parser/transform/expression/transform_is_null.cpp +4 -5
  523. package/src/duckdb/src/parser/transform/expression/transform_lambda.cpp +5 -6
  524. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +31 -29
  525. package/src/duckdb/src/parser/transform/expression/transform_param_ref.cpp +13 -14
  526. package/src/duckdb/src/parser/transform/expression/transform_positional_reference.cpp +4 -4
  527. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +9 -10
  528. package/src/duckdb/src/parser/transform/helpers/nodetype_to_string.cpp +0 -2
  529. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +28 -32
  530. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +18 -18
  531. package/src/duckdb/src/parser/transform/helpers/transform_sample.cpp +3 -3
  532. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +27 -26
  533. package/src/duckdb/src/parser/transform/statement/transform_alter_sequence.cpp +11 -14
  534. package/src/duckdb/src/parser/transform/statement/transform_alter_table.cpp +14 -16
  535. package/src/duckdb/src/parser/transform/statement/transform_attach.cpp +8 -9
  536. package/src/duckdb/src/parser/transform/statement/transform_call.cpp +2 -5
  537. package/src/duckdb/src/parser/transform/statement/transform_checkpoint.cpp +4 -6
  538. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +22 -23
  539. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +14 -18
  540. package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +13 -15
  541. package/src/duckdb/src/parser/transform/statement/transform_create_schema.cpp +8 -10
  542. package/src/duckdb/src/parser/transform/statement/transform_create_sequence.cpp +8 -10
  543. package/src/duckdb/src/parser/transform/statement/transform_create_table.cpp +26 -28
  544. package/src/duckdb/src/parser/transform/statement/transform_create_table_as.cpp +8 -10
  545. package/src/duckdb/src/parser/transform/statement/transform_create_type.cpp +12 -15
  546. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +13 -18
  547. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +11 -13
  548. package/src/duckdb/src/parser/transform/statement/transform_detach.cpp +3 -4
  549. package/src/duckdb/src/parser/transform/statement/transform_drop.cpp +20 -25
  550. package/src/duckdb/src/parser/transform/statement/transform_explain.cpp +5 -7
  551. package/src/duckdb/src/parser/transform/statement/transform_export.cpp +5 -6
  552. package/src/duckdb/src/parser/transform/statement/transform_import.cpp +2 -3
  553. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +21 -24
  554. package/src/duckdb/src/parser/transform/statement/transform_load.cpp +4 -5
  555. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -7
  556. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +7 -9
  557. package/src/duckdb/src/parser/transform/statement/transform_prepare.cpp +11 -19
  558. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +12 -14
  559. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +12 -9
  560. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +34 -34
  561. package/src/duckdb/src/parser/transform/statement/transform_set.cpp +18 -19
  562. package/src/duckdb/src/parser/transform/statement/transform_show.cpp +5 -7
  563. package/src/duckdb/src/parser/transform/statement/transform_show_select.cpp +4 -5
  564. package/src/duckdb/src/parser/transform/statement/transform_transaction.cpp +3 -5
  565. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +10 -13
  566. package/src/duckdb/src/parser/transform/statement/transform_upsert.cpp +4 -4
  567. package/src/duckdb/src/parser/transform/statement/transform_use.cpp +2 -3
  568. package/src/duckdb/src/parser/transform/statement/transform_vacuum.cpp +6 -10
  569. package/src/duckdb/src/parser/transform/tableref/transform_base_tableref.cpp +18 -18
  570. package/src/duckdb/src/parser/transform/tableref/transform_from.cpp +5 -5
  571. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +11 -11
  572. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +30 -27
  573. package/src/duckdb/src/parser/transform/tableref/transform_subquery.cpp +5 -5
  574. package/src/duckdb/src/parser/transform/tableref/transform_table_function.cpp +13 -12
  575. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +8 -8
  576. package/src/duckdb/src/parser/transformer.cpp +45 -47
  577. package/src/duckdb/src/planner/bind_context.cpp +9 -10
  578. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +1 -3
  579. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +1 -1
  580. package/src/duckdb/src/planner/binder/expression/bind_positional_reference_expression.cpp +8 -3
  581. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +1 -1
  582. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +6 -3
  583. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +39 -23
  584. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +4 -4
  585. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +1 -28
  586. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +18 -1
  587. package/src/duckdb/src/planner/binder/statement/bind_drop.cpp +0 -25
  588. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +2 -2
  589. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +2 -114
  590. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +7 -2
  591. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +7 -2
  592. package/src/duckdb/src/planner/binder.cpp +1 -1
  593. package/src/duckdb/src/planner/bound_result_modifier.cpp +30 -11
  594. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +11 -10
  595. package/src/duckdb/src/planner/expression/bound_between_expression.cpp +5 -5
  596. package/src/duckdb/src/planner/expression/bound_case_expression.cpp +5 -5
  597. package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +3 -3
  598. package/src/duckdb/src/planner/expression/bound_columnref_expression.cpp +2 -2
  599. package/src/duckdb/src/planner/expression/bound_comparison_expression.cpp +4 -4
  600. package/src/duckdb/src/planner/expression/bound_conjunction_expression.cpp +2 -2
  601. package/src/duckdb/src/planner/expression/bound_constant_expression.cpp +2 -2
  602. package/src/duckdb/src/planner/expression/bound_default_expression.cpp +7 -1
  603. package/src/duckdb/src/planner/expression/bound_expression.cpp +1 -1
  604. package/src/duckdb/src/planner/expression/bound_function_expression.cpp +3 -4
  605. package/src/duckdb/src/planner/expression/bound_lambda_expression.cpp +4 -5
  606. package/src/duckdb/src/planner/expression/bound_lambdaref_expression.cpp +2 -2
  607. package/src/duckdb/src/planner/expression/bound_operator_expression.cpp +3 -4
  608. package/src/duckdb/src/planner/expression/bound_parameter_expression.cpp +2 -2
  609. package/src/duckdb/src/planner/expression/bound_reference_expression.cpp +2 -2
  610. package/src/duckdb/src/planner/expression/bound_subquery_expression.cpp +1 -1
  611. package/src/duckdb/src/planner/expression/bound_unnest_expression.cpp +3 -3
  612. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +8 -21
  613. package/src/duckdb/src/planner/expression.cpp +18 -0
  614. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +2 -2
  615. package/src/duckdb/src/planner/expression_binder.cpp +3 -2
  616. package/src/duckdb/src/planner/expression_iterator.cpp +2 -2
  617. package/src/duckdb/src/planner/filter/conjunction_filter.cpp +2 -2
  618. package/src/duckdb/src/planner/filter/constant_filter.cpp +1 -1
  619. package/src/duckdb/src/planner/logical_operator.cpp +3 -4
  620. package/src/duckdb/src/planner/logical_operator_visitor.cpp +1 -1
  621. package/src/duckdb/src/planner/operator/logical_distinct.cpp +5 -4
  622. package/src/duckdb/src/planner/operator/logical_pivot.cpp +14 -2
  623. package/src/duckdb/src/planner/planner.cpp +5 -15
  624. package/src/duckdb/src/planner/table_filter.cpp +1 -1
  625. package/src/duckdb/src/storage/arena_allocator.cpp +2 -2
  626. package/src/duckdb/src/storage/buffer/block_handle.cpp +1 -1
  627. package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +2 -2
  628. package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -3
  629. package/src/duckdb/src/storage/compression/bitpacking.cpp +8 -8
  630. package/src/duckdb/src/storage/compression/dictionary_compression.cpp +36 -36
  631. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +11 -11
  632. package/src/duckdb/src/storage/compression/fsst.cpp +34 -34
  633. package/src/duckdb/src/storage/compression/rle.cpp +8 -8
  634. package/src/duckdb/src/storage/compression/string_uncompressed.cpp +13 -13
  635. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +11 -11
  636. package/src/duckdb/src/storage/data_table.cpp +12 -10
  637. package/src/duckdb/src/storage/index.cpp +13 -0
  638. package/src/duckdb/src/storage/single_file_block_manager.cpp +3 -3
  639. package/src/duckdb/src/storage/standard_buffer_manager.cpp +3 -3
  640. package/src/duckdb/src/storage/statistics/list_stats.cpp +1 -1
  641. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +1 -1
  642. package/src/duckdb/src/storage/statistics/string_stats.cpp +15 -14
  643. package/src/duckdb/src/storage/storage_manager.cpp +6 -0
  644. package/src/duckdb/src/storage/table/chunk_info.cpp +2 -2
  645. package/src/duckdb/src/storage/table/column_data.cpp +7 -3
  646. package/src/duckdb/src/storage/table/column_segment.cpp +3 -3
  647. package/src/duckdb/src/storage/table/list_column_data.cpp +8 -7
  648. package/src/duckdb/src/storage/table/row_group.cpp +8 -7
  649. package/src/duckdb/src/storage/table/row_group_collection.cpp +6 -3
  650. package/src/duckdb/src/storage/table/standard_column_data.cpp +5 -4
  651. package/src/duckdb/src/storage/table/struct_column_data.cpp +4 -3
  652. package/src/duckdb/src/storage/table/update_segment.cpp +12 -12
  653. package/src/duckdb/src/storage/wal_replay.cpp +5 -6
  654. package/src/duckdb/src/transaction/cleanup_state.cpp +3 -3
  655. package/src/duckdb/src/transaction/commit_state.cpp +8 -8
  656. package/src/duckdb/src/transaction/duck_transaction.cpp +9 -7
  657. package/src/duckdb/src/transaction/duck_transaction_manager.cpp +16 -16
  658. package/src/duckdb/src/transaction/rollback_state.cpp +3 -3
  659. package/src/duckdb/src/verification/prepared_statement_verifier.cpp +1 -1
  660. package/src/duckdb/src/verification/statement_verifier.cpp +3 -4
  661. package/src/duckdb/third_party/hyperloglog/hyperloglog.hpp +2 -2
  662. package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +0 -1
  663. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +0 -14
  664. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +12828 -12956
  665. package/src/duckdb/third_party/pcg/pcg_extras.hpp +1 -1
  666. package/src/duckdb/third_party/zstd/compress/zstd_compress.cpp +3 -0
  667. package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_cwksp.h +4 -0
  668. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +5 -5
  669. package/src/duckdb/ub_src_parser_transform_statement.cpp +0 -2
  670. package/test/extension.test.ts +11 -0
  671. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_database_info.hpp +0 -46
  672. package/src/duckdb/src/parser/transform/statement/transform_create_database.cpp +0 -28
@@ -113,7 +113,7 @@ void Binder::BindModifiers(OrderBinder &order_binder, QueryNode &statement, Boun
113
113
  unique_ptr<BoundResultModifier> bound_modifier;
114
114
  switch (mod->type) {
115
115
  case ResultModifierType::DISTINCT_MODIFIER: {
116
- auto &distinct = (DistinctModifier &)*mod;
116
+ auto &distinct = mod->Cast<DistinctModifier>();
117
117
  auto bound_distinct = make_uniq<BoundDistinctModifier>();
118
118
  bound_distinct->distinct_type =
119
119
  distinct.distinct_on_targets.empty() ? DistinctType::DISTINCT : DistinctType::DISTINCT_ON;
@@ -133,7 +133,7 @@ void Binder::BindModifiers(OrderBinder &order_binder, QueryNode &statement, Boun
133
133
  break;
134
134
  }
135
135
  case ResultModifierType::ORDER_MODIFIER: {
136
- auto &order = (OrderModifier &)*mod;
136
+ auto &order = mod->Cast<OrderModifier>();
137
137
  auto bound_order = make_uniq<BoundOrderModifier>();
138
138
  auto &config = DBConfig::GetConfig(context);
139
139
  D_ASSERT(!order.orders.empty());
@@ -174,10 +174,10 @@ void Binder::BindModifiers(OrderBinder &order_binder, QueryNode &statement, Boun
174
174
  break;
175
175
  }
176
176
  case ResultModifierType::LIMIT_MODIFIER:
177
- bound_modifier = BindLimit(order_binder, (LimitModifier &)*mod);
177
+ bound_modifier = BindLimit(order_binder, mod->Cast<LimitModifier>());
178
178
  break;
179
179
  case ResultModifierType::LIMIT_PERCENT_MODIFIER:
180
- bound_modifier = BindLimitPercent(order_binder, (LimitPercentModifier &)*mod);
180
+ bound_modifier = BindLimitPercent(order_binder, mod->Cast<LimitPercentModifier>());
181
181
  break;
182
182
  default:
183
183
  throw Exception("Unsupported result modifier");
@@ -203,7 +203,7 @@ void Binder::BindModifierTypes(BoundQueryNode &result, const vector<LogicalType>
203
203
  for (auto &bound_mod : result.modifiers) {
204
204
  switch (bound_mod->type) {
205
205
  case ResultModifierType::DISTINCT_MODIFIER: {
206
- auto &distinct = (BoundDistinctModifier &)*bound_mod;
206
+ auto &distinct = bound_mod->Cast<BoundDistinctModifier>();
207
207
  D_ASSERT(!distinct.target_distincts.empty());
208
208
  // set types of distinct targets
209
209
  for (auto &expr : distinct.target_distincts) {
@@ -226,19 +226,19 @@ void Binder::BindModifierTypes(BoundQueryNode &result, const vector<LogicalType>
226
226
  break;
227
227
  }
228
228
  case ResultModifierType::LIMIT_MODIFIER: {
229
- auto &limit = (BoundLimitModifier &)*bound_mod;
229
+ auto &limit = bound_mod->Cast<BoundLimitModifier>();
230
230
  AssignReturnType(limit.limit, sql_types);
231
231
  AssignReturnType(limit.offset, sql_types);
232
232
  break;
233
233
  }
234
234
  case ResultModifierType::LIMIT_PERCENT_MODIFIER: {
235
- auto &limit = (BoundLimitPercentModifier &)*bound_mod;
235
+ auto &limit = bound_mod->Cast<BoundLimitPercentModifier>();
236
236
  AssignReturnType(limit.limit, sql_types);
237
237
  AssignReturnType(limit.offset, sql_types);
238
238
  break;
239
239
  }
240
240
  case ResultModifierType::ORDER_MODIFIER: {
241
- auto &order = (BoundOrderModifier &)*bound_mod;
241
+ auto &order = bound_mod->Cast<BoundOrderModifier>();
242
242
  for (auto &order_node : order.orders) {
243
243
  auto &expr = order_node.expression;
244
244
  D_ASSERT(expr->type == ExpressionType::BOUND_COLUMN_REF);
@@ -288,6 +288,9 @@ void Binder::BindWhereStarExpression(unique_ptr<ParsedExpression> &expr) {
288
288
  // expand the stars for this expression
289
289
  vector<unique_ptr<ParsedExpression>> new_conditions;
290
290
  ExpandStarExpression(std::move(expr), new_conditions);
291
+ if (new_conditions.empty()) {
292
+ throw ParserException("COLUMNS expansion resulted in empty set of columns");
293
+ }
291
294
 
292
295
  // set up an AND conjunction between the expanded conditions
293
296
  expr = std::move(new_conditions[0]);
@@ -401,14 +404,15 @@ unique_ptr<BoundQueryNode> Binder::BindSelectNode(SelectNode &statement, unique_
401
404
  }
402
405
 
403
406
  // bind the QUALIFY clause, if any
407
+ unique_ptr<QualifyBinder> qualify_binder;
404
408
  if (statement.qualify) {
405
409
  if (statement.aggregate_handling == AggregateHandling::FORCE_AGGREGATES) {
406
410
  throw BinderException("Combining QUALIFY with GROUP BY ALL is not supported yet");
407
411
  }
408
- QualifyBinder qualify_binder(*this, context, *result, info, alias_map);
412
+ qualify_binder = make_uniq<QualifyBinder>(*this, context, *result, info, alias_map);
409
413
  ExpressionBinder::QualifyColumnNames(*this, statement.qualify);
410
- result->qualify = qualify_binder.Bind(statement.qualify);
411
- if (qualify_binder.HasBoundColumns() && qualify_binder.BoundAggregates()) {
414
+ result->qualify = qualify_binder->Bind(statement.qualify);
415
+ if (qualify_binder->HasBoundColumns() && qualify_binder->BoundAggregates()) {
412
416
  throw BinderException("Cannot mix aggregates with non-aggregated columns!");
413
417
  }
414
418
  }
@@ -487,19 +491,31 @@ unique_ptr<BoundQueryNode> Binder::BindSelectNode(SelectNode &statement, unique_
487
491
  !result->groups.grouping_sets.empty()) {
488
492
  if (statement.aggregate_handling == AggregateHandling::NO_AGGREGATES_ALLOWED) {
489
493
  throw BinderException("Aggregates cannot be present in a Project relation!");
490
- } else if (select_binder.HasBoundColumns()) {
491
- auto &bound_columns = select_binder.GetBoundColumns();
492
- string error;
493
- error = "column \"%s\" must appear in the GROUP BY clause or must be part of an aggregate function.";
494
- if (statement.aggregate_handling == AggregateHandling::FORCE_AGGREGATES) {
495
- error += "\nGROUP BY ALL will only group entries in the SELECT list. Add it to the SELECT list or "
496
- "GROUP BY this entry explicitly.";
497
- } else {
498
- error += "\nEither add it to the GROUP BY list, or use \"ANY_VALUE(%s)\" if the exact value of \"%s\" "
499
- "is not important.";
494
+ } else {
495
+ vector<reference<BaseSelectBinder>> to_check_binders;
496
+ to_check_binders.push_back(select_binder);
497
+ if (qualify_binder) {
498
+ to_check_binders.push_back(*qualify_binder);
499
+ }
500
+ for (auto &binder : to_check_binders) {
501
+ auto &sel_binder = binder.get();
502
+ if (!sel_binder.HasBoundColumns()) {
503
+ continue;
504
+ }
505
+ auto &bound_columns = sel_binder.GetBoundColumns();
506
+ string error;
507
+ error = "column \"%s\" must appear in the GROUP BY clause or must be part of an aggregate function.";
508
+ if (statement.aggregate_handling == AggregateHandling::FORCE_AGGREGATES) {
509
+ error += "\nGROUP BY ALL will only group entries in the SELECT list. Add it to the SELECT list or "
510
+ "GROUP BY this entry explicitly.";
511
+ } else {
512
+ error +=
513
+ "\nEither add it to the GROUP BY list, or use \"ANY_VALUE(%s)\" if the exact value of \"%s\" "
514
+ "is not important.";
515
+ }
516
+ throw BinderException(FormatError(bound_columns[0].query_location, error, bound_columns[0].name,
517
+ bound_columns[0].name, bound_columns[0].name));
500
518
  }
501
- throw BinderException(FormatError(bound_columns[0].query_location, error, bound_columns[0].name,
502
- bound_columns[0].name, bound_columns[0].name));
503
519
  }
504
520
  }
505
521
 
@@ -13,14 +13,14 @@ unique_ptr<LogicalOperator> Binder::VisitQueryNode(BoundQueryNode &node, unique_
13
13
  for (auto &mod : node.modifiers) {
14
14
  switch (mod->type) {
15
15
  case ResultModifierType::DISTINCT_MODIFIER: {
16
- auto &bound = (BoundDistinctModifier &)*mod;
16
+ auto &bound = mod->Cast<BoundDistinctModifier>();
17
17
  auto distinct = make_uniq<LogicalDistinct>(std::move(bound.target_distincts), bound.distinct_type);
18
18
  distinct->AddChild(std::move(root));
19
19
  root = std::move(distinct);
20
20
  break;
21
21
  }
22
22
  case ResultModifierType::ORDER_MODIFIER: {
23
- auto &bound = (BoundOrderModifier &)*mod;
23
+ auto &bound = mod->Cast<BoundOrderModifier>();
24
24
  if (root->type == LogicalOperatorType::LOGICAL_DISTINCT) {
25
25
  auto &distinct = root->Cast<LogicalDistinct>();
26
26
  if (distinct.distinct_type == DistinctType::DISTINCT_ON) {
@@ -37,7 +37,7 @@ unique_ptr<LogicalOperator> Binder::VisitQueryNode(BoundQueryNode &node, unique_
37
37
  break;
38
38
  }
39
39
  case ResultModifierType::LIMIT_MODIFIER: {
40
- auto &bound = (BoundLimitModifier &)*mod;
40
+ auto &bound = mod->Cast<BoundLimitModifier>();
41
41
  auto limit = make_uniq<LogicalLimit>(bound.limit_val, bound.offset_val, std::move(bound.limit),
42
42
  std::move(bound.offset));
43
43
  limit->AddChild(std::move(root));
@@ -45,7 +45,7 @@ unique_ptr<LogicalOperator> Binder::VisitQueryNode(BoundQueryNode &node, unique_
45
45
  break;
46
46
  }
47
47
  case ResultModifierType::LIMIT_PERCENT_MODIFIER: {
48
- auto &bound = (BoundLimitPercentModifier &)*mod;
48
+ auto &bound = mod->Cast<BoundLimitPercentModifier>();
49
49
  auto limit = make_uniq<LogicalLimitPercent>(bound.limit_percent, bound.offset_val, std::move(bound.limit),
50
50
  std::move(bound.offset));
51
51
  limit->AddChild(std::move(root));
@@ -13,7 +13,6 @@
13
13
  #include "duckdb/parser/parsed_data/create_index_info.hpp"
14
14
  #include "duckdb/parser/parsed_data/create_macro_info.hpp"
15
15
  #include "duckdb/parser/parsed_data/create_view_info.hpp"
16
- #include "duckdb/parser/parsed_data/create_database_info.hpp"
17
16
  #include "duckdb/parser/tableref/table_function_ref.hpp"
18
17
  #include "duckdb/parser/parsed_expression_iterator.hpp"
19
18
  #include "duckdb/parser/statement/create_statement.hpp"
@@ -501,7 +500,7 @@ BoundStatement Binder::Bind(CreateStatement &stmt) {
501
500
  result.plan = make_uniq<LogicalCreate>(LogicalOperatorType::LOGICAL_CREATE_SCHEMA, std::move(stmt.info));
502
501
  break;
503
502
  case CatalogType::VIEW_ENTRY: {
504
- auto &base = (CreateViewInfo &)*stmt.info;
503
+ auto &base = stmt.info->Cast<CreateViewInfo>();
505
504
  // bind the schema
506
505
  auto &schema = BindCreateSchema(*stmt.info);
507
506
  BindCreateViewInfo(base);
@@ -656,32 +655,6 @@ BoundStatement Binder::Bind(CreateStatement &stmt) {
656
655
  }
657
656
  break;
658
657
  }
659
- case CatalogType::DATABASE_ENTRY: {
660
- // not supported in DuckDB yet but allow extensions to intercept and implement this functionality
661
- auto &base = stmt.info->Cast<CreateDatabaseInfo>();
662
- string database_name = base.name;
663
- string source_path = base.path;
664
-
665
- auto &config = DBConfig::GetConfig(context);
666
-
667
- if (config.storage_extensions.empty()) {
668
- throw NotImplementedException("CREATE DATABASE not supported in DuckDB yet");
669
- }
670
- // for now assume only one storage extension provides the custom create_database impl
671
- for (auto &extension_entry : config.storage_extensions) {
672
- if (extension_entry.second->create_database != nullptr) {
673
- auto &storage_extension = extension_entry.second;
674
- auto create_database_function_ref = storage_extension->create_database(
675
- storage_extension->storage_info.get(), context, database_name, source_path);
676
- if (create_database_function_ref) {
677
- auto bound_create_database_func = Bind(*create_database_function_ref);
678
- result.plan = CreatePlan(*bound_create_database_func);
679
- break;
680
- }
681
- }
682
- }
683
- break;
684
- }
685
658
  default:
686
659
  throw Exception("Unrecognized type!");
687
660
  }
@@ -294,9 +294,26 @@ unique_ptr<BoundCreateTableInfo> Binder::BindCreateTableInfo(unique_ptr<CreateIn
294
294
  BindLogicalType(context, column.TypeMutable(), &result->schema.catalog);
295
295
  // We add a catalog dependency
296
296
  auto type_dependency = EnumType::GetCatalog(column.Type());
297
+
297
298
  if (type_dependency) {
298
299
  // Only if the USER comes from a create type
299
- result->dependencies.AddDependency(*type_dependency);
300
+ if (!schema.catalog.IsTemporaryCatalog()) {
301
+ // If it is not a TEMP table we add a dependency
302
+ result->dependencies.AddDependency(*type_dependency);
303
+ } else {
304
+ auto enum_type = type_dependency->user_type;
305
+ auto &enum_entries = EnumType::GetValuesInsertOrder(enum_type);
306
+ auto enum_size = EnumType::GetSize(enum_type);
307
+ Vector copy_enum_entries_vec(LogicalType::VARCHAR, enum_size);
308
+ auto copy_enum_entries_ptr = FlatVector::GetData<string_t>(copy_enum_entries_vec);
309
+ auto enum_entries_ptr = FlatVector::GetData<string_t>(enum_entries);
310
+ for (idx_t enum_idx = 0; enum_idx < enum_size; enum_idx++) {
311
+ copy_enum_entries_ptr[enum_idx] =
312
+ StringVector::AddStringOrBlob(copy_enum_entries_vec, enum_entries_ptr[enum_idx]);
313
+ }
314
+ auto copy_type = LogicalType::ENUM(EnumType::GetTypeName(enum_type), copy_enum_entries_vec, enum_size);
315
+ column.SetType(copy_type);
316
+ }
300
317
  }
301
318
  }
302
319
  result->dependencies.VerifyDependencies(schema.catalog, result->Base().table);
@@ -47,31 +47,6 @@ BoundStatement Binder::Bind(DropStatement &stmt) {
47
47
  stmt.info->schema = entry->ParentSchema().name;
48
48
  break;
49
49
  }
50
- case CatalogType::DATABASE_ENTRY: {
51
- auto &base = (DropInfo &)*stmt.info;
52
- string database_name = base.name;
53
-
54
- auto &config = DBConfig::GetConfig(context);
55
- // for now assume only one storage extension provides the custom drop_database impl
56
- for (auto &extension_entry : config.storage_extensions) {
57
- if (extension_entry.second->drop_database == nullptr) {
58
- continue;
59
- }
60
- auto &storage_extension = extension_entry.second;
61
- auto drop_database_function_ref =
62
- storage_extension->drop_database(storage_extension->storage_info.get(), context, database_name);
63
- if (drop_database_function_ref) {
64
- auto bound_drop_database_func = Bind(*drop_database_function_ref);
65
- result.plan = CreatePlan(*bound_drop_database_func);
66
- result.names = {"Success"};
67
- result.types = {LogicalType::BIGINT};
68
- properties.allow_stream_result = false;
69
- properties.return_type = StatementReturnType::NOTHING;
70
- return result;
71
- }
72
- }
73
- throw BinderException("Drop is not supported for this database!");
74
- }
75
50
  default:
76
51
  throw BinderException("Unknown catalog type for drop statement!");
77
52
  }
@@ -350,7 +350,7 @@ void Binder::BindOnConflictClause(LogicalInsert &insert, TableCatalogEntry &tabl
350
350
  // Get the column_ids we need to fetch later on from the conflicting tuples
351
351
  // of the original table, to execute the expressions
352
352
  D_ASSERT(original_binding->binding_type == BindingType::TABLE);
353
- auto &table_binding = (TableBinding &)*original_binding;
353
+ auto &table_binding = original_binding->Cast<TableBinding>();
354
354
  insert.columns_to_fetch = table_binding.GetBoundColumnIds();
355
355
  return;
356
356
  }
@@ -376,7 +376,7 @@ void Binder::BindOnConflictClause(LogicalInsert &insert, TableCatalogEntry &tabl
376
376
  // Get the column_ids we need to fetch later on from the conflicting tuples
377
377
  // of the original table, to execute the expressions
378
378
  D_ASSERT(original_binding->binding_type == BindingType::TABLE);
379
- auto &table_binding = (TableBinding &)*original_binding;
379
+ auto &table_binding = original_binding->Cast<TableBinding>();
380
380
  insert.columns_to_fetch = table_binding.GetBoundColumnIds();
381
381
 
382
382
  // Replace the column bindings to refer to the child operator
@@ -20,119 +20,6 @@
20
20
 
21
21
  namespace duckdb {
22
22
 
23
- static void BindExtraColumns(TableCatalogEntry &table, LogicalGet &get, LogicalProjection &proj, LogicalUpdate &update,
24
- physical_index_set_t &bound_columns) {
25
- if (bound_columns.size() <= 1) {
26
- return;
27
- }
28
- idx_t found_column_count = 0;
29
- physical_index_set_t found_columns;
30
- for (idx_t i = 0; i < update.columns.size(); i++) {
31
- if (bound_columns.find(update.columns[i]) != bound_columns.end()) {
32
- // this column is referenced in the CHECK constraint
33
- found_column_count++;
34
- found_columns.insert(update.columns[i]);
35
- }
36
- }
37
- if (found_column_count > 0 && found_column_count != bound_columns.size()) {
38
- // columns in this CHECK constraint were referenced, but not all were part of the UPDATE
39
- // add them to the scan and update set
40
- for (auto &check_column_id : bound_columns) {
41
- if (found_columns.find(check_column_id) != found_columns.end()) {
42
- // column is already projected
43
- continue;
44
- }
45
- // column is not projected yet: project it by adding the clause "i=i" to the set of updated columns
46
- auto &column = table.GetColumns().GetColumn(check_column_id);
47
- update.expressions.push_back(make_uniq<BoundColumnRefExpression>(
48
- column.Type(), ColumnBinding(proj.table_index, proj.expressions.size())));
49
- proj.expressions.push_back(make_uniq<BoundColumnRefExpression>(
50
- column.Type(), ColumnBinding(get.table_index, get.column_ids.size())));
51
- get.column_ids.push_back(check_column_id.index);
52
- update.columns.push_back(check_column_id);
53
- }
54
- }
55
- }
56
-
57
- static bool TypeSupportsRegularUpdate(const LogicalType &type) {
58
- switch (type.id()) {
59
- case LogicalTypeId::LIST:
60
- case LogicalTypeId::MAP:
61
- case LogicalTypeId::UNION:
62
- // lists and maps and unions don't support updates directly
63
- return false;
64
- case LogicalTypeId::STRUCT: {
65
- auto &child_types = StructType::GetChildTypes(type);
66
- for (auto &entry : child_types) {
67
- if (!TypeSupportsRegularUpdate(entry.second)) {
68
- return false;
69
- }
70
- }
71
- return true;
72
- }
73
- default:
74
- return true;
75
- }
76
- }
77
-
78
- static void BindUpdateConstraints(TableCatalogEntry &table, LogicalGet &get, LogicalProjection &proj,
79
- LogicalUpdate &update) {
80
- if (!table.IsDuckTable()) {
81
- return;
82
- }
83
- // check the constraints and indexes of the table to see if we need to project any additional columns
84
- // we do this for indexes with multiple columns and CHECK constraints in the UPDATE clause
85
- // suppose we have a constraint CHECK(i + j < 10); now we need both i and j to check the constraint
86
- // if we are only updating one of the two columns we add the other one to the UPDATE set
87
- // with a "useless" update (i.e. i=i) so we can verify that the CHECK constraint is not violated
88
- for (auto &constraint : table.GetBoundConstraints()) {
89
- if (constraint->type == ConstraintType::CHECK) {
90
- auto &check = *reinterpret_cast<BoundCheckConstraint *>(constraint.get());
91
- // check constraint! check if we need to add any extra columns to the UPDATE clause
92
- BindExtraColumns(table, get, proj, update, check.bound_columns);
93
- }
94
- }
95
- auto &storage = table.GetStorage();
96
- if (update.return_chunk) {
97
- physical_index_set_t all_columns;
98
- for (idx_t i = 0; i < storage.column_definitions.size(); i++) {
99
- all_columns.insert(PhysicalIndex(i));
100
- }
101
- BindExtraColumns(table, get, proj, update, all_columns);
102
- }
103
- // for index updates we always turn any update into an insert and a delete
104
- // we thus need all the columns to be available, hence we check if the update touches any index columns
105
- // If the returning keyword is used, we need access to the whole row in case the user requests it.
106
- // Therefore switch the update to a delete and insert.
107
- update.update_is_del_and_insert = false;
108
- storage.info->indexes.Scan([&](Index &index) {
109
- if (index.IndexIsUpdated(update.columns)) {
110
- update.update_is_del_and_insert = true;
111
- return true;
112
- }
113
- return false;
114
- });
115
-
116
- // we also convert any updates on LIST columns into delete + insert
117
- for (auto &col_index : update.columns) {
118
- auto &column = table.GetColumns().GetColumn(col_index);
119
- if (!TypeSupportsRegularUpdate(column.Type())) {
120
- update.update_is_del_and_insert = true;
121
- break;
122
- }
123
- }
124
-
125
- if (update.update_is_del_and_insert) {
126
- // the update updates a column required by an index or requires returning the updated rows,
127
- // push projections for all columns
128
- physical_index_set_t all_columns;
129
- for (idx_t i = 0; i < storage.column_definitions.size(); i++) {
130
- all_columns.insert(PhysicalIndex(i));
131
- }
132
- BindExtraColumns(table, get, proj, update, all_columns);
133
- }
134
- }
135
-
136
23
  // This creates a LogicalProjection and moves 'root' into it as a child
137
24
  // unless there are no expressions to project, in which case it just returns 'root'
138
25
  unique_ptr<LogicalOperator> Binder::BindUpdateSet(LogicalOperator &op, unique_ptr<LogicalOperator> root,
@@ -239,7 +126,8 @@ BoundStatement Binder::Bind(UpdateStatement &stmt) {
239
126
  auto proj = unique_ptr_cast<LogicalOperator, LogicalProjection>(std::move(proj_tmp));
240
127
 
241
128
  // bind any extra columns necessary for CHECK constraints or indexes
242
- BindUpdateConstraints(table, *get, *proj, *update);
129
+ table.BindUpdateConstraints(*get, *proj, *update, context);
130
+
243
131
  // finally add the row id column to the projection list
244
132
  proj->expressions.push_back(make_uniq<BoundColumnRefExpression>(
245
133
  LogicalType::ROW_TYPE, ColumnBinding(get->table_index, get->column_ids.size())));
@@ -84,7 +84,7 @@ static unique_ptr<SelectNode> PivotInitialAggregate(PivotBindState &bind_state,
84
84
  if (entry->type != ExpressionType::COLUMN_REF) {
85
85
  throw InternalException("Unexpected child of pivot source - not a ColumnRef");
86
86
  }
87
- auto &columnref = (ColumnRefExpression &)*entry;
87
+ auto &columnref = entry->Cast<ColumnRefExpression>();
88
88
  if (handled_columns.find(columnref.GetColumnName()) == handled_columns.end()) {
89
89
  // not handled - add to grouping set
90
90
  subquery_stage1->groups.group_expressions.push_back(
@@ -250,7 +250,9 @@ unique_ptr<BoundTableRef> Binder::BindBoundPivot(PivotRef &ref) {
250
250
  auto &aggregates = result->bound_pivot.aggregates;
251
251
  ExtractPivotAggregates(*result->child, aggregates);
252
252
  if (aggregates.size() != ref.bound_aggregate_names.size()) {
253
- throw InternalException("Pivot - aggregate count mismatch");
253
+ throw BinderException("Pivot aggregate count mismatch. Expected %llu aggregates but found %llu. Are all pivot "
254
+ "expressions aggregate functions?",
255
+ ref.bound_aggregate_names.size(), aggregates.size());
254
256
  }
255
257
 
256
258
  vector<string> child_names;
@@ -544,6 +546,9 @@ unique_ptr<BoundTableRef> Binder::Bind(PivotRef &ref) {
544
546
 
545
547
  // bind the source of the pivot
546
548
  // we need to do this to be able to expand star expressions
549
+ if (ref.source->type == TableReferenceType::SUBQUERY && ref.source->alias.empty()) {
550
+ ref.source->alias = "__internal_pivot_alias_" + to_string(GenerateTableIndex());
551
+ }
547
552
  auto copied_source = ref.source->Copy();
548
553
  auto star_binder = Binder::CreateBinder(context, this);
549
554
  star_binder->Bind(*copied_source);
@@ -97,6 +97,8 @@ bool Binder::BindTableFunctionParameters(TableFunctionCatalogEntry &table_functi
97
97
  subquery = make_uniq<BoundSubqueryRef>(std::move(binder), std::move(node));
98
98
  seen_subquery = true;
99
99
  arguments.emplace_back(LogicalTypeId::TABLE);
100
+ parameters.emplace_back(
101
+ Value(LogicalType::INVALID)); // this is a dummy value so the lengths of arguments and parameter match
100
102
  continue;
101
103
  }
102
104
 
@@ -150,8 +152,8 @@ Binder::BindTableFunctionInternal(TableFunction &table_function, const string &f
150
152
  }
151
153
  bind_data = table_function.bind(context, bind_input, return_types, return_names);
152
154
  if (table_function.name == "pandas_scan" || table_function.name == "arrow_scan") {
153
- auto arrow_bind = (PyTableFunctionData *)bind_data.get();
154
- arrow_bind->external_dependency = std::move(external_dependency);
155
+ auto &arrow_bind = bind_data->Cast<PyTableFunctionData>();
156
+ arrow_bind.external_dependency = std::move(external_dependency);
155
157
  }
156
158
  if (table_function.name == "read_csv" || table_function.name == "read_csv_auto") {
157
159
  auto &csv_bind = bind_data->Cast<ReadCSVData>();
@@ -161,6 +163,9 @@ Binder::BindTableFunctionInternal(TableFunction &table_function, const string &f
161
163
  table_function.extra_info = "(Multi-Threaded)";
162
164
  }
163
165
  }
166
+ } else {
167
+ throw InvalidInputException("Cannot call function \"%s\" directly - it has no bind function",
168
+ table_function.name);
164
169
  }
165
170
  if (return_types.size() != return_names.size()) {
166
171
  throw InternalException("Failed to bind \"%s\": return_types/names must have same size", table_function.name);
@@ -208,7 +208,7 @@ unique_ptr<LogicalOperator> Binder::CreatePlan(BoundTableRef &ref) {
208
208
  root = CreatePlan(ref.Cast<BoundCTERef>());
209
209
  break;
210
210
  case TableReferenceType::PIVOT:
211
- root = CreatePlan((BoundPivotRef &)ref);
211
+ root = CreatePlan(ref.Cast<BoundPivotRef>());
212
212
  break;
213
213
  case TableReferenceType::INVALID:
214
214
  default:
@@ -16,6 +16,20 @@ BoundOrderByNode::BoundOrderByNode(OrderType type, OrderByNullType null_order, u
16
16
  unique_ptr<BaseStatistics> stats)
17
17
  : type(type), null_order(null_order), expression(std::move(expression)), stats(std::move(stats)) {
18
18
  }
19
+ void BoundOrderModifier::Serialize(Serializer &serializer) const {
20
+ FieldWriter writer(serializer);
21
+ writer.WriteRegularSerializableList(orders);
22
+ writer.Finalize();
23
+ }
24
+ unique_ptr<BoundOrderModifier> BoundOrderModifier::Deserialize(Deserializer &source, PlanDeserializationState &state) {
25
+ auto x = make_uniq<BoundOrderModifier>();
26
+
27
+ FieldReader reader(source);
28
+ x->orders = reader.ReadRequiredSerializableList<BoundOrderByNode, BoundOrderByNode>(state);
29
+ reader.Finalize();
30
+
31
+ return x;
32
+ }
19
33
 
20
34
  BoundOrderByNode BoundOrderByNode::Copy() const {
21
35
  if (stats) {
@@ -29,7 +43,7 @@ bool BoundOrderByNode::Equals(const BoundOrderByNode &other) const {
29
43
  if (type != other.type || null_order != other.null_order) {
30
44
  return false;
31
45
  }
32
- if (!expression->Equals(other.expression.get())) {
46
+ if (!expression->Equals(*other.expression)) {
33
47
  return false;
34
48
  }
35
49
 
@@ -88,24 +102,29 @@ unique_ptr<BoundOrderModifier> BoundOrderModifier::Copy() const {
88
102
  return result;
89
103
  }
90
104
 
91
- bool BoundOrderModifier::Equals(const BoundOrderModifier *left, const BoundOrderModifier *right) {
92
- if (left == right) {
93
- return true;
94
- }
95
- if (!left || !right) {
96
- return false;
97
- }
98
- if (left->orders.size() != right->orders.size()) {
105
+ bool BoundOrderModifier::Equals(const BoundOrderModifier &left, const BoundOrderModifier &right) {
106
+ if (left.orders.size() != right.orders.size()) {
99
107
  return false;
100
108
  }
101
- for (idx_t i = 0; i < left->orders.size(); i++) {
102
- if (!left->orders[i].Equals(right->orders[i])) {
109
+ for (idx_t i = 0; i < left.orders.size(); i++) {
110
+ if (!left.orders[i].Equals(right.orders[i])) {
103
111
  return false;
104
112
  }
105
113
  }
106
114
  return true;
107
115
  }
108
116
 
117
+ bool BoundOrderModifier::Equals(const unique_ptr<BoundOrderModifier> &left,
118
+ const unique_ptr<BoundOrderModifier> &right) {
119
+ if (left.get() == right.get()) {
120
+ return true;
121
+ }
122
+ if (!left || !right) {
123
+ return false;
124
+ }
125
+ return BoundOrderModifier::Equals(*left, *right);
126
+ }
127
+
109
128
  BoundLimitModifier::BoundLimitModifier() : BoundResultModifier(ResultModifierType::LIMIT_MODIFIER) {
110
129
  }
111
130
 
@@ -30,11 +30,11 @@ hash_t BoundAggregateExpression::Hash() const {
30
30
  return result;
31
31
  }
32
32
 
33
- bool BoundAggregateExpression::Equals(const BaseExpression *other_p) const {
33
+ bool BoundAggregateExpression::Equals(const BaseExpression &other_p) const {
34
34
  if (!Expression::Equals(other_p)) {
35
35
  return false;
36
36
  }
37
- auto &other = other_p->Cast<BoundAggregateExpression>();
37
+ auto &other = other_p.Cast<BoundAggregateExpression>();
38
38
  if (other.aggr_type != aggr_type) {
39
39
  return false;
40
40
  }
@@ -44,18 +44,18 @@ bool BoundAggregateExpression::Equals(const BaseExpression *other_p) const {
44
44
  if (children.size() != other.children.size()) {
45
45
  return false;
46
46
  }
47
- if (!Expression::Equals(other.filter.get(), filter.get())) {
47
+ if (!Expression::Equals(other.filter, filter)) {
48
48
  return false;
49
49
  }
50
50
  for (idx_t i = 0; i < children.size(); i++) {
51
- if (!Expression::Equals(children[i].get(), other.children[i].get())) {
51
+ if (!Expression::Equals(*children[i], *other.children[i])) {
52
52
  return false;
53
53
  }
54
54
  }
55
55
  if (!FunctionData::Equals(bind_info.get(), other.bind_info.get())) {
56
56
  return false;
57
57
  }
58
- if (!BoundOrderModifier::Equals(order_bys.get(), other.order_bys.get())) {
58
+ if (!BoundOrderModifier::Equals(order_bys, other.order_bys)) {
59
59
  return false;
60
60
  }
61
61
  return true;
@@ -84,9 +84,7 @@ unique_ptr<Expression> BoundAggregateExpression::Copy() {
84
84
  void BoundAggregateExpression::Serialize(FieldWriter &writer) const {
85
85
  writer.WriteField(IsDistinct());
86
86
  writer.WriteOptional(filter);
87
- if (order_bys) {
88
- throw NotImplementedException("Serialization of ORDER BY aggregate not yet supported");
89
- }
87
+ writer.WriteOptional(order_bys);
90
88
  FunctionSerializer::Serialize<AggregateFunction>(writer, function, return_type, children, bind_info.get());
91
89
  }
92
90
 
@@ -94,13 +92,16 @@ unique_ptr<Expression> BoundAggregateExpression::Deserialize(ExpressionDeseriali
94
92
  FieldReader &reader) {
95
93
  auto distinct = reader.ReadRequired<bool>();
96
94
  auto filter = reader.ReadOptional<Expression>(nullptr, state.gstate);
95
+ auto order_bys = reader.ReadOptional<BoundOrderModifier>(nullptr, state.gstate);
97
96
  vector<unique_ptr<Expression>> children;
98
97
  unique_ptr<FunctionData> bind_info;
99
98
  auto function = FunctionSerializer::Deserialize<AggregateFunction, AggregateFunctionCatalogEntry>(
100
99
  reader, state, CatalogType::AGGREGATE_FUNCTION_ENTRY, children, bind_info);
101
100
 
102
- return make_uniq<BoundAggregateExpression>(function, std::move(children), std::move(filter), std::move(bind_info),
103
- distinct ? AggregateType::DISTINCT : AggregateType::NON_DISTINCT);
101
+ auto x = make_uniq<BoundAggregateExpression>(function, std::move(children), std::move(filter), std::move(bind_info),
102
+ distinct ? AggregateType::DISTINCT : AggregateType::NON_DISTINCT);
103
+ x->order_bys = std::move(order_bys);
104
+ return std::move(x);
104
105
  }
105
106
 
106
107
  } // namespace duckdb
@@ -15,18 +15,18 @@ string BoundBetweenExpression::ToString() const {
15
15
  return BetweenExpression::ToString<BoundBetweenExpression, Expression>(*this);
16
16
  }
17
17
 
18
- bool BoundBetweenExpression::Equals(const BaseExpression *other_p) const {
18
+ bool BoundBetweenExpression::Equals(const BaseExpression &other_p) const {
19
19
  if (!Expression::Equals(other_p)) {
20
20
  return false;
21
21
  }
22
- auto &other = other_p->Cast<BoundBetweenExpression>();
23
- if (!Expression::Equals(input.get(), other.input.get())) {
22
+ auto &other = other_p.Cast<BoundBetweenExpression>();
23
+ if (!Expression::Equals(*input, *other.input)) {
24
24
  return false;
25
25
  }
26
- if (!Expression::Equals(lower.get(), other.lower.get())) {
26
+ if (!Expression::Equals(*lower, *other.lower)) {
27
27
  return false;
28
28
  }
29
- if (!Expression::Equals(upper.get(), other.upper.get())) {
29
+ if (!Expression::Equals(*upper, *other.upper)) {
30
30
  return false;
31
31
  }
32
32
  return lower_inclusive == other.lower_inclusive && upper_inclusive == other.upper_inclusive;