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
@@ -216,7 +216,7 @@ static inline bool GetValueString(yyjson_val *val, yyjson_alc *alc, string_t &re
216
216
 
217
217
  template <class T>
218
218
  static bool TransformNumerical(yyjson_val *vals[], Vector &result, const idx_t count, JSONTransformOptions &options) {
219
- auto data = (T *)FlatVector::GetData(result);
219
+ auto data = FlatVector::GetData<T>(result);
220
220
  auto &validity = FlatVector::Validity(result);
221
221
 
222
222
  bool success = true;
@@ -238,7 +238,7 @@ static bool TransformNumerical(yyjson_val *vals[], Vector &result, const idx_t c
238
238
  template <class T>
239
239
  static bool TransformDecimal(yyjson_val *vals[], Vector &result, const idx_t count, uint8_t width, uint8_t scale,
240
240
  JSONTransformOptions &options) {
241
- auto data = (T *)FlatVector::GetData(result);
241
+ auto data = FlatVector::GetData<T>(result);
242
242
  auto &validity = FlatVector::Validity(result);
243
243
 
244
244
  bool success = true;
@@ -373,7 +373,7 @@ static bool TransformFromStringWithFormat(yyjson_val *vals[], Vector &result, co
373
373
  }
374
374
 
375
375
  static bool TransformToString(yyjson_val *vals[], yyjson_alc *alc, Vector &result, const idx_t count) {
376
- auto data = (string_t *)FlatVector::GetData(result);
376
+ auto data = FlatVector::GetData<string_t>(result);
377
377
  auto &validity = FlatVector::Validity(result);
378
378
  for (idx_t i = 0; i < count; i++) {
379
379
  const auto &val = vals[i];
@@ -400,11 +400,11 @@ bool JSONTransform::TransformObject(yyjson_val *objects[], yyjson_alc *alc, cons
400
400
  nested_vals.reserve(column_count);
401
401
  for (idx_t col_idx = 0; col_idx < column_count; col_idx++) {
402
402
  key_map.insert({{names[col_idx].c_str(), names[col_idx].length()}, col_idx});
403
- nested_vals.push_back((yyjson_val **)alc->malloc(alc->ctx, sizeof(yyjson_val *) * count));
403
+ nested_vals.push_back(JSONCommon::AllocateArray<yyjson_val *>(alc, count));
404
404
  }
405
405
 
406
406
  idx_t found_key_count;
407
- auto found_keys = (bool *)alc->malloc(alc->ctx, sizeof(bool) * column_count);
407
+ auto found_keys = JSONCommon::AllocateArray<bool>(alc, column_count);
408
408
 
409
409
  bool success = true;
410
410
 
@@ -558,7 +558,7 @@ static bool TransformArray(yyjson_val *arrays[], yyjson_alc *alc, Vector &result
558
558
  ListVector::Reserve(result, offset);
559
559
 
560
560
  // Initialize array for the nested values
561
- auto nested_vals = (yyjson_val **)alc->malloc(alc->ctx, sizeof(yyjson_val *) * offset);
561
+ auto nested_vals = JSONCommon::AllocateArray<yyjson_val *>(alc, offset);
562
562
 
563
563
  // Get array values
564
564
  size_t idx, max;
@@ -617,8 +617,8 @@ static bool TransformObjectToMap(yyjson_val *objects[], yyjson_alc *alc, Vector
617
617
  auto list_entries = FlatVector::GetData<list_entry_t>(result);
618
618
  auto &list_validity = FlatVector::Validity(result);
619
619
 
620
- auto keys = (yyjson_val **)alc->malloc(alc->ctx, sizeof(yyjson_val *) * list_size);
621
- auto vals = (yyjson_val **)alc->malloc(alc->ctx, sizeof(yyjson_val *) * list_size);
620
+ auto keys = JSONCommon::AllocateArray<yyjson_val *>(alc, list_size);
621
+ auto vals = JSONCommon::AllocateArray<yyjson_val *>(alc, list_size);
622
622
 
623
623
  bool success = true;
624
624
  idx_t list_offset = 0;
@@ -675,7 +675,7 @@ static bool TransformObjectToMap(yyjson_val *objects[], yyjson_alc *alc, Vector
675
675
  }
676
676
 
677
677
  bool TransformToJSON(yyjson_val *vals[], yyjson_alc *alc, Vector &result, const idx_t count) {
678
- auto data = (string_t *)FlatVector::GetData(result);
678
+ auto data = FlatVector::GetData<string_t>(result);
679
679
  auto &validity = FlatVector::Validity(result);
680
680
  for (idx_t i = 0; i < count; i++) {
681
681
  const auto &val = vals[i];
@@ -776,11 +776,11 @@ static bool TransformFunctionInternal(Vector &input, const idx_t count, Vector &
776
776
  JSONTransformOptions &options) {
777
777
  UnifiedVectorFormat input_data;
778
778
  input.ToUnifiedFormat(count, input_data);
779
- auto inputs = (string_t *)input_data.data;
779
+ auto inputs = UnifiedVectorFormat::GetData<string_t>(input_data);
780
780
 
781
781
  // Read documents
782
- auto docs = (yyjson_doc **)alc->malloc(alc->ctx, sizeof(yyjson_doc *) * count);
783
- auto vals = (yyjson_val **)alc->malloc(alc->ctx, sizeof(yyjson_val *) * count);
782
+ auto docs = JSONCommon::AllocateArray<yyjson_doc *>(alc, count);
783
+ auto vals = JSONCommon::AllocateArray<yyjson_val *>(alc, count);
784
784
  auto &result_validity = FlatVector::Validity(result);
785
785
  for (idx_t i = 0; i < count; i++) {
786
786
  auto idx = input_data.sel->get_index(i);
@@ -258,7 +258,8 @@ static void ReadJSONFunction(ClientContext &context, TableFunctionInput &data_p,
258
258
  string hint =
259
259
  gstate.bind_data.auto_detect
260
260
  ? "\nTry increasing 'sample_size', reducing 'maximum_depth', specifying 'columns', 'format' or "
261
- "'records' manually, or setting 'ignore_errors' to true."
261
+ "'records' manually, setting 'ignore_errors' to true, or setting 'union_by_name' to true when "
262
+ "reading multiple files with a different structure."
262
263
  : "\nTry setting 'auto_detect' to true, specifying 'format' or 'records' manually, or setting "
263
264
  "'ignore_errors' to true.";
264
265
  lstate.ThrowTransformError(lstate.transform_options.object_index,
@@ -15,6 +15,9 @@ namespace duckdb {
15
15
  static void CheckPath(const Value &path_val, string &path, size_t &len) {
16
16
  string error;
17
17
  Value path_str_val;
18
+ if (path_val.IsNull()) {
19
+ throw InvalidInputException("JSON path cannot be NULL");
20
+ }
18
21
  if (!path_val.DefaultTryCastAs(LogicalType::VARCHAR, path_str_val, &error)) {
19
22
  throw InvalidInputException(error);
20
23
  }
@@ -220,8 +223,8 @@ static bool CastVarcharToJSON(Vector &source, Vector &result, idx_t count, CastP
220
223
  bool success = true;
221
224
  UnaryExecutor::ExecuteWithNulls<string_t, string_t>(
222
225
  source, result, count, [&](string_t input, ValidityMask &mask, idx_t idx) {
223
- auto data = (char *)(input.GetData());
224
- auto length = input.GetSize();
226
+ auto data = input.GetDataWriteable();
227
+ const auto length = input.GetSize();
225
228
 
226
229
  yyjson_read_err error;
227
230
  auto doc = JSONCommon::ReadDocumentUnsafe(data, length, JSONCommon::READ_FLAG, alc, &error);
@@ -236,7 +239,7 @@ static bool CastVarcharToJSON(Vector &source, Vector &result, idx_t count, CastP
236
239
  }
237
240
  return input;
238
241
  });
239
- result.Reinterpret(source);
242
+ StringVector::AddHeapReference(result, source);
240
243
  return success;
241
244
  }
242
245
 
@@ -244,14 +244,13 @@ unique_ptr<GlobalTableFunctionState> JSONGlobalTableFunctionState::Init(ClientCo
244
244
 
245
245
  idx_t JSONGlobalTableFunctionState::MaxThreads() const {
246
246
  auto &bind_data = state.bind_data;
247
- if (bind_data.options.format == JSONFormat::NEWLINE_DELIMITED &&
248
- bind_data.options.compression == FileCompressionType::UNCOMPRESSED) {
247
+ if (bind_data.options.format == JSONFormat::NEWLINE_DELIMITED) {
249
248
  return state.system_threads;
250
249
  }
251
250
 
252
251
  if (!state.json_readers.empty() && state.json_readers[0]->IsOpen()) {
253
252
  auto &reader = *state.json_readers[0];
254
- if (reader.IsParallel()) { // Auto-detected parallel scan
253
+ if (reader.GetFormat() == JSONFormat::NEWLINE_DELIMITED) { // Auto-detected NDJSON
255
254
  return state.system_threads;
256
255
  }
257
256
  }
@@ -298,6 +297,7 @@ idx_t JSONScanLocalState::ReadNext(JSONScanGlobalState &gstate) {
298
297
  if (!ReadNextBuffer(gstate)) {
299
298
  return scan_count;
300
299
  }
300
+ D_ASSERT(buffer_size != 0);
301
301
  if (current_buffer_handle->buffer_index != 0 && current_reader->GetFormat() == JSONFormat::NEWLINE_DELIMITED) {
302
302
  ReconstructFirstObject(gstate);
303
303
  scan_count++;
@@ -308,8 +308,8 @@ idx_t JSONScanLocalState::ReadNext(JSONScanGlobalState &gstate) {
308
308
  return scan_count;
309
309
  }
310
310
 
311
- static inline const char *NextNewline(const char *ptr, idx_t size) {
312
- return (const char *)memchr(ptr, '\n', size);
311
+ static inline const char *NextNewline(char *ptr, idx_t size) {
312
+ return char_ptr_cast(memchr(ptr, '\n', size));
313
313
  }
314
314
 
315
315
  static inline const char *PreviousNewline(const char *ptr) {
@@ -455,7 +455,21 @@ void JSONScanLocalState::ThrowInvalidAtEndError() {
455
455
  throw InvalidInputException("Invalid JSON detected at the end of file \"%s\".", current_reader->GetFileName());
456
456
  }
457
457
 
458
- static pair<JSONFormat, JSONRecordType> DetectFormatAndRecordType(const char *const buffer_ptr, const idx_t buffer_size,
458
+ bool JSONScanLocalState::IsParallel(JSONScanGlobalState &gstate) const {
459
+ if (bind_data.files.size() >= gstate.system_threads) {
460
+ // More files than threads, just parallelize over the files
461
+ return false;
462
+ }
463
+
464
+ if (current_reader->GetFormat() == JSONFormat::NEWLINE_DELIMITED) {
465
+ // NDJSON can be read in parallel
466
+ return true;
467
+ }
468
+
469
+ return false;
470
+ }
471
+
472
+ static pair<JSONFormat, JSONRecordType> DetectFormatAndRecordType(char *const buffer_ptr, const idx_t buffer_size,
459
473
  yyjson_alc *alc) {
460
474
  // First we do the easy check whether it's NEWLINE_DELIMITED
461
475
  auto line_end = NextNewline(buffer_ptr, buffer_size);
@@ -464,7 +478,7 @@ static pair<JSONFormat, JSONRecordType> DetectFormatAndRecordType(const char *co
464
478
  SkipWhitespace(buffer_ptr, line_size, buffer_size);
465
479
 
466
480
  yyjson_read_err error;
467
- auto doc = JSONCommon::ReadDocumentUnsafe((char *)buffer_ptr, line_size, JSONCommon::READ_FLAG, alc, &error);
481
+ auto doc = JSONCommon::ReadDocumentUnsafe(buffer_ptr, line_size, JSONCommon::READ_FLAG, alc, &error);
468
482
  if (error.code == YYJSON_READ_SUCCESS) { // We successfully read the line
469
483
  if (yyjson_is_arr(doc->root) && line_size == buffer_size) {
470
484
  // It's just one array, let's actually assume ARRAY, not NEWLINE_DELIMITED
@@ -500,8 +514,8 @@ static pair<JSONFormat, JSONRecordType> DetectFormatAndRecordType(const char *co
500
514
 
501
515
  // It's definitely an ARRAY, but now we have to figure out if there's more than one top-level array
502
516
  yyjson_read_err error;
503
- auto doc = JSONCommon::ReadDocumentUnsafe((char *)buffer_ptr + buffer_offset, remaining, JSONCommon::READ_STOP_FLAG,
504
- alc, &error);
517
+ auto doc =
518
+ JSONCommon::ReadDocumentUnsafe(buffer_ptr + buffer_offset, remaining, JSONCommon::READ_STOP_FLAG, alc, &error);
505
519
  if (error.code == YYJSON_READ_SUCCESS) {
506
520
  D_ASSERT(yyjson_is_arr(doc->root));
507
521
 
@@ -563,7 +577,7 @@ bool JSONScanLocalState::ReadNextBuffer(JSONScanGlobalState &gstate) {
563
577
  } else {
564
578
  buffer = gstate.allocator.Allocate(gstate.buffer_capacity);
565
579
  }
566
- buffer_ptr = (const char *)buffer.get();
580
+ buffer_ptr = char_ptr_cast(buffer.get());
567
581
 
568
582
  idx_t buffer_index;
569
583
  while (true) {
@@ -573,7 +587,7 @@ bool JSONScanLocalState::ReadNextBuffer(JSONScanGlobalState &gstate) {
573
587
  if (is_last && gstate.bind_data.type != JSONScanType::SAMPLE) {
574
588
  current_reader->CloseJSONFile();
575
589
  }
576
- if (current_reader->IsParallel()) {
590
+ if (IsParallel(gstate)) {
577
591
  // If this threads' current reader is still the one at gstate.file_index,
578
592
  // this thread can end the parallel scan
579
593
  lock_guard<mutex> guard(gstate.lock);
@@ -599,7 +613,7 @@ bool JSONScanLocalState::ReadNextBuffer(JSONScanGlobalState &gstate) {
599
613
  current_reader = gstate.json_readers[gstate.file_index].get();
600
614
  if (current_reader->IsOpen()) {
601
615
  // Can only be open from auto detection, so these should be known
602
- if (!current_reader->IsParallel()) {
616
+ if (!IsParallel(gstate)) {
603
617
  batch_index = gstate.batch_index++;
604
618
  gstate.file_index++;
605
619
  }
@@ -609,15 +623,15 @@ bool JSONScanLocalState::ReadNextBuffer(JSONScanGlobalState &gstate) {
609
623
  current_reader->OpenJSONFile();
610
624
  batch_index = gstate.batch_index++;
611
625
  if (current_reader->GetFormat() != JSONFormat::AUTO_DETECT) {
612
- if (!current_reader->IsParallel()) {
626
+ if (!IsParallel(gstate)) {
613
627
  gstate.file_index++;
614
628
  }
615
629
  continue;
616
630
  }
617
631
 
618
- // If we have a low amount of files, we auto-detect within the lock,
632
+ // If we have less files than threads, we auto-detect within the lock,
619
633
  // so other threads may join a parallel NDJSON scan
620
- if (gstate.json_readers.size() < 100) {
634
+ if (gstate.json_readers.size() < gstate.system_threads) {
621
635
  if (ReadAndAutoDetect(gstate, buffer_index, false)) {
622
636
  continue;
623
637
  }
@@ -637,7 +651,7 @@ bool JSONScanLocalState::ReadNextBuffer(JSONScanGlobalState &gstate) {
637
651
  D_ASSERT(buffer_size != 0); // We should have read something if we got here
638
652
 
639
653
  idx_t readers = 1;
640
- if (current_reader->IsParallel()) {
654
+ if (current_reader->GetFormat() == JSONFormat::NEWLINE_DELIMITED) {
641
655
  readers = is_last ? 1 : 2;
642
656
  }
643
657
 
@@ -650,7 +664,7 @@ bool JSONScanLocalState::ReadNextBuffer(JSONScanGlobalState &gstate) {
650
664
  lines_or_objects_in_buffer = 0;
651
665
 
652
666
  // YYJSON needs this
653
- memset((void *)(buffer_ptr + buffer_size), 0, YYJSON_PADDING_SIZE);
667
+ memset(buffer_ptr + buffer_size, 0, YYJSON_PADDING_SIZE);
654
668
 
655
669
  return true;
656
670
  }
@@ -680,7 +694,7 @@ bool JSONScanLocalState::ReadAndAutoDetect(JSONScanGlobalState &gstate, idx_t &b
680
694
  throw InvalidInputException("Expected file \"%s\" to contain records, detected non-record JSON instead.",
681
695
  current_reader->GetFileName());
682
696
  }
683
- if (!already_incremented_file_idx && !current_reader->IsParallel()) {
697
+ if (!already_incremented_file_idx && !IsParallel(gstate)) {
684
698
  gstate.file_index++;
685
699
  }
686
700
  return false;
@@ -739,13 +753,14 @@ void JSONScanLocalState::ReadNextBufferNoSeek(JSONScanGlobalState &gstate, idx_t
739
753
  lock_guard<mutex> reader_guard(current_reader->lock);
740
754
  buffer_index = current_reader->GetBufferIndex();
741
755
 
742
- if (current_reader->IsOpen()) {
756
+ if (current_reader->IsOpen() && !current_reader->IsDone()) {
743
757
  read_size = current_reader->GetFileHandle().Read(buffer_ptr + prev_buffer_remainder, request_size,
744
758
  gstate.bind_data.type == JSONScanType::SAMPLE);
759
+ is_last = read_size < request_size;
745
760
  } else {
746
761
  read_size = 0;
762
+ is_last = false;
747
763
  }
748
- is_last = read_size < request_size;
749
764
 
750
765
  if (!gstate.bind_data.ignore_errors && read_size == 0 && prev_buffer_remainder != 0) {
751
766
  ThrowInvalidAtEndError();
@@ -796,13 +811,13 @@ void JSONScanLocalState::ReconstructFirstObject(JSONScanGlobalState &gstate) {
796
811
  D_ASSERT(current_reader->GetFormat() == JSONFormat::NEWLINE_DELIMITED);
797
812
 
798
813
  // Spinlock until the previous batch index has also read its buffer
799
- JSONBufferHandle *previous_buffer_handle = nullptr;
814
+ optional_ptr<JSONBufferHandle> previous_buffer_handle;
800
815
  while (!previous_buffer_handle) {
801
816
  previous_buffer_handle = current_reader->GetBuffer(current_buffer_handle->buffer_index - 1);
802
817
  }
803
818
 
804
819
  // First we find the newline in the previous block
805
- auto prev_buffer_ptr = (const char *)previous_buffer_handle->buffer.get() + previous_buffer_handle->buffer_size;
820
+ auto prev_buffer_ptr = char_ptr_cast(previous_buffer_handle->buffer.get()) + previous_buffer_handle->buffer_size;
806
821
  auto part1_ptr = PreviousNewline(prev_buffer_ptr);
807
822
  auto part1_size = prev_buffer_ptr - part1_ptr;
808
823
 
@@ -825,7 +840,7 @@ void JSONScanLocalState::ReconstructFirstObject(JSONScanGlobalState &gstate) {
825
840
 
826
841
  // And copy the remainder of the line to the reconstruct buffer
827
842
  memcpy(reconstruct_ptr + part1_size, buffer_ptr, part2_size);
828
- memset((void *)(reconstruct_ptr + line_size), 0, YYJSON_PADDING_SIZE);
843
+ memset(reconstruct_ptr + line_size, 0, YYJSON_PADDING_SIZE);
829
844
  buffer_offset += part2_size;
830
845
 
831
846
  // We copied the object, so we are no longer reading the previous buffer
@@ -833,7 +848,7 @@ void JSONScanLocalState::ReconstructFirstObject(JSONScanGlobalState &gstate) {
833
848
  current_reader->RemoveBuffer(current_buffer_handle->buffer_index - 1);
834
849
  }
835
850
 
836
- ParseJSON((char *)reconstruct_ptr, line_size, line_size);
851
+ ParseJSON(char_ptr_cast(reconstruct_ptr), line_size, line_size);
837
852
  }
838
853
 
839
854
  void JSONScanLocalState::ParseNextChunk() {
@@ -867,7 +882,7 @@ void JSONScanLocalState::ParseNextChunk() {
867
882
  }
868
883
 
869
884
  idx_t json_size = json_end - json_start;
870
- ParseJSON((char *)json_start, json_size, remaining);
885
+ ParseJSON(json_start, json_size, remaining);
871
886
  buffer_offset += json_size;
872
887
 
873
888
  if (format == JSONFormat::ARRAY) {
@@ -947,9 +962,10 @@ void JSONScan::Serialize(FieldWriter &writer, const FunctionData *bind_data_p, c
947
962
  bind_data.Serialize(writer);
948
963
  }
949
964
 
950
- unique_ptr<FunctionData> JSONScan::Deserialize(ClientContext &context, FieldReader &reader, TableFunction &function) {
965
+ unique_ptr<FunctionData> JSONScan::Deserialize(PlanDeserializationState &state, FieldReader &reader,
966
+ TableFunction &function) {
951
967
  auto result = make_uniq<JSONScanData>();
952
- result->Deserialize(context, reader);
968
+ result->Deserialize(state.context, reader);
953
969
  return std::move(result);
954
970
  }
955
971