duckdb 0.10.2-dev0.0 → 0.10.2-dev3.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 (699) hide show
  1. package/binding.gyp +22 -18
  2. package/binding.gyp.in +3 -0
  3. package/package.json +1 -1
  4. package/src/duckdb/extension/icu/icu-timezone.cpp +3 -1
  5. package/src/duckdb/extension/icu/icu_extension.cpp +6 -2
  6. package/src/duckdb/extension/json/buffered_json_reader.cpp +10 -3
  7. package/src/duckdb/extension/json/include/buffered_json_reader.hpp +2 -0
  8. package/src/duckdb/extension/json/include/json_scan.hpp +13 -7
  9. package/src/duckdb/extension/json/include/json_serializer.hpp +5 -4
  10. package/src/duckdb/extension/json/include/json_structure.hpp +3 -3
  11. package/src/duckdb/extension/json/json_functions/json_serialize_plan.cpp +15 -5
  12. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +15 -6
  13. package/src/duckdb/extension/json/json_functions/json_structure.cpp +21 -20
  14. package/src/duckdb/extension/json/json_functions/read_json.cpp +37 -3
  15. package/src/duckdb/extension/json/json_functions.cpp +7 -2
  16. package/src/duckdb/extension/json/json_scan.cpp +57 -33
  17. package/src/duckdb/extension/parquet/column_reader.cpp +12 -3
  18. package/src/duckdb/extension/parquet/column_writer.cpp +44 -7
  19. package/src/duckdb/extension/parquet/include/parquet_writer.hpp +5 -1
  20. package/src/duckdb/extension/parquet/parquet_extension.cpp +30 -3
  21. package/src/duckdb/extension/parquet/parquet_metadata.cpp +1 -1
  22. package/src/duckdb/extension/parquet/parquet_writer.cpp +4 -2
  23. package/src/duckdb/extension/parquet/zstd_file_system.cpp +1 -1
  24. package/src/duckdb/src/catalog/catalog.cpp +5 -1
  25. package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +21 -5
  26. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +8 -9
  27. package/src/duckdb/src/catalog/catalog_entry/index_catalog_entry.cpp +3 -7
  28. package/src/duckdb/src/catalog/catalog_entry/sequence_catalog_entry.cpp +1 -1
  29. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +6 -7
  30. package/src/duckdb/src/catalog/catalog_entry.cpp +8 -0
  31. package/src/duckdb/src/catalog/catalog_search_path.cpp +5 -0
  32. package/src/duckdb/src/catalog/catalog_set.cpp +2 -2
  33. package/src/duckdb/src/catalog/default/default_functions.cpp +6 -6
  34. package/src/duckdb/src/catalog/default/default_schemas.cpp +1 -1
  35. package/src/duckdb/src/catalog/default/default_views.cpp +7 -7
  36. package/src/duckdb/src/catalog/dependency_catalog_set.cpp +2 -1
  37. package/src/duckdb/src/catalog/dependency_list.cpp +92 -8
  38. package/src/duckdb/src/catalog/dependency_manager.cpp +53 -68
  39. package/src/duckdb/src/catalog/duck_catalog.cpp +1 -1
  40. package/src/duckdb/src/common/adbc/adbc.cpp +287 -45
  41. package/src/duckdb/src/common/arrow/appender/union_data.cpp +2 -2
  42. package/src/duckdb/src/common/box_renderer.cpp +12 -12
  43. package/src/duckdb/src/common/crypto/md5.cpp +2 -1
  44. package/src/duckdb/src/common/enum_util.cpp +307 -1
  45. package/src/duckdb/src/common/enums/expression_type.cpp +4 -0
  46. package/src/duckdb/src/common/enums/optimizer_type.cpp +1 -1
  47. package/src/duckdb/src/common/file_system.cpp +60 -13
  48. package/src/duckdb/src/common/filename_pattern.cpp +13 -13
  49. package/src/duckdb/src/common/gzip_file_system.cpp +1 -1
  50. package/src/duckdb/src/common/http_state.cpp +1 -1
  51. package/src/duckdb/src/common/local_file_system.cpp +72 -71
  52. package/src/duckdb/src/common/multi_file_reader.cpp +48 -28
  53. package/src/duckdb/src/common/row_operations/row_matcher.cpp +2 -2
  54. package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +13 -1
  55. package/src/duckdb/src/common/serializer/buffered_file_writer.cpp +32 -13
  56. package/src/duckdb/src/common/string_util.cpp +2 -3
  57. package/src/duckdb/src/common/tree_renderer.cpp +32 -67
  58. package/src/duckdb/src/common/types/bit.cpp +6 -6
  59. package/src/duckdb/src/common/types/data_chunk.cpp +2 -2
  60. package/src/duckdb/src/common/types/hash.cpp +6 -6
  61. package/src/duckdb/src/common/types/hyperloglog.cpp +2 -0
  62. package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +13 -0
  63. package/src/duckdb/src/common/types/row/tuple_data_layout.cpp +5 -7
  64. package/src/duckdb/src/common/types/uuid.cpp +1 -1
  65. package/src/duckdb/src/common/types/vector.cpp +22 -14
  66. package/src/duckdb/src/common/types.cpp +8 -1
  67. package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +20 -18
  68. package/src/duckdb/src/common/vector_operations/generators.cpp +1 -1
  69. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +267 -110
  70. package/src/duckdb/src/common/vector_operations/vector_hash.cpp +52 -23
  71. package/src/duckdb/src/common/virtual_file_system.cpp +33 -20
  72. package/src/duckdb/src/core_functions/aggregate/algebraic/avg.cpp +2 -2
  73. package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +3 -3
  74. package/src/duckdb/src/core_functions/aggregate/distributive/sum.cpp +31 -16
  75. package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +3 -0
  76. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +2 -0
  77. package/src/duckdb/src/core_functions/core_functions.cpp +1 -1
  78. package/src/duckdb/src/core_functions/function_list.cpp +2 -2
  79. package/src/duckdb/src/core_functions/scalar/date/time_bucket.cpp +1 -1
  80. package/src/duckdb/src/core_functions/scalar/generic/system_functions.cpp +46 -17
  81. package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +1 -1
  82. package/src/duckdb/src/core_functions/scalar/list/flatten.cpp +82 -45
  83. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +2 -2
  84. package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +3 -0
  85. package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +3 -2
  86. package/src/duckdb/src/core_functions/scalar/string/hex.cpp +2 -4
  87. package/src/duckdb/src/core_functions/scalar/string/repeat.cpp +12 -21
  88. package/src/duckdb/src/execution/column_binding_resolver.cpp +2 -10
  89. package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +133 -66
  90. package/src/duckdb/src/execution/expression_executor/execute_function.cpp +0 -2
  91. package/src/duckdb/src/execution/expression_executor.cpp +0 -4
  92. package/src/duckdb/src/execution/expression_executor_state.cpp +1 -1
  93. package/src/duckdb/src/execution/index/art/art.cpp +2 -2
  94. package/src/duckdb/src/execution/index/unknown_index.cpp +13 -13
  95. package/src/duckdb/src/execution/join_hashtable.cpp +1 -1
  96. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +0 -1
  97. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer.cpp +10 -7
  98. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.cpp +32 -1
  99. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_file_handle.cpp +16 -2
  100. package/src/duckdb/src/execution/operator/csv_scanner/scanner/scanner_boundary.cpp +7 -7
  101. package/src/duckdb/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp +354 -159
  102. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp +11 -2
  103. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp +22 -7
  104. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_detection.cpp +1 -1
  105. package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.cpp +10 -10
  106. package/src/duckdb/src/execution/operator/csv_scanner/table_function/csv_file_scanner.cpp +9 -18
  107. package/src/duckdb/src/execution/operator/csv_scanner/table_function/global_csv_state.cpp +180 -47
  108. package/src/duckdb/src/execution/operator/csv_scanner/util/csv_error.cpp +100 -58
  109. package/src/duckdb/src/execution/operator/csv_scanner/util/csv_reader_options.cpp +88 -21
  110. package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +12 -13
  111. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -0
  112. package/src/duckdb/src/execution/operator/persistent/csv_rejects_table.cpp +118 -23
  113. package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +2 -2
  114. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +14 -5
  115. package/src/duckdb/src/execution/operator/persistent/physical_copy_database.cpp +1 -1
  116. package/src/duckdb/src/execution/operator/persistent/physical_export.cpp +5 -5
  117. package/src/duckdb/src/execution/operator/schema/physical_attach.cpp +1 -1
  118. package/src/duckdb/src/execution/physical_plan/plan_simple.cpp +0 -9
  119. package/src/duckdb/src/execution/physical_plan/plan_vacuum.cpp +18 -0
  120. package/src/duckdb/src/execution/physical_plan_generator.cpp +5 -3
  121. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +81 -106
  122. package/src/duckdb/src/execution/reservoir_sample.cpp +1 -1
  123. package/src/duckdb/src/execution/window_executor.cpp +48 -28
  124. package/src/duckdb/src/execution/window_segment_tree.cpp +20 -23
  125. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +1 -1
  126. package/src/duckdb/src/function/cast/enum_casts.cpp +20 -55
  127. package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +10 -9
  128. package/src/duckdb/src/function/cast_rules.cpp +9 -1
  129. package/src/duckdb/src/function/compression_config.cpp +1 -1
  130. package/src/duckdb/src/function/function_binder.cpp +45 -44
  131. package/src/duckdb/src/function/function_set.cpp +9 -9
  132. package/src/duckdb/src/function/pragma/pragma_queries.cpp +1 -2
  133. package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +21 -5
  134. package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +2 -2
  135. package/src/duckdb/src/function/scalar/list/list_select.cpp +5 -2
  136. package/src/duckdb/src/function/scalar/list/list_zip.cpp +5 -4
  137. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +60 -32
  138. package/src/duckdb/src/function/scalar/sequence/nextval.cpp +1 -1
  139. package/src/duckdb/src/function/scalar/strftime_format.cpp +31 -25
  140. package/src/duckdb/src/function/scalar/string/caseconvert.cpp +6 -6
  141. package/src/duckdb/src/function/scalar/string/length.cpp +23 -2
  142. package/src/duckdb/src/function/scalar/string/like.cpp +1 -1
  143. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +1 -1
  144. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +3 -3
  145. package/src/duckdb/src/function/table/arrow/arrow_array_scan_state.cpp +1 -1
  146. package/src/duckdb/src/function/table/arrow.cpp +7 -1
  147. package/src/duckdb/src/function/table/copy_csv.cpp +17 -13
  148. package/src/duckdb/src/function/table/read_csv.cpp +52 -39
  149. package/src/duckdb/src/function/table/sniff_csv.cpp +7 -13
  150. package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +1 -1
  151. package/src/duckdb/src/function/table/system/duckdb_databases.cpp +7 -1
  152. package/src/duckdb/src/function/table/system/duckdb_extensions.cpp +12 -2
  153. package/src/duckdb/src/function/table/system/duckdb_sequences.cpp +1 -2
  154. package/src/duckdb/src/function/table/system/duckdb_tables.cpp +2 -2
  155. package/src/duckdb/src/function/table/system/pragma_metadata_info.cpp +9 -2
  156. package/src/duckdb/src/function/table/system/pragma_table_info.cpp +10 -6
  157. package/src/duckdb/src/function/table/table_scan.cpp +1 -4
  158. package/src/duckdb/src/function/table/version/pragma_version.cpp +3 -3
  159. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -2
  160. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_index_entry.hpp +1 -1
  161. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_schema_entry.hpp +1 -1
  162. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/sequence_catalog_entry.hpp +1 -1
  163. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +6 -1
  164. package/src/duckdb/src/include/duckdb/catalog/catalog_set.hpp +3 -3
  165. package/src/duckdb/src/include/duckdb/catalog/default/default_functions.hpp +3 -3
  166. package/src/duckdb/src/include/duckdb/catalog/dependency.hpp +26 -4
  167. package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +39 -6
  168. package/src/duckdb/src/include/duckdb/catalog/dependency_manager.hpp +19 -14
  169. package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +1 -1
  170. package/src/duckdb/src/include/duckdb/catalog/standard_entry.hpp +4 -0
  171. package/src/duckdb/src/include/duckdb/common/allocator.hpp +3 -3
  172. package/src/duckdb/src/include/duckdb/common/arrow/arrow_wrapper.hpp +1 -1
  173. package/src/duckdb/src/include/duckdb/common/bit_utils.hpp +1 -1
  174. package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +16 -16
  175. package/src/duckdb/src/include/duckdb/common/crypto/md5.hpp +0 -1
  176. package/src/duckdb/src/include/duckdb/common/enum_util.hpp +32 -0
  177. package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +4 -2
  178. package/src/duckdb/src/include/duckdb/common/exception/binder_exception.hpp +14 -10
  179. package/src/duckdb/src/include/duckdb/common/exception/catalog_exception.hpp +4 -4
  180. package/src/duckdb/src/include/duckdb/common/exception/conversion_exception.hpp +6 -6
  181. package/src/duckdb/src/include/duckdb/common/exception/http_exception.hpp +3 -3
  182. package/src/duckdb/src/include/duckdb/common/exception/parser_exception.hpp +4 -4
  183. package/src/duckdb/src/include/duckdb/common/exception/transaction_exception.hpp +2 -2
  184. package/src/duckdb/src/include/duckdb/common/exception.hpp +57 -58
  185. package/src/duckdb/src/include/duckdb/common/exception_format_value.hpp +2 -2
  186. package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +2 -2
  187. package/src/duckdb/src/include/duckdb/common/file_open_flags.hpp +134 -0
  188. package/src/duckdb/src/include/duckdb/common/file_opener.hpp +9 -6
  189. package/src/duckdb/src/include/duckdb/common/file_system.hpp +35 -36
  190. package/src/duckdb/src/include/duckdb/common/filename_pattern.hpp +4 -6
  191. package/src/duckdb/src/include/duckdb/common/fixed_size_map.hpp +13 -13
  192. package/src/duckdb/src/include/duckdb/common/helper.hpp +42 -47
  193. package/src/duckdb/src/include/duckdb/common/http_state.hpp +1 -1
  194. package/src/duckdb/src/include/duckdb/common/hugeint.hpp +2 -2
  195. package/src/duckdb/src/include/duckdb/common/index_vector.hpp +10 -10
  196. package/src/duckdb/src/include/duckdb/common/local_file_system.hpp +13 -10
  197. package/src/duckdb/src/include/duckdb/common/memory_safety.hpp +3 -3
  198. package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +1 -1
  199. package/src/duckdb/src/include/duckdb/common/opener_file_system.hpp +50 -24
  200. package/src/duckdb/src/include/duckdb/common/operator/abs.hpp +12 -4
  201. package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +5 -5
  202. package/src/duckdb/src/include/duckdb/common/pipe_file_system.hpp +1 -1
  203. package/src/duckdb/src/include/duckdb/common/platform.h +1 -1
  204. package/src/duckdb/src/include/duckdb/common/printer.hpp +5 -5
  205. package/src/duckdb/src/include/duckdb/common/profiler.hpp +2 -2
  206. package/src/duckdb/src/include/duckdb/common/progress_bar/display/terminal_progress_bar_display.hpp +5 -5
  207. package/src/duckdb/src/include/duckdb/common/random_engine.hpp +1 -1
  208. package/src/duckdb/src/include/duckdb/common/re2_regex.hpp +7 -7
  209. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +3 -0
  210. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_writer.hpp +2 -2
  211. package/src/duckdb/src/include/duckdb/common/serializer/deserialization_data.hpp +17 -6
  212. package/src/duckdb/src/include/duckdb/common/serializer/deserializer.hpp +12 -0
  213. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +14 -0
  214. package/src/duckdb/src/include/duckdb/common/serializer/serializer.hpp +16 -0
  215. package/src/duckdb/src/include/duckdb/common/sort/duckdb_pdqsort.hpp +3 -0
  216. package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +2 -0
  217. package/src/duckdb/src/include/duckdb/common/string_util.hpp +4 -4
  218. package/src/duckdb/src/include/duckdb/common/tree_renderer.hpp +24 -25
  219. package/src/duckdb/src/include/duckdb/common/typedefs.hpp +5 -5
  220. package/src/duckdb/src/include/duckdb/common/types/cast_helpers.hpp +1 -2
  221. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +10 -10
  222. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_iterators.hpp +5 -5
  223. package/src/duckdb/src/include/duckdb/common/types/column/partitioned_column_data.hpp +1 -1
  224. package/src/duckdb/src/include/duckdb/common/types/constraint_conflict_info.hpp +1 -2
  225. package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +2 -2
  226. package/src/duckdb/src/include/duckdb/common/types/date.hpp +1 -1
  227. package/src/duckdb/src/include/duckdb/common/types/hash.hpp +5 -5
  228. package/src/duckdb/src/include/duckdb/common/types/hyperloglog.hpp +1 -1
  229. package/src/duckdb/src/include/duckdb/common/types/interval.hpp +4 -4
  230. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +1 -1
  231. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_layout.hpp +10 -3
  232. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_segment.hpp +1 -1
  233. package/src/duckdb/src/include/duckdb/common/types/selection_vector.hpp +12 -12
  234. package/src/duckdb/src/include/duckdb/common/types/string_heap.hpp +1 -1
  235. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +21 -20
  236. package/src/duckdb/src/include/duckdb/common/types/time.hpp +2 -2
  237. package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +3 -3
  238. package/src/duckdb/src/include/duckdb/common/types/uuid.hpp +2 -2
  239. package/src/duckdb/src/include/duckdb/common/types/value.hpp +2 -2
  240. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +15 -7
  241. package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +1 -1
  242. package/src/duckdb/src/include/duckdb/common/types.hpp +14 -10
  243. package/src/duckdb/src/include/duckdb/common/uhugeint.hpp +2 -2
  244. package/src/duckdb/src/include/duckdb/common/union_by_name.hpp +1 -1
  245. package/src/duckdb/src/include/duckdb/common/unique_ptr.hpp +15 -14
  246. package/src/duckdb/src/include/duckdb/common/vector.hpp +21 -21
  247. package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +2 -0
  248. package/src/duckdb/src/include/duckdb/common/vector_operations/general_cast.hpp +2 -1
  249. package/src/duckdb/src/include/duckdb/common/vector_operations/generic_executor.hpp +2 -3
  250. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +3 -2
  251. package/src/duckdb/src/include/duckdb/common/vector_operations/vector_operations.hpp +50 -32
  252. package/src/duckdb/src/include/duckdb/common/virtual_file_system.hpp +10 -11
  253. package/src/duckdb/src/include/duckdb/core_functions/aggregate/distributive_functions.hpp +1 -1
  254. package/src/duckdb/src/include/duckdb/core_functions/aggregate/sum_helpers.hpp +13 -1
  255. package/src/duckdb/src/include/duckdb/core_functions/function_list.hpp +1 -1
  256. package/src/duckdb/src/include/duckdb/core_functions/lambda_functions.hpp +2 -1
  257. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +1 -1
  258. package/src/duckdb/src/include/duckdb/execution/column_binding_resolver.hpp +1 -1
  259. package/src/duckdb/src/include/duckdb/execution/expression_executor.hpp +1 -1
  260. package/src/duckdb/src/include/duckdb/execution/expression_executor_state.hpp +2 -5
  261. package/src/duckdb/src/include/duckdb/execution/merge_sort_tree.hpp +3 -3
  262. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/aggregate_object.hpp +2 -2
  263. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/distinct_aggregate_data.hpp +1 -1
  264. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/base_scanner.hpp +1 -1
  265. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/column_count_scanner.hpp +0 -3
  266. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_buffer.hpp +9 -6
  267. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp +3 -0
  268. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_error.hpp +40 -22
  269. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_file_handle.hpp +5 -0
  270. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_file_scanner.hpp +1 -0
  271. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_option.hpp +6 -4
  272. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_reader_options.hpp +24 -10
  273. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_state_machine.hpp +4 -0
  274. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/global_csv_state.hpp +3 -1
  275. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/skip_scanner.hpp +0 -3
  276. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/string_value_scanner.hpp +58 -17
  277. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_batch_collector.hpp +1 -1
  278. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_explain_analyze.hpp +1 -1
  279. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_prepare.hpp +3 -3
  280. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_set.hpp +1 -1
  281. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_vacuum.hpp +4 -1
  282. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_rejects_table.hpp +16 -5
  283. package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +6 -6
  284. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +2 -1
  285. package/src/duckdb/src/include/duckdb/execution/window_executor.hpp +1 -1
  286. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +1 -1
  287. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +1 -1
  288. package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +5 -5
  289. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +4 -4
  290. package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +6 -6
  291. package/src/duckdb/src/include/duckdb/function/compression_function.hpp +4 -4
  292. package/src/duckdb/src/include/duckdb/function/copy_function.hpp +10 -13
  293. package/src/duckdb/src/include/duckdb/function/function.hpp +3 -3
  294. package/src/duckdb/src/include/duckdb/function/function_binder.hpp +24 -23
  295. package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +1 -1
  296. package/src/duckdb/src/include/duckdb/function/function_set.hpp +1 -1
  297. package/src/duckdb/src/include/duckdb/function/pragma_function.hpp +1 -1
  298. package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +3 -3
  299. package/src/duckdb/src/include/duckdb/function/scalar/strftime_format.hpp +7 -7
  300. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +3 -3
  301. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +6 -6
  302. package/src/duckdb/src/include/duckdb/function/table/arrow/arrow_duck_schema.hpp +4 -4
  303. package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +2 -2
  304. package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +1 -3
  305. package/src/duckdb/src/include/duckdb/function/table/table_scan.hpp +1 -1
  306. package/src/duckdb/src/include/duckdb/function/table_function.hpp +12 -11
  307. package/src/duckdb/src/include/duckdb/function/udf_function.hpp +66 -60
  308. package/src/duckdb/src/include/duckdb/main/appender.hpp +6 -6
  309. package/src/duckdb/src/include/duckdb/main/attached_database.hpp +3 -1
  310. package/src/duckdb/src/include/duckdb/main/buffered_data/buffered_data.hpp +2 -2
  311. package/src/duckdb/src/include/duckdb/main/buffered_data/simple_buffered_data.hpp +1 -1
  312. package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -2
  313. package/src/duckdb/src/include/duckdb/main/chunk_scan_state/query_result.hpp +2 -2
  314. package/src/duckdb/src/include/duckdb/main/client_context.hpp +1 -1
  315. package/src/duckdb/src/include/duckdb/main/client_context_file_opener.hpp +3 -2
  316. package/src/duckdb/src/include/duckdb/main/client_data.hpp +1 -0
  317. package/src/duckdb/src/include/duckdb/main/client_properties.hpp +2 -1
  318. package/src/duckdb/src/include/duckdb/main/config.hpp +14 -5
  319. package/src/duckdb/src/include/duckdb/main/connection.hpp +27 -26
  320. package/src/duckdb/src/include/duckdb/main/database.hpp +19 -3
  321. package/src/duckdb/src/include/duckdb/main/database_file_opener.hpp +58 -0
  322. package/src/duckdb/src/include/duckdb/main/database_path_and_type.hpp +2 -2
  323. package/src/duckdb/src/include/duckdb/main/error_manager.hpp +6 -6
  324. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +8 -0
  325. package/src/duckdb/src/include/duckdb/main/extension_helper.hpp +1 -0
  326. package/src/duckdb/src/include/duckdb/main/external_dependencies.hpp +2 -1
  327. package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +8 -8
  328. package/src/duckdb/src/include/duckdb/main/query_profiler.hpp +2 -59
  329. package/src/duckdb/src/include/duckdb/main/query_result.hpp +3 -3
  330. package/src/duckdb/src/include/duckdb/main/relation/query_relation.hpp +1 -1
  331. package/src/duckdb/src/include/duckdb/main/relation.hpp +1 -1
  332. package/src/duckdb/src/include/duckdb/main/secret/secret.hpp +11 -7
  333. package/src/duckdb/src/include/duckdb/main/secret/secret_manager.hpp +2 -2
  334. package/src/duckdb/src/include/duckdb/main/secret/secret_storage.hpp +4 -4
  335. package/src/duckdb/src/include/duckdb/main/settings.hpp +78 -70
  336. package/src/duckdb/src/include/duckdb/optimizer/column_lifetime_analyzer.hpp +45 -0
  337. package/src/duckdb/src/include/duckdb/optimizer/compressed_materialization.hpp +11 -13
  338. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  339. package/src/duckdb/src/include/duckdb/optimizer/join_order/cost_model.hpp +1 -1
  340. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_node.hpp +1 -1
  341. package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph.hpp +1 -1
  342. package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph_manager.hpp +1 -1
  343. package/src/duckdb/src/include/duckdb/optimizer/join_order/relation_manager.hpp +1 -1
  344. package/src/duckdb/src/include/duckdb/optimizer/matcher/expression_matcher.hpp +7 -7
  345. package/src/duckdb/src/include/duckdb/optimizer/matcher/function_matcher.hpp +7 -7
  346. package/src/duckdb/src/include/duckdb/optimizer/matcher/type_matcher.hpp +1 -1
  347. package/src/duckdb/src/include/duckdb/optimizer/optimizer.hpp +3 -0
  348. package/src/duckdb/src/include/duckdb/optimizer/statistics_propagator.hpp +32 -30
  349. package/src/duckdb/src/include/duckdb/optimizer/unnest_rewriter.hpp +1 -1
  350. package/src/duckdb/src/include/duckdb/parallel/event.hpp +1 -1
  351. package/src/duckdb/src/include/duckdb/parallel/executor_task.hpp +1 -1
  352. package/src/duckdb/src/include/duckdb/parallel/interrupt.hpp +2 -2
  353. package/src/duckdb/src/include/duckdb/parallel/pipeline_event.hpp +1 -1
  354. package/src/duckdb/src/include/duckdb/parser/column_list.hpp +4 -4
  355. package/src/duckdb/src/include/duckdb/parser/constraints/unique_constraint.hpp +49 -8
  356. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +1 -1
  357. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +1 -1
  358. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +1 -1
  359. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_scalar_function_info.hpp +1 -1
  360. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +1 -1
  361. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +1 -1
  362. package/src/duckdb/src/include/duckdb/parser/parsed_data/copy_database_info.hpp +40 -0
  363. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_function_info.hpp +2 -1
  364. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_index_info.hpp +1 -0
  365. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_info.hpp +2 -1
  366. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_macro_info.hpp +1 -1
  367. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_pragma_function_info.hpp +1 -1
  368. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_secret_info.hpp +2 -2
  369. package/src/duckdb/src/include/duckdb/parser/parsed_data/extra_drop_info.hpp +3 -3
  370. package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +3 -2
  371. package/src/duckdb/src/include/duckdb/parser/parsed_data/vacuum_info.hpp +2 -5
  372. package/src/duckdb/src/include/duckdb/parser/parser.hpp +1 -1
  373. package/src/duckdb/src/include/duckdb/parser/parser_extension.hpp +3 -3
  374. package/src/duckdb/src/include/duckdb/parser/query_error_context.hpp +1 -1
  375. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +3 -5
  376. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -2
  377. package/src/duckdb/src/include/duckdb/planner/binder.hpp +16 -9
  378. package/src/duckdb/src/include/duckdb/planner/expression/bound_case_expression.hpp +1 -1
  379. package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +1 -1
  380. package/src/duckdb/src/include/duckdb/planner/expression/bound_default_expression.hpp +1 -1
  381. package/src/duckdb/src/include/duckdb/planner/expression/bound_expanded_expression.hpp +34 -0
  382. package/src/duckdb/src/include/duckdb/planner/expression/bound_subquery_expression.hpp +1 -1
  383. package/src/duckdb/src/include/duckdb/planner/expression.hpp +1 -1
  384. package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +5 -8
  385. package/src/duckdb/src/include/duckdb/planner/expression_binder/column_alias_binder.hpp +3 -4
  386. package/src/duckdb/src/include/duckdb/planner/expression_binder/group_binder.hpp +3 -2
  387. package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +3 -5
  388. package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +6 -14
  389. package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +3 -6
  390. package/src/duckdb/src/include/duckdb/planner/expression_binder/select_bind_state.hpp +52 -0
  391. package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +4 -10
  392. package/src/duckdb/src/include/duckdb/planner/expression_binder/table_function_binder.hpp +5 -2
  393. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -0
  394. package/src/duckdb/src/include/duckdb/planner/expression_iterator.hpp +2 -0
  395. package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +3 -6
  396. package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +2 -0
  397. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  398. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
  399. package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_database.hpp +4 -12
  400. package/src/duckdb/src/include/duckdb/planner/operator/logical_create_secret.hpp +1 -1
  401. package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +2 -2
  402. package/src/duckdb/src/include/duckdb/planner/operator/logical_delim_get.hpp +1 -1
  403. package/src/duckdb/src/include/duckdb/planner/operator/logical_dummy_scan.hpp +1 -1
  404. package/src/duckdb/src/include/duckdb/planner/operator/logical_explain.hpp +1 -1
  405. package/src/duckdb/src/include/duckdb/planner/operator/logical_export.hpp +2 -2
  406. package/src/duckdb/src/include/duckdb/planner/operator/logical_expression_get.hpp +2 -2
  407. package/src/duckdb/src/include/duckdb/planner/operator/logical_extension_operator.hpp +2 -2
  408. package/src/duckdb/src/include/duckdb/planner/operator/logical_materialized_cte.hpp +2 -2
  409. package/src/duckdb/src/include/duckdb/planner/operator/logical_pragma.hpp +1 -1
  410. package/src/duckdb/src/include/duckdb/planner/operator/logical_prepare.hpp +3 -2
  411. package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +3 -3
  412. package/src/duckdb/src/include/duckdb/planner/operator/logical_reset.hpp +1 -1
  413. package/src/duckdb/src/include/duckdb/planner/operator/logical_set.hpp +2 -1
  414. package/src/duckdb/src/include/duckdb/planner/operator/logical_vacuum.hpp +52 -0
  415. package/src/duckdb/src/include/duckdb/planner/operator_extension.hpp +1 -1
  416. package/src/duckdb/src/include/duckdb/planner/parsed_data/bound_create_table_info.hpp +2 -2
  417. package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +5 -4
  418. package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +2 -2
  419. package/src/duckdb/src/include/duckdb/storage/arena_allocator.hpp +4 -1
  420. package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +1 -1
  421. package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +3 -3
  422. package/src/duckdb/src/include/duckdb/storage/checkpoint/row_group_writer.hpp +2 -3
  423. package/src/duckdb/src/include/duckdb/storage/checkpoint/string_checkpoint_state.hpp +1 -1
  424. package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -3
  425. package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +5 -5
  426. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_analyze.hpp +1 -1
  427. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_compress.hpp +1 -1
  428. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_fetch.hpp +1 -1
  429. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_scan.hpp +1 -1
  430. package/src/duckdb/src/include/duckdb/storage/compression/alprd/algorithm/alprd.hpp +3 -3
  431. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_analyze.hpp +2 -2
  432. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_compress.hpp +1 -1
  433. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_fetch.hpp +1 -1
  434. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_scan.hpp +3 -3
  435. package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/flag_buffer.hpp +1 -1
  436. package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/leading_zero_buffer.hpp +3 -3
  437. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp.hpp +3 -3
  438. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.hpp +0 -1
  439. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
  440. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +4 -4
  441. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas.hpp +4 -4
  442. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_analyze.hpp +0 -1
  443. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
  444. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +3 -3
  445. package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +1 -1
  446. package/src/duckdb/src/include/duckdb/storage/index.hpp +1 -1
  447. package/src/duckdb/src/include/duckdb/storage/magic_bytes.hpp +1 -1
  448. package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +3 -3
  449. package/src/duckdb/src/include/duckdb/storage/optimistic_data_writer.hpp +1 -1
  450. package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +1 -1
  451. package/src/duckdb/src/include/duckdb/storage/single_file_block_manager.hpp +4 -1
  452. package/src/duckdb/src/include/duckdb/storage/standard_buffer_manager.hpp +24 -24
  453. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +3 -3
  454. package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -2
  455. package/src/duckdb/src/include/duckdb/storage/storage_info.hpp +2 -2
  456. package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +4 -4
  457. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +9 -6
  458. package/src/duckdb/src/include/duckdb/storage/table/append_state.hpp +1 -1
  459. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +2 -2
  460. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +1 -1
  461. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +10 -1
  462. package/src/duckdb/src/include/duckdb/storage/table/data_table_info.hpp +3 -2
  463. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +1 -1
  464. package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +1 -1
  465. package/src/duckdb/src/include/duckdb/storage/table/row_version_manager.hpp +2 -1
  466. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +3 -3
  467. package/src/duckdb/src/include/duckdb/storage/table/segment_lock.hpp +1 -1
  468. package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +4 -4
  469. package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +2 -0
  470. package/src/duckdb/src/include/duckdb/storage/table/table_index_list.hpp +3 -2
  471. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +1 -1
  472. package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +1 -1
  473. package/src/duckdb/src/include/duckdb/storage/table_storage_info.hpp +2 -1
  474. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
  475. package/src/duckdb/src/include/duckdb/transaction/delete_info.hpp +20 -1
  476. package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +1 -1
  477. package/src/duckdb/src/include/duckdb/transaction/transaction_data.hpp +1 -1
  478. package/src/duckdb/src/include/duckdb/transaction/undo_buffer.hpp +1 -1
  479. package/src/duckdb/src/include/duckdb/transaction/update_info.hpp +1 -1
  480. package/src/duckdb/src/main/appender.cpp +1 -1
  481. package/src/duckdb/src/main/attached_database.cpp +11 -3
  482. package/src/duckdb/src/main/capi/arrow-c.cpp +6 -2
  483. package/src/duckdb/src/main/capi/cast/utils-c.cpp +1 -1
  484. package/src/duckdb/src/main/capi/duckdb-c.cpp +1 -1
  485. package/src/duckdb/src/main/capi/pending-c.cpp +1 -1
  486. package/src/duckdb/src/main/capi/prepared-c.cpp +2 -2
  487. package/src/duckdb/src/main/capi/result-c.cpp +4 -4
  488. package/src/duckdb/src/main/client_context.cpp +4 -12
  489. package/src/duckdb/src/main/client_context_file_opener.cpp +15 -3
  490. package/src/duckdb/src/main/client_data.cpp +5 -0
  491. package/src/duckdb/src/main/config.cpp +82 -82
  492. package/src/duckdb/src/main/database.cpp +31 -7
  493. package/src/duckdb/src/main/database_manager.cpp +3 -2
  494. package/src/duckdb/src/main/database_path_and_type.cpp +4 -4
  495. package/src/duckdb/src/main/error_manager.cpp +1 -1
  496. package/src/duckdb/src/main/extension/extension_alias.cpp +9 -9
  497. package/src/duckdb/src/main/extension/extension_helper.cpp +10 -5
  498. package/src/duckdb/src/main/extension/extension_install.cpp +1 -1
  499. package/src/duckdb/src/main/extension/extension_load.cpp +111 -37
  500. package/src/duckdb/src/main/query_profiler.cpp +1 -118
  501. package/src/duckdb/src/main/secret/secret_manager.cpp +1 -2
  502. package/src/duckdb/src/main/secret/secret_storage.cpp +1 -1
  503. package/src/duckdb/src/main/settings/settings.cpp +81 -65
  504. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +8 -1
  505. package/src/duckdb/src/optimizer/compressed_materialization/compress_aggregate.cpp +3 -0
  506. package/src/duckdb/src/optimizer/compressed_materialization.cpp +26 -28
  507. package/src/duckdb/src/optimizer/cse_optimizer.cpp +5 -5
  508. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +10 -6
  509. package/src/duckdb/src/optimizer/optimizer.cpp +14 -17
  510. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +16 -5
  511. package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +7 -4
  512. package/src/duckdb/src/optimizer/pushdown/pushdown_set_operation.cpp +2 -2
  513. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +3 -3
  514. package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +2 -2
  515. package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +1 -1
  516. package/src/duckdb/src/optimizer/statistics/expression/propagate_between.cpp +8 -8
  517. package/src/duckdb/src/optimizer/statistics/expression/propagate_case.cpp +1 -1
  518. package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +1 -1
  519. package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
  520. package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +7 -7
  521. package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +6 -6
  522. package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +1 -1
  523. package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +2 -2
  524. package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -10
  525. package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +1 -1
  526. package/src/duckdb/src/optimizer/statistics/operator/propagate_cross_product.cpp +1 -1
  527. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +14 -7
  528. package/src/duckdb/src/optimizer/statistics/operator/propagate_get.cpp +2 -2
  529. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +9 -9
  530. package/src/duckdb/src/optimizer/statistics/operator/propagate_limit.cpp +1 -1
  531. package/src/duckdb/src/optimizer/statistics/operator/propagate_order.cpp +1 -1
  532. package/src/duckdb/src/optimizer/statistics/operator/propagate_projection.cpp +2 -2
  533. package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +1 -1
  534. package/src/duckdb/src/optimizer/statistics/operator/propagate_window.cpp +1 -1
  535. package/src/duckdb/src/optimizer/statistics_propagator.cpp +39 -18
  536. package/src/duckdb/src/parallel/pipeline_finish_event.cpp +1 -1
  537. package/src/duckdb/src/parallel/task_scheduler.cpp +8 -1
  538. package/src/duckdb/src/parser/constraints/unique_constraint.cpp +4 -2
  539. package/src/duckdb/src/parser/parsed_data/create_index_info.cpp +64 -0
  540. package/src/duckdb/src/parser/parsed_data/vacuum_info.cpp +1 -0
  541. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +13 -5
  542. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +24 -0
  543. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +1 -8
  544. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +2 -1
  545. package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +3 -0
  546. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +2 -6
  547. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +2 -6
  548. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +2 -6
  549. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +1 -1
  550. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +5 -2
  551. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -8
  552. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +1 -6
  553. package/src/duckdb/src/parser/transform/statement/transform_use.cpp +3 -2
  554. package/src/duckdb/src/parser/transformer.cpp +14 -2
  555. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +40 -17
  556. package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +8 -3
  557. package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +32 -30
  558. package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +28 -17
  559. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +146 -101
  560. package/src/duckdb/src/planner/binder/query_node/bind_setop_node.cpp +28 -26
  561. package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +29 -0
  562. package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +10 -10
  563. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +3 -2
  564. package/src/duckdb/src/planner/binder/statement/bind_copy_database.cpp +23 -28
  565. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +11 -12
  566. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +9 -11
  567. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +10 -13
  568. package/src/duckdb/src/planner/binder/statement/bind_pragma.cpp +3 -3
  569. package/src/duckdb/src/planner/binder/statement/bind_set.cpp +3 -0
  570. package/src/duckdb/src/planner/binder/statement/bind_vacuum.cpp +66 -65
  571. package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +54 -46
  572. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +3 -0
  573. package/src/duckdb/src/planner/binder/tableref/bind_subqueryref.cpp +1 -1
  574. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +5 -5
  575. package/src/duckdb/src/planner/binder.cpp +78 -6
  576. package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +11 -3
  577. package/src/duckdb/src/planner/expression/bound_expanded_expression.cpp +22 -0
  578. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +11 -58
  579. package/src/duckdb/src/planner/expression_binder/column_alias_binder.cpp +5 -8
  580. package/src/duckdb/src/planner/expression_binder/group_binder.cpp +5 -4
  581. package/src/duckdb/src/planner/expression_binder/having_binder.cpp +5 -19
  582. package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +8 -8
  583. package/src/duckdb/src/planner/expression_binder/order_binder.cpp +42 -26
  584. package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -22
  585. package/src/duckdb/src/planner/expression_binder/select_bind_state.cpp +52 -0
  586. package/src/duckdb/src/planner/expression_binder/select_binder.cpp +43 -5
  587. package/src/duckdb/src/planner/expression_binder/table_function_binder.cpp +19 -7
  588. package/src/duckdb/src/planner/logical_operator.cpp +20 -3
  589. package/src/duckdb/src/planner/operator/logical_copy_database.cpp +4 -14
  590. package/src/duckdb/src/planner/operator/logical_delete.cpp +1 -1
  591. package/src/duckdb/src/planner/operator/logical_get.cpp +1 -1
  592. package/src/duckdb/src/planner/operator/logical_insert.cpp +1 -1
  593. package/src/duckdb/src/planner/operator/logical_update.cpp +1 -1
  594. package/src/duckdb/src/planner/operator/logical_vacuum.cpp +65 -0
  595. package/src/duckdb/src/planner/planner.cpp +4 -4
  596. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +26 -27
  597. package/src/duckdb/src/storage/arena_allocator.cpp +9 -0
  598. package/src/duckdb/src/storage/buffer/buffer_pool_reservation.cpp +1 -1
  599. package/src/duckdb/src/storage/buffer_manager.cpp +2 -10
  600. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +2 -3
  601. package/src/duckdb/src/storage/checkpoint_manager.cpp +15 -8
  602. package/src/duckdb/src/storage/compression/bitpacking.cpp +6 -1
  603. package/src/duckdb/src/storage/compression/string_uncompressed.cpp +1 -1
  604. package/src/duckdb/src/storage/data_pointer.cpp +1 -1
  605. package/src/duckdb/src/storage/data_table.cpp +18 -7
  606. package/src/duckdb/src/storage/local_storage.cpp +8 -5
  607. package/src/duckdb/src/storage/magic_bytes.cpp +6 -5
  608. package/src/duckdb/src/storage/partial_block_manager.cpp +1 -1
  609. package/src/duckdb/src/storage/serialization/serialize_logical_operator.cpp +20 -9
  610. package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +12 -10
  611. package/src/duckdb/src/storage/serialization/serialize_parse_info.cpp +23 -0
  612. package/src/duckdb/src/storage/single_file_block_manager.cpp +46 -19
  613. package/src/duckdb/src/storage/standard_buffer_manager.cpp +21 -5
  614. package/src/duckdb/src/storage/statistics/array_stats.cpp +1 -1
  615. package/src/duckdb/src/storage/statistics/base_statistics.cpp +2 -3
  616. package/src/duckdb/src/storage/statistics/list_stats.cpp +1 -1
  617. package/src/duckdb/src/storage/statistics/struct_stats.cpp +1 -1
  618. package/src/duckdb/src/storage/storage_info.cpp +19 -19
  619. package/src/duckdb/src/storage/storage_manager.cpp +18 -13
  620. package/src/duckdb/src/storage/table/chunk_info.cpp +11 -3
  621. package/src/duckdb/src/storage/table/column_data.cpp +88 -66
  622. package/src/duckdb/src/storage/table/row_group.cpp +7 -7
  623. package/src/duckdb/src/storage/table/row_version_manager.cpp +2 -2
  624. package/src/duckdb/src/storage/table/standard_column_data.cpp +4 -0
  625. package/src/duckdb/src/storage/table/update_segment.cpp +3 -1
  626. package/src/duckdb/src/storage/table_index_list.cpp +6 -1
  627. package/src/duckdb/src/storage/temporary_file_manager.cpp +1 -1
  628. package/src/duckdb/src/storage/wal_replay.cpp +8 -7
  629. package/src/duckdb/src/storage/write_ahead_log.cpp +3 -4
  630. package/src/duckdb/src/transaction/cleanup_state.cpp +10 -3
  631. package/src/duckdb/src/transaction/commit_state.cpp +11 -4
  632. package/src/duckdb/src/transaction/duck_transaction.cpp +23 -3
  633. package/src/duckdb/src/transaction/rollback_state.cpp +1 -1
  634. package/src/duckdb/src/transaction/transaction_context.cpp +1 -1
  635. package/src/duckdb/src/transaction/undo_buffer.cpp +3 -1
  636. package/src/duckdb/third_party/fmt/include/fmt/core.h +0 -5
  637. package/src/duckdb/third_party/fsst/fsst.h +1 -1
  638. package/src/duckdb/third_party/fsst/libfsst.cpp +1 -140
  639. package/src/duckdb/third_party/fsst/libfsst.hpp +0 -13
  640. package/src/duckdb/third_party/hyperloglog/hyperloglog.hpp +4 -0
  641. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +8 -1
  642. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +2 -1
  643. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +15401 -15354
  644. package/src/duckdb/third_party/libpg_query/src_backend_parser_scan.cpp +299 -538
  645. package/src/duckdb/third_party/lz4/lz4.cpp +2605 -0
  646. package/src/duckdb/third_party/lz4/lz4.hpp +843 -0
  647. package/src/duckdb/third_party/parquet/parquet_types.cpp +3 -0
  648. package/src/duckdb/third_party/parquet/parquet_types.h +2 -1
  649. package/src/duckdb/third_party/re2/re2/bitmap256.cc +44 -0
  650. package/src/duckdb/third_party/re2/re2/bitmap256.h +3 -35
  651. package/src/duckdb/third_party/re2/re2/bitstate.cc +31 -24
  652. package/src/duckdb/third_party/re2/re2/compile.cc +146 -164
  653. package/src/duckdb/third_party/re2/re2/dfa.cc +174 -181
  654. package/src/duckdb/third_party/re2/re2/filtered_re2.cc +19 -3
  655. package/src/duckdb/third_party/re2/re2/filtered_re2.h +27 -23
  656. package/src/duckdb/third_party/re2/re2/mimics_pcre.cc +21 -11
  657. package/src/duckdb/third_party/re2/re2/nfa.cc +91 -131
  658. package/src/duckdb/third_party/re2/re2/onepass.cc +11 -10
  659. package/src/duckdb/third_party/re2/re2/parse.cc +171 -154
  660. package/src/duckdb/third_party/re2/re2/perl_groups.cc +35 -35
  661. package/src/duckdb/third_party/re2/re2/pod_array.h +55 -0
  662. package/src/duckdb/third_party/re2/re2/prefilter.cc +40 -40
  663. package/src/duckdb/third_party/re2/re2/prefilter.h +24 -2
  664. package/src/duckdb/third_party/re2/re2/prefilter_tree.cc +70 -84
  665. package/src/duckdb/third_party/re2/re2/prefilter_tree.h +5 -4
  666. package/src/duckdb/third_party/re2/re2/prog.cc +315 -58
  667. package/src/duckdb/third_party/re2/re2/prog.h +77 -44
  668. package/src/duckdb/third_party/re2/re2/re2.cc +333 -221
  669. package/src/duckdb/third_party/re2/re2/re2.h +277 -201
  670. package/src/duckdb/third_party/re2/re2/regexp.cc +137 -105
  671. package/src/duckdb/third_party/re2/re2/regexp.h +45 -40
  672. package/src/duckdb/third_party/re2/re2/set.cc +40 -17
  673. package/src/duckdb/third_party/re2/re2/set.h +11 -6
  674. package/src/duckdb/third_party/re2/re2/simplify.cc +50 -41
  675. package/src/duckdb/third_party/re2/re2/sparse_array.h +392 -0
  676. package/src/duckdb/third_party/re2/re2/sparse_set.h +264 -0
  677. package/src/duckdb/third_party/re2/re2/stringpiece.cc +1 -1
  678. package/src/duckdb/third_party/re2/re2/stringpiece.h +11 -8
  679. package/src/duckdb/third_party/re2/re2/tostring.cc +8 -6
  680. package/src/duckdb/third_party/re2/re2/unicode_casefold.cc +39 -10
  681. package/src/duckdb/third_party/re2/re2/unicode_casefold.h +1 -1
  682. package/src/duckdb/third_party/re2/re2/unicode_groups.cc +5019 -4566
  683. package/src/duckdb/third_party/re2/re2/unicode_groups.h +1 -1
  684. package/src/duckdb/third_party/re2/re2/walker-inl.h +21 -20
  685. package/src/duckdb/third_party/re2/util/logging.h +14 -18
  686. package/src/duckdb/third_party/re2/util/mix.h +4 -4
  687. package/src/duckdb/third_party/re2/util/mutex.h +48 -15
  688. package/src/duckdb/third_party/re2/util/rune.cc +5 -5
  689. package/src/duckdb/third_party/re2/util/strutil.cc +1 -16
  690. package/src/duckdb/third_party/re2/util/strutil.h +1 -3
  691. package/src/duckdb/third_party/re2/util/utf.h +1 -1
  692. package/src/duckdb/third_party/re2/util/util.h +9 -1
  693. package/src/duckdb/third_party/utf8proc/include/utf8proc_wrapper.hpp +2 -0
  694. package/src/duckdb/third_party/utf8proc/utf8proc_wrapper.cpp +36 -1
  695. package/src/duckdb/ub_src_common.cpp +0 -2
  696. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  697. package/src/duckdb/ub_src_planner_expression.cpp +2 -0
  698. package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
  699. package/src/duckdb/ub_src_planner_operator.cpp +2 -0
@@ -229,7 +229,7 @@ MetadataManager &SingleFileCheckpointReader::GetMetadataManager() {
229
229
  return storage.block_manager->GetMetadataManager();
230
230
  }
231
231
 
232
- void SingleFileCheckpointReader::LoadFromStorage() {
232
+ void SingleFileCheckpointReader::LoadFromStorage(optional_ptr<ClientContext> context) {
233
233
  auto &block_manager = *storage.block_manager;
234
234
  auto &metadata_manager = GetMetadataManager();
235
235
  MetaBlockPointer meta_block(block_manager.GetMetaBlock(), 0);
@@ -238,13 +238,20 @@ void SingleFileCheckpointReader::LoadFromStorage() {
238
238
  return;
239
239
  }
240
240
 
241
- Connection con(storage.GetDatabase());
242
- con.BeginTransaction();
243
- // create the MetadataReader to read from the storage
244
- MetadataReader reader(metadata_manager, meta_block);
245
- // reader.SetContext(*con.context);
246
- LoadCheckpoint(*con.context, reader);
247
- con.Commit();
241
+ if (context) {
242
+ // create the MetadataReader to read from the storage
243
+ MetadataReader reader(metadata_manager, meta_block);
244
+ // reader.SetContext(*con.context);
245
+ LoadCheckpoint(*context, reader);
246
+ } else {
247
+ Connection con(storage.GetDatabase());
248
+ con.BeginTransaction();
249
+ // create the MetadataReader to read from the storage
250
+ MetadataReader reader(metadata_manager, meta_block);
251
+ // reader.SetContext(*con.context);
252
+ LoadCheckpoint(*con.context, reader);
253
+ con.Commit();
254
+ }
248
255
  }
249
256
 
250
257
  void CheckpointWriter::WriteEntry(CatalogEntry &entry, Serializer &serializer) {
@@ -514,7 +514,8 @@ public:
514
514
  auto base_ptr = handle.Ptr();
515
515
 
516
516
  // Compact the segment by moving the metadata next to the data.
517
- idx_t metadata_offset = AlignValue(data_ptr - base_ptr);
517
+ idx_t unaligned_offset = data_ptr - base_ptr;
518
+ idx_t metadata_offset = AlignValue(unaligned_offset);
518
519
  idx_t metadata_size = base_ptr + Storage::BLOCK_SIZE - metadata_ptr;
519
520
  idx_t total_segment_size = metadata_offset + metadata_size;
520
521
 
@@ -523,6 +524,10 @@ public:
523
524
  throw InternalException("Error in bitpacking size calculation");
524
525
  }
525
526
 
527
+ if (unaligned_offset != metadata_offset) {
528
+ // zero initialize any padding bits
529
+ memset(base_ptr + unaligned_offset, 0, metadata_offset - unaligned_offset);
530
+ }
526
531
  memmove(base_ptr + metadata_offset, metadata_ptr, metadata_size);
527
532
 
528
533
  // Store the offset of the metadata of the first group (which is at the highest address).
@@ -406,7 +406,7 @@ string_location_t UncompressedStringStorage::FetchStringLocation(StringDictionar
406
406
  D_ASSERT(dict_offset >= -1 * int32_t(Storage::BLOCK_SIZE) && dict_offset <= int32_t(Storage::BLOCK_SIZE));
407
407
  if (dict_offset < 0) {
408
408
  string_location_t result;
409
- ReadStringMarker(baseptr + dict.end - (-1 * dict_offset), result.block_id, result.offset);
409
+ ReadStringMarker(baseptr + dict.end - idx_t(-1 * dict_offset), result.block_id, result.offset);
410
410
  return result;
411
411
  } else {
412
412
  return string_location_t(INVALID_BLOCK, dict_offset);
@@ -9,7 +9,7 @@ namespace duckdb {
9
9
  unique_ptr<ColumnSegmentState> ColumnSegmentState::Deserialize(Deserializer &deserializer) {
10
10
  auto compression_type = deserializer.Get<CompressionType>();
11
11
  auto &db = deserializer.Get<DatabaseInstance &>();
12
- auto &type = deserializer.Get<LogicalType &>();
12
+ auto &type = deserializer.Get<const LogicalType &>();
13
13
  auto compression_function = DBConfig::GetConfig(db).GetCompressionFunction(compression_type, type.InternalType());
14
14
  if (!compression_function || !compression_function->deserialize_state) {
15
15
  throw SerializationException("Deserializing a ColumnSegmentState but could not find deserialize method");
@@ -34,8 +34,8 @@ DataTableInfo::DataTableInfo(AttachedDatabase &db, shared_ptr<TableIOManager> ta
34
34
  table(std::move(table)) {
35
35
  }
36
36
 
37
- void DataTableInfo::InitializeIndexes(ClientContext &context) {
38
- indexes.InitializeIndexes(context, *this);
37
+ void DataTableInfo::InitializeIndexes(ClientContext &context, bool throw_on_failure) {
38
+ indexes.InitializeIndexes(context, *this, throw_on_failure);
39
39
  }
40
40
 
41
41
  bool DataTableInfo::IsTemporary() const {
@@ -89,8 +89,8 @@ DataTable::DataTable(ClientContext &context, DataTable &parent, idx_t removed_co
89
89
  column_definitions.emplace_back(column_def.Copy());
90
90
  }
91
91
 
92
- // try to initialize unknown indexes
93
92
  info->InitializeIndexes(context);
93
+
94
94
  // first check if there are any indexes that exist that point to the removed column
95
95
  info->indexes.Scan([&](Index &index) {
96
96
  for (auto &column_id : index.column_ids) {
@@ -137,6 +137,8 @@ DataTable::DataTable(ClientContext &context, DataTable &parent, unique_ptr<Bound
137
137
  column_definitions.emplace_back(column_def.Copy());
138
138
  }
139
139
 
140
+ info->InitializeIndexes(context);
141
+
140
142
  // Verify the new constraint against current persistent/local data
141
143
  VerifyNewConstraint(context, parent, constraint.get());
142
144
 
@@ -155,7 +157,7 @@ DataTable::DataTable(ClientContext &context, DataTable &parent, idx_t changed_id
155
157
  for (auto &column_def : parent.column_definitions) {
156
158
  column_definitions.emplace_back(column_def.Copy());
157
159
  }
158
- // try to initialize unknown indexes
160
+
159
161
  info->InitializeIndexes(context);
160
162
 
161
163
  // first check if there are any indexes that exist that point to the changed column
@@ -858,7 +860,9 @@ void DataTable::RevertAppend(idx_t start_row, idx_t count) {
858
860
  row_data[i] = current_row_base + i;
859
861
  }
860
862
  info->indexes.Scan([&](Index &index) {
861
- index.Delete(chunk, row_identifiers);
863
+ if (!index.IsUnknown()) {
864
+ index.Delete(chunk, row_identifiers);
865
+ }
862
866
  return false;
863
867
  });
864
868
  current_row_base += chunk.size();
@@ -868,7 +872,9 @@ void DataTable::RevertAppend(idx_t start_row, idx_t count) {
868
872
  // we need to vacuum the indexes to remove any buffers that are now empty
869
873
  // due to reverting the appends
870
874
  info->indexes.Scan([&](Index &index) {
871
- index.Vacuum();
875
+ if (!index.IsUnknown()) {
876
+ index.Vacuum();
877
+ }
872
878
  return false;
873
879
  });
874
880
 
@@ -1000,6 +1006,8 @@ idx_t DataTable::Delete(TableCatalogEntry &table, ClientContext &context, Vector
1000
1006
  return 0;
1001
1007
  }
1002
1008
 
1009
+ info->InitializeIndexes(context, true);
1010
+
1003
1011
  auto &transaction = DuckTransaction::Get(context, db);
1004
1012
  auto &local_storage = LocalStorage::Get(transaction);
1005
1013
  bool has_delete_constraints = TableHasDeleteConstraints(table);
@@ -1157,6 +1165,9 @@ void DataTable::Update(TableCatalogEntry &table, ClientContext &context, Vector
1157
1165
  throw TransactionException("Transaction conflict: cannot update a table that has been altered!");
1158
1166
  }
1159
1167
 
1168
+ // check that there are no unknown indexes
1169
+ info->InitializeIndexes(context, true);
1170
+
1160
1171
  // first verify that no constraints are violated
1161
1172
  VerifyUpdateConstraints(context, table, updates, column_ids);
1162
1173
 
@@ -1244,7 +1255,7 @@ void DataTable::Checkpoint(TableDataWriter &writer, Serializer &serializer) {
1244
1255
  // row-group pointers
1245
1256
  // table pointer
1246
1257
  // index data
1247
- writer.FinalizeTable(std::move(global_stats), info.get(), serializer);
1258
+ writer.FinalizeTable(global_stats, info.get(), serializer);
1248
1259
  }
1249
1260
 
1250
1261
  void DataTable::CommitDropColumn(idx_t index) {
@@ -197,7 +197,11 @@ void LocalTableStorage::AppendToIndexes(DuckTransaction &transaction, TableAppen
197
197
  // we need to vacuum the indexes to remove any buffers that are now empty
198
198
  // due to reverting the appends
199
199
  table.info->indexes.Scan([&](Index &index) {
200
- index.Vacuum();
200
+ try {
201
+ index.Vacuum();
202
+ } catch (std::exception &ex) { // LCOV_EXCL_START
203
+ error = ErrorData(ex);
204
+ } // LCOV_EXCL_STOP
201
205
  return false;
202
206
  });
203
207
  error.Throw();
@@ -354,6 +358,7 @@ bool LocalStorage::NextParallelScan(ClientContext &context, DataTable &table, Pa
354
358
  }
355
359
 
356
360
  void LocalStorage::InitializeAppend(LocalAppendState &state, DataTable &table) {
361
+ table.info->InitializeIndexes(context);
357
362
  state.storage = &table_manager.GetOrCreateStorage(table);
358
363
  state.storage->row_groups->InitializeAppend(TransactionData(transaction), state.append_state);
359
364
  }
@@ -445,6 +450,8 @@ void LocalStorage::Flush(DataTable &table, LocalTableStorage &storage) {
445
450
  }
446
451
  idx_t append_count = storage.row_groups->GetTotalRows() - storage.deleted_rows;
447
452
 
453
+ table.info->InitializeIndexes(context);
454
+
448
455
  TableAppendState append_state;
449
456
  table.AppendLock(append_state);
450
457
  transaction.PushAppend(table, append_state.row_start, append_count);
@@ -470,9 +477,6 @@ void LocalStorage::Flush(DataTable &table, LocalTableStorage &storage) {
470
477
  storage.AppendToIndexes(transaction, append_state, append_count, true);
471
478
  }
472
479
 
473
- // try to initialize any unknown indexes
474
- table.info->InitializeIndexes(context);
475
-
476
480
  // possibly vacuum any excess index data
477
481
  table.info->indexes.Scan([&](Index &index) {
478
482
  index.Vacuum();
@@ -575,7 +579,6 @@ TableIndexList &LocalStorage::GetIndexes(DataTable &table) {
575
579
  if (!storage) {
576
580
  throw InternalException("LocalStorage::GetIndexes - local storage not found");
577
581
  }
578
- table.info->InitializeIndexes(context);
579
582
  return storage->indexes;
580
583
  }
581
584
 
@@ -4,13 +4,14 @@
4
4
 
5
5
  namespace duckdb {
6
6
 
7
- DataFileType MagicBytes::CheckMagicBytes(FileSystem *fs_p, const string &path) {
8
- LocalFileSystem lfs;
9
- FileSystem &fs = fs_p ? *fs_p : lfs;
10
- if (!fs.FileExists(path)) {
7
+ DataFileType MagicBytes::CheckMagicBytes(FileSystem &fs, const string &path) {
8
+ if (path.empty() || path == IN_MEMORY_PATH) {
9
+ return DataFileType::DUCKDB_FILE;
10
+ }
11
+ auto handle = fs.OpenFile(path, FileFlags::FILE_FLAGS_READ | FileFlags::FILE_FLAGS_NULL_IF_NOT_EXISTS);
12
+ if (!handle) {
11
13
  return DataFileType::FILE_DOES_NOT_EXIST;
12
14
  }
13
- auto handle = fs.OpenFile(path, FileFlags::FILE_FLAGS_READ);
14
15
 
15
16
  constexpr const idx_t MAGIC_BYTES_READ_SIZE = 16;
16
17
  char buffer[MAGIC_BYTES_READ_SIZE];
@@ -95,7 +95,7 @@ bool PartialBlockManager::GetPartialBlock(idx_t segment_size, unique_ptr<Partial
95
95
  return true;
96
96
  }
97
97
 
98
- void PartialBlockManager::RegisterPartialBlock(PartialBlockAllocation &&allocation) {
98
+ void PartialBlockManager::RegisterPartialBlock(PartialBlockAllocation allocation) {
99
99
  auto &state = allocation.partial_block->state;
100
100
  D_ASSERT(checkpoint_type != CheckpointType::FULL_CHECKPOINT || state.block_id >= 0);
101
101
  if (state.block_use_count < max_use_count) {
@@ -43,6 +43,9 @@ unique_ptr<LogicalOperator> LogicalOperator::Deserialize(Deserializer &deseriali
43
43
  case LogicalOperatorType::LOGICAL_COMPARISON_JOIN:
44
44
  result = LogicalComparisonJoin::Deserialize(deserializer);
45
45
  break;
46
+ case LogicalOperatorType::LOGICAL_COPY_DATABASE:
47
+ result = LogicalCopyDatabase::Deserialize(deserializer);
48
+ break;
46
49
  case LogicalOperatorType::LOGICAL_COPY_TO_FILE:
47
50
  result = LogicalCopyToFile::Deserialize(deserializer);
48
51
  break;
@@ -169,9 +172,6 @@ unique_ptr<LogicalOperator> LogicalOperator::Deserialize(Deserializer &deseriali
169
172
  case LogicalOperatorType::LOGICAL_UPDATE:
170
173
  result = LogicalUpdate::Deserialize(deserializer);
171
174
  break;
172
- case LogicalOperatorType::LOGICAL_VACUUM:
173
- result = LogicalSimple::Deserialize(deserializer);
174
- break;
175
175
  case LogicalOperatorType::LOGICAL_WINDOW:
176
176
  result = LogicalWindow::Deserialize(deserializer);
177
177
  break;
@@ -184,16 +184,16 @@ unique_ptr<LogicalOperator> LogicalOperator::Deserialize(Deserializer &deseriali
184
184
  }
185
185
 
186
186
  void FilenamePattern::Serialize(Serializer &serializer) const {
187
- serializer.WritePropertyWithDefault<string>(200, "base", _base);
188
- serializer.WritePropertyWithDefault<idx_t>(201, "pos", _pos);
189
- serializer.WritePropertyWithDefault<bool>(202, "uuid", _uuid);
187
+ serializer.WritePropertyWithDefault<string>(200, "base", base);
188
+ serializer.WritePropertyWithDefault<idx_t>(201, "pos", pos);
189
+ serializer.WritePropertyWithDefault<bool>(202, "uuid", uuid);
190
190
  }
191
191
 
192
192
  FilenamePattern FilenamePattern::Deserialize(Deserializer &deserializer) {
193
193
  FilenamePattern result;
194
- deserializer.ReadPropertyWithDefault<string>(200, "base", result._base);
195
- deserializer.ReadPropertyWithDefault<idx_t>(201, "pos", result._pos);
196
- deserializer.ReadPropertyWithDefault<bool>(202, "uuid", result._uuid);
194
+ deserializer.ReadPropertyWithDefault<string>(200, "base", result.base);
195
+ deserializer.ReadPropertyWithDefault<idx_t>(201, "pos", result.pos);
196
+ deserializer.ReadPropertyWithDefault<bool>(202, "uuid", result.uuid);
197
197
  return result;
198
198
  }
199
199
 
@@ -298,6 +298,17 @@ unique_ptr<LogicalOperator> LogicalComparisonJoin::Deserialize(Deserializer &des
298
298
  return std::move(result);
299
299
  }
300
300
 
301
+ void LogicalCopyDatabase::Serialize(Serializer &serializer) const {
302
+ LogicalOperator::Serialize(serializer);
303
+ serializer.WritePropertyWithDefault<unique_ptr<CopyDatabaseInfo>>(200, "info", info);
304
+ }
305
+
306
+ unique_ptr<LogicalOperator> LogicalCopyDatabase::Deserialize(Deserializer &deserializer) {
307
+ auto info = deserializer.ReadPropertyWithDefault<unique_ptr<ParseInfo>>(200, "info");
308
+ auto result = duckdb::unique_ptr<LogicalCopyDatabase>(new LogicalCopyDatabase(std::move(info)));
309
+ return std::move(result);
310
+ }
311
+
301
312
  void LogicalCreate::Serialize(Serializer &serializer) const {
302
313
  LogicalOperator::Serialize(serializer);
303
314
  serializer.WritePropertyWithDefault<unique_ptr<CreateInfo>>(200, "info", info);
@@ -118,9 +118,9 @@ CSVOption<T> CSVOption<T>::Deserialize(Deserializer &deserializer) {
118
118
  }
119
119
 
120
120
  void CSVReaderOptions::Serialize(Serializer &serializer) const {
121
- serializer.WritePropertyWithDefault<bool>(100, "ignore_errors", ignore_errors);
121
+ serializer.WritePropertyWithDefault<bool>(100, "ignore_errors", ignore_errors, false);
122
122
  serializer.WritePropertyWithDefault<idx_t>(101, "buffer_sample_size", buffer_sample_size);
123
- serializer.WritePropertyWithDefault<string>(102, "null_str", null_str);
123
+ serializer.WritePropertyWithDefault<vector<string>>(102, "null_str", null_str);
124
124
  serializer.WriteProperty<FileCompressionType>(103, "compression", compression);
125
125
  serializer.WritePropertyWithDefault<bool>(104, "allow_quoted_nulls", allow_quoted_nulls);
126
126
  serializer.WritePropertyWithDefault<idx_t>(105, "maximum_line_size", maximum_line_size);
@@ -135,10 +135,10 @@ void CSVReaderOptions::Serialize(Serializer &serializer) const {
135
135
  serializer.WritePropertyWithDefault<idx_t>(114, "buffer_size", buffer_size);
136
136
  serializer.WriteProperty<MultiFileReaderOptions>(115, "file_options", file_options);
137
137
  serializer.WritePropertyWithDefault<vector<bool>>(116, "force_quote", force_quote);
138
- serializer.WritePropertyWithDefault<string>(117, "rejects_table_name", rejects_table_name);
138
+ serializer.WritePropertyWithDefault<string>(117, "rejects_table_name", rejects_table_name, "reject_errors");
139
139
  serializer.WritePropertyWithDefault<idx_t>(118, "rejects_limit", rejects_limit);
140
- serializer.WritePropertyWithDefault<vector<string>>(119, "rejects_recovery_columns", rejects_recovery_columns);
141
- serializer.WritePropertyWithDefault<vector<idx_t>>(120, "rejects_recovery_column_ids", rejects_recovery_column_ids);
140
+ /* [Deleted] (vector<string>) "rejects_recovery_columns" */
141
+ /* [Deleted] (vector<idx_t>) "rejects_recovery_column_ids" */
142
142
  serializer.WriteProperty<CSVOption<char>>(121, "dialect_options.state_machine_options.delimiter", dialect_options.state_machine_options.delimiter);
143
143
  serializer.WriteProperty<CSVOption<char>>(122, "dialect_options.state_machine_options.quote", dialect_options.state_machine_options.quote);
144
144
  serializer.WriteProperty<CSVOption<char>>(123, "dialect_options.state_machine_options.escape", dialect_options.state_machine_options.escape);
@@ -150,13 +150,14 @@ void CSVReaderOptions::Serialize(Serializer &serializer) const {
150
150
  serializer.WritePropertyWithDefault<string>(129, "sniffer_user_mismatch_error", sniffer_user_mismatch_error);
151
151
  serializer.WritePropertyWithDefault<bool>(130, "parallel", parallel);
152
152
  serializer.WritePropertyWithDefault<vector<bool>>(131, "was_type_manually_set", was_type_manually_set);
153
+ serializer.WritePropertyWithDefault<CSVOption<string>>(132, "rejects_scan_name", rejects_scan_name, {"reject_scans"});
153
154
  }
154
155
 
155
156
  CSVReaderOptions CSVReaderOptions::Deserialize(Deserializer &deserializer) {
156
157
  CSVReaderOptions result;
157
- deserializer.ReadPropertyWithDefault<bool>(100, "ignore_errors", result.ignore_errors);
158
+ deserializer.ReadPropertyWithDefault<bool>(100, "ignore_errors", result.ignore_errors, false);
158
159
  deserializer.ReadPropertyWithDefault<idx_t>(101, "buffer_sample_size", result.buffer_sample_size);
159
- deserializer.ReadPropertyWithDefault<string>(102, "null_str", result.null_str);
160
+ deserializer.ReadPropertyWithDefault<vector<string>>(102, "null_str", result.null_str);
160
161
  deserializer.ReadProperty<FileCompressionType>(103, "compression", result.compression);
161
162
  deserializer.ReadPropertyWithDefault<bool>(104, "allow_quoted_nulls", result.allow_quoted_nulls);
162
163
  deserializer.ReadPropertyWithDefault<idx_t>(105, "maximum_line_size", result.maximum_line_size);
@@ -171,10 +172,10 @@ CSVReaderOptions CSVReaderOptions::Deserialize(Deserializer &deserializer) {
171
172
  deserializer.ReadPropertyWithDefault<idx_t>(114, "buffer_size", result.buffer_size);
172
173
  deserializer.ReadProperty<MultiFileReaderOptions>(115, "file_options", result.file_options);
173
174
  deserializer.ReadPropertyWithDefault<vector<bool>>(116, "force_quote", result.force_quote);
174
- deserializer.ReadPropertyWithDefault<string>(117, "rejects_table_name", result.rejects_table_name);
175
+ deserializer.ReadPropertyWithDefault<string>(117, "rejects_table_name", result.rejects_table_name, "reject_errors");
175
176
  deserializer.ReadPropertyWithDefault<idx_t>(118, "rejects_limit", result.rejects_limit);
176
- deserializer.ReadPropertyWithDefault<vector<string>>(119, "rejects_recovery_columns", result.rejects_recovery_columns);
177
- deserializer.ReadPropertyWithDefault<vector<idx_t>>(120, "rejects_recovery_column_ids", result.rejects_recovery_column_ids);
177
+ deserializer.ReadDeletedProperty<vector<string>>(119, "rejects_recovery_columns");
178
+ deserializer.ReadDeletedProperty<vector<idx_t>>(120, "rejects_recovery_column_ids");
178
179
  deserializer.ReadProperty<CSVOption<char>>(121, "dialect_options.state_machine_options.delimiter", result.dialect_options.state_machine_options.delimiter);
179
180
  deserializer.ReadProperty<CSVOption<char>>(122, "dialect_options.state_machine_options.quote", result.dialect_options.state_machine_options.quote);
180
181
  deserializer.ReadProperty<CSVOption<char>>(123, "dialect_options.state_machine_options.escape", result.dialect_options.state_machine_options.escape);
@@ -186,6 +187,7 @@ CSVReaderOptions CSVReaderOptions::Deserialize(Deserializer &deserializer) {
186
187
  deserializer.ReadPropertyWithDefault<string>(129, "sniffer_user_mismatch_error", result.sniffer_user_mismatch_error);
187
188
  deserializer.ReadPropertyWithDefault<bool>(130, "parallel", result.parallel);
188
189
  deserializer.ReadPropertyWithDefault<vector<bool>>(131, "was_type_manually_set", result.was_type_manually_set);
190
+ deserializer.ReadPropertyWithDefault<CSVOption<string>>(132, "rejects_scan_name", result.rejects_scan_name, {"reject_scans"});
189
191
  return result;
190
192
  }
191
193
 
@@ -10,6 +10,7 @@
10
10
  #include "duckdb/parser/parsed_data/alter_table_info.hpp"
11
11
  #include "duckdb/parser/parsed_data/comment_on_column_info.hpp"
12
12
  #include "duckdb/parser/parsed_data/attach_info.hpp"
13
+ #include "duckdb/parser/parsed_data/copy_database_info.hpp"
13
14
  #include "duckdb/parser/parsed_data/copy_info.hpp"
14
15
  #include "duckdb/parser/parsed_data/detach_info.hpp"
15
16
  #include "duckdb/parser/parsed_data/drop_info.hpp"
@@ -34,6 +35,9 @@ unique_ptr<ParseInfo> ParseInfo::Deserialize(Deserializer &deserializer) {
34
35
  case ParseInfoType::ATTACH_INFO:
35
36
  result = AttachInfo::Deserialize(deserializer);
36
37
  break;
38
+ case ParseInfoType::COPY_DATABASE_INFO:
39
+ result = CopyDatabaseInfo::Deserialize(deserializer);
40
+ break;
37
41
  case ParseInfoType::COPY_INFO:
38
42
  result = CopyInfo::Deserialize(deserializer);
39
43
  break;
@@ -229,6 +233,19 @@ unique_ptr<AlterTableInfo> ChangeColumnTypeInfo::Deserialize(Deserializer &deser
229
233
  return std::move(result);
230
234
  }
231
235
 
236
+ void CopyDatabaseInfo::Serialize(Serializer &serializer) const {
237
+ ParseInfo::Serialize(serializer);
238
+ serializer.WritePropertyWithDefault<string>(200, "target_database", target_database);
239
+ serializer.WritePropertyWithDefault<vector<unique_ptr<CreateInfo>>>(201, "entries", entries);
240
+ }
241
+
242
+ unique_ptr<ParseInfo> CopyDatabaseInfo::Deserialize(Deserializer &deserializer) {
243
+ auto result = duckdb::unique_ptr<CopyDatabaseInfo>(new CopyDatabaseInfo());
244
+ deserializer.ReadPropertyWithDefault<string>(200, "target_database", result->target_database);
245
+ deserializer.ReadPropertyWithDefault<vector<unique_ptr<CreateInfo>>>(201, "entries", result->entries);
246
+ return std::move(result);
247
+ }
248
+
232
249
  void CopyInfo::Serialize(Serializer &serializer) const {
233
250
  ParseInfo::Serialize(serializer);
234
251
  serializer.WritePropertyWithDefault<string>(200, "catalog", catalog);
@@ -449,11 +466,17 @@ unique_ptr<ParseInfo> TransactionInfo::Deserialize(Deserializer &deserializer) {
449
466
  void VacuumInfo::Serialize(Serializer &serializer) const {
450
467
  ParseInfo::Serialize(serializer);
451
468
  serializer.WriteProperty<VacuumOptions>(200, "options", options);
469
+ serializer.WritePropertyWithDefault<bool>(201, "has_table", has_table);
470
+ serializer.WritePropertyWithDefault<unique_ptr<TableRef>>(202, "ref", ref);
471
+ serializer.WritePropertyWithDefault<vector<string>>(203, "columns", columns);
452
472
  }
453
473
 
454
474
  unique_ptr<ParseInfo> VacuumInfo::Deserialize(Deserializer &deserializer) {
455
475
  auto options = deserializer.ReadProperty<VacuumOptions>(200, "options");
456
476
  auto result = duckdb::unique_ptr<VacuumInfo>(new VacuumInfo(options));
477
+ deserializer.ReadPropertyWithDefault<bool>(201, "has_table", result->has_table);
478
+ deserializer.ReadPropertyWithDefault<unique_ptr<TableRef>>(202, "ref", result->ref);
479
+ deserializer.ReadPropertyWithDefault<vector<string>>(203, "columns", result->columns);
457
480
  return std::move(result);
458
481
  }
459
482
 
@@ -150,31 +150,31 @@ SingleFileBlockManager::SingleFileBlockManager(AttachedDatabase &db, string path
150
150
  iteration_count(0), options(options) {
151
151
  }
152
152
 
153
- void SingleFileBlockManager::GetFileFlags(uint8_t &flags, FileLockType &lock, bool create_new) {
153
+ FileOpenFlags SingleFileBlockManager::GetFileFlags(bool create_new) const {
154
+ FileOpenFlags result;
154
155
  if (options.read_only) {
155
156
  D_ASSERT(!create_new);
156
- flags = FileFlags::FILE_FLAGS_READ;
157
- lock = FileLockType::READ_LOCK;
157
+ result = FileFlags::FILE_FLAGS_READ | FileFlags::FILE_FLAGS_NULL_IF_NOT_EXISTS | FileLockType::READ_LOCK;
158
158
  } else {
159
- flags = FileFlags::FILE_FLAGS_WRITE | FileFlags::FILE_FLAGS_READ;
160
- lock = FileLockType::WRITE_LOCK;
159
+ result = FileFlags::FILE_FLAGS_WRITE | FileFlags::FILE_FLAGS_READ | FileLockType::WRITE_LOCK;
161
160
  if (create_new) {
162
- flags |= FileFlags::FILE_FLAGS_FILE_CREATE;
161
+ result |= FileFlags::FILE_FLAGS_FILE_CREATE;
163
162
  }
164
163
  }
165
164
  if (options.use_direct_io) {
166
- flags |= FileFlags::FILE_FLAGS_DIRECT_IO;
165
+ result |= FileFlags::FILE_FLAGS_DIRECT_IO;
167
166
  }
167
+ // database files can be read from in parallel
168
+ result |= FileFlags::FILE_FLAGS_PARALLEL_ACCESS;
169
+ return result;
168
170
  }
169
171
 
170
172
  void SingleFileBlockManager::CreateNewDatabase() {
171
- uint8_t flags;
172
- FileLockType lock;
173
- GetFileFlags(flags, lock, true);
173
+ auto flags = GetFileFlags(true);
174
174
 
175
175
  // open the RDBMS handle
176
176
  auto &fs = FileSystem::Get(db);
177
- handle = fs.OpenFile(path, flags, lock);
177
+ handle = fs.OpenFile(path, flags);
178
178
 
179
179
  // if we create a new file, we fill the metadata of the file
180
180
  // first fill in the new header
@@ -221,13 +221,15 @@ void SingleFileBlockManager::CreateNewDatabase() {
221
221
  }
222
222
 
223
223
  void SingleFileBlockManager::LoadExistingDatabase() {
224
- uint8_t flags;
225
- FileLockType lock;
226
- GetFileFlags(flags, lock, false);
224
+ auto flags = GetFileFlags(false);
227
225
 
228
226
  // open the RDBMS handle
229
227
  auto &fs = FileSystem::Get(db);
230
- handle = fs.OpenFile(path, flags, lock);
228
+ handle = fs.OpenFile(path, flags);
229
+ if (!handle) {
230
+ // this can only happen in read-only mode - as that is when we set FILE_FLAGS_NULL_IF_NOT_EXISTS
231
+ throw CatalogException("Cannot open database \"%s\" in read-only mode: database does not exist", path);
232
+ }
231
233
 
232
234
  MainHeader::CheckMagicBytes(*handle);
233
235
  // otherwise, we check the metadata of the file
@@ -294,7 +296,9 @@ void SingleFileBlockManager::LoadFreeList() {
294
296
  auto free_list_count = reader.Read<uint64_t>();
295
297
  free_list.clear();
296
298
  for (idx_t i = 0; i < free_list_count; i++) {
297
- free_list.insert(reader.Read<block_id_t>());
299
+ auto block = reader.Read<block_id_t>();
300
+ free_list.insert(block);
301
+ newly_freed_list.insert(block);
298
302
  }
299
303
  auto multi_use_blocks_count = reader.Read<uint64_t>();
300
304
  multi_use_blocks.clear();
@@ -320,6 +324,7 @@ block_id_t SingleFileBlockManager::GetFreeBlockId() {
320
324
  block = *free_list.begin();
321
325
  // erase the entry from the free list again
322
326
  free_list.erase(free_list.begin());
327
+ newly_freed_list.erase(block);
323
328
  } else {
324
329
  block = max_block++;
325
330
  }
@@ -335,6 +340,7 @@ void SingleFileBlockManager::MarkBlockAsFree(block_id_t block_id) {
335
340
  }
336
341
  multi_use_blocks.erase(block_id);
337
342
  free_list.insert(block_id);
343
+ newly_freed_list.insert(block_id);
338
344
  }
339
345
 
340
346
  void SingleFileBlockManager::MarkBlockAsModified(block_id_t block_id) {
@@ -432,9 +438,8 @@ void SingleFileBlockManager::Truncate() {
432
438
  return;
433
439
  }
434
440
  // truncate the file
435
- for (idx_t i = 0; i < blocks_to_truncate; i++) {
436
- free_list.erase(max_block + i);
437
- }
441
+ free_list.erase(free_list.lower_bound(max_block), free_list.end());
442
+ newly_freed_list.erase(newly_freed_list.lower_bound(max_block), newly_freed_list.end());
438
443
  handle->Truncate(BLOCK_START + max_block * Storage::BLOCK_ALLOC_SIZE);
439
444
  }
440
445
 
@@ -494,6 +499,7 @@ void SingleFileBlockManager::WriteHeader(DatabaseHeader header) {
494
499
  metadata_manager.MarkBlocksAsModified();
495
500
  for (auto &block : modified_blocks) {
496
501
  free_list.insert(block);
502
+ newly_freed_list.insert(block);
497
503
  }
498
504
  modified_blocks.clear();
499
505
 
@@ -547,6 +553,27 @@ void SingleFileBlockManager::WriteHeader(DatabaseHeader header) {
547
553
  active_header = 1 - active_header;
548
554
  //! Ensure the header write ends up on disk
549
555
  handle->Sync();
556
+ // Release the free blocks to the filesystem.
557
+ TrimFreeBlocks();
558
+ }
559
+
560
+ void SingleFileBlockManager::TrimFreeBlocks() {
561
+ if (DBConfig::Get(db).options.trim_free_blocks) {
562
+ for (auto itr = newly_freed_list.begin(); itr != newly_freed_list.end(); ++itr) {
563
+ block_id_t first = *itr;
564
+ block_id_t last = first;
565
+ // Find end of contiguous range.
566
+ for (++itr; itr != newly_freed_list.end() && (*itr == last + 1); ++itr) {
567
+ last = *itr;
568
+ }
569
+ // We are now one too far.
570
+ --itr;
571
+ // Trim the range.
572
+ handle->Trim(BLOCK_START + (first * Storage::BLOCK_ALLOC_SIZE),
573
+ (last + 1 - first) * Storage::BLOCK_ALLOC_SIZE);
574
+ }
575
+ }
576
+ newly_freed_list.clear();
550
577
  }
551
578
 
552
579
  } // namespace duckdb
@@ -13,6 +13,12 @@
13
13
 
14
14
  namespace duckdb {
15
15
 
16
+ #ifdef DUCKDB_DEBUG_DESTROY_BLOCKS
17
+ static void WriteGarbageIntoBuffer(FileBuffer &buffer) {
18
+ memset(buffer.buffer, 0xa5, buffer.size); // 0xa5 is default memory in debug mode
19
+ }
20
+ #endif
21
+
16
22
  struct BufferAllocatorData : PrivateAllocatorData {
17
23
  explicit BufferAllocatorData(StandardBufferManager &manager) : manager(manager) {
18
24
  }
@@ -85,14 +91,20 @@ TempBufferPoolReservation StandardBufferManager::EvictBlocksOrThrow(MemoryTag ta
85
91
 
86
92
  shared_ptr<BlockHandle> StandardBufferManager::RegisterSmallMemory(idx_t block_size) {
87
93
  D_ASSERT(block_size < Storage::BLOCK_SIZE);
88
- auto res = EvictBlocksOrThrow(MemoryTag::BASE_TABLE, block_size, nullptr, "could not allocate block of size %s%s",
89
- StringUtil::BytesToHumanReadableString(block_size));
94
+ auto reservation =
95
+ EvictBlocksOrThrow(MemoryTag::BASE_TABLE, block_size, nullptr, "could not allocate block of size %s%s",
96
+ StringUtil::BytesToHumanReadableString(block_size));
90
97
 
91
98
  auto buffer = ConstructManagedBuffer(block_size, nullptr, FileBufferType::TINY_BUFFER);
92
99
 
93
100
  // create a new block pointer for this block
94
- return make_shared<BlockHandle>(*temp_block_manager, ++temporary_id, MemoryTag::BASE_TABLE, std::move(buffer),
95
- false, block_size, std::move(res));
101
+ auto result = make_shared<BlockHandle>(*temp_block_manager, ++temporary_id, MemoryTag::BASE_TABLE,
102
+ std::move(buffer), false, block_size, std::move(reservation));
103
+ #ifdef DUCKDB_DEBUG_DESTROY_BLOCKS
104
+ // Initialize the memory with garbage data
105
+ WriteGarbageIntoBuffer(*result->buffer);
106
+ #endif
107
+ return result;
96
108
  }
97
109
 
98
110
  shared_ptr<BlockHandle> StandardBufferManager::RegisterMemory(MemoryTag tag, idx_t block_size, bool can_destroy) {
@@ -115,6 +127,10 @@ BufferHandle StandardBufferManager::Allocate(MemoryTag tag, idx_t block_size, bo
115
127
  shared_ptr<BlockHandle> local_block;
116
128
  auto block_ptr = block ? block : &local_block;
117
129
  *block_ptr = RegisterMemory(tag, block_size, can_destroy);
130
+ #ifdef DUCKDB_DEBUG_DESTROY_BLOCKS
131
+ // Initialize the memory with garbage data
132
+ WriteGarbageIntoBuffer(*(*block_ptr)->buffer);
133
+ #endif
118
134
  return Pin(*block_ptr);
119
135
  }
120
136
 
@@ -206,7 +222,7 @@ void StandardBufferManager::VerifyZeroReaders(shared_ptr<BlockHandle> &handle) {
206
222
  auto replacement_buffer = make_uniq<FileBuffer>(Allocator::Get(db), handle->buffer->type,
207
223
  handle->memory_usage - Storage::BLOCK_HEADER_SIZE);
208
224
  memcpy(replacement_buffer->buffer, handle->buffer->buffer, handle->buffer->size);
209
- memset(handle->buffer->buffer, 0xa5, handle->buffer->size); // 0xa5 is default memory in debug mode
225
+ WriteGarbageIntoBuffer(*handle->buffer);
210
226
  handle->buffer = std::move(replacement_buffer);
211
227
  #endif
212
228
  }
@@ -78,7 +78,7 @@ void ArrayStats::Deserialize(Deserializer &deserializer, BaseStatistics &base) {
78
78
  auto &child_type = ArrayType::GetChildType(type);
79
79
 
80
80
  // Push the logical type of the child type to the deserialization context
81
- deserializer.Set<LogicalType &>(const_cast<LogicalType &>(child_type));
81
+ deserializer.Set<const LogicalType &>(child_type);
82
82
  base.child_stats[0].Copy(deserializer.ReadProperty<BaseStatistics>(200, "child_stats"));
83
83
  deserializer.Unset<LogicalType>();
84
84
  }
@@ -341,11 +341,10 @@ BaseStatistics BaseStatistics::Deserialize(Deserializer &deserializer) {
341
341
  auto distinct_count = deserializer.ReadProperty<idx_t>(102, "distinct_count");
342
342
 
343
343
  // Get the logical type from the deserializer context.
344
- auto type = deserializer.Get<LogicalType &>();
345
-
344
+ auto &type = deserializer.Get<const LogicalType &>();
346
345
  auto stats_type = GetStatsType(type);
347
346
 
348
- BaseStatistics stats(std::move(type));
347
+ BaseStatistics stats(type);
349
348
 
350
349
  stats.has_null = has_null;
351
350
  stats.has_no_null = has_no_null;
@@ -79,7 +79,7 @@ void ListStats::Deserialize(Deserializer &deserializer, BaseStatistics &base) {
79
79
  auto &child_type = ListType::GetChildType(type);
80
80
 
81
81
  // Push the logical type of the child type to the deserialization context
82
- deserializer.Set<LogicalType &>(const_cast<LogicalType &>(child_type));
82
+ deserializer.Set<const LogicalType &>(child_type);
83
83
  base.child_stats[0].Copy(deserializer.ReadProperty<BaseStatistics>(200, "child_stats"));
84
84
  deserializer.Unset<LogicalType>();
85
85
  }