duckdb 0.8.2-dev4126.0 → 0.8.2-dev4203.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 (497) hide show
  1. package/binding.gyp +0 -2
  2. package/lib/duckdb.js +3 -3
  3. package/package.json +1 -1
  4. package/src/connection.cpp +9 -8
  5. package/src/database.cpp +5 -8
  6. package/src/duckdb/extension/icu/icu-datepart.cpp +2 -2
  7. package/src/duckdb/extension/icu/icu-strptime.cpp +0 -9
  8. package/src/duckdb/extension/icu/icu_extension.cpp +3 -3
  9. package/src/duckdb/extension/icu/third_party/icu/i18n/unicode/gregocal.h +1 -1
  10. package/src/duckdb/extension/json/buffered_json_reader.cpp +3 -17
  11. package/src/duckdb/extension/json/include/buffered_json_reader.hpp +2 -5
  12. package/src/duckdb/extension/json/include/json_deserializer.hpp +2 -2
  13. package/src/duckdb/extension/json/include/json_scan.hpp +5 -12
  14. package/src/duckdb/extension/json/include/json_serializer.hpp +3 -3
  15. package/src/duckdb/extension/json/include/json_transform.hpp +2 -5
  16. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +1 -1
  17. package/src/duckdb/extension/json/json_functions/json_transform.cpp +2 -18
  18. package/src/duckdb/extension/json/json_scan.cpp +7 -76
  19. package/src/duckdb/extension/json/serialize_json.cpp +8 -8
  20. package/src/duckdb/extension/parquet/column_writer.cpp +46 -45
  21. package/src/duckdb/extension/parquet/include/column_writer.hpp +2 -2
  22. package/src/duckdb/extension/parquet/include/parquet_reader.hpp +2 -5
  23. package/src/duckdb/extension/parquet/include/parquet_rle_bp_encoder.hpp +4 -4
  24. package/src/duckdb/extension/parquet/parquet_extension.cpp +74 -55
  25. package/src/duckdb/extension/parquet/parquet_writer.cpp +3 -2
  26. package/src/duckdb/extension/parquet/serialize_parquet.cpp +4 -4
  27. package/src/duckdb/src/catalog/catalog.cpp +20 -0
  28. package/src/duckdb/src/catalog/catalog_entry/index_catalog_entry.cpp +0 -1
  29. package/src/duckdb/src/catalog/catalog_entry/macro_catalog_entry.cpp +0 -1
  30. package/src/duckdb/src/catalog/catalog_entry/schema_catalog_entry.cpp +0 -1
  31. package/src/duckdb/src/catalog/catalog_entry/sequence_catalog_entry.cpp +0 -1
  32. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +0 -2
  33. package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +1 -3
  34. package/src/duckdb/src/catalog/catalog_entry/view_catalog_entry.cpp +0 -1
  35. package/src/duckdb/src/catalog/catalog_entry.cpp +2 -11
  36. package/src/duckdb/src/catalog/catalog_set.cpp +16 -14
  37. package/src/duckdb/src/catalog/default/default_functions.cpp +2 -2
  38. package/src/duckdb/src/common/arrow/arrow_converter.cpp +3 -1
  39. package/src/duckdb/src/common/constants.cpp +0 -1
  40. package/src/duckdb/src/common/enum_util.cpp +0 -10
  41. package/src/duckdb/src/common/exception.cpp +1 -1
  42. package/src/duckdb/src/common/extra_type_info.cpp +20 -192
  43. package/src/duckdb/src/common/multi_file_reader.cpp +0 -68
  44. package/src/duckdb/src/common/serializer/binary_serializer.cpp +9 -4
  45. package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +3 -11
  46. package/src/duckdb/src/common/serializer/buffered_file_writer.cpp +1 -1
  47. package/src/duckdb/src/common/serializer/memory_stream.cpp +61 -0
  48. package/src/duckdb/src/common/serializer/{format_serializer.cpp → serializer.cpp} +2 -2
  49. package/src/duckdb/src/common/types/column/column_data_collection.cpp +4 -4
  50. package/src/duckdb/src/common/types/data_chunk.cpp +11 -43
  51. package/src/duckdb/src/common/types/hyperloglog.cpp +4 -23
  52. package/src/duckdb/src/common/types/interval.cpp +2 -2
  53. package/src/duckdb/src/common/types/value.cpp +10 -135
  54. package/src/duckdb/src/common/types/vector.cpp +17 -149
  55. package/src/duckdb/src/common/types.cpp +2 -20
  56. package/src/duckdb/src/core_functions/aggregate/algebraic/avg.cpp +0 -1
  57. package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +6 -7
  58. package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +5 -28
  59. package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +30 -78
  60. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +5 -30
  61. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +6 -9
  62. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +21 -16
  63. package/src/duckdb/src/core_functions/scalar/list/list_lambdas.cpp +15 -23
  64. package/src/duckdb/src/function/macro_function.cpp +0 -42
  65. package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +10 -8
  66. package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +13 -12
  67. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +9 -11
  68. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +7 -33
  69. package/src/duckdb/src/function/scalar_function.cpp +1 -2
  70. package/src/duckdb/src/function/scalar_macro_function.cpp +0 -10
  71. package/src/duckdb/src/function/table/copy_csv.cpp +38 -38
  72. package/src/duckdb/src/function/table/read_csv.cpp +5 -174
  73. package/src/duckdb/src/function/table/table_scan.cpp +5 -42
  74. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  75. package/src/duckdb/src/function/table_function.cpp +3 -4
  76. package/src/duckdb/src/function/table_macro_function.cpp +0 -10
  77. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +1 -0
  78. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/schema_catalog_entry.hpp +0 -2
  79. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/sequence_catalog_entry.hpp +0 -2
  80. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/type_catalog_entry.hpp +0 -2
  81. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +3 -8
  82. package/src/duckdb/src/include/duckdb/common/constants.hpp +4 -2
  83. package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +16 -46
  84. package/src/duckdb/src/include/duckdb/common/index_vector.hpp +4 -4
  85. package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +2 -6
  86. package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +0 -4
  87. package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +44 -23
  88. package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +31 -23
  89. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +4 -6
  90. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_writer.hpp +3 -3
  91. package/src/duckdb/src/include/duckdb/common/serializer/deserialization_data.hpp +17 -0
  92. package/src/duckdb/src/include/duckdb/common/serializer/{format_deserializer.hpp → deserializer.hpp} +13 -13
  93. package/src/duckdb/src/include/duckdb/common/serializer/memory_stream.hpp +62 -0
  94. package/src/duckdb/src/include/duckdb/common/serializer/read_stream.hpp +38 -0
  95. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +15 -13
  96. package/src/duckdb/src/include/duckdb/common/serializer/{format_serializer.hpp → serializer.hpp} +13 -12
  97. package/src/duckdb/src/include/duckdb/common/serializer/write_stream.hpp +36 -0
  98. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +2 -2
  99. package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +3 -8
  100. package/src/duckdb/src/include/duckdb/common/types/hyperloglog.hpp +4 -10
  101. package/src/duckdb/src/include/duckdb/common/types/interval.hpp +4 -4
  102. package/src/duckdb/src/include/duckdb/common/types/value.hpp +1 -5
  103. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +2 -7
  104. package/src/duckdb/src/include/duckdb/common/types.hpp +1 -10
  105. package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_reader_options.hpp +2 -11
  106. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +4 -14
  107. package/src/duckdb/src/include/duckdb/function/copy_function.hpp +3 -3
  108. package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +15 -98
  109. package/src/duckdb/src/include/duckdb/function/macro_function.hpp +1 -7
  110. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +9 -10
  111. package/src/duckdb/src/include/duckdb/function/scalar/strftime_format.hpp +2 -2
  112. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -12
  113. package/src/duckdb/src/include/duckdb/function/scalar_macro_function.hpp +2 -7
  114. package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +4 -16
  115. package/src/duckdb/src/include/duckdb/function/table_function.hpp +2 -11
  116. package/src/duckdb/src/include/duckdb/function/table_macro_function.hpp +2 -7
  117. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +1 -0
  118. package/src/duckdb/src/include/duckdb/main/extension_helper.hpp +1 -0
  119. package/src/duckdb/src/include/duckdb/parser/column_definition.hpp +1 -4
  120. package/src/duckdb/src/include/duckdb/parser/column_list.hpp +2 -6
  121. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +2 -2
  122. package/src/duckdb/src/include/duckdb/parser/constraint.hpp +2 -12
  123. package/src/duckdb/src/include/duckdb/parser/constraints/check_constraint.hpp +2 -5
  124. package/src/duckdb/src/include/duckdb/parser/constraints/foreign_key_constraint.hpp +2 -7
  125. package/src/duckdb/src/include/duckdb/parser/constraints/not_null_constraint.hpp +2 -7
  126. package/src/duckdb/src/include/duckdb/parser/constraints/unique_constraint.hpp +2 -7
  127. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +2 -5
  128. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +1 -4
  129. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +4 -6
  130. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -4
  131. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -4
  132. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -4
  133. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -4
  134. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -4
  135. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +2 -5
  136. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +2 -4
  137. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +2 -4
  138. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -4
  139. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -4
  140. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -4
  141. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -4
  142. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +2 -4
  143. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -4
  144. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +2 -4
  145. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +2 -5
  146. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_scalar_function_info.hpp +0 -2
  147. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +0 -2
  148. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +24 -51
  149. package/src/duckdb/src/include/duckdb/parser/parsed_data/attach_info.hpp +1 -4
  150. package/src/duckdb/src/include/duckdb/parser/parsed_data/copy_info.hpp +2 -2
  151. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_collation_info.hpp +0 -3
  152. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_copy_function_info.hpp +0 -3
  153. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_function_info.hpp +0 -5
  154. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_index_info.hpp +2 -7
  155. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_info.hpp +1 -13
  156. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_macro_info.hpp +2 -8
  157. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_schema_info.hpp +2 -12
  158. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_sequence_info.hpp +2 -7
  159. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_info.hpp +2 -7
  160. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_type_info.hpp +2 -7
  161. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_view_info.hpp +2 -7
  162. package/src/duckdb/src/include/duckdb/parser/parsed_data/detach_info.hpp +2 -4
  163. package/src/duckdb/src/include/duckdb/parser/parsed_data/drop_info.hpp +2 -5
  164. package/src/duckdb/src/include/duckdb/parser/parsed_data/load_info.hpp +2 -21
  165. package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +2 -2
  166. package/src/duckdb/src/include/duckdb/parser/parsed_data/pragma_info.hpp +2 -2
  167. package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -4
  168. package/src/duckdb/src/include/duckdb/parser/parsed_data/transaction_info.hpp +1 -4
  169. package/src/duckdb/src/include/duckdb/parser/parsed_data/vacuum_info.hpp +5 -7
  170. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +3 -16
  171. package/src/duckdb/src/include/duckdb/parser/query_node/cte_node.hpp +2 -4
  172. package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +2 -4
  173. package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +2 -4
  174. package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +2 -4
  175. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +7 -14
  176. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +14 -32
  177. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +4 -9
  178. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +2 -6
  179. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -6
  180. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +2 -6
  181. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +2 -6
  182. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +6 -14
  183. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +2 -6
  184. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +2 -6
  185. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +2 -10
  186. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +1 -0
  187. package/src/duckdb/src/include/duckdb/planner/bound_constraint.hpp +0 -1
  188. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +2 -8
  189. package/src/duckdb/src/include/duckdb/planner/column_binding.hpp +4 -4
  190. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +2 -4
  191. package/src/duckdb/src/include/duckdb/planner/expression/bound_between_expression.hpp +2 -4
  192. package/src/duckdb/src/include/duckdb/planner/expression/bound_case_expression.hpp +3 -9
  193. package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +2 -5
  194. package/src/duckdb/src/include/duckdb/planner/expression/bound_columnref_expression.hpp +2 -8
  195. package/src/duckdb/src/include/duckdb/planner/expression/bound_comparison_expression.hpp +2 -4
  196. package/src/duckdb/src/include/duckdb/planner/expression/bound_conjunction_expression.hpp +2 -5
  197. package/src/duckdb/src/include/duckdb/planner/expression/bound_constant_expression.hpp +2 -5
  198. package/src/duckdb/src/include/duckdb/planner/expression/bound_default_expression.hpp +2 -5
  199. package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +2 -5
  200. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambda_expression.hpp +2 -4
  201. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambdaref_expression.hpp +2 -8
  202. package/src/duckdb/src/include/duckdb/planner/expression/bound_operator_expression.hpp +2 -5
  203. package/src/duckdb/src/include/duckdb/planner/expression/bound_parameter_data.hpp +2 -19
  204. package/src/duckdb/src/include/duckdb/planner/expression/bound_parameter_expression.hpp +2 -5
  205. package/src/duckdb/src/include/duckdb/planner/expression/bound_reference_expression.hpp +2 -5
  206. package/src/duckdb/src/include/duckdb/planner/expression/bound_subquery_expression.hpp +0 -3
  207. package/src/duckdb/src/include/duckdb/planner/expression/bound_unnest_expression.hpp +2 -5
  208. package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +2 -5
  209. package/src/duckdb/src/include/duckdb/planner/expression.hpp +2 -14
  210. package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +4 -8
  211. package/src/duckdb/src/include/duckdb/planner/filter/constant_filter.hpp +2 -4
  212. package/src/duckdb/src/include/duckdb/planner/filter/null_filter.hpp +4 -8
  213. package/src/duckdb/src/include/duckdb/planner/joinside.hpp +1 -6
  214. package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +2 -17
  215. package/src/duckdb/src/include/duckdb/planner/operator/logical_aggregate.hpp +2 -4
  216. package/src/duckdb/src/include/duckdb/planner/operator/logical_any_join.hpp +2 -4
  217. package/src/duckdb/src/include/duckdb/planner/operator/logical_column_data_get.hpp +2 -5
  218. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +2 -6
  219. package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_to_file.hpp +2 -4
  220. package/src/duckdb/src/include/duckdb/planner/operator/logical_create.hpp +2 -5
  221. package/src/duckdb/src/include/duckdb/planner/operator/logical_create_index.hpp +2 -5
  222. package/src/duckdb/src/include/duckdb/planner/operator/logical_create_table.hpp +2 -5
  223. package/src/duckdb/src/include/duckdb/planner/operator/logical_cross_product.hpp +2 -5
  224. package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +2 -4
  225. package/src/duckdb/src/include/duckdb/planner/operator/logical_delete.hpp +2 -5
  226. package/src/duckdb/src/include/duckdb/planner/operator/logical_delim_get.hpp +2 -4
  227. package/src/duckdb/src/include/duckdb/planner/operator/logical_dependent_join.hpp +0 -1
  228. package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +2 -4
  229. package/src/duckdb/src/include/duckdb/planner/operator/logical_dummy_scan.hpp +2 -4
  230. package/src/duckdb/src/include/duckdb/planner/operator/logical_empty_result.hpp +2 -4
  231. package/src/duckdb/src/include/duckdb/planner/operator/logical_execute.hpp +0 -2
  232. package/src/duckdb/src/include/duckdb/planner/operator/logical_explain.hpp +2 -5
  233. package/src/duckdb/src/include/duckdb/planner/operator/logical_export.hpp +0 -3
  234. package/src/duckdb/src/include/duckdb/planner/operator/logical_expression_get.hpp +2 -4
  235. package/src/duckdb/src/include/duckdb/planner/operator/logical_extension_operator.hpp +2 -4
  236. package/src/duckdb/src/include/duckdb/planner/operator/logical_filter.hpp +2 -4
  237. package/src/duckdb/src/include/duckdb/planner/operator/logical_get.hpp +2 -4
  238. package/src/duckdb/src/include/duckdb/planner/operator/logical_insert.hpp +2 -5
  239. package/src/duckdb/src/include/duckdb/planner/operator/logical_join.hpp +0 -2
  240. package/src/duckdb/src/include/duckdb/planner/operator/logical_limit.hpp +2 -5
  241. package/src/duckdb/src/include/duckdb/planner/operator/logical_limit_percent.hpp +2 -5
  242. package/src/duckdb/src/include/duckdb/planner/operator/logical_materialized_cte.hpp +2 -4
  243. package/src/duckdb/src/include/duckdb/planner/operator/logical_order.hpp +2 -5
  244. package/src/duckdb/src/include/duckdb/planner/operator/logical_pivot.hpp +2 -4
  245. package/src/duckdb/src/include/duckdb/planner/operator/logical_positional_join.hpp +2 -5
  246. package/src/duckdb/src/include/duckdb/planner/operator/logical_pragma.hpp +0 -2
  247. package/src/duckdb/src/include/duckdb/planner/operator/logical_prepare.hpp +0 -2
  248. package/src/duckdb/src/include/duckdb/planner/operator/logical_projection.hpp +2 -4
  249. package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +2 -4
  250. package/src/duckdb/src/include/duckdb/planner/operator/logical_reset.hpp +2 -5
  251. package/src/duckdb/src/include/duckdb/planner/operator/logical_sample.hpp +2 -5
  252. package/src/duckdb/src/include/duckdb/planner/operator/logical_set.hpp +2 -5
  253. package/src/duckdb/src/include/duckdb/planner/operator/logical_set_operation.hpp +2 -5
  254. package/src/duckdb/src/include/duckdb/planner/operator/logical_show.hpp +2 -5
  255. package/src/duckdb/src/include/duckdb/planner/operator/logical_simple.hpp +2 -5
  256. package/src/duckdb/src/include/duckdb/planner/operator/logical_top_n.hpp +2 -4
  257. package/src/duckdb/src/include/duckdb/planner/operator/logical_unnest.hpp +2 -4
  258. package/src/duckdb/src/include/duckdb/planner/operator/logical_update.hpp +2 -4
  259. package/src/duckdb/src/include/duckdb/planner/operator/logical_window.hpp +2 -4
  260. package/src/duckdb/src/include/duckdb/planner/operator_extension.hpp +1 -3
  261. package/src/duckdb/src/include/duckdb/planner/parsed_data/bound_create_table_info.hpp +0 -5
  262. package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +3 -12
  263. package/src/duckdb/src/include/duckdb/planner/tableref/bound_pivotref.hpp +2 -2
  264. package/src/duckdb/src/include/duckdb/storage/block.hpp +7 -4
  265. package/src/duckdb/src/include/duckdb/storage/checkpoint/row_group_writer.hpp +3 -2
  266. package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +6 -6
  267. package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +18 -18
  268. package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +6 -0
  269. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +1 -1
  270. package/src/duckdb/src/include/duckdb/storage/metadata/metadata_manager.hpp +4 -5
  271. package/src/duckdb/src/include/duckdb/storage/metadata/metadata_reader.hpp +2 -1
  272. package/src/duckdb/src/include/duckdb/storage/metadata/metadata_writer.hpp +2 -2
  273. package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +2 -11
  274. package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +3 -5
  275. package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +3 -11
  276. package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +2 -7
  277. package/src/duckdb/src/include/duckdb/storage/statistics/node_statistics.hpp +0 -26
  278. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +2 -7
  279. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +2 -7
  280. package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +2 -7
  281. package/src/duckdb/src/include/duckdb/storage/storage_info.hpp +4 -6
  282. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +8 -17
  283. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +1 -1
  284. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +2 -2
  285. package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
  286. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +2 -7
  287. package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +2 -2
  288. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +4 -7
  289. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +27 -29
  290. package/src/duckdb/src/include/duckdb/verification/statement_verifier.hpp +0 -2
  291. package/src/duckdb/src/main/client_context.cpp +0 -6
  292. package/src/duckdb/src/main/client_verify.cpp +0 -2
  293. package/src/duckdb/src/main/extension/extension_helper.cpp +18 -0
  294. package/src/duckdb/src/main/extension/extension_install.cpp +5 -3
  295. package/src/duckdb/src/main/extension/extension_load.cpp +3 -3
  296. package/src/duckdb/src/parser/column_definition.cpp +0 -25
  297. package/src/duckdb/src/parser/column_list.cpp +0 -13
  298. package/src/duckdb/src/parser/constraint.cpp +0 -33
  299. package/src/duckdb/src/parser/constraints/check_constraint.cpp +0 -11
  300. package/src/duckdb/src/parser/constraints/foreign_key_constraint.cpp +0 -27
  301. package/src/duckdb/src/parser/constraints/not_null_constraint.cpp +0 -11
  302. package/src/duckdb/src/parser/constraints/unique_constraint.cpp +0 -24
  303. package/src/duckdb/src/parser/expression/between_expression.cpp +2 -16
  304. package/src/duckdb/src/parser/expression/case_expression.cpp +2 -29
  305. package/src/duckdb/src/parser/expression/cast_expression.cpp +2 -16
  306. package/src/duckdb/src/parser/expression/collate_expression.cpp +2 -14
  307. package/src/duckdb/src/parser/expression/columnref_expression.cpp +2 -13
  308. package/src/duckdb/src/parser/expression/comparison_expression.cpp +2 -14
  309. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +2 -13
  310. package/src/duckdb/src/parser/expression/constant_expression.cpp +2 -12
  311. package/src/duckdb/src/parser/expression/default_expression.cpp +2 -9
  312. package/src/duckdb/src/parser/expression/function_expression.cpp +2 -32
  313. package/src/duckdb/src/parser/expression/lambda_expression.cpp +2 -14
  314. package/src/duckdb/src/parser/expression/operator_expression.cpp +2 -13
  315. package/src/duckdb/src/parser/expression/parameter_expression.cpp +2 -13
  316. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +2 -12
  317. package/src/duckdb/src/parser/expression/star_expression.cpp +2 -43
  318. package/src/duckdb/src/parser/expression/subquery_expression.cpp +2 -28
  319. package/src/duckdb/src/parser/expression/window_expression.cpp +2 -53
  320. package/src/duckdb/src/parser/parsed_data/alter_info.cpp +0 -35
  321. package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +0 -18
  322. package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +0 -13
  323. package/src/duckdb/src/parser/parsed_data/alter_table_info.cpp +1 -189
  324. package/src/duckdb/src/parser/parsed_data/attach_info.cpp +0 -29
  325. package/src/duckdb/src/parser/parsed_data/create_collation_info.cpp +0 -4
  326. package/src/duckdb/src/parser/parsed_data/create_copy_function_info.cpp +0 -4
  327. package/src/duckdb/src/parser/parsed_data/create_index_info.cpp +0 -48
  328. package/src/duckdb/src/parser/parsed_data/create_info.cpp +0 -47
  329. package/src/duckdb/src/parser/parsed_data/create_macro_info.cpp +1 -28
  330. package/src/duckdb/src/parser/parsed_data/create_sequence_info.cpp +0 -31
  331. package/src/duckdb/src/parser/parsed_data/create_table_info.cpp +0 -23
  332. package/src/duckdb/src/parser/parsed_data/create_type_info.cpp +0 -22
  333. package/src/duckdb/src/parser/parsed_data/create_view_info.cpp +0 -23
  334. package/src/duckdb/src/parser/parsed_data/detach_info.cpp +0 -19
  335. package/src/duckdb/src/parser/parsed_data/drop_info.cpp +0 -26
  336. package/src/duckdb/src/parser/parsed_data/sample_options.cpp +2 -25
  337. package/src/duckdb/src/parser/parsed_data/transaction_info.cpp +0 -16
  338. package/src/duckdb/src/parser/parsed_data/vacuum_info.cpp +0 -20
  339. package/src/duckdb/src/parser/parsed_expression.cpp +2 -79
  340. package/src/duckdb/src/parser/query_node/cte_node.cpp +2 -19
  341. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +2 -21
  342. package/src/duckdb/src/parser/query_node/select_node.cpp +2 -47
  343. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +2 -17
  344. package/src/duckdb/src/parser/query_node.cpp +2 -62
  345. package/src/duckdb/src/parser/result_modifier.cpp +2 -96
  346. package/src/duckdb/src/parser/statement/select_statement.cpp +2 -13
  347. package/src/duckdb/src/parser/tableref/basetableref.cpp +2 -21
  348. package/src/duckdb/src/parser/tableref/emptytableref.cpp +0 -9
  349. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +2 -28
  350. package/src/duckdb/src/parser/tableref/joinref.cpp +2 -23
  351. package/src/duckdb/src/parser/tableref/pivotref.cpp +0 -61
  352. package/src/duckdb/src/parser/tableref/subqueryref.cpp +2 -15
  353. package/src/duckdb/src/parser/tableref/table_function.cpp +2 -17
  354. package/src/duckdb/src/parser/tableref.cpp +2 -52
  355. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +1 -4
  356. package/src/duckdb/src/planner/bound_result_modifier.cpp +0 -33
  357. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +6 -30
  358. package/src/duckdb/src/planner/expression/bound_between_expression.cpp +0 -19
  359. package/src/duckdb/src/planner/expression/bound_case_expression.cpp +0 -36
  360. package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +0 -15
  361. package/src/duckdb/src/planner/expression/bound_columnref_expression.cpp +0 -20
  362. package/src/duckdb/src/planner/expression/bound_comparison_expression.cpp +0 -13
  363. package/src/duckdb/src/planner/expression/bound_conjunction_expression.cpp +0 -13
  364. package/src/duckdb/src/planner/expression/bound_constant_expression.cpp +0 -11
  365. package/src/duckdb/src/planner/expression/bound_expression.cpp +1 -5
  366. package/src/duckdb/src/planner/expression/bound_function_expression.cpp +8 -28
  367. package/src/duckdb/src/planner/expression/bound_lambda_expression.cpp +0 -4
  368. package/src/duckdb/src/planner/expression/bound_lambdaref_expression.cpp +0 -23
  369. package/src/duckdb/src/planner/expression/bound_operator_expression.cpp +0 -16
  370. package/src/duckdb/src/planner/expression/bound_parameter_expression.cpp +0 -18
  371. package/src/duckdb/src/planner/expression/bound_reference_expression.cpp +0 -16
  372. package/src/duckdb/src/planner/expression/bound_subquery_expression.cpp +0 -4
  373. package/src/duckdb/src/planner/expression/bound_unnest_expression.cpp +0 -15
  374. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +7 -60
  375. package/src/duckdb/src/planner/expression.cpp +0 -74
  376. package/src/duckdb/src/planner/filter/conjunction_filter.cpp +0 -21
  377. package/src/duckdb/src/planner/filter/constant_filter.cpp +0 -12
  378. package/src/duckdb/src/planner/filter/null_filter.cpp +0 -14
  379. package/src/duckdb/src/planner/joinside.cpp +0 -24
  380. package/src/duckdb/src/planner/logical_operator.cpp +15 -215
  381. package/src/duckdb/src/planner/operator/logical_aggregate.cpp +0 -46
  382. package/src/duckdb/src/planner/operator/logical_any_join.cpp +0 -14
  383. package/src/duckdb/src/planner/operator/logical_column_data_get.cpp +0 -23
  384. package/src/duckdb/src/planner/operator/logical_comparison_join.cpp +0 -23
  385. package/src/duckdb/src/planner/operator/logical_copy_to_file.cpp +2 -56
  386. package/src/duckdb/src/planner/operator/logical_create.cpp +0 -12
  387. package/src/duckdb/src/planner/operator/logical_create_index.cpp +0 -25
  388. package/src/duckdb/src/planner/operator/logical_create_table.cpp +0 -10
  389. package/src/duckdb/src/planner/operator/logical_cross_product.cpp +0 -9
  390. package/src/duckdb/src/planner/operator/logical_cteref.cpp +0 -18
  391. package/src/duckdb/src/planner/operator/logical_delete.cpp +0 -22
  392. package/src/duckdb/src/planner/operator/logical_delim_get.cpp +0 -12
  393. package/src/duckdb/src/planner/operator/logical_dependent_join.cpp +0 -4
  394. package/src/duckdb/src/planner/operator/logical_distinct.cpp +0 -16
  395. package/src/duckdb/src/planner/operator/logical_dummy_scan.cpp +0 -10
  396. package/src/duckdb/src/planner/operator/logical_empty_result.cpp +0 -15
  397. package/src/duckdb/src/planner/operator/logical_expression_get.cpp +0 -24
  398. package/src/duckdb/src/planner/operator/logical_extension_operator.cpp +6 -19
  399. package/src/duckdb/src/planner/operator/logical_filter.cpp +0 -15
  400. package/src/duckdb/src/planner/operator/logical_get.cpp +12 -97
  401. package/src/duckdb/src/planner/operator/logical_insert.cpp +0 -77
  402. package/src/duckdb/src/planner/operator/logical_join.cpp +0 -17
  403. package/src/duckdb/src/planner/operator/logical_limit.cpp +0 -16
  404. package/src/duckdb/src/planner/operator/logical_limit_percent.cpp +0 -16
  405. package/src/duckdb/src/planner/operator/logical_materialized_cte.cpp +0 -13
  406. package/src/duckdb/src/planner/operator/logical_order.cpp +0 -15
  407. package/src/duckdb/src/planner/operator/logical_pivot.cpp +0 -20
  408. package/src/duckdb/src/planner/operator/logical_positional_join.cpp +0 -10
  409. package/src/duckdb/src/planner/operator/logical_pragma.cpp +0 -8
  410. package/src/duckdb/src/planner/operator/logical_prepare.cpp +0 -8
  411. package/src/duckdb/src/planner/operator/logical_projection.cpp +0 -12
  412. package/src/duckdb/src/planner/operator/logical_recursive_cte.cpp +0 -15
  413. package/src/duckdb/src/planner/operator/logical_reset.cpp +0 -12
  414. package/src/duckdb/src/planner/operator/logical_sample.cpp +0 -11
  415. package/src/duckdb/src/planner/operator/logical_set.cpp +0 -14
  416. package/src/duckdb/src/planner/operator/logical_set_operation.cpp +0 -13
  417. package/src/duckdb/src/planner/operator/logical_simple.cpp +0 -60
  418. package/src/duckdb/src/planner/operator/logical_top_n.cpp +0 -14
  419. package/src/duckdb/src/planner/operator/logical_unnest.cpp +0 -14
  420. package/src/duckdb/src/planner/operator/logical_update.cpp +0 -28
  421. package/src/duckdb/src/planner/operator/logical_window.cpp +0 -13
  422. package/src/duckdb/src/planner/planner.cpp +13 -22
  423. package/src/duckdb/src/planner/table_filter.cpp +0 -59
  424. package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +7 -17
  425. package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +7 -4
  426. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +24 -22
  427. package/src/duckdb/src/storage/checkpoint_manager.cpp +203 -180
  428. package/src/duckdb/src/storage/data_table.cpp +2 -2
  429. package/src/duckdb/src/storage/metadata/metadata_manager.cpp +11 -9
  430. package/src/duckdb/src/storage/serialization/serialize_constraint.cpp +20 -20
  431. package/src/duckdb/src/storage/serialization/serialize_create_info.cpp +46 -42
  432. package/src/duckdb/src/storage/serialization/serialize_expression.cpp +63 -63
  433. package/src/duckdb/src/storage/serialization/serialize_logical_operator.cpp +167 -165
  434. package/src/duckdb/src/storage/serialization/serialize_macro_function.cpp +12 -12
  435. package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +54 -54
  436. package/src/duckdb/src/storage/serialization/serialize_parse_info.cpp +88 -88
  437. package/src/duckdb/src/storage/serialization/serialize_parsed_expression.cpp +72 -72
  438. package/src/duckdb/src/storage/serialization/serialize_query_node.cpp +20 -20
  439. package/src/duckdb/src/storage/serialization/serialize_result_modifier.cpp +22 -22
  440. package/src/duckdb/src/storage/serialization/serialize_statement.cpp +4 -4
  441. package/src/duckdb/src/storage/serialization/serialize_storage.cpp +41 -6
  442. package/src/duckdb/src/storage/serialization/serialize_table_filter.cpp +24 -24
  443. package/src/duckdb/src/storage/serialization/serialize_tableref.cpp +32 -32
  444. package/src/duckdb/src/storage/serialization/serialize_types.cpp +29 -29
  445. package/src/duckdb/src/storage/single_file_block_manager.cpp +17 -22
  446. package/src/duckdb/src/storage/statistics/base_statistics.cpp +31 -85
  447. package/src/duckdb/src/storage/statistics/column_statistics.cpp +6 -19
  448. package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +0 -26
  449. package/src/duckdb/src/storage/statistics/list_stats.cpp +6 -22
  450. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +20 -135
  451. package/src/duckdb/src/storage/statistics/string_stats.cpp +5 -28
  452. package/src/duckdb/src/storage/statistics/struct_stats.cpp +8 -30
  453. package/src/duckdb/src/storage/storage_info.cpp +1 -1
  454. package/src/duckdb/src/storage/table/chunk_info.cpp +9 -88
  455. package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +2 -2
  456. package/src/duckdb/src/storage/table/column_data.cpp +20 -25
  457. package/src/duckdb/src/storage/table/list_column_data.cpp +16 -9
  458. package/src/duckdb/src/storage/table/row_group.cpp +16 -92
  459. package/src/duckdb/src/storage/table/row_group_collection.cpp +5 -1
  460. package/src/duckdb/src/storage/table/standard_column_data.cpp +10 -7
  461. package/src/duckdb/src/storage/table/struct_column_data.cpp +17 -11
  462. package/src/duckdb/src/storage/table/table_statistics.cpp +13 -22
  463. package/src/duckdb/src/storage/wal_replay.cpp +108 -106
  464. package/src/duckdb/src/storage/write_ahead_log.cpp +135 -64
  465. package/src/duckdb/src/transaction/commit_state.cpp +22 -8
  466. package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +11 -6
  467. package/src/duckdb/src/verification/statement_verifier.cpp +0 -5
  468. package/src/duckdb/third_party/parquet/parquet_types.h +1 -1
  469. package/src/duckdb/ub_src_common.cpp +0 -4
  470. package/src/duckdb/ub_src_common_serializer.cpp +2 -4
  471. package/src/duckdb/ub_src_planner.cpp +0 -2
  472. package/src/duckdb/ub_src_planner_expression.cpp +0 -2
  473. package/src/duckdb/ub_src_planner_operator.cpp +0 -8
  474. package/src/duckdb_node.cpp +6 -12
  475. package/src/duckdb_node.hpp +23 -13
  476. package/src/statement.cpp +15 -16
  477. package/test/database_fail.test.ts +20 -0
  478. package/test/worker.js +7 -0
  479. package/src/duckdb/src/common/field_writer.cpp +0 -97
  480. package/src/duckdb/src/common/serializer/buffered_deserializer.cpp +0 -27
  481. package/src/duckdb/src/common/serializer/buffered_serializer.cpp +0 -36
  482. package/src/duckdb/src/common/serializer.cpp +0 -24
  483. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +0 -379
  484. package/src/duckdb/src/include/duckdb/common/serializer/buffered_deserializer.hpp +0 -41
  485. package/src/duckdb/src/include/duckdb/common/serializer/buffered_serializer.hpp +0 -50
  486. package/src/duckdb/src/include/duckdb/common/serializer.hpp +0 -151
  487. package/src/duckdb/src/include/duckdb/planner/plan_serialization.hpp +0 -44
  488. package/src/duckdb/src/include/duckdb/verification/deserialized_statement_verifier_v2.hpp +0 -32
  489. package/src/duckdb/src/planner/expression/bound_default_expression.cpp +0 -16
  490. package/src/duckdb/src/planner/operator/logical_execute.cpp +0 -12
  491. package/src/duckdb/src/planner/operator/logical_explain.cpp +0 -22
  492. package/src/duckdb/src/planner/operator/logical_export.cpp +0 -13
  493. package/src/duckdb/src/planner/operator/logical_show.cpp +0 -21
  494. package/src/duckdb/src/planner/parsed_data/bound_create_table_info.cpp +0 -22
  495. package/src/duckdb/src/planner/plan_serialization.cpp +0 -20
  496. package/src/duckdb/src/verification/deserialized_statement_verifier_v2.cpp +0 -34
  497. package/src/duckdb/ub_src_planner_parsed_data.cpp +0 -2
@@ -8,18 +8,13 @@
8
8
  #include "duckdb/catalog/catalog_entry/duck_table_entry.hpp"
9
9
  #include "duckdb/catalog/catalog_entry/type_catalog_entry.hpp"
10
10
  #include "duckdb/catalog/catalog_entry/view_catalog_entry.hpp"
11
- #include "duckdb/common/field_writer.hpp"
12
- #include "duckdb/common/serializer.hpp"
13
11
  #include "duckdb/execution/index/art/art.hpp"
14
12
  #include "duckdb/main/client_context.hpp"
15
13
  #include "duckdb/main/config.hpp"
16
14
  #include "duckdb/main/connection.hpp"
17
15
  #include "duckdb/main/database.hpp"
18
- #include "duckdb/parser/column_definition.hpp"
19
16
  #include "duckdb/parser/parsed_data/create_schema_info.hpp"
20
- #include "duckdb/parser/parsed_data/create_table_info.hpp"
21
17
  #include "duckdb/parser/parsed_data/create_view_info.hpp"
22
- #include "duckdb/parser/tableref/basetableref.hpp"
23
18
  #include "duckdb/planner/binder.hpp"
24
19
  #include "duckdb/planner/bound_tableref.hpp"
25
20
  #include "duckdb/planner/expression_binder/index_binder.hpp"
@@ -31,6 +26,8 @@
31
26
  #include "duckdb/storage/table/column_checkpoint_state.hpp"
32
27
  #include "duckdb/transaction/transaction_manager.hpp"
33
28
  #include "duckdb/main/attached_database.hpp"
29
+ #include "duckdb/common/serializer/binary_serializer.hpp"
30
+ #include "duckdb/common/serializer/binary_deserializer.hpp"
34
31
 
35
32
  namespace duckdb {
36
33
 
@@ -54,7 +51,7 @@ MetadataManager &SingleFileCheckpointWriter::GetMetadataManager() {
54
51
  }
55
52
 
56
53
  unique_ptr<TableDataWriter> SingleFileCheckpointWriter::GetTableDataWriter(TableCatalogEntry &table) {
57
- return make_uniq<SingleFileTableDataWriter>(*this, table, *table_metadata_writer, GetMetadataWriter());
54
+ return make_uniq<SingleFileTableDataWriter>(*this, table, *table_metadata_writer);
58
55
  }
59
56
 
60
57
  void SingleFileCheckpointWriter::CreateCheckpoint() {
@@ -81,11 +78,33 @@ void SingleFileCheckpointWriter::CreateCheckpoint() {
81
78
  auto &catalog = Catalog::GetCatalog(db).Cast<DuckCatalog>();
82
79
  catalog.ScanSchemas([&](SchemaCatalogEntry &entry) { schemas.push_back(entry); });
83
80
  // write the actual data into the database
84
- // write the amount of schemas
85
- metadata_writer->Write<uint32_t>(schemas.size());
86
- for (auto &schema : schemas) {
87
- WriteSchema(schema.get());
88
- }
81
+
82
+ // Create a serializer to write the checkpoint data
83
+ // The serialized format is roughly:
84
+ /*
85
+ {
86
+ schemas: [
87
+ {
88
+ schema: <schema_info>,
89
+ custom_types: [ { type: <type_info> }, ... ],
90
+ sequences: [ { sequence: <sequence_info> }, ... ],
91
+ tables: [ { table: <table_info> }, ... ],
92
+ views: [ { view: <view_info> }, ... ],
93
+ macros: [ { macro: <macro_info> }, ... ],
94
+ table_macros: [ { table_macro: <table_macro_info> }, ... ],
95
+ indexes: [ { index: <index_info>, root_offset <block_ptr> }, ... ]
96
+ }
97
+ ]
98
+ }
99
+ */
100
+ BinarySerializer serializer(*metadata_writer);
101
+ serializer.Begin();
102
+ serializer.WriteList(100, "schemas", schemas.size(), [&](Serializer::List &list, idx_t i) {
103
+ auto &schema = schemas[i];
104
+ list.WriteObject([&](Serializer &obj) { WriteSchema(schema.get(), obj); });
105
+ });
106
+ serializer.End();
107
+
89
108
  partial_block_manager.FlushPartialBlocks();
90
109
  metadata_writer->Flush();
91
110
  table_metadata_writer->Flush();
@@ -121,6 +140,15 @@ void SingleFileCheckpointWriter::CreateCheckpoint() {
121
140
  metadata_manager.MarkBlocksAsModified();
122
141
  }
123
142
 
143
+ void CheckpointReader::LoadCheckpoint(ClientContext &context, MetadataReader &reader) {
144
+ BinaryDeserializer deserializer(reader);
145
+ deserializer.Begin();
146
+ deserializer.ReadList(100, "schemas", [&](Deserializer::List &list, idx_t i) {
147
+ return list.ReadObject([&](Deserializer &obj) { ReadSchema(context, obj); });
148
+ });
149
+ deserializer.End();
150
+ }
151
+
124
152
  MetadataManager &SingleFileCheckpointReader::GetMetadataManager() {
125
153
  return storage.block_manager->GetMetadataManager();
126
154
  }
@@ -143,20 +171,42 @@ void SingleFileCheckpointReader::LoadFromStorage() {
143
171
  con.Commit();
144
172
  }
145
173
 
146
- void CheckpointReader::LoadCheckpoint(ClientContext &context, MetadataReader &reader) {
147
- uint32_t schema_count = reader.Read<uint32_t>();
148
- for (uint32_t i = 0; i < schema_count; i++) {
149
- ReadSchema(context, reader);
150
- }
151
- }
152
-
153
174
  //===--------------------------------------------------------------------===//
154
175
  // Schema
155
176
  //===--------------------------------------------------------------------===//
156
- void CheckpointWriter::WriteSchema(SchemaCatalogEntry &schema) {
177
+ void CheckpointWriter::WriteSchema(SchemaCatalogEntry &schema, Serializer &serializer) {
157
178
  // write the schema data
158
- schema.Serialize(GetMetadataWriter());
159
- // then, we fetch the tables/views/sequences information
179
+ serializer.WriteProperty(100, "schema", &schema);
180
+
181
+ // Write the custom types
182
+ vector<reference<TypeCatalogEntry>> custom_types;
183
+ schema.Scan(CatalogType::TYPE_ENTRY, [&](CatalogEntry &entry) {
184
+ if (entry.internal) {
185
+ return;
186
+ }
187
+ custom_types.push_back(entry.Cast<TypeCatalogEntry>());
188
+ });
189
+
190
+ serializer.WriteList(101, "custom_types", custom_types.size(), [&](Serializer::List &list, idx_t i) {
191
+ auto &entry = custom_types[i];
192
+ list.WriteObject([&](Serializer &obj) { WriteType(entry, obj); });
193
+ });
194
+
195
+ // Write the sequences
196
+ vector<reference<SequenceCatalogEntry>> sequences;
197
+ schema.Scan(CatalogType::SEQUENCE_ENTRY, [&](CatalogEntry &entry) {
198
+ if (entry.internal) {
199
+ return;
200
+ }
201
+ sequences.push_back(entry.Cast<SequenceCatalogEntry>());
202
+ });
203
+
204
+ serializer.WriteList(102, "sequences", sequences.size(), [&](Serializer::List &list, idx_t i) {
205
+ auto &entry = sequences[i];
206
+ list.WriteObject([&](Serializer &obj) { WriteSequence(entry, obj); });
207
+ });
208
+
209
+ // Read the tables and views
160
210
  catalog_entry_vector_t tables;
161
211
  vector<reference<ViewCatalogEntry>> views;
162
212
  schema.Scan(CatalogType::TABLE_ENTRY, [&](CatalogEntry &entry) {
@@ -171,22 +221,22 @@ void CheckpointWriter::WriteSchema(SchemaCatalogEntry &schema) {
171
221
  throw NotImplementedException("Catalog type for entries");
172
222
  }
173
223
  });
174
- vector<reference<SequenceCatalogEntry>> sequences;
175
- schema.Scan(CatalogType::SEQUENCE_ENTRY, [&](CatalogEntry &entry) {
176
- if (entry.internal) {
177
- return;
178
- }
179
- sequences.push_back(entry.Cast<SequenceCatalogEntry>());
224
+ // Reorder tables because of foreign key constraint
225
+ ReorderTableEntries(tables);
226
+ // Tables
227
+ serializer.WriteList(103, "tables", tables.size(), [&](Serializer::List &list, idx_t i) {
228
+ auto &entry = tables[i];
229
+ auto &table = entry.get().Cast<TableCatalogEntry>();
230
+ list.WriteObject([&](Serializer &obj) { WriteTable(table, obj); });
180
231
  });
181
232
 
182
- vector<reference<TypeCatalogEntry>> custom_types;
183
- schema.Scan(CatalogType::TYPE_ENTRY, [&](CatalogEntry &entry) {
184
- if (entry.internal) {
185
- return;
186
- }
187
- custom_types.push_back(entry.Cast<TypeCatalogEntry>());
233
+ // Views
234
+ serializer.WriteList(104, "views", views.size(), [&](Serializer::List &list, idx_t i) {
235
+ auto &entry = views[i];
236
+ list.WriteObject([&](Serializer &obj) { WriteView(entry.get(), obj); });
188
237
  });
189
238
 
239
+ // Scalar macros
190
240
  vector<reference<ScalarMacroCatalogEntry>> macros;
191
241
  schema.Scan(CatalogType::SCALAR_FUNCTION_ENTRY, [&](CatalogEntry &entry) {
192
242
  if (entry.internal) {
@@ -196,7 +246,12 @@ void CheckpointWriter::WriteSchema(SchemaCatalogEntry &schema) {
196
246
  macros.push_back(entry.Cast<ScalarMacroCatalogEntry>());
197
247
  }
198
248
  });
249
+ serializer.WriteList(105, "macros", macros.size(), [&](Serializer::List &list, idx_t i) {
250
+ auto &entry = macros[i];
251
+ list.WriteObject([&](Serializer &obj) { WriteMacro(entry.get(), obj); });
252
+ });
199
253
 
254
+ // Table macros
200
255
  vector<reference<TableMacroCatalogEntry>> table_macros;
201
256
  schema.Scan(CatalogType::TABLE_FUNCTION_ENTRY, [&](CatalogEntry &entry) {
202
257
  if (entry.internal) {
@@ -206,159 +261,122 @@ void CheckpointWriter::WriteSchema(SchemaCatalogEntry &schema) {
206
261
  table_macros.push_back(entry.Cast<TableMacroCatalogEntry>());
207
262
  }
208
263
  });
264
+ serializer.WriteList(106, "table_macros", table_macros.size(), [&](Serializer::List &list, idx_t i) {
265
+ auto &entry = table_macros[i];
266
+ list.WriteObject([&](Serializer &obj) { WriteTableMacro(entry.get(), obj); });
267
+ });
209
268
 
269
+ // Indexes
210
270
  vector<reference<IndexCatalogEntry>> indexes;
211
271
  schema.Scan(CatalogType::INDEX_ENTRY, [&](CatalogEntry &entry) {
212
272
  D_ASSERT(!entry.internal);
213
273
  indexes.push_back(entry.Cast<IndexCatalogEntry>());
214
274
  });
215
275
 
216
- FieldWriter writer(GetMetadataWriter());
217
- writer.WriteField<uint32_t>(custom_types.size());
218
- writer.WriteField<uint32_t>(sequences.size());
219
- writer.WriteField<uint32_t>(tables.size());
220
- writer.WriteField<uint32_t>(views.size());
221
- writer.WriteField<uint32_t>(macros.size());
222
- writer.WriteField<uint32_t>(table_macros.size());
223
- writer.WriteField<uint32_t>(indexes.size());
224
- writer.Finalize();
225
-
226
- // write the custom_types
227
- for (auto &custom_type : custom_types) {
228
- WriteType(custom_type);
229
- }
276
+ serializer.WriteList(107, "indexes", indexes.size(), [&](Serializer::List &list, idx_t i) {
277
+ auto &entry = indexes[i];
278
+ list.WriteObject([&](Serializer &obj) { WriteIndex(entry.get(), obj); });
279
+ });
280
+ }
230
281
 
231
- // write the sequences
232
- for (auto &seq : sequences) {
233
- WriteSequence(seq);
234
- }
235
- // reorder tables because of foreign key constraint
236
- ReorderTableEntries(tables);
237
- // Write the tables
238
- for (auto &entry : tables) {
239
- auto &table = entry.get().Cast<TableCatalogEntry>();
240
- WriteTable(table);
241
- }
242
- // Write the views
243
- for (auto &view : views) {
244
- WriteView(view);
245
- }
282
+ void CheckpointReader::ReadSchema(ClientContext &context, Deserializer &deserializer) {
283
+ // Read the schema and create it in the catalog
284
+ auto info = deserializer.ReadProperty<unique_ptr<CreateInfo>>(100, "schema");
285
+ auto &schema_info = info->Cast<CreateSchemaInfo>();
246
286
 
247
- // Write the macros
248
- for (auto &macro : macros) {
249
- WriteMacro(macro);
250
- }
287
+ // we set create conflict to IGNORE_ON_CONFLICT, so that we can ignore a failure when recreating the main schema
288
+ schema_info.on_conflict = OnCreateConflict::IGNORE_ON_CONFLICT;
289
+ catalog.CreateSchema(context, schema_info);
251
290
 
252
- // Write the table's macros
253
- for (auto &macro : table_macros) {
254
- WriteTableMacro(macro);
255
- }
256
- // Write the indexes
257
- for (auto &index : indexes) {
258
- WriteIndex(index);
259
- }
260
- }
291
+ // Read the custom types
292
+ deserializer.ReadList(101, "custom_types", [&](Deserializer::List &list, idx_t i) {
293
+ return list.ReadObject([&](Deserializer &obj) { ReadType(context, obj); });
294
+ });
261
295
 
262
- void CheckpointReader::ReadSchema(ClientContext &context, MetadataReader &reader) {
263
- // read the schema and create it in the catalog
264
- auto info = CatalogEntry::Deserialize(reader);
296
+ // Read the sequences
297
+ deserializer.ReadList(102, "sequences", [&](Deserializer::List &list, idx_t i) {
298
+ return list.ReadObject([&](Deserializer &obj) { ReadSequence(context, obj); });
299
+ });
265
300
 
266
- // we set create conflict to IGNORE_ON_CONFLICT, so that we can ignore a failure when recreating the main schema
267
- info->on_conflict = OnCreateConflict::IGNORE_ON_CONFLICT;
268
- catalog.CreateSchema(context, info->Cast<CreateSchemaInfo>());
269
-
270
- // first read all the counts
271
- FieldReader field_reader(reader);
272
- uint32_t enum_count = field_reader.ReadRequired<uint32_t>();
273
- uint32_t seq_count = field_reader.ReadRequired<uint32_t>();
274
- uint32_t table_count = field_reader.ReadRequired<uint32_t>();
275
- uint32_t view_count = field_reader.ReadRequired<uint32_t>();
276
- uint32_t macro_count = field_reader.ReadRequired<uint32_t>();
277
- uint32_t table_macro_count = field_reader.ReadRequired<uint32_t>();
278
- uint32_t table_index_count = field_reader.ReadRequired<uint32_t>();
279
- field_reader.Finalize();
280
-
281
- // now read the enums
282
- for (uint32_t i = 0; i < enum_count; i++) {
283
- ReadType(context, reader);
284
- }
301
+ // Read the tables
302
+ deserializer.ReadList(103, "tables", [&](Deserializer::List &list, idx_t i) {
303
+ return list.ReadObject([&](Deserializer &obj) { ReadTable(context, obj); });
304
+ });
285
305
 
286
- // read the sequences
287
- for (uint32_t i = 0; i < seq_count; i++) {
288
- ReadSequence(context, reader);
289
- }
290
- // read the table count and recreate the tables
291
- for (uint32_t i = 0; i < table_count; i++) {
292
- ReadTable(context, reader);
293
- }
294
- // now read the views
295
- for (uint32_t i = 0; i < view_count; i++) {
296
- ReadView(context, reader);
297
- }
306
+ // Read the views
307
+ deserializer.ReadList(104, "views", [&](Deserializer::List &list, idx_t i) {
308
+ return list.ReadObject([&](Deserializer &obj) { ReadView(context, obj); });
309
+ });
298
310
 
299
- // finally read the macro's
300
- for (uint32_t i = 0; i < macro_count; i++) {
301
- ReadMacro(context, reader);
302
- }
311
+ // Read the macros
312
+ deserializer.ReadList(105, "macros", [&](Deserializer::List &list, idx_t i) {
313
+ return list.ReadObject([&](Deserializer &obj) { ReadMacro(context, obj); });
314
+ });
303
315
 
304
- for (uint32_t i = 0; i < table_macro_count; i++) {
305
- ReadTableMacro(context, reader);
306
- }
307
- for (uint32_t i = 0; i < table_index_count; i++) {
308
- ReadIndex(context, reader);
309
- }
316
+ // Read the table macros
317
+ deserializer.ReadList(106, "table_macros", [&](Deserializer::List &list, idx_t i) {
318
+ return list.ReadObject([&](Deserializer &obj) { ReadTableMacro(context, obj); });
319
+ });
320
+
321
+ // Read the indexes
322
+ deserializer.ReadList(107, "indexes", [&](Deserializer::List &list, idx_t i) {
323
+ return list.ReadObject([&](Deserializer &obj) { ReadIndex(context, obj); });
324
+ });
310
325
  }
311
326
 
312
327
  //===--------------------------------------------------------------------===//
313
328
  // Views
314
329
  //===--------------------------------------------------------------------===//
315
- void CheckpointWriter::WriteView(ViewCatalogEntry &view) {
316
- view.Serialize(GetMetadataWriter());
330
+ void CheckpointWriter::WriteView(ViewCatalogEntry &view, Serializer &serializer) {
331
+ serializer.WriteProperty(100, "view", &view);
317
332
  }
318
333
 
319
- void CheckpointReader::ReadView(ClientContext &context, MetadataReader &reader) {
320
- auto info = CatalogEntry::Deserialize(reader);
321
- catalog.CreateView(context, info->Cast<CreateViewInfo>());
334
+ void CheckpointReader::ReadView(ClientContext &context, Deserializer &deserializer) {
335
+ auto info = deserializer.ReadProperty<unique_ptr<CreateInfo>>(100, "view");
336
+ auto &view_info = info->Cast<CreateViewInfo>();
337
+ catalog.CreateView(context, view_info);
322
338
  }
323
339
 
324
340
  //===--------------------------------------------------------------------===//
325
341
  // Sequences
326
342
  //===--------------------------------------------------------------------===//
327
- void CheckpointWriter::WriteSequence(SequenceCatalogEntry &seq) {
328
- seq.Serialize(GetMetadataWriter());
343
+ void CheckpointWriter::WriteSequence(SequenceCatalogEntry &seq, Serializer &serializer) {
344
+ serializer.WriteProperty(100, "sequence", &seq);
329
345
  }
330
346
 
331
- void CheckpointReader::ReadSequence(ClientContext &context, MetadataReader &reader) {
332
- auto info = SequenceCatalogEntry::Deserialize(reader);
333
- catalog.CreateSequence(context, info->Cast<CreateSequenceInfo>());
347
+ void CheckpointReader::ReadSequence(ClientContext &context, Deserializer &deserializer) {
348
+ auto info = deserializer.ReadProperty<unique_ptr<CreateInfo>>(100, "sequence");
349
+ auto &sequence_info = info->Cast<CreateSequenceInfo>();
350
+ catalog.CreateSequence(context, sequence_info);
334
351
  }
335
352
 
336
353
  //===--------------------------------------------------------------------===//
337
354
  // Indexes
338
355
  //===--------------------------------------------------------------------===//
339
- void CheckpointWriter::WriteIndex(IndexCatalogEntry &index_catalog) {
340
- // we write the index data in WriteTableData
341
- // here, we only write the root pointer
342
- const auto root_block_pointer = index_catalog.index->GetRootBlockPointer();
343
- auto &metadata_writer = GetMetadataWriter();
344
- index_catalog.Serialize(metadata_writer);
345
- metadata_writer.Write(root_block_pointer);
356
+ void CheckpointWriter::WriteIndex(IndexCatalogEntry &index_catalog, Serializer &serializer) {
357
+ // The index data is written as part of WriteTableData.
358
+ // Here, we need only serialize the pointer to that data.
359
+ auto root_block_pointer = index_catalog.index->GetRootBlockPointer();
360
+ serializer.WriteProperty(100, "index", &index_catalog);
361
+ serializer.WriteProperty(101, "root_block_pointer", root_block_pointer);
346
362
  }
347
363
 
348
- void CheckpointReader::ReadIndex(ClientContext &context, MetadataReader &reader) {
349
- // deserialize the index metadata
350
- auto info = IndexCatalogEntry::Deserialize(reader);
364
+ void CheckpointReader::ReadIndex(ClientContext &context, Deserializer &deserializer) {
365
+
366
+ // Deserialize the index metadata
367
+ auto info = deserializer.ReadProperty<unique_ptr<CreateInfo>>(100, "index");
351
368
  auto &index_info = info->Cast<CreateIndexInfo>();
352
369
 
353
- // create the index in the catalog
370
+ // Create the index in the catalog
354
371
  auto &schema_catalog = catalog.GetSchema(context, info->schema);
355
372
  auto &table_catalog =
356
373
  catalog.GetEntry(context, CatalogType::TABLE_ENTRY, info->schema, index_info.table).Cast<DuckTableEntry>();
357
374
  auto &index_catalog = schema_catalog.CreateIndex(context, index_info, table_catalog)->Cast<DuckIndexEntry>();
358
375
  index_catalog.info = table_catalog.GetStorage().info;
359
376
 
360
- // we deserialize the index lazily, i.e., we only load the root block pointer
361
- const auto index_block_pointer = reader.Read<BlockPointer>();
377
+ // We deserialize the index lazily, i.e., we do not need to load any node information
378
+ // except the root block pointer
379
+ auto index_block_pointer = deserializer.ReadProperty<BlockPointer>(101, "root_block_pointer");
362
380
 
363
381
  // obtain the expressions of the ART from the index metadata
364
382
  vector<unique_ptr<Expression>> unbound_expressions;
@@ -400,10 +418,10 @@ void CheckpointReader::ReadIndex(ClientContext &context, MetadataReader &reader)
400
418
  auto &storage = table_catalog.GetStorage();
401
419
  auto art = make_uniq<ART>(index_info.column_ids, TableIOManager::Get(storage), std::move(unbound_expressions),
402
420
  index_info.constraint_type, storage.db, nullptr, index_block_pointer);
421
+
403
422
  index_catalog.index = art.get();
404
423
  storage.info->indexes.AddIndex(std::move(art));
405
- break;
406
- }
424
+ } break;
407
425
  default:
408
426
  throw InternalException("Unknown index type for ReadIndex");
409
427
  }
@@ -412,79 +430,84 @@ void CheckpointReader::ReadIndex(ClientContext &context, MetadataReader &reader)
412
430
  //===--------------------------------------------------------------------===//
413
431
  // Custom Types
414
432
  //===--------------------------------------------------------------------===//
415
- void CheckpointWriter::WriteType(TypeCatalogEntry &type) {
416
- type.Serialize(GetMetadataWriter());
433
+ void CheckpointWriter::WriteType(TypeCatalogEntry &type, Serializer &serializer) {
434
+ serializer.WriteProperty(100, "type", &type);
417
435
  }
418
436
 
419
- void CheckpointReader::ReadType(ClientContext &context, MetadataReader &reader) {
420
- auto info = TypeCatalogEntry::Deserialize(reader);
421
- catalog.CreateType(context, info->Cast<CreateTypeInfo>());
437
+ void CheckpointReader::ReadType(ClientContext &context, Deserializer &deserializer) {
438
+ auto info = deserializer.ReadProperty<unique_ptr<CreateInfo>>(100, "type");
439
+ auto &type_info = info->Cast<CreateTypeInfo>();
440
+ catalog.CreateType(context, type_info);
422
441
  }
423
442
 
424
443
  //===--------------------------------------------------------------------===//
425
444
  // Macro's
426
445
  //===--------------------------------------------------------------------===//
427
- void CheckpointWriter::WriteMacro(ScalarMacroCatalogEntry &macro) {
428
- macro.Serialize(GetMetadataWriter());
446
+ void CheckpointWriter::WriteMacro(ScalarMacroCatalogEntry &macro, Serializer &serializer) {
447
+ serializer.WriteProperty(100, "macro", &macro);
429
448
  }
430
449
 
431
- void CheckpointReader::ReadMacro(ClientContext &context, MetadataReader &reader) {
432
- auto info = MacroCatalogEntry::Deserialize(reader);
433
- catalog.CreateFunction(context, info->Cast<CreateMacroInfo>());
450
+ void CheckpointReader::ReadMacro(ClientContext &context, Deserializer &deserializer) {
451
+ auto info = deserializer.ReadProperty<unique_ptr<CreateInfo>>(100, "macro");
452
+ auto &macro_info = info->Cast<CreateMacroInfo>();
453
+ catalog.CreateFunction(context, macro_info);
434
454
  }
435
455
 
436
- void CheckpointWriter::WriteTableMacro(TableMacroCatalogEntry &macro) {
437
- macro.Serialize(GetMetadataWriter());
456
+ void CheckpointWriter::WriteTableMacro(TableMacroCatalogEntry &macro, Serializer &serializer) {
457
+ serializer.WriteProperty(100, "table_macro", &macro);
438
458
  }
439
459
 
440
- void CheckpointReader::ReadTableMacro(ClientContext &context, MetadataReader &reader) {
441
- auto info = MacroCatalogEntry::Deserialize(reader);
442
- catalog.CreateFunction(context, info->Cast<CreateMacroInfo>());
460
+ void CheckpointReader::ReadTableMacro(ClientContext &context, Deserializer &deserializer) {
461
+ auto info = deserializer.ReadProperty<unique_ptr<CreateInfo>>(100, "table_macro");
462
+ auto &macro_info = info->Cast<CreateMacroInfo>();
463
+ catalog.CreateFunction(context, macro_info);
443
464
  }
444
465
 
445
466
  //===--------------------------------------------------------------------===//
446
467
  // Table Metadata
447
468
  //===--------------------------------------------------------------------===//
448
- void CheckpointWriter::WriteTable(TableCatalogEntry &table) {
449
- // write the table metadata
450
- table.Serialize(GetMetadataWriter());
451
- // now we need to write the table data.
469
+ void CheckpointWriter::WriteTable(TableCatalogEntry &table, Serializer &serializer) {
470
+ // Write the table meta data
471
+ serializer.WriteProperty(100, "table", &table);
472
+
473
+ // Write the table data
452
474
  if (auto writer = GetTableDataWriter(table)) {
453
- writer->WriteTableData();
475
+ writer->WriteTableData(serializer);
454
476
  }
455
477
  }
456
478
 
457
- void CheckpointReader::ReadTable(ClientContext &context, MetadataReader &reader) {
479
+ void CheckpointReader::ReadTable(ClientContext &context, Deserializer &deserializer) {
458
480
  // deserialize the table meta data
459
- auto info = TableCatalogEntry::Deserialize(reader);
460
- // bind the info
481
+ auto info = deserializer.ReadProperty<unique_ptr<CreateInfo>>(100, "table");
461
482
  auto binder = Binder::CreateBinder(context);
462
483
  auto &schema = catalog.GetSchema(context, info->schema);
463
484
  auto bound_info = binder->BindCreateTableInfo(std::move(info), schema);
464
485
 
465
486
  // now read the actual table data and place it into the create table info
466
- ReadTableData(context, reader, *bound_info);
487
+ ReadTableData(context, deserializer, *bound_info);
467
488
 
468
489
  // finally create the table in the catalog
469
490
  catalog.CreateTable(context, *bound_info);
470
491
  }
471
492
 
472
- void CheckpointReader::ReadTableData(ClientContext &context, MetadataReader &reader, BoundCreateTableInfo &bound_info) {
473
- auto block_pointer = reader.Read<idx_t>();
474
- auto offset = reader.Read<uint64_t>();
493
+ void CheckpointReader::ReadTableData(ClientContext &context, Deserializer &deserializer,
494
+ BoundCreateTableInfo &bound_info) {
475
495
 
476
- MetadataReader table_data_reader(reader.GetMetadataManager(), MetaBlockPointer(block_pointer, offset));
477
- TableDataReader data_reader(table_data_reader, bound_info);
496
+ // This is written in "SingleFileTableDataWriter::FinalizeTable"
497
+ auto table_pointer = deserializer.ReadProperty<MetaBlockPointer>(101, "table_pointer");
498
+ auto total_rows = deserializer.ReadProperty<idx_t>(102, "total_rows");
499
+ auto index_pointers = deserializer.ReadProperty<vector<BlockPointer>>(103, "index_pointers");
500
+
501
+ // FIXME: icky downcast to get the underlying MetadataReader
502
+ auto &binary_deserializer = dynamic_cast<BinaryDeserializer &>(deserializer);
503
+ auto &reader = dynamic_cast<MetadataReader &>(binary_deserializer.GetStream());
478
504
 
505
+ MetadataReader table_data_reader(reader.GetMetadataManager(), table_pointer);
506
+ TableDataReader data_reader(table_data_reader, bound_info);
479
507
  data_reader.ReadTableData();
480
- bound_info.data->total_rows = reader.Read<idx_t>();
481
508
 
482
- // get the root block pointers of each index
483
- idx_t index_count = reader.Read<idx_t>();
484
- for (idx_t i = 0; i < index_count; i++) {
485
- const auto index_pointer = reader.Read<BlockPointer>();
486
- bound_info.indexes.emplace_back(index_pointer);
487
- }
509
+ bound_info.data->total_rows = total_rows;
510
+ bound_info.indexes = index_pointers;
488
511
  }
489
512
 
490
513
  } // namespace duckdb
@@ -1282,7 +1282,7 @@ void DataTable::SetDistinct(column_t column_id, unique_ptr<DistinctStatistics> d
1282
1282
  //===--------------------------------------------------------------------===//
1283
1283
  // Checkpoint
1284
1284
  //===--------------------------------------------------------------------===//
1285
- void DataTable::Checkpoint(TableDataWriter &writer) {
1285
+ void DataTable::Checkpoint(TableDataWriter &writer, Serializer &metadata_serializer) {
1286
1286
  // checkpoint each individual row group
1287
1287
  // FIXME: we might want to combine adjacent row groups in case they have had deletions...
1288
1288
  TableStatistics global_stats;
@@ -1295,7 +1295,7 @@ void DataTable::Checkpoint(TableDataWriter &writer) {
1295
1295
  // row-group pointers
1296
1296
  // table pointer
1297
1297
  // index data
1298
- writer.FinalizeTable(std::move(global_stats), info.get());
1298
+ writer.FinalizeTable(std::move(global_stats), info.get(), metadata_serializer);
1299
1299
  }
1300
1300
 
1301
1301
  void DataTable::CommitDropColumn(idx_t index) {
@@ -1,6 +1,8 @@
1
1
  #include "duckdb/storage/metadata/metadata_manager.hpp"
2
2
  #include "duckdb/storage/buffer_manager.hpp"
3
3
  #include "duckdb/storage/buffer/block_handle.hpp"
4
+ #include "duckdb/common/serializer/write_stream.hpp"
5
+ #include "duckdb/common/serializer/read_stream.hpp"
4
6
 
5
7
  namespace duckdb {
6
8
 
@@ -170,17 +172,17 @@ void MetadataManager::Flush() {
170
172
  }
171
173
  }
172
174
 
173
- void MetadataManager::Serialize(Serializer &serializer) {
174
- serializer.Write<uint64_t>(blocks.size());
175
+ void MetadataManager::Write(WriteStream &sink) {
176
+ sink.Write<uint64_t>(blocks.size());
175
177
  for (auto &kv : blocks) {
176
- kv.second.Serialize(serializer);
178
+ kv.second.Write(sink);
177
179
  }
178
180
  }
179
181
 
180
- void MetadataManager::Deserialize(Deserializer &source) {
182
+ void MetadataManager::Read(ReadStream &source) {
181
183
  auto block_count = source.Read<uint64_t>();
182
184
  for (idx_t i = 0; i < block_count; i++) {
183
- auto block = MetadataBlock::Deserialize(source);
185
+ auto block = MetadataBlock::Read(source);
184
186
  auto entry = blocks.find(block.block_id);
185
187
  if (entry == blocks.end()) {
186
188
  // block does not exist yet
@@ -192,12 +194,12 @@ void MetadataManager::Deserialize(Deserializer &source) {
192
194
  }
193
195
  }
194
196
 
195
- void MetadataBlock::Serialize(Serializer &serializer) {
196
- serializer.Write<block_id_t>(block_id);
197
- serializer.Write<idx_t>(FreeBlocksToInteger());
197
+ void MetadataBlock::Write(WriteStream &sink) {
198
+ sink.Write<block_id_t>(block_id);
199
+ sink.Write<idx_t>(FreeBlocksToInteger());
198
200
  }
199
201
 
200
- MetadataBlock MetadataBlock::Deserialize(Deserializer &source) {
202
+ MetadataBlock MetadataBlock::Read(ReadStream &source) {
201
203
  MetadataBlock result;
202
204
  result.block_id = source.Read<block_id_t>();
203
205
  auto free_list = source.Read<idx_t>();