duckdb 0.8.1-dev2.0 → 0.8.1-dev219.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 (586) hide show
  1. package/binding.gyp +8 -8
  2. package/package.json +1 -1
  3. package/src/duckdb/extension/icu/icu-datepart.cpp +1 -1
  4. package/src/duckdb/extension/json/include/json_common.hpp +1 -1
  5. package/src/duckdb/extension/json/include/json_executors.hpp +1 -1
  6. package/src/duckdb/extension/json/json_functions/json_create.cpp +6 -6
  7. package/src/duckdb/extension/json/json_functions/json_merge_patch.cpp +1 -1
  8. package/src/duckdb/extension/json/json_functions/json_transform.cpp +1 -1
  9. package/src/duckdb/extension/parquet/column_reader.cpp +57 -52
  10. package/src/duckdb/extension/parquet/column_writer.cpp +57 -45
  11. package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +1 -1
  12. package/src/duckdb/extension/parquet/include/column_reader.hpp +5 -4
  13. package/src/duckdb/extension/parquet/include/column_writer.hpp +24 -0
  14. package/src/duckdb/extension/parquet/include/decode_utils.hpp +6 -0
  15. package/src/duckdb/extension/parquet/include/list_column_reader.hpp +1 -1
  16. package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +4 -4
  17. package/src/duckdb/extension/parquet/include/parquet_rle_bp_decoder.hpp +4 -5
  18. package/src/duckdb/extension/parquet/include/resizable_buffer.hpp +4 -4
  19. package/src/duckdb/extension/parquet/include/row_number_column_reader.hpp +1 -1
  20. package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +1 -1
  21. package/src/duckdb/extension/parquet/parquet-extension.cpp +1 -1
  22. package/src/duckdb/extension/parquet/parquet_metadata.cpp +1 -1
  23. package/src/duckdb/extension/parquet/parquet_reader.cpp +18 -18
  24. package/src/duckdb/extension/parquet/parquet_statistics.cpp +23 -26
  25. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +2 -2
  26. package/src/duckdb/extension/parquet/parquet_writer.cpp +3 -3
  27. package/src/duckdb/extension/parquet/zstd_file_system.cpp +3 -3
  28. package/src/duckdb/src/catalog/catalog.cpp +5 -21
  29. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +113 -0
  30. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +7 -0
  31. package/src/duckdb/src/catalog/catalog_entry.cpp +4 -4
  32. package/src/duckdb/src/catalog/catalog_search_path.cpp +49 -12
  33. package/src/duckdb/src/catalog/catalog_set.cpp +1 -1
  34. package/src/duckdb/src/catalog/default/default_types.cpp +9 -84
  35. package/src/duckdb/src/catalog/dependency_manager.cpp +2 -2
  36. package/src/duckdb/src/catalog/duck_catalog.cpp +1 -0
  37. package/src/duckdb/src/common/adbc/adbc.cpp +301 -106
  38. package/src/duckdb/src/common/adbc/driver_manager.cpp +10 -22
  39. package/src/duckdb/src/common/arrow/arrow_appender.cpp +12 -12
  40. package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +7 -7
  41. package/src/duckdb/src/common/checksum.cpp +1 -1
  42. package/src/duckdb/src/common/compressed_file_system.cpp +6 -6
  43. package/src/duckdb/src/common/crypto/md5.cpp +9 -9
  44. package/src/duckdb/src/common/exception.cpp +4 -1
  45. package/src/duckdb/src/common/exception_format_value.cpp +19 -14
  46. package/src/duckdb/src/common/field_writer.cpp +1 -1
  47. package/src/duckdb/src/common/file_system.cpp +15 -2
  48. package/src/duckdb/src/common/fsst.cpp +11 -6
  49. package/src/duckdb/src/common/gzip_file_system.cpp +8 -8
  50. package/src/duckdb/src/common/hive_partitioning.cpp +1 -1
  51. package/src/duckdb/src/common/local_file_system.cpp +11 -11
  52. package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
  53. package/src/duckdb/src/common/pipe_file_system.cpp +2 -2
  54. package/src/duckdb/src/common/radix_partitioning.cpp +2 -2
  55. package/src/duckdb/src/common/row_operations/row_heap_gather.cpp +1 -1
  56. package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +5 -5
  57. package/src/duckdb/src/common/row_operations/row_match.cpp +1 -1
  58. package/src/duckdb/src/common/row_operations/row_radix_scatter.cpp +2 -2
  59. package/src/duckdb/src/common/row_operations/row_scatter.cpp +4 -4
  60. package/src/duckdb/src/common/serializer/binary_deserializer.cpp +1 -1
  61. package/src/duckdb/src/common/serializer/binary_serializer.cpp +3 -3
  62. package/src/duckdb/src/common/serializer.cpp +1 -1
  63. package/src/duckdb/src/common/sort/comparators.cpp +1 -1
  64. package/src/duckdb/src/common/sort/merge_sorter.cpp +7 -2
  65. package/src/duckdb/src/common/sort/partition_state.cpp +2 -2
  66. package/src/duckdb/src/common/types/bit.cpp +5 -5
  67. package/src/duckdb/src/common/types/blob.cpp +8 -8
  68. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +4 -4
  69. package/src/duckdb/src/common/types/column/column_data_collection.cpp +3 -3
  70. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +1 -1
  71. package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
  72. package/src/duckdb/src/common/types/hash.cpp +2 -2
  73. package/src/duckdb/src/common/types/hyperloglog.cpp +22 -21
  74. package/src/duckdb/src/common/types/list_segment.cpp +77 -49
  75. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +1 -1
  76. package/src/duckdb/src/common/types/row/row_data_collection_scanner.cpp +5 -4
  77. package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +5 -3
  78. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +59 -24
  79. package/src/duckdb/src/common/types/string_heap.cpp +1 -1
  80. package/src/duckdb/src/common/types/value.cpp +3 -2
  81. package/src/duckdb/src/common/types/vector.cpp +101 -101
  82. package/src/duckdb/src/common/types/vector_cache.cpp +6 -6
  83. package/src/duckdb/src/common/types/vector_constants.cpp +2 -1
  84. package/src/duckdb/src/common/types.cpp +44 -33
  85. package/src/duckdb/src/common/vector_operations/boolean_operators.cpp +2 -2
  86. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +12 -12
  87. package/src/duckdb/src/common/vector_operations/vector_hash.cpp +13 -11
  88. package/src/duckdb/src/common/vector_operations/vector_storage.cpp +1 -1
  89. package/src/duckdb/src/core_functions/aggregate/algebraic/avg.cpp +30 -33
  90. package/src/duckdb/src/core_functions/aggregate/algebraic/covar.cpp +0 -4
  91. package/src/duckdb/src/core_functions/aggregate/distributive/approx_count.cpp +32 -36
  92. package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +53 -66
  93. package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +48 -48
  94. package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +44 -44
  95. package/src/duckdb/src/core_functions/aggregate/distributive/bool.cpp +32 -32
  96. package/src/duckdb/src/core_functions/aggregate/distributive/entropy.cpp +34 -34
  97. package/src/duckdb/src/core_functions/aggregate/distributive/kurtosis.cpp +30 -31
  98. package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +91 -103
  99. package/src/duckdb/src/core_functions/aggregate/distributive/product.cpp +17 -17
  100. package/src/duckdb/src/core_functions/aggregate/distributive/skew.cpp +25 -27
  101. package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +36 -37
  102. package/src/duckdb/src/core_functions/aggregate/distributive/sum.cpp +22 -22
  103. package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +48 -84
  104. package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +49 -51
  105. package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +97 -121
  106. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +62 -99
  107. package/src/duckdb/src/core_functions/aggregate/nested/histogram.cpp +24 -26
  108. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +22 -23
  109. package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +16 -18
  110. package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +22 -25
  111. package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +19 -24
  112. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +18 -23
  113. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +14 -18
  114. package/src/duckdb/src/core_functions/function_list.cpp +1 -0
  115. package/src/duckdb/src/core_functions/scalar/blob/base64.cpp +1 -1
  116. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +45 -45
  117. package/src/duckdb/src/core_functions/scalar/date/strftime.cpp +2 -2
  118. package/src/duckdb/src/core_functions/scalar/generic/current_setting.cpp +1 -1
  119. package/src/duckdb/src/core_functions/scalar/generic/least.cpp +2 -2
  120. package/src/duckdb/src/core_functions/scalar/generic/stats.cpp +1 -1
  121. package/src/duckdb/src/core_functions/scalar/generic/system_functions.cpp +14 -0
  122. package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +3 -3
  123. package/src/duckdb/src/core_functions/scalar/list/flatten.cpp +2 -4
  124. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +3 -3
  125. package/src/duckdb/src/core_functions/scalar/list/list_lambdas.cpp +6 -7
  126. package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +1 -1
  127. package/src/duckdb/src/core_functions/scalar/map/cardinality.cpp +1 -1
  128. package/src/duckdb/src/core_functions/scalar/map/map.cpp +2 -2
  129. package/src/duckdb/src/core_functions/scalar/map/map_concat.cpp +4 -1
  130. package/src/duckdb/src/core_functions/scalar/map/map_extract.cpp +5 -9
  131. package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +3 -3
  132. package/src/duckdb/src/core_functions/scalar/string/starts_with.cpp +3 -2
  133. package/src/duckdb/src/core_functions/scalar/string/string_split.cpp +4 -4
  134. package/src/duckdb/src/core_functions/scalar/string/trim.cpp +1 -1
  135. package/src/duckdb/src/core_functions/scalar/union/union_extract.cpp +1 -1
  136. package/src/duckdb/src/execution/adaptive_filter.cpp +1 -1
  137. package/src/duckdb/src/execution/expression_executor/execute_case.cpp +10 -10
  138. package/src/duckdb/src/execution/expression_executor/execute_conjunction.cpp +7 -7
  139. package/src/duckdb/src/execution/expression_executor.cpp +33 -28
  140. package/src/duckdb/src/execution/index/art/art.cpp +30 -32
  141. package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +3 -4
  142. package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
  143. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_inner.cpp +4 -4
  144. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +2 -2
  145. package/src/duckdb/src/execution/operator/aggregate/distinct_aggregate_data.cpp +1 -1
  146. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +1 -1
  147. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +2 -2
  148. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +4 -4
  149. package/src/duckdb/src/execution/operator/filter/physical_filter.cpp +1 -1
  150. package/src/duckdb/src/execution/operator/helper/physical_reset.cpp +5 -2
  151. package/src/duckdb/src/execution/operator/helper/physical_set.cpp +5 -1
  152. package/src/duckdb/src/execution/operator/join/outer_join_marker.cpp +1 -1
  153. package/src/duckdb/src/execution/operator/join/perfect_hash_join_executor.cpp +1 -1
  154. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +2 -2
  155. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +4 -4
  156. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +3 -3
  157. package/src/duckdb/src/execution/operator/join/physical_nested_loop_join.cpp +3 -3
  158. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +3 -3
  159. package/src/duckdb/src/execution/operator/order/physical_top_n.cpp +1 -1
  160. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +2 -2
  161. package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +2 -2
  162. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +2 -0
  163. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -3
  164. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
  165. package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -2
  166. package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +1 -1
  167. package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +3 -3
  168. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +2 -1
  169. package/src/duckdb/src/execution/operator/scan/physical_expression_scan.cpp +1 -1
  170. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +2 -2
  171. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +1 -1
  172. package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +1 -1
  173. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +1 -1
  174. package/src/duckdb/src/execution/physical_plan/plan_create_table.cpp +1 -1
  175. package/src/duckdb/src/execution/physical_plan_generator.cpp +2 -2
  176. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +1 -1
  177. package/src/duckdb/src/execution/reservoir_sample.cpp +2 -2
  178. package/src/duckdb/src/execution/window_segment_tree.cpp +8 -6
  179. package/src/duckdb/src/function/aggregate/distributive/count.cpp +158 -20
  180. package/src/duckdb/src/function/aggregate/distributive/first.cpp +66 -74
  181. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +13 -13
  182. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  183. package/src/duckdb/src/function/cast/decimal_cast.cpp +1 -1
  184. package/src/duckdb/src/function/cast/enum_casts.cpp +2 -2
  185. package/src/duckdb/src/function/cast/string_cast.cpp +11 -11
  186. package/src/duckdb/src/function/cast/union_casts.cpp +2 -2
  187. package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +3 -2
  188. package/src/duckdb/src/function/pragma/pragma_queries.cpp +33 -23
  189. package/src/duckdb/src/function/scalar/generic/constant_or_null.cpp +1 -1
  190. package/src/duckdb/src/function/scalar/list/list_concat.cpp +2 -2
  191. package/src/duckdb/src/function/scalar/list/list_extract.cpp +3 -3
  192. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +2 -3
  193. package/src/duckdb/src/function/scalar/string/concat.cpp +8 -7
  194. package/src/duckdb/src/function/scalar/string/contains.cpp +4 -4
  195. package/src/duckdb/src/function/scalar/string/like.cpp +5 -5
  196. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +4 -4
  197. package/src/duckdb/src/function/scalar/string/regexp.cpp +3 -3
  198. package/src/duckdb/src/function/scalar/string/strip_accents.cpp +1 -1
  199. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +1 -1
  200. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +25 -23
  201. package/src/duckdb/src/function/scalar_function.cpp +3 -3
  202. package/src/duckdb/src/function/table/arrow.cpp +6 -6
  203. package/src/duckdb/src/function/table/arrow_conversion.cpp +67 -61
  204. package/src/duckdb/src/function/table/checkpoint.cpp +1 -1
  205. package/src/duckdb/src/function/table/copy_csv.cpp +11 -7
  206. package/src/duckdb/src/function/table/glob.cpp +1 -1
  207. package/src/duckdb/src/function/table/pragma_last_profiling_output.cpp +1 -1
  208. package/src/duckdb/src/function/table/range.cpp +4 -4
  209. package/src/duckdb/src/function/table/read_csv.cpp +15 -23
  210. package/src/duckdb/src/function/table/repeat.cpp +2 -2
  211. package/src/duckdb/src/function/table/repeat_row.cpp +10 -3
  212. package/src/duckdb/src/function/table/system/duckdb_functions.cpp +1 -1
  213. package/src/duckdb/src/function/table/system/test_vector_types.cpp +1 -1
  214. package/src/duckdb/src/function/table/table_scan.cpp +2 -2
  215. package/src/duckdb/src/function/table/unnest.cpp +1 -1
  216. package/src/duckdb/src/function/table/version/pragma_version.cpp +3 -3
  217. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +2 -5
  218. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +2 -0
  219. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_catalog_entry.hpp +6 -0
  220. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +2 -2
  221. package/src/duckdb/src/include/duckdb/catalog/catalog_search_path.hpp +8 -2
  222. package/src/duckdb/src/include/duckdb/catalog/default/builtin_types/types.hpp +97 -0
  223. package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +5 -0
  224. package/src/duckdb/src/include/duckdb/common/allocator.hpp +15 -4
  225. package/src/duckdb/src/include/duckdb/common/arrow/arrow_buffer.hpp +7 -2
  226. package/src/duckdb/src/include/duckdb/common/crypto/md5.hpp +2 -2
  227. package/src/duckdb/src/include/duckdb/common/exception.hpp +5 -2
  228. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +3 -3
  229. package/src/duckdb/src/include/duckdb/common/file_system.hpp +11 -0
  230. package/src/duckdb/src/include/duckdb/common/fsst.hpp +2 -3
  231. package/src/duckdb/src/include/duckdb/common/radix.hpp +3 -3
  232. package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +1 -1
  233. package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +4 -1
  234. package/src/duckdb/src/include/duckdb/common/serializer.hpp +4 -4
  235. package/src/duckdb/src/include/duckdb/common/typedefs.hpp +30 -0
  236. package/src/duckdb/src/include/duckdb/common/types/column/partitioned_column_data.hpp +12 -0
  237. package/src/duckdb/src/include/duckdb/common/types/hyperloglog.hpp +6 -2
  238. package/src/duckdb/src/include/duckdb/common/types/null_value.hpp +1 -1
  239. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +12 -0
  240. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +10 -10
  241. package/src/duckdb/src/include/duckdb/common/types/value.hpp +1 -1
  242. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +9 -0
  243. package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +18 -6
  244. package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +112 -76
  245. package/src/duckdb/src/include/duckdb/common/vector_operations/binary_executor.hpp +16 -15
  246. package/src/duckdb/src/include/duckdb/common/vector_operations/generic_executor.hpp +11 -11
  247. package/src/duckdb/src/include/duckdb/common/vector_operations/ternary_executor.hpp +23 -19
  248. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +3 -3
  249. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +20 -24
  250. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +36 -39
  251. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/stddev.hpp +57 -53
  252. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +8 -9
  253. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +16 -18
  254. package/src/duckdb/src/include/duckdb/core_functions/aggregate/sum_helpers.hpp +7 -8
  255. package/src/duckdb/src/include/duckdb/core_functions/scalar/generic_functions.hpp +9 -0
  256. package/src/duckdb/src/include/duckdb/core_functions/scalar/map_functions.hpp +2 -6
  257. package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +16 -36
  258. package/src/duckdb/src/include/duckdb/execution/expression_executor_state.hpp +14 -2
  259. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -3
  260. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_result_collector.hpp +3 -0
  261. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_buffer.hpp +1 -1
  262. package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +5 -2
  263. package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +12 -12
  264. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +8 -29
  265. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +95 -0
  266. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +13 -2
  267. package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +4 -4
  268. package/src/duckdb/src/include/duckdb/function/compression_function.hpp +44 -0
  269. package/src/duckdb/src/include/duckdb/function/copy_function.hpp +6 -6
  270. package/src/duckdb/src/include/duckdb/function/function.hpp +3 -3
  271. package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +3 -1
  272. package/src/duckdb/src/include/duckdb/function/macro_function.hpp +2 -2
  273. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +3 -3
  274. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
  275. package/src/duckdb/src/include/duckdb/function/table_function.hpp +6 -6
  276. package/src/duckdb/src/include/duckdb/main/capi/cast/utils.hpp +1 -1
  277. package/src/duckdb/src/include/duckdb/main/config.hpp +2 -0
  278. package/src/duckdb/src/include/duckdb/main/materialized_query_result.hpp +3 -0
  279. package/src/duckdb/src/include/duckdb/main/pending_query_result.hpp +3 -0
  280. package/src/duckdb/src/include/duckdb/main/query_result.hpp +17 -0
  281. package/src/duckdb/src/include/duckdb/main/relation.hpp +12 -0
  282. package/src/duckdb/src/include/duckdb/main/settings.hpp +9 -0
  283. package/src/duckdb/src/include/duckdb/main/stream_query_result.hpp +3 -0
  284. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  285. package/src/duckdb/src/include/duckdb/parser/base_expression.hpp +6 -12
  286. package/src/duckdb/src/include/duckdb/parser/constraint.hpp +2 -2
  287. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +1 -1
  288. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +1 -1
  289. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +1 -1
  290. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +1 -1
  291. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +1 -1
  292. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +1 -1
  293. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +1 -1
  294. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +1 -1
  295. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +1 -1
  296. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +1 -1
  297. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +1 -1
  298. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +1 -1
  299. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +1 -1
  300. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +1 -1
  301. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +1 -1
  302. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +1 -1
  303. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +1 -1
  304. package/src/duckdb/src/include/duckdb/parser/expression_map.hpp +1 -1
  305. package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +2 -2
  306. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -1
  307. package/src/duckdb/src/include/duckdb/parser/parser.hpp +2 -0
  308. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -2
  309. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +36 -5
  310. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +7 -4
  311. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +1 -1
  312. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +1 -1
  313. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -2
  314. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +1 -1
  315. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
  316. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +1 -1
  317. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +1 -1
  318. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +1 -1
  319. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +4 -3
  320. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +107 -91
  321. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -2
  322. package/src/duckdb/src/include/duckdb/planner/bound_constraint.hpp +2 -2
  323. package/src/duckdb/src/include/duckdb/planner/bound_query_node.hpp +2 -2
  324. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +34 -1
  325. package/src/duckdb/src/include/duckdb/planner/bound_tableref.hpp +2 -2
  326. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +1 -1
  327. package/src/duckdb/src/include/duckdb/planner/expression/bound_between_expression.hpp +1 -1
  328. package/src/duckdb/src/include/duckdb/planner/expression/bound_case_expression.hpp +1 -1
  329. package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +1 -1
  330. package/src/duckdb/src/include/duckdb/planner/expression/bound_columnref_expression.hpp +1 -1
  331. package/src/duckdb/src/include/duckdb/planner/expression/bound_comparison_expression.hpp +1 -1
  332. package/src/duckdb/src/include/duckdb/planner/expression/bound_conjunction_expression.hpp +1 -1
  333. package/src/duckdb/src/include/duckdb/planner/expression/bound_constant_expression.hpp +1 -1
  334. package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +1 -1
  335. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambda_expression.hpp +1 -1
  336. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambdaref_expression.hpp +1 -1
  337. package/src/duckdb/src/include/duckdb/planner/expression/bound_operator_expression.hpp +1 -1
  338. package/src/duckdb/src/include/duckdb/planner/expression/bound_parameter_expression.hpp +1 -1
  339. package/src/duckdb/src/include/duckdb/planner/expression/bound_reference_expression.hpp +1 -1
  340. package/src/duckdb/src/include/duckdb/planner/expression/bound_subquery_expression.hpp +1 -1
  341. package/src/duckdb/src/include/duckdb/planner/expression/bound_unnest_expression.hpp +1 -1
  342. package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +1 -1
  343. package/src/duckdb/src/include/duckdb/planner/expression.hpp +5 -7
  344. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
  345. package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +6 -0
  346. package/src/duckdb/src/include/duckdb/planner/filter/constant_filter.hpp +3 -0
  347. package/src/duckdb/src/include/duckdb/planner/filter/null_filter.hpp +6 -0
  348. package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +2 -2
  349. package/src/duckdb/src/include/duckdb/planner/operator/logical_pivot.hpp +3 -0
  350. package/src/duckdb/src/include/duckdb/planner/table_binding.hpp +26 -0
  351. package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +17 -0
  352. package/src/duckdb/src/include/duckdb/planner/tableref/bound_pivotref.hpp +3 -0
  353. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.hpp +1 -1
  354. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  355. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_analyze.hpp +2 -2
  356. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  357. package/src/duckdb/src/include/duckdb/storage/index.hpp +2 -2
  358. package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +1 -1
  359. package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +12 -0
  360. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +1 -1
  361. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +25 -2
  362. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +12 -0
  363. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +22 -0
  364. package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +2 -2
  365. package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +2 -2
  366. package/src/duckdb/src/main/capi/appender-c.cpp +5 -5
  367. package/src/duckdb/src/main/capi/arrow-c.cpp +10 -10
  368. package/src/duckdb/src/main/capi/cast/from_decimal-c.cpp +1 -1
  369. package/src/duckdb/src/main/capi/cast/utils-c.cpp +1 -1
  370. package/src/duckdb/src/main/capi/config-c.cpp +1 -1
  371. package/src/duckdb/src/main/capi/data_chunk-c.cpp +17 -17
  372. package/src/duckdb/src/main/capi/duckdb-c.cpp +4 -4
  373. package/src/duckdb/src/main/capi/duckdb_value-c.cpp +4 -4
  374. package/src/duckdb/src/main/capi/logical_types-c.cpp +22 -21
  375. package/src/duckdb/src/main/capi/pending-c.cpp +6 -6
  376. package/src/duckdb/src/main/capi/prepared-c.cpp +10 -10
  377. package/src/duckdb/src/main/capi/replacement_scan-c.cpp +6 -6
  378. package/src/duckdb/src/main/capi/result-c.cpp +23 -23
  379. package/src/duckdb/src/main/capi/table_function-c.cpp +1 -1
  380. package/src/duckdb/src/main/client_context.cpp +3 -3
  381. package/src/duckdb/src/main/config.cpp +1 -0
  382. package/src/duckdb/src/main/database_manager.cpp +1 -1
  383. package/src/duckdb/src/main/error_manager.cpp +1 -1
  384. package/src/duckdb/src/main/extension/extension_load.cpp +1 -1
  385. package/src/duckdb/src/main/relation/create_table_relation.cpp +1 -1
  386. package/src/duckdb/src/main/relation/create_view_relation.cpp +1 -1
  387. package/src/duckdb/src/main/relation/delete_relation.cpp +1 -1
  388. package/src/duckdb/src/main/relation/explain_relation.cpp +1 -1
  389. package/src/duckdb/src/main/relation/insert_relation.cpp +1 -1
  390. package/src/duckdb/src/main/relation/update_relation.cpp +1 -1
  391. package/src/duckdb/src/main/relation/write_csv_relation.cpp +1 -1
  392. package/src/duckdb/src/main/relation/write_parquet_relation.cpp +1 -1
  393. package/src/duckdb/src/main/relation.cpp +1 -1
  394. package/src/duckdb/src/main/settings/settings.cpp +22 -6
  395. package/src/duckdb/src/optimizer/deliminator.cpp +12 -12
  396. package/src/duckdb/src/optimizer/expression_heuristics.cpp +1 -0
  397. package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -3
  398. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +10 -10
  399. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +4 -7
  400. package/src/duckdb/src/optimizer/matcher/expression_matcher.cpp +1 -1
  401. package/src/duckdb/src/optimizer/pullup/pullup_projection.cpp +2 -2
  402. package/src/duckdb/src/optimizer/regex_range_filter.cpp +2 -4
  403. package/src/duckdb/src/optimizer/rule/distributivity.cpp +2 -2
  404. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +6 -6
  405. package/src/duckdb/src/optimizer/statistics/operator/propagate_get.cpp +2 -2
  406. package/src/duckdb/src/parallel/executor.cpp +1 -1
  407. package/src/duckdb/src/parser/base_expression.cpp +2 -5
  408. package/src/duckdb/src/parser/column_definition.cpp +5 -8
  409. package/src/duckdb/src/parser/expression/between_expression.cpp +4 -4
  410. package/src/duckdb/src/parser/expression/case_expression.cpp +6 -6
  411. package/src/duckdb/src/parser/expression/cast_expression.cpp +4 -4
  412. package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -3
  413. package/src/duckdb/src/parser/expression/columnref_expression.cpp +4 -4
  414. package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -3
  415. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +2 -2
  416. package/src/duckdb/src/parser/expression/constant_expression.cpp +2 -2
  417. package/src/duckdb/src/parser/expression/function_expression.cpp +10 -14
  418. package/src/duckdb/src/parser/expression/lambda_expression.cpp +2 -2
  419. package/src/duckdb/src/parser/expression/operator_expression.cpp +4 -4
  420. package/src/duckdb/src/parser/expression/parameter_expression.cpp +2 -2
  421. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +3 -3
  422. package/src/duckdb/src/parser/expression/star_expression.cpp +9 -9
  423. package/src/duckdb/src/parser/expression/subquery_expression.cpp +5 -5
  424. package/src/duckdb/src/parser/expression/window_expression.cpp +13 -24
  425. package/src/duckdb/src/parser/parsed_expression.cpp +34 -18
  426. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +4 -4
  427. package/src/duckdb/src/parser/parser.cpp +4 -4
  428. package/src/duckdb/src/parser/query_node/select_node.cpp +6 -13
  429. package/src/duckdb/src/parser/query_node.cpp +7 -6
  430. package/src/duckdb/src/parser/result_modifier.cpp +25 -18
  431. package/src/duckdb/src/parser/statement/select_statement.cpp +3 -3
  432. package/src/duckdb/src/parser/tableref/basetableref.cpp +4 -4
  433. package/src/duckdb/src/parser/tableref/emptytableref.cpp +1 -1
  434. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +5 -5
  435. package/src/duckdb/src/parser/tableref/joinref.cpp +6 -6
  436. package/src/duckdb/src/parser/tableref/pivotref.cpp +10 -15
  437. package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -3
  438. package/src/duckdb/src/parser/tableref/table_function.cpp +3 -3
  439. package/src/duckdb/src/parser/tableref.cpp +12 -3
  440. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +7 -7
  441. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +4 -4
  442. package/src/duckdb/src/parser/transform/expression/transform_boolean_test.cpp +4 -4
  443. package/src/duckdb/src/parser/transform/expression/transform_case.cpp +8 -10
  444. package/src/duckdb/src/parser/transform/expression/transform_cast.cpp +7 -9
  445. package/src/duckdb/src/parser/transform/expression/transform_coalesce.cpp +3 -5
  446. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +22 -22
  447. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +2 -2
  448. package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +42 -44
  449. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +70 -75
  450. package/src/duckdb/src/parser/transform/expression/transform_grouping_function.cpp +4 -4
  451. package/src/duckdb/src/parser/transform/expression/transform_interval.cpp +7 -7
  452. package/src/duckdb/src/parser/transform/expression/transform_is_null.cpp +4 -5
  453. package/src/duckdb/src/parser/transform/expression/transform_lambda.cpp +5 -6
  454. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +28 -29
  455. package/src/duckdb/src/parser/transform/expression/transform_param_ref.cpp +13 -14
  456. package/src/duckdb/src/parser/transform/expression/transform_positional_reference.cpp +4 -4
  457. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +9 -10
  458. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +28 -32
  459. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +18 -18
  460. package/src/duckdb/src/parser/transform/helpers/transform_sample.cpp +3 -3
  461. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +27 -26
  462. package/src/duckdb/src/parser/transform/statement/transform_alter_sequence.cpp +11 -14
  463. package/src/duckdb/src/parser/transform/statement/transform_alter_table.cpp +14 -16
  464. package/src/duckdb/src/parser/transform/statement/transform_attach.cpp +8 -9
  465. package/src/duckdb/src/parser/transform/statement/transform_call.cpp +2 -5
  466. package/src/duckdb/src/parser/transform/statement/transform_checkpoint.cpp +4 -6
  467. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +22 -23
  468. package/src/duckdb/src/parser/transform/statement/transform_create_database.cpp +3 -4
  469. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +14 -18
  470. package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +13 -15
  471. package/src/duckdb/src/parser/transform/statement/transform_create_schema.cpp +8 -10
  472. package/src/duckdb/src/parser/transform/statement/transform_create_sequence.cpp +8 -10
  473. package/src/duckdb/src/parser/transform/statement/transform_create_table.cpp +26 -28
  474. package/src/duckdb/src/parser/transform/statement/transform_create_table_as.cpp +8 -10
  475. package/src/duckdb/src/parser/transform/statement/transform_create_type.cpp +12 -15
  476. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +13 -18
  477. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +11 -13
  478. package/src/duckdb/src/parser/transform/statement/transform_detach.cpp +3 -4
  479. package/src/duckdb/src/parser/transform/statement/transform_drop.cpp +20 -22
  480. package/src/duckdb/src/parser/transform/statement/transform_explain.cpp +5 -7
  481. package/src/duckdb/src/parser/transform/statement/transform_export.cpp +5 -6
  482. package/src/duckdb/src/parser/transform/statement/transform_import.cpp +2 -3
  483. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +21 -24
  484. package/src/duckdb/src/parser/transform/statement/transform_load.cpp +4 -5
  485. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -7
  486. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +7 -9
  487. package/src/duckdb/src/parser/transform/statement/transform_prepare.cpp +11 -19
  488. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +12 -14
  489. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +12 -9
  490. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +34 -34
  491. package/src/duckdb/src/parser/transform/statement/transform_set.cpp +18 -19
  492. package/src/duckdb/src/parser/transform/statement/transform_show.cpp +5 -7
  493. package/src/duckdb/src/parser/transform/statement/transform_show_select.cpp +4 -5
  494. package/src/duckdb/src/parser/transform/statement/transform_transaction.cpp +3 -5
  495. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +10 -13
  496. package/src/duckdb/src/parser/transform/statement/transform_upsert.cpp +4 -4
  497. package/src/duckdb/src/parser/transform/statement/transform_use.cpp +2 -3
  498. package/src/duckdb/src/parser/transform/statement/transform_vacuum.cpp +6 -10
  499. package/src/duckdb/src/parser/transform/tableref/transform_base_tableref.cpp +18 -18
  500. package/src/duckdb/src/parser/transform/tableref/transform_from.cpp +5 -5
  501. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +11 -11
  502. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +30 -27
  503. package/src/duckdb/src/parser/transform/tableref/transform_subquery.cpp +5 -5
  504. package/src/duckdb/src/parser/transform/tableref/transform_table_function.cpp +13 -12
  505. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +8 -8
  506. package/src/duckdb/src/parser/transformer.cpp +46 -46
  507. package/src/duckdb/src/planner/bind_context.cpp +9 -10
  508. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +1 -1
  509. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +1 -1
  510. package/src/duckdb/src/planner/binder/expression/bind_positional_reference_expression.cpp +7 -2
  511. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +1 -1
  512. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +6 -3
  513. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +8 -8
  514. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +4 -4
  515. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +13 -5
  516. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +2 -2
  517. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +2 -114
  518. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +4 -2
  519. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +17 -7
  520. package/src/duckdb/src/planner/binder.cpp +1 -1
  521. package/src/duckdb/src/planner/bound_result_modifier.cpp +16 -11
  522. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +5 -5
  523. package/src/duckdb/src/planner/expression/bound_between_expression.cpp +5 -5
  524. package/src/duckdb/src/planner/expression/bound_case_expression.cpp +5 -5
  525. package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +3 -3
  526. package/src/duckdb/src/planner/expression/bound_columnref_expression.cpp +2 -2
  527. package/src/duckdb/src/planner/expression/bound_comparison_expression.cpp +4 -4
  528. package/src/duckdb/src/planner/expression/bound_conjunction_expression.cpp +2 -2
  529. package/src/duckdb/src/planner/expression/bound_constant_expression.cpp +2 -2
  530. package/src/duckdb/src/planner/expression/bound_expression.cpp +1 -1
  531. package/src/duckdb/src/planner/expression/bound_function_expression.cpp +3 -4
  532. package/src/duckdb/src/planner/expression/bound_lambda_expression.cpp +4 -5
  533. package/src/duckdb/src/planner/expression/bound_lambdaref_expression.cpp +2 -2
  534. package/src/duckdb/src/planner/expression/bound_operator_expression.cpp +3 -4
  535. package/src/duckdb/src/planner/expression/bound_parameter_expression.cpp +2 -2
  536. package/src/duckdb/src/planner/expression/bound_reference_expression.cpp +2 -2
  537. package/src/duckdb/src/planner/expression/bound_subquery_expression.cpp +1 -1
  538. package/src/duckdb/src/planner/expression/bound_unnest_expression.cpp +3 -3
  539. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +8 -21
  540. package/src/duckdb/src/planner/expression.cpp +15 -0
  541. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +2 -2
  542. package/src/duckdb/src/planner/expression_binder.cpp +3 -2
  543. package/src/duckdb/src/planner/expression_iterator.cpp +2 -2
  544. package/src/duckdb/src/planner/filter/conjunction_filter.cpp +2 -2
  545. package/src/duckdb/src/planner/filter/constant_filter.cpp +1 -1
  546. package/src/duckdb/src/planner/logical_operator.cpp +3 -4
  547. package/src/duckdb/src/planner/logical_operator_visitor.cpp +1 -1
  548. package/src/duckdb/src/planner/table_filter.cpp +1 -1
  549. package/src/duckdb/src/storage/arena_allocator.cpp +2 -2
  550. package/src/duckdb/src/storage/buffer/block_handle.cpp +1 -1
  551. package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +2 -2
  552. package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -3
  553. package/src/duckdb/src/storage/compression/bitpacking.cpp +8 -8
  554. package/src/duckdb/src/storage/compression/dictionary_compression.cpp +36 -36
  555. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +11 -11
  556. package/src/duckdb/src/storage/compression/fsst.cpp +34 -34
  557. package/src/duckdb/src/storage/compression/rle.cpp +8 -8
  558. package/src/duckdb/src/storage/compression/string_uncompressed.cpp +13 -13
  559. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +11 -11
  560. package/src/duckdb/src/storage/data_table.cpp +8 -7
  561. package/src/duckdb/src/storage/index.cpp +1 -3
  562. package/src/duckdb/src/storage/local_storage.cpp +2 -1
  563. package/src/duckdb/src/storage/magic_bytes.cpp +1 -1
  564. package/src/duckdb/src/storage/single_file_block_manager.cpp +3 -3
  565. package/src/duckdb/src/storage/standard_buffer_manager.cpp +3 -3
  566. package/src/duckdb/src/storage/statistics/list_stats.cpp +1 -1
  567. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +1 -1
  568. package/src/duckdb/src/storage/statistics/string_stats.cpp +15 -14
  569. package/src/duckdb/src/storage/table/chunk_info.cpp +2 -2
  570. package/src/duckdb/src/storage/table/column_segment.cpp +3 -3
  571. package/src/duckdb/src/storage/table/list_column_data.cpp +8 -7
  572. package/src/duckdb/src/storage/table/row_group.cpp +4 -4
  573. package/src/duckdb/src/storage/table/standard_column_data.cpp +1 -1
  574. package/src/duckdb/src/storage/table/update_segment.cpp +12 -12
  575. package/src/duckdb/src/storage/wal_replay.cpp +5 -6
  576. package/src/duckdb/src/transaction/cleanup_state.cpp +3 -3
  577. package/src/duckdb/src/transaction/commit_state.cpp +8 -8
  578. package/src/duckdb/src/transaction/duck_transaction.cpp +9 -7
  579. package/src/duckdb/src/transaction/duck_transaction_manager.cpp +16 -16
  580. package/src/duckdb/src/transaction/rollback_state.cpp +3 -3
  581. package/src/duckdb/src/verification/prepared_statement_verifier.cpp +1 -1
  582. package/src/duckdb/src/verification/statement_verifier.cpp +3 -4
  583. package/src/duckdb/third_party/hyperloglog/hyperloglog.hpp +2 -2
  584. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +13479 -13564
  585. package/src/duckdb/third_party/pcg/pcg_extras.hpp +1 -1
  586. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +5 -5
@@ -58,7 +58,7 @@ static shared_ptr<ParquetFileMetadataCache> LoadMetadata(Allocator &allocator, F
58
58
  auto current_time = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
59
59
 
60
60
  auto proto = CreateThriftProtocol(allocator, file_handle, false);
61
- auto &transport = ((ThriftFileTransport &)*proto->getTransport());
61
+ auto &transport = reinterpret_cast<ThriftFileTransport &>(*proto->getTransport());
62
62
  auto file_size = transport.GetSize();
63
63
  if (file_size < 12) {
64
64
  throw InvalidInputException("File '%s' too small to be a Parquet file", file_handle.path);
@@ -71,11 +71,11 @@ static shared_ptr<ParquetFileMetadataCache> LoadMetadata(Allocator &allocator, F
71
71
  transport.SetLocation(file_size - 8);
72
72
  transport.read((uint8_t *)buf.ptr, 8);
73
73
 
74
- if (strncmp(buf.ptr + 4, "PAR1", 4) != 0) {
74
+ if (memcmp(buf.ptr + 4, "PAR1", 4) != 0) {
75
75
  throw InvalidInputException("No magic bytes found at end of file '%s'", file_handle.path);
76
76
  }
77
77
  // read four-byte footer length from just before the end magic bytes
78
- auto footer_len = *(uint32_t *)buf.ptr;
78
+ auto footer_len = *reinterpret_cast<uint32_t *>(buf.ptr);
79
79
  if (footer_len <= 0 || file_size < 12 + footer_len) {
80
80
  throw InvalidInputException("Footer length error in file '%s'", file_handle.path);
81
81
  }
@@ -484,7 +484,7 @@ unique_ptr<BaseStatistics> ParquetReader::ReadStatistics(const string &name) {
484
484
  unique_ptr<BaseStatistics> column_stats;
485
485
  auto file_meta_data = GetFileMetadata();
486
486
  auto root_reader = CreateReader();
487
- auto column_reader = ((StructColumnReader *)root_reader.get())->GetChildReader(file_col_idx);
487
+ auto column_reader = root_reader->Cast<StructColumnReader>().GetChildReader(file_col_idx);
488
488
 
489
489
  for (idx_t row_group_idx = 0; row_group_idx < file_meta_data->row_groups.size(); row_group_idx++) {
490
490
  auto &row_group = file_meta_data->row_groups[row_group_idx];
@@ -573,7 +573,7 @@ idx_t ParquetReader::GetGroupOffset(ParquetReaderScanState &state) {
573
573
  void ParquetReader::PrepareRowGroupBuffer(ParquetReaderScanState &state, idx_t col_idx) {
574
574
  auto &group = GetGroup(state);
575
575
  auto column_id = reader_data.column_ids[col_idx];
576
- auto column_reader = ((StructColumnReader *)state.root_reader.get())->GetChildReader(column_id);
576
+ auto column_reader = state.root_reader->Cast<StructColumnReader>().GetChildReader(column_id);
577
577
 
578
578
  // TODO move this to columnreader too
579
579
  if (reader_data.filters) {
@@ -760,14 +760,14 @@ static void FilterOperationSwitch(Vector &v, Value &constant, parquet_filter_t &
760
760
  static void ApplyFilter(Vector &v, TableFilter &filter, parquet_filter_t &filter_mask, idx_t count) {
761
761
  switch (filter.filter_type) {
762
762
  case TableFilterType::CONJUNCTION_AND: {
763
- auto &conjunction = (ConjunctionAndFilter &)filter;
763
+ auto &conjunction = filter.Cast<ConjunctionAndFilter>();
764
764
  for (auto &child_filter : conjunction.child_filters) {
765
765
  ApplyFilter(v, *child_filter, filter_mask, count);
766
766
  }
767
767
  break;
768
768
  }
769
769
  case TableFilterType::CONJUNCTION_OR: {
770
- auto &conjunction = (ConjunctionOrFilter &)filter;
770
+ auto &conjunction = filter.Cast<ConjunctionOrFilter>();
771
771
  parquet_filter_t or_mask;
772
772
  for (auto &child_filter : conjunction.child_filters) {
773
773
  parquet_filter_t child_mask = filter_mask;
@@ -778,7 +778,7 @@ static void ApplyFilter(Vector &v, TableFilter &filter, parquet_filter_t &filter
778
778
  break;
779
779
  }
780
780
  case TableFilterType::CONSTANT_COMPARISON: {
781
- auto &constant_filter = (ConstantFilter &)filter;
781
+ auto &constant_filter = filter.Cast<ConstantFilter>();
782
782
  switch (constant_filter.comparison_type) {
783
783
  case ExpressionType::COMPARE_EQUAL:
784
784
  FilterOperationSwitch<Equals>(v, constant_filter.constant, filter_mask, count);
@@ -831,7 +831,7 @@ bool ParquetReader::ScanInternal(ParquetReaderScanState &state, DataChunk &resul
831
831
  state.current_group++;
832
832
  state.group_offset = 0;
833
833
 
834
- auto &trans = (ThriftFileTransport &)*state.thrift_file_proto->getTransport();
834
+ auto &trans = reinterpret_cast<ThriftFileTransport &>(*state.thrift_file_proto->getTransport());
835
835
  trans.ClearPrefetch();
836
836
  state.current_group_prefetched = false;
837
837
 
@@ -846,8 +846,8 @@ bool ParquetReader::ScanInternal(ParquetReaderScanState &state, DataChunk &resul
846
846
 
847
847
  auto file_col_idx = reader_data.column_ids[col_idx];
848
848
 
849
- auto root_reader = ((StructColumnReader *)state.root_reader.get());
850
- to_scan_compressed_bytes += root_reader->GetChildReader(file_col_idx)->TotalCompressedSize();
849
+ auto &root_reader = state.root_reader->Cast<StructColumnReader>();
850
+ to_scan_compressed_bytes += root_reader.GetChildReader(file_col_idx)->TotalCompressedSize();
851
851
  }
852
852
 
853
853
  auto &group = GetGroup(state);
@@ -880,14 +880,14 @@ bool ParquetReader::ScanInternal(ParquetReaderScanState &state, DataChunk &resul
880
880
  // Prefetch column-wise
881
881
  for (idx_t col_idx = 0; col_idx < reader_data.column_ids.size(); col_idx++) {
882
882
  auto file_col_idx = reader_data.column_ids[col_idx];
883
- auto root_reader = ((StructColumnReader *)state.root_reader.get());
883
+ auto &root_reader = state.root_reader->Cast<StructColumnReader>();
884
884
 
885
885
  bool has_filter = false;
886
886
  if (reader_data.filters) {
887
887
  auto entry = reader_data.filters->filters.find(reader_data.column_mapping[col_idx]);
888
888
  has_filter = entry != reader_data.filters->filters.end();
889
889
  }
890
- root_reader->GetChildReader(file_col_idx)->RegisterPrefetch(trans, !(lazy_fetch && !has_filter));
890
+ root_reader.GetChildReader(file_col_idx)->RegisterPrefetch(trans, !(lazy_fetch && !has_filter));
891
891
  }
892
892
 
893
893
  trans.FinalizeRegistration();
@@ -924,7 +924,7 @@ bool ParquetReader::ScanInternal(ParquetReaderScanState &state, DataChunk &resul
924
924
  auto define_ptr = (uint8_t *)state.define_buf.ptr;
925
925
  auto repeat_ptr = (uint8_t *)state.repeat_buf.ptr;
926
926
 
927
- auto root_reader = ((StructColumnReader *)state.root_reader.get());
927
+ auto &root_reader = state.root_reader->Cast<StructColumnReader>();
928
928
 
929
929
  if (reader_data.filters) {
930
930
  vector<bool> need_to_read(reader_data.column_ids.size(), true);
@@ -947,7 +947,7 @@ bool ParquetReader::ScanInternal(ParquetReaderScanState &state, DataChunk &resul
947
947
  auto result_idx = reader_data.column_mapping[id];
948
948
 
949
949
  auto &result_vector = result.data[result_idx];
950
- auto child_reader = root_reader->GetChildReader(file_col_idx);
950
+ auto child_reader = root_reader.GetChildReader(file_col_idx);
951
951
  child_reader->Read(result.size(), filter_mask, define_ptr, repeat_ptr, result_vector);
952
952
  need_to_read[id] = false;
953
953
 
@@ -962,11 +962,11 @@ bool ParquetReader::ScanInternal(ParquetReaderScanState &state, DataChunk &resul
962
962
  }
963
963
  auto file_col_idx = reader_data.column_ids[col_idx];
964
964
  if (filter_mask.none()) {
965
- root_reader->GetChildReader(file_col_idx)->Skip(result.size());
965
+ root_reader.GetChildReader(file_col_idx)->Skip(result.size());
966
966
  continue;
967
967
  }
968
968
  auto &result_vector = result.data[reader_data.column_mapping[col_idx]];
969
- auto child_reader = root_reader->GetChildReader(file_col_idx);
969
+ auto child_reader = root_reader.GetChildReader(file_col_idx);
970
970
  child_reader->Read(result.size(), filter_mask, define_ptr, repeat_ptr, result_vector);
971
971
  }
972
972
 
@@ -982,7 +982,7 @@ bool ParquetReader::ScanInternal(ParquetReaderScanState &state, DataChunk &resul
982
982
  for (idx_t col_idx = 0; col_idx < reader_data.column_ids.size(); col_idx++) {
983
983
  auto file_col_idx = reader_data.column_ids[col_idx];
984
984
  auto &result_vector = result.data[reader_data.column_mapping[col_idx]];
985
- auto child_reader = root_reader->GetChildReader(file_col_idx);
985
+ auto child_reader = root_reader.GetChildReader(file_col_idx);
986
986
  auto rows_read = child_reader->Read(result.size(), filter_mask, define_ptr, repeat_ptr, result_vector);
987
987
  if (rows_read != result.size()) {
988
988
  throw InvalidInputException("Mismatch in parquet read for column %llu, expected %llu rows, got %llu",
@@ -48,12 +48,13 @@ Value ParquetStatisticsUtils::ConvertValue(const LogicalType &type,
48
48
  if (stats.empty()) {
49
49
  return Value();
50
50
  }
51
+ auto stats_data = const_data_ptr_cast(stats.c_str());
51
52
  switch (type.id()) {
52
53
  case LogicalTypeId::BOOLEAN: {
53
54
  if (stats.size() != sizeof(bool)) {
54
55
  throw InternalException("Incorrect stats size for type BOOLEAN");
55
56
  }
56
- return Value::BOOLEAN(Load<bool>((data_ptr_t)stats.c_str()));
57
+ return Value::BOOLEAN(Load<bool>(stats_data));
57
58
  }
58
59
  case LogicalTypeId::UTINYINT:
59
60
  case LogicalTypeId::USMALLINT:
@@ -61,29 +62,29 @@ Value ParquetStatisticsUtils::ConvertValue(const LogicalType &type,
61
62
  if (stats.size() != sizeof(uint32_t)) {
62
63
  throw InternalException("Incorrect stats size for type UINTEGER");
63
64
  }
64
- return Value::UINTEGER(Load<uint32_t>((data_ptr_t)stats.c_str()));
65
+ return Value::UINTEGER(Load<uint32_t>(stats_data));
65
66
  case LogicalTypeId::UBIGINT:
66
67
  if (stats.size() != sizeof(uint64_t)) {
67
68
  throw InternalException("Incorrect stats size for type UBIGINT");
68
69
  }
69
- return Value::UBIGINT(Load<uint64_t>((data_ptr_t)stats.c_str()));
70
+ return Value::UBIGINT(Load<uint64_t>(stats_data));
70
71
  case LogicalTypeId::TINYINT:
71
72
  case LogicalTypeId::SMALLINT:
72
73
  case LogicalTypeId::INTEGER:
73
74
  if (stats.size() != sizeof(int32_t)) {
74
75
  throw InternalException("Incorrect stats size for type INTEGER");
75
76
  }
76
- return Value::INTEGER(Load<int32_t>((data_ptr_t)stats.c_str()));
77
+ return Value::INTEGER(Load<int32_t>(stats_data));
77
78
  case LogicalTypeId::BIGINT:
78
79
  if (stats.size() != sizeof(int64_t)) {
79
80
  throw InternalException("Incorrect stats size for type BIGINT");
80
81
  }
81
- return Value::BIGINT(Load<int64_t>((data_ptr_t)stats.c_str()));
82
+ return Value::BIGINT(Load<int64_t>(stats_data));
82
83
  case LogicalTypeId::FLOAT: {
83
84
  if (stats.size() != sizeof(float)) {
84
85
  throw InternalException("Incorrect stats size for type FLOAT");
85
86
  }
86
- auto val = Load<float>((data_ptr_t)stats.c_str());
87
+ auto val = Load<float>(stats_data);
87
88
  if (!Value::FloatIsFinite(val)) {
88
89
  return Value();
89
90
  }
@@ -93,7 +94,7 @@ Value ParquetStatisticsUtils::ConvertValue(const LogicalType &type,
93
94
  if (stats.size() != sizeof(double)) {
94
95
  throw InternalException("Incorrect stats size for type DOUBLE");
95
96
  }
96
- auto val = Load<double>((data_ptr_t)stats.c_str());
97
+ auto val = Load<double>(stats_data);
97
98
  if (!Value::DoubleIsFinite(val)) {
98
99
  return Value();
99
100
  }
@@ -107,13 +108,13 @@ Value ParquetStatisticsUtils::ConvertValue(const LogicalType &type,
107
108
  if (stats.size() != sizeof(int32_t)) {
108
109
  throw InternalException("Incorrect stats size for type %s", type.ToString());
109
110
  }
110
- return Value::DECIMAL(Load<int32_t>((data_ptr_t)stats.c_str()), width, scale);
111
+ return Value::DECIMAL(Load<int32_t>(stats_data), width, scale);
111
112
  }
112
113
  case Type::INT64: {
113
114
  if (stats.size() != sizeof(int64_t)) {
114
115
  throw InternalException("Incorrect stats size for type %s", type.ToString());
115
116
  }
116
- return Value::DECIMAL(Load<int64_t>((data_ptr_t)stats.c_str()), width, scale);
117
+ return Value::DECIMAL(Load<int64_t>(stats_data), width, scale);
117
118
  }
118
119
  case Type::BYTE_ARRAY:
119
120
  case Type::FIXED_LEN_BYTE_ARRAY:
@@ -122,21 +123,17 @@ Value ParquetStatisticsUtils::ConvertValue(const LogicalType &type,
122
123
  }
123
124
  switch (type.InternalType()) {
124
125
  case PhysicalType::INT16:
125
- return Value::DECIMAL(
126
- ParquetDecimalUtils::ReadDecimalValue<int16_t>((const_data_ptr_t)stats.c_str(), stats.size()),
127
- width, scale);
126
+ return Value::DECIMAL(ParquetDecimalUtils::ReadDecimalValue<int16_t>(stats_data, stats.size()), width,
127
+ scale);
128
128
  case PhysicalType::INT32:
129
- return Value::DECIMAL(
130
- ParquetDecimalUtils::ReadDecimalValue<int32_t>((const_data_ptr_t)stats.c_str(), stats.size()),
131
- width, scale);
129
+ return Value::DECIMAL(ParquetDecimalUtils::ReadDecimalValue<int32_t>(stats_data, stats.size()), width,
130
+ scale);
132
131
  case PhysicalType::INT64:
133
- return Value::DECIMAL(
134
- ParquetDecimalUtils::ReadDecimalValue<int64_t>((const_data_ptr_t)stats.c_str(), stats.size()),
135
- width, scale);
132
+ return Value::DECIMAL(ParquetDecimalUtils::ReadDecimalValue<int64_t>(stats_data, stats.size()), width,
133
+ scale);
136
134
  case PhysicalType::INT128:
137
- return Value::DECIMAL(
138
- ParquetDecimalUtils::ReadDecimalValue<hugeint_t>((const_data_ptr_t)stats.c_str(), stats.size()),
139
- width, scale);
135
+ return Value::DECIMAL(ParquetDecimalUtils::ReadDecimalValue<hugeint_t>(stats_data, stats.size()), width,
136
+ scale);
140
137
  default:
141
138
  throw InternalException("Unsupported internal type for decimal");
142
139
  }
@@ -155,14 +152,14 @@ Value ParquetStatisticsUtils::ConvertValue(const LogicalType &type,
155
152
  if (stats.size() != sizeof(int32_t)) {
156
153
  throw InternalException("Incorrect stats size for type DATE");
157
154
  }
158
- return Value::DATE(date_t(Load<int32_t>((data_ptr_t)stats.c_str())));
155
+ return Value::DATE(date_t(Load<int32_t>(stats_data)));
159
156
  case LogicalTypeId::TIME:
160
157
  case LogicalTypeId::TIME_TZ: {
161
158
  int64_t val;
162
159
  if (stats.size() == sizeof(int32_t)) {
163
- val = Load<int32_t>((data_ptr_t)stats.c_str());
160
+ val = Load<int32_t>(stats_data);
164
161
  } else if (stats.size() == sizeof(int64_t)) {
165
- val = Load<int64_t>((data_ptr_t)stats.c_str());
162
+ val = Load<int64_t>(stats_data);
166
163
  } else {
167
164
  throw InternalException("Incorrect stats size for type TIME");
168
165
  }
@@ -190,13 +187,13 @@ Value ParquetStatisticsUtils::ConvertValue(const LogicalType &type,
190
187
  if (stats.size() != sizeof(Int96)) {
191
188
  throw InternalException("Incorrect stats size for type TIMESTAMP");
192
189
  }
193
- return Value::TIMESTAMP(ImpalaTimestampToTimestamp(Load<Int96>((data_ptr_t)stats.c_str())));
190
+ return Value::TIMESTAMP(ImpalaTimestampToTimestamp(Load<Int96>(stats_data)));
194
191
  } else {
195
192
  D_ASSERT(schema_ele.type == Type::INT64);
196
193
  if (stats.size() != sizeof(int64_t)) {
197
194
  throw InternalException("Incorrect stats size for type TIMESTAMP");
198
195
  }
199
- auto val = Load<int64_t>((data_ptr_t)stats.c_str());
196
+ auto val = Load<int64_t>(stats_data);
200
197
  if (schema_ele.__isset.logicalType && schema_ele.logicalType.__isset.TIMESTAMP) {
201
198
  // logical type
202
199
  if (schema_ele.logicalType.TIMESTAMP.unit.__isset.MILLIS) {
@@ -17,7 +17,7 @@ static constexpr int64_t NANOSECONDS_PER_MICRO = 1000LL;
17
17
 
18
18
  static int64_t ImpalaTimestampToMicroseconds(const Int96 &impala_timestamp) {
19
19
  int64_t days_since_epoch = impala_timestamp.value[2] - JULIAN_TO_UNIX_EPOCH_DAYS;
20
- auto nanoseconds = Load<int64_t>((data_ptr_t)impala_timestamp.value);
20
+ auto nanoseconds = Load<int64_t>(const_data_ptr_cast(impala_timestamp.value));
21
21
  auto microseconds = nanoseconds / NANOSECONDS_PER_MICRO;
22
22
  return days_since_epoch * MICROSECONDS_PER_DAY + microseconds;
23
23
  }
@@ -35,7 +35,7 @@ Int96 TimestampToImpalaTimestamp(timestamp_t &ts) {
35
35
  // first two uint32 in Int96 are nanoseconds since midnights
36
36
  // last uint32 is number of days since year 4713 BC ("Julian date")
37
37
  Int96 impala_ts;
38
- Store<uint64_t>(ms_since_midnight * 1000000, (data_ptr_t)impala_ts.value);
38
+ Store<uint64_t>(ms_since_midnight * 1000000, data_ptr_cast(impala_ts.value));
39
39
  impala_ts.value[2] = days_since_epoch + JULIAN_TO_UNIX_EPOCH_DAYS;
40
40
  return impala_ts;
41
41
  }
@@ -45,7 +45,7 @@ public:
45
45
  }
46
46
 
47
47
  void write_virt(const uint8_t *buf, uint32_t len) override {
48
- serializer.WriteData((const_data_ptr_t)buf, len);
48
+ serializer.WriteData(const_data_ptr_cast(buf), len);
49
49
  }
50
50
 
51
51
  private:
@@ -232,7 +232,7 @@ ParquetWriter::ParquetWriter(FileSystem &fs, string file_name_p, vector<LogicalT
232
232
  writer = make_uniq<BufferedFileWriter>(fs, file_name.c_str(),
233
233
  FileFlags::FILE_FLAGS_WRITE | FileFlags::FILE_FLAGS_FILE_CREATE_NEW);
234
234
  // parquet files start with the string "PAR1"
235
- writer->WriteData((const_data_ptr_t) "PAR1", 4);
235
+ writer->WriteData(const_data_ptr_cast("PAR1"), 4);
236
236
  TCompactProtocolFactoryT<MyTransport> tproto_factory;
237
237
  protocol = tproto_factory.getProtocol(make_shared<MyTransport>(*writer));
238
238
 
@@ -327,7 +327,7 @@ void ParquetWriter::Finalize() {
327
327
  writer->Write<uint32_t>(writer->GetTotalWritten() - start_offset);
328
328
 
329
329
  // parquet files also end with the string "PAR1"
330
- writer->WriteData((const_data_ptr_t) "PAR1", 4);
330
+ writer->WriteData(const_data_ptr_cast("PAR1"), 4);
331
331
 
332
332
  // flush to disk
333
333
  writer->Sync();
@@ -61,9 +61,9 @@ bool ZstdStreamWrapper::Read(StreamData &sd) {
61
61
  throw IOException(duckdb_zstd::ZSTD_getErrorName(res));
62
62
  }
63
63
 
64
- sd.in_buff_start = (data_ptr_t)in_buffer.src + in_buffer.pos;
65
- sd.in_buff_end = (data_ptr_t)in_buffer.src + in_buffer.size;
66
- sd.out_buff_end = (data_ptr_t)out_buffer.dst + out_buffer.pos;
64
+ sd.in_buff_start = (data_ptr_t)in_buffer.src + in_buffer.pos; // NOLINT
65
+ sd.in_buff_end = (data_ptr_t)in_buffer.src + in_buffer.size; // NOLINT
66
+ sd.out_buff_end = (data_ptr_t)out_buffer.dst + out_buffer.pos; // NOLINT
67
67
  return false;
68
68
  }
69
69
 
@@ -532,10 +532,6 @@ CatalogEntryLookup Catalog::LookupEntry(ClientContext &context, CatalogType type
532
532
  reference_set_t<SchemaCatalogEntry> schemas;
533
533
  if (IsInvalidSchema(schema)) {
534
534
  // try all schemas for this catalog
535
- auto catalog_name = GetName();
536
- if (catalog_name == DatabaseManager::GetDefaultDatabase(context)) {
537
- catalog_name = INVALID_CATALOG;
538
- }
539
535
  auto entries = GetCatalogEntries(context, GetName(), INVALID_SCHEMA);
540
536
  for (auto &entry : entries) {
541
537
  auto &candidate_schema = entry.schema;
@@ -678,31 +674,19 @@ vector<reference<SchemaCatalogEntry>> Catalog::GetSchemas(ClientContext &context
678
674
  return schemas;
679
675
  }
680
676
 
681
- bool Catalog::TypeExists(ClientContext &context, const string &catalog_name, const string &schema, const string &name) {
682
- optional_ptr<CatalogEntry> entry;
683
- entry = GetEntry(context, CatalogType::TYPE_ENTRY, catalog_name, schema, name, OnEntryNotFound::RETURN_NULL);
684
- if (!entry) {
685
- // look in the system catalog
686
- entry = GetEntry(context, CatalogType::TYPE_ENTRY, SYSTEM_CATALOG, schema, name, OnEntryNotFound::RETURN_NULL);
687
- if (!entry) {
688
- return false;
689
- }
690
- }
691
- return true;
692
- }
693
-
694
677
  vector<reference<SchemaCatalogEntry>> Catalog::GetSchemas(ClientContext &context, const string &catalog_name) {
695
678
  vector<reference<Catalog>> catalogs;
696
679
  if (IsInvalidCatalog(catalog_name)) {
697
- unordered_set<string> name;
680
+ reference_set_t<Catalog> inserted_catalogs;
698
681
 
699
682
  auto &search_path = *context.client_data->catalog_search_path;
700
683
  for (auto &entry : search_path.Get()) {
701
- if (name.find(entry.catalog) != name.end()) {
684
+ auto &catalog = Catalog::GetCatalog(context, entry.catalog);
685
+ if (inserted_catalogs.find(catalog) != inserted_catalogs.end()) {
702
686
  continue;
703
687
  }
704
- name.insert(entry.catalog);
705
- catalogs.push_back(Catalog::GetCatalog(context, entry.catalog));
688
+ inserted_catalogs.insert(catalog);
689
+ catalogs.push_back(catalog);
706
690
  }
707
691
  } else {
708
692
  catalogs.push_back(Catalog::GetCatalog(context, catalog_name));
@@ -16,6 +16,9 @@
16
16
  #include "duckdb/parser/constraints/list.hpp"
17
17
  #include "duckdb/function/table/table_scan.hpp"
18
18
  #include "duckdb/storage/table_storage_info.hpp"
19
+ #include "duckdb/planner/operator/logical_get.hpp"
20
+ #include "duckdb/planner/operator/logical_projection.hpp"
21
+ #include "duckdb/planner/operator/logical_update.hpp"
19
22
 
20
23
  namespace duckdb {
21
24
 
@@ -730,4 +733,114 @@ TableStorageInfo DuckTableEntry::GetStorageInfo(ClientContext &context) {
730
733
  return result;
731
734
  }
732
735
 
736
+ static void BindExtraColumns(TableCatalogEntry &table, LogicalGet &get, LogicalProjection &proj, LogicalUpdate &update,
737
+ physical_index_set_t &bound_columns) {
738
+ if (bound_columns.size() <= 1) {
739
+ return;
740
+ }
741
+ idx_t found_column_count = 0;
742
+ physical_index_set_t found_columns;
743
+ for (idx_t i = 0; i < update.columns.size(); i++) {
744
+ if (bound_columns.find(update.columns[i]) != bound_columns.end()) {
745
+ // this column is referenced in the CHECK constraint
746
+ found_column_count++;
747
+ found_columns.insert(update.columns[i]);
748
+ }
749
+ }
750
+ if (found_column_count > 0 && found_column_count != bound_columns.size()) {
751
+ // columns in this CHECK constraint were referenced, but not all were part of the UPDATE
752
+ // add them to the scan and update set
753
+ for (auto &check_column_id : bound_columns) {
754
+ if (found_columns.find(check_column_id) != found_columns.end()) {
755
+ // column is already projected
756
+ continue;
757
+ }
758
+ // column is not projected yet: project it by adding the clause "i=i" to the set of updated columns
759
+ auto &column = table.GetColumns().GetColumn(check_column_id);
760
+ update.expressions.push_back(make_uniq<BoundColumnRefExpression>(
761
+ column.Type(), ColumnBinding(proj.table_index, proj.expressions.size())));
762
+ proj.expressions.push_back(make_uniq<BoundColumnRefExpression>(
763
+ column.Type(), ColumnBinding(get.table_index, get.column_ids.size())));
764
+ get.column_ids.push_back(check_column_id.index);
765
+ update.columns.push_back(check_column_id);
766
+ }
767
+ }
768
+ }
769
+
770
+ static bool TypeSupportsRegularUpdate(const LogicalType &type) {
771
+ switch (type.id()) {
772
+ case LogicalTypeId::LIST:
773
+ case LogicalTypeId::MAP:
774
+ case LogicalTypeId::UNION:
775
+ // lists and maps and unions don't support updates directly
776
+ return false;
777
+ case LogicalTypeId::STRUCT: {
778
+ auto &child_types = StructType::GetChildTypes(type);
779
+ for (auto &entry : child_types) {
780
+ if (!TypeSupportsRegularUpdate(entry.second)) {
781
+ return false;
782
+ }
783
+ }
784
+ return true;
785
+ }
786
+ default:
787
+ return true;
788
+ }
789
+ }
790
+
791
+ void DuckTableEntry::BindUpdateConstraints(LogicalGet &get, LogicalProjection &proj, LogicalUpdate &update) {
792
+ TableCatalogEntry::BindUpdateConstraints(get, proj, update);
793
+ // check the constraints and indexes of the table to see if we need to project any additional columns
794
+ // we do this for indexes with multiple columns and CHECK constraints in the UPDATE clause
795
+ // suppose we have a constraint CHECK(i + j < 10); now we need both i and j to check the constraint
796
+ // if we are only updating one of the two columns we add the other one to the UPDATE set
797
+ // with a "useless" update (i.e. i=i) so we can verify that the CHECK constraint is not violated
798
+ for (auto &constraint : GetBoundConstraints()) {
799
+ if (constraint->type == ConstraintType::CHECK) {
800
+ auto &check = constraint->Cast<BoundCheckConstraint>();
801
+ // check constraint! check if we need to add any extra columns to the UPDATE clause
802
+ BindExtraColumns(*this, get, proj, update, check.bound_columns);
803
+ }
804
+ }
805
+ auto &table_storage = GetStorage();
806
+ if (update.return_chunk) {
807
+ physical_index_set_t all_columns;
808
+ for (idx_t i = 0; i < table_storage.column_definitions.size(); i++) {
809
+ all_columns.insert(PhysicalIndex(i));
810
+ }
811
+ BindExtraColumns(*this, get, proj, update, all_columns);
812
+ }
813
+ // for index updates we always turn any update into an insert and a delete
814
+ // we thus need all the columns to be available, hence we check if the update touches any index columns
815
+ // If the returning keyword is used, we need access to the whole row in case the user requests it.
816
+ // Therefore switch the update to a delete and insert.
817
+ update.update_is_del_and_insert = false;
818
+ table_storage.info->indexes.Scan([&](Index &index) {
819
+ if (index.IndexIsUpdated(update.columns)) {
820
+ update.update_is_del_and_insert = true;
821
+ return true;
822
+ }
823
+ return false;
824
+ });
825
+
826
+ // we also convert any updates on LIST columns into delete + insert
827
+ for (auto &col_index : update.columns) {
828
+ auto &column = GetColumns().GetColumn(col_index);
829
+ if (!TypeSupportsRegularUpdate(column.Type())) {
830
+ update.update_is_del_and_insert = true;
831
+ break;
832
+ }
833
+ }
834
+
835
+ if (update.update_is_del_and_insert) {
836
+ // the update updates a column required by an index or requires returning the updated rows,
837
+ // push projections for all columns
838
+ physical_index_set_t all_columns;
839
+ for (idx_t i = 0; i < table_storage.column_definitions.size(); i++) {
840
+ all_columns.insert(PhysicalIndex(i));
841
+ }
842
+ BindExtraColumns(*this, get, proj, update, all_columns);
843
+ }
844
+ }
845
+
733
846
  } // namespace duckdb
@@ -206,6 +206,7 @@ const vector<unique_ptr<Constraint>> &TableCatalogEntry::GetConstraints() {
206
206
  return constraints;
207
207
  }
208
208
 
209
+ // LCOV_EXCL_START
209
210
  DataTable &TableCatalogEntry::GetStorage() {
210
211
  throw InternalException("Calling GetStorage on a TableCatalogEntry that is not a DuckTableEntry");
211
212
  }
@@ -213,4 +214,10 @@ DataTable &TableCatalogEntry::GetStorage() {
213
214
  const vector<unique_ptr<BoundConstraint>> &TableCatalogEntry::GetBoundConstraints() {
214
215
  throw InternalException("Calling GetBoundConstraints on a TableCatalogEntry that is not a DuckTableEntry");
215
216
  }
217
+
218
+ // LCOV_EXCL_STOP
219
+
220
+ void TableCatalogEntry::BindUpdateConstraints(LogicalGet &get, LogicalProjection &proj, LogicalUpdate &update) {
221
+ }
222
+
216
223
  } // namespace duckdb
@@ -34,10 +34,6 @@ unique_ptr<CatalogEntry> CatalogEntry::Copy(ClientContext &context) const {
34
34
  string CatalogEntry::ToSQL() const {
35
35
  throw InternalException("Unsupported catalog type for ToSQL()");
36
36
  }
37
- // LCOV_EXCL_STOP
38
-
39
- void CatalogEntry::Verify(Catalog &catalog_p) {
40
- }
41
37
 
42
38
  Catalog &CatalogEntry::ParentCatalog() {
43
39
  throw InternalException("CatalogEntry::ParentCatalog called on catalog entry without catalog");
@@ -46,6 +42,10 @@ Catalog &CatalogEntry::ParentCatalog() {
46
42
  SchemaCatalogEntry &CatalogEntry::ParentSchema() {
47
43
  throw InternalException("CatalogEntry::ParentSchema called on catalog entry without schema");
48
44
  }
45
+ // LCOV_EXCL_STOP
46
+
47
+ void CatalogEntry::Verify(Catalog &catalog_p) {
48
+ }
49
49
 
50
50
  InCatalogEntry::InCatalogEntry(CatalogType type, Catalog &catalog, string name)
51
51
  : CatalogEntry(type, catalog, std::move(name)), catalog(catalog) {
@@ -5,6 +5,7 @@
5
5
  #include "duckdb/common/string_util.hpp"
6
6
  #include "duckdb/main/client_context.hpp"
7
7
  #include "duckdb/catalog/catalog.hpp"
8
+ #include "duckdb/main/database_manager.hpp"
8
9
 
9
10
  namespace duckdb {
10
11
 
@@ -126,37 +127,57 @@ void CatalogSearchPath::Reset() {
126
127
  SetPaths(empty);
127
128
  }
128
129
 
129
- void CatalogSearchPath::Set(vector<CatalogSearchEntry> new_paths, bool is_set_schema) {
130
- if (is_set_schema && new_paths.size() != 1) {
131
- throw CatalogException("SET schema can set only 1 schema. This has %d", new_paths.size());
130
+ string CatalogSearchPath::GetSetName(CatalogSetPathType set_type) {
131
+ switch (set_type) {
132
+ case CatalogSetPathType::SET_SCHEMA:
133
+ return "SET schema";
134
+ case CatalogSetPathType::SET_SCHEMAS:
135
+ return "SET search_path";
136
+ default:
137
+ throw InternalException("Unrecognized CatalogSetPathType");
138
+ }
139
+ }
140
+
141
+ void CatalogSearchPath::Set(vector<CatalogSearchEntry> new_paths, CatalogSetPathType set_type) {
142
+ if (set_type != CatalogSetPathType::SET_SCHEMAS && new_paths.size() != 1) {
143
+ throw CatalogException("%s can set only 1 schema. This has %d", GetSetName(set_type), new_paths.size());
132
144
  }
133
145
  for (auto &path : new_paths) {
134
- if (!Catalog::GetSchema(context, path.catalog, path.schema, OnEntryNotFound::RETURN_NULL)) {
146
+ auto schema_entry = Catalog::GetSchema(context, path.catalog, path.schema, OnEntryNotFound::RETURN_NULL);
147
+ if (schema_entry) {
148
+ // we are setting a schema - update the catalog and schema
135
149
  if (path.catalog.empty()) {
136
- // only schema supplied - check if this is a database instead
137
- auto schema = Catalog::GetSchema(context, path.schema, DEFAULT_SCHEMA, OnEntryNotFound::RETURN_NULL);
150
+ path.catalog = GetDefault().catalog;
151
+ }
152
+ continue;
153
+ }
154
+ // only schema supplied - check if this is a catalog instead
155
+ if (path.catalog.empty()) {
156
+ auto catalog = Catalog::GetCatalogEntry(context, path.schema);
157
+ if (catalog) {
158
+ auto schema = catalog->GetSchema(context, DEFAULT_SCHEMA, OnEntryNotFound::RETURN_NULL);
138
159
  if (schema) {
139
160
  path.catalog = std::move(path.schema);
140
161
  path.schema = schema->name;
141
162
  continue;
142
163
  }
143
164
  }
144
- throw CatalogException("SET %s: No catalog + schema named %s found.",
145
- is_set_schema ? "schema" : "search_path", path.ToString());
146
165
  }
166
+ throw CatalogException("%s: No catalog + schema named \"%s\" found.", GetSetName(set_type), path.ToString());
147
167
  }
148
- if (is_set_schema) {
168
+ if (set_type == CatalogSetPathType::SET_SCHEMA) {
149
169
  if (new_paths[0].catalog == TEMP_CATALOG || new_paths[0].catalog == SYSTEM_CATALOG) {
150
- throw CatalogException("SET schema cannot be set to internal schema \"%s\"", new_paths[0].catalog);
170
+ throw CatalogException("%s cannot be set to internal schema \"%s\"", GetSetName(set_type),
171
+ new_paths[0].catalog);
151
172
  }
152
173
  }
153
174
  this->set_paths = std::move(new_paths);
154
175
  SetPaths(set_paths);
155
176
  }
156
177
 
157
- void CatalogSearchPath::Set(CatalogSearchEntry new_value, bool is_set_schema) {
178
+ void CatalogSearchPath::Set(CatalogSearchEntry new_value, CatalogSetPathType set_type) {
158
179
  vector<CatalogSearchEntry> new_paths {std::move(new_value)};
159
- Set(std::move(new_paths), is_set_schema);
180
+ Set(std::move(new_paths), set_type);
160
181
  }
161
182
 
162
183
  const vector<CatalogSearchEntry> &CatalogSearchPath::Get() {
@@ -225,4 +246,20 @@ void CatalogSearchPath::SetPaths(vector<CatalogSearchEntry> new_paths) {
225
246
  paths.emplace_back(SYSTEM_CATALOG, "pg_catalog");
226
247
  }
227
248
 
249
+ bool CatalogSearchPath::SchemaInSearchPath(ClientContext &context, const string &catalog_name,
250
+ const string &schema_name) {
251
+ for (auto &path : paths) {
252
+ if (path.schema != schema_name) {
253
+ continue;
254
+ }
255
+ if (path.catalog == catalog_name) {
256
+ return true;
257
+ }
258
+ if (IsInvalidCatalog(path.catalog) && catalog_name == DatabaseManager::GetDefaultDatabase(context)) {
259
+ return true;
260
+ }
261
+ }
262
+ return false;
263
+ }
264
+
228
265
  } // namespace duckdb
@@ -42,7 +42,7 @@ private:
42
42
  };
43
43
 
44
44
  CatalogSet::CatalogSet(Catalog &catalog_p, unique_ptr<DefaultGenerator> defaults)
45
- : catalog((DuckCatalog &)catalog_p), defaults(std::move(defaults)) {
45
+ : catalog(catalog_p.Cast<DuckCatalog>()), defaults(std::move(defaults)) {
46
46
  D_ASSERT(catalog_p.IsDuckCatalog());
47
47
  }
48
48
  CatalogSet::~CatalogSet() {