duckdb 0.8.2-dev3458.0 → 0.8.2-dev3949.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 (180) hide show
  1. package/binding.gyp +2 -0
  2. package/package.json +1 -1
  3. package/src/duckdb/extension/icu/icu_extension.cpp +5 -5
  4. package/src/duckdb/extension/json/include/json_deserializer.hpp +7 -16
  5. package/src/duckdb/extension/json/include/json_serializer.hpp +9 -15
  6. package/src/duckdb/extension/json/json_deserializer.cpp +29 -67
  7. package/src/duckdb/extension/json/json_scan.cpp +1 -1
  8. package/src/duckdb/extension/json/json_serializer.cpp +26 -69
  9. package/src/duckdb/src/common/enum_util.cpp +119 -7
  10. package/src/duckdb/src/common/extra_type_info.cpp +7 -3
  11. package/src/duckdb/src/common/radix_partitioning.cpp +8 -31
  12. package/src/duckdb/src/common/row_operations/row_aggregate.cpp +18 -3
  13. package/src/duckdb/src/common/serializer/binary_deserializer.cpp +62 -77
  14. package/src/duckdb/src/common/serializer/binary_serializer.cpp +84 -84
  15. package/src/duckdb/src/common/serializer/format_serializer.cpp +1 -1
  16. package/src/duckdb/src/common/sort/partition_state.cpp +41 -33
  17. package/src/duckdb/src/common/types/data_chunk.cpp +44 -8
  18. package/src/duckdb/src/common/types/hyperloglog.cpp +21 -0
  19. package/src/duckdb/src/common/types/interval.cpp +3 -0
  20. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +252 -126
  21. package/src/duckdb/src/common/types/row/row_layout.cpp +3 -31
  22. package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +40 -32
  23. package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +39 -26
  24. package/src/duckdb/src/common/types/row/tuple_data_layout.cpp +11 -1
  25. package/src/duckdb/src/common/types/row/tuple_data_segment.cpp +21 -16
  26. package/src/duckdb/src/common/types/value.cpp +63 -42
  27. package/src/duckdb/src/common/types/vector.cpp +33 -67
  28. package/src/duckdb/src/core_functions/scalar/list/list_lambdas.cpp +3 -2
  29. package/src/duckdb/src/execution/aggregate_hashtable.cpp +222 -364
  30. package/src/duckdb/src/execution/join_hashtable.cpp +5 -6
  31. package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +240 -310
  32. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +202 -173
  33. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +36 -2
  34. package/src/duckdb/src/execution/operator/{persistent → csv_scanner}/base_csv_reader.cpp +58 -162
  35. package/src/duckdb/src/execution/operator/csv_scanner/buffered_csv_reader.cpp +434 -0
  36. package/src/duckdb/src/execution/operator/csv_scanner/csv_buffer.cpp +80 -0
  37. package/src/duckdb/src/execution/operator/csv_scanner/csv_buffer_manager.cpp +90 -0
  38. package/src/duckdb/src/execution/operator/csv_scanner/csv_file_handle.cpp +95 -0
  39. package/src/duckdb/src/execution/operator/{persistent → csv_scanner}/csv_reader_options.cpp +47 -28
  40. package/src/duckdb/src/execution/operator/csv_scanner/csv_state_machine.cpp +35 -0
  41. package/src/duckdb/src/execution/operator/csv_scanner/csv_state_machine_cache.cpp +107 -0
  42. package/src/duckdb/src/execution/operator/{persistent → csv_scanner}/parallel_csv_reader.cpp +44 -44
  43. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp +52 -0
  44. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp +336 -0
  45. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/header_detection.cpp +165 -0
  46. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_detection.cpp +398 -0
  47. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_refinement.cpp +175 -0
  48. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_replacement.cpp +39 -0
  49. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +1 -1
  50. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +1 -2
  51. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +614 -574
  52. package/src/duckdb/src/execution/window_executor.cpp +6 -5
  53. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -0
  54. package/src/duckdb/src/function/scalar/strftime_format.cpp +4 -4
  55. package/src/duckdb/src/function/table/copy_csv.cpp +94 -96
  56. package/src/duckdb/src/function/table/read_csv.cpp +150 -136
  57. package/src/duckdb/src/function/table/table_scan.cpp +0 -2
  58. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  59. package/src/duckdb/src/include/duckdb/common/enum_util.hpp +24 -0
  60. package/src/duckdb/src/include/duckdb/common/file_opener.hpp +9 -0
  61. package/src/duckdb/src/include/duckdb/common/fixed_size_map.hpp +208 -0
  62. package/src/duckdb/src/include/duckdb/common/optional_idx.hpp +3 -0
  63. package/src/duckdb/src/include/duckdb/common/perfect_map_set.hpp +2 -1
  64. package/src/duckdb/src/include/duckdb/common/printer.hpp +11 -0
  65. package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +43 -30
  66. package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +36 -35
  67. package/src/duckdb/src/include/duckdb/common/serializer/deserialization_data.hpp +18 -0
  68. package/src/duckdb/src/include/duckdb/common/serializer/encoding_util.hpp +132 -0
  69. package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +125 -150
  70. package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +119 -107
  71. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +2 -1
  72. package/src/duckdb/src/include/duckdb/common/shared_ptr.hpp +8 -0
  73. package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +13 -7
  74. package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +5 -0
  75. package/src/duckdb/src/include/duckdb/common/types/hyperloglog.hpp +7 -1
  76. package/src/duckdb/src/include/duckdb/common/types/interval.hpp +7 -0
  77. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +41 -9
  78. package/src/duckdb/src/include/duckdb/common/types/row/row_data_collection_scanner.hpp +5 -0
  79. package/src/duckdb/src/include/duckdb/common/types/row/row_layout.hpp +1 -23
  80. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_allocator.hpp +14 -8
  81. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +6 -3
  82. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_layout.hpp +7 -0
  83. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_segment.hpp +13 -8
  84. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_states.hpp +3 -2
  85. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -3
  86. package/src/duckdb/src/include/duckdb/common/vector.hpp +2 -2
  87. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +125 -146
  88. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_hash_aggregate.hpp +5 -4
  89. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_window.hpp +4 -3
  90. package/src/duckdb/src/include/duckdb/execution/operator/{persistent → scan/csv}/base_csv_reader.hpp +17 -17
  91. package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/buffered_csv_reader.hpp +72 -0
  92. package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_buffer.hpp +110 -0
  93. package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_buffer_manager.hpp +103 -0
  94. package/src/duckdb/src/include/duckdb/execution/operator/{persistent → scan/csv}/csv_file_handle.hpp +8 -15
  95. package/src/duckdb/src/include/duckdb/execution/operator/{persistent → scan/csv}/csv_line_info.hpp +1 -1
  96. package/src/duckdb/src/include/duckdb/execution/operator/{persistent → scan/csv}/csv_reader_options.hpp +52 -28
  97. package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_sniffer.hpp +127 -0
  98. package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_state_machine.hpp +75 -0
  99. package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_state_machine_cache.hpp +51 -0
  100. package/src/duckdb/src/include/duckdb/execution/operator/{persistent → scan/csv}/parallel_csv_reader.hpp +21 -27
  101. package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/quote_rules.hpp +21 -0
  102. package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +18 -27
  103. package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +5 -6
  104. package/src/duckdb/src/include/duckdb/function/scalar/strftime_format.hpp +4 -4
  105. package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +17 -12
  106. package/src/duckdb/src/include/duckdb/main/client_context_file_opener.hpp +1 -0
  107. package/src/duckdb/src/include/duckdb/main/client_data.hpp +2 -1
  108. package/src/duckdb/src/include/duckdb/main/config.hpp +1 -0
  109. package/src/duckdb/src/include/duckdb/main/connection.hpp +2 -2
  110. package/src/duckdb/src/include/duckdb/main/relation/read_csv_relation.hpp +6 -6
  111. package/src/duckdb/src/include/duckdb/parallel/event.hpp +12 -1
  112. package/src/duckdb/src/include/duckdb/storage/block.hpp +6 -0
  113. package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +3 -0
  114. package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +7 -3
  115. package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +4 -0
  116. package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +5 -0
  117. package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +3 -0
  118. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +3 -0
  119. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +3 -0
  120. package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +3 -0
  121. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +15 -3
  122. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +4 -0
  123. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
  124. package/src/duckdb/src/include/duckdb/verification/deserialized_statement_verifier_v2.hpp +6 -0
  125. package/src/duckdb/src/include/duckdb/verification/statement_verifier.hpp +1 -0
  126. package/src/duckdb/src/include/duckdb.h +12 -0
  127. package/src/duckdb/src/main/capi/logical_types-c.cpp +22 -0
  128. package/src/duckdb/src/main/client_context_file_opener.cpp +17 -0
  129. package/src/duckdb/src/main/client_verify.cpp +1 -0
  130. package/src/duckdb/src/main/config.cpp +2 -2
  131. package/src/duckdb/src/main/connection.cpp +3 -3
  132. package/src/duckdb/src/main/relation/read_csv_relation.cpp +19 -13
  133. package/src/duckdb/src/parallel/pipeline_finish_event.cpp +1 -1
  134. package/src/duckdb/src/parser/tableref/pivotref.cpp +0 -16
  135. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +1 -1
  136. package/src/duckdb/src/planner/binder/statement/bind_export.cpp +41 -25
  137. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +4 -4
  138. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +10 -10
  139. package/src/duckdb/src/planner/logical_operator.cpp +1 -1
  140. package/src/duckdb/src/planner/planner.cpp +1 -1
  141. package/src/duckdb/src/storage/checkpoint_manager.cpp +4 -3
  142. package/src/duckdb/src/storage/serialization/serialize_constraint.cpp +1 -1
  143. package/src/duckdb/src/storage/serialization/serialize_create_info.cpp +5 -5
  144. package/src/duckdb/src/storage/serialization/serialize_expression.cpp +10 -10
  145. package/src/duckdb/src/storage/serialization/serialize_logical_operator.cpp +20 -20
  146. package/src/duckdb/src/storage/serialization/serialize_macro_function.cpp +2 -2
  147. package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +118 -89
  148. package/src/duckdb/src/storage/serialization/serialize_parse_info.cpp +3 -3
  149. package/src/duckdb/src/storage/serialization/serialize_parsed_expression.cpp +27 -27
  150. package/src/duckdb/src/storage/serialization/serialize_query_node.cpp +16 -16
  151. package/src/duckdb/src/storage/serialization/serialize_result_modifier.cpp +8 -8
  152. package/src/duckdb/src/storage/serialization/serialize_statement.cpp +1 -1
  153. package/src/duckdb/src/storage/serialization/serialize_storage.cpp +39 -0
  154. package/src/duckdb/src/storage/serialization/serialize_tableref.cpp +9 -9
  155. package/src/duckdb/src/storage/statistics/base_statistics.cpp +67 -4
  156. package/src/duckdb/src/storage/statistics/column_statistics.cpp +16 -0
  157. package/src/duckdb/src/storage/statistics/list_stats.cpp +21 -0
  158. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +126 -1
  159. package/src/duckdb/src/storage/statistics/string_stats.cpp +23 -0
  160. package/src/duckdb/src/storage/statistics/struct_stats.cpp +27 -0
  161. package/src/duckdb/src/storage/storage_info.cpp +1 -1
  162. package/src/duckdb/src/storage/table/chunk_info.cpp +82 -3
  163. package/src/duckdb/src/storage/table/row_group.cpp +68 -1
  164. package/src/duckdb/src/storage/table/table_statistics.cpp +21 -0
  165. package/src/duckdb/src/storage/wal_replay.cpp +2 -2
  166. package/src/duckdb/src/verification/deserialized_statement_verifier_v2.cpp +15 -1
  167. package/src/duckdb/src/verification/statement_verifier.cpp +2 -0
  168. package/src/duckdb/third_party/utf8proc/include/utf8proc_wrapper.hpp +8 -0
  169. package/src/duckdb/ub_src_execution.cpp +0 -2
  170. package/src/duckdb/ub_src_execution_operator_csv_scanner.cpp +18 -0
  171. package/src/duckdb/ub_src_execution_operator_csv_scanner_sniffer.cpp +12 -0
  172. package/src/duckdb/ub_src_execution_operator_persistent.cpp +0 -12
  173. package/src/duckdb/ub_src_storage_serialization.cpp +2 -0
  174. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +0 -1487
  175. package/src/duckdb/src/execution/operator/persistent/csv_buffer.cpp +0 -72
  176. package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +0 -158
  177. package/src/duckdb/src/execution/partitionable_hashtable.cpp +0 -207
  178. package/src/duckdb/src/include/duckdb/execution/operator/persistent/buffered_csv_reader.hpp +0 -133
  179. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_buffer.hpp +0 -74
  180. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +0 -73
@@ -44,47 +44,63 @@ string SanitizeExportIdentifier(const string &str) {
44
44
  return result;
45
45
  }
46
46
 
47
- bool IsExistMainKeyTable(string &table_name, vector<reference<TableCatalogEntry>> &unordered) {
48
- for (idx_t i = 0; i < unordered.size(); i++) {
49
- if (unordered[i].get().name == table_name) {
47
+ bool ReferencedTableIsOrdered(string &referenced_table, catalog_entry_vector_t &ordered) {
48
+ for (auto &entry : ordered) {
49
+ auto &table_entry = entry.get().Cast<TableCatalogEntry>();
50
+ if (StringUtil::CIEquals(table_entry.name, referenced_table)) {
51
+ // The referenced table is already ordered
50
52
  return true;
51
53
  }
52
54
  }
53
55
  return false;
54
56
  }
55
57
 
56
- void ScanForeignKeyTable(vector<reference<TableCatalogEntry>> &ordered, vector<reference<TableCatalogEntry>> &unordered,
57
- bool move_only_pk_table) {
58
- for (auto i = unordered.begin(); i != unordered.end();) {
59
- auto table_entry = *i;
58
+ void ScanForeignKeyTable(catalog_entry_vector_t &ordered, catalog_entry_vector_t &unordered,
59
+ bool move_primary_keys_only) {
60
+ catalog_entry_vector_t remaining;
61
+
62
+ for (auto &entry : unordered) {
63
+ auto &table_entry = entry.get().Cast<TableCatalogEntry>();
60
64
  bool move_to_ordered = true;
61
- auto &constraints = table_entry.get().GetConstraints();
62
- for (idx_t j = 0; j < constraints.size(); j++) {
63
- auto &cond = constraints[j];
64
- if (cond->type == ConstraintType::FOREIGN_KEY) {
65
- auto &fk = cond->Cast<ForeignKeyConstraint>();
66
- if ((move_only_pk_table && fk.info.type == ForeignKeyType::FK_TYPE_FOREIGN_KEY_TABLE) ||
67
- (!move_only_pk_table && fk.info.type == ForeignKeyType::FK_TYPE_FOREIGN_KEY_TABLE &&
68
- IsExistMainKeyTable(fk.info.table, unordered))) {
69
- move_to_ordered = false;
70
- break;
71
- }
65
+ auto &constraints = table_entry.GetConstraints();
66
+
67
+ for (auto &cond : constraints) {
68
+ if (cond->type != ConstraintType::FOREIGN_KEY) {
69
+ continue;
70
+ }
71
+ auto &fk = cond->Cast<ForeignKeyConstraint>();
72
+ if (fk.info.type != ForeignKeyType::FK_TYPE_FOREIGN_KEY_TABLE) {
73
+ continue;
74
+ }
75
+
76
+ if (move_primary_keys_only) {
77
+ // This table references a table, don't move it yet
78
+ move_to_ordered = false;
79
+ break;
80
+ } else if (!ReferencedTableIsOrdered(fk.info.table, ordered)) {
81
+ // The table that it references isn't ordered yet
82
+ move_to_ordered = false;
83
+ break;
72
84
  }
73
85
  }
86
+
74
87
  if (move_to_ordered) {
75
88
  ordered.push_back(table_entry);
76
- i = unordered.erase(i);
77
89
  } else {
78
- i++;
90
+ remaining.push_back(table_entry);
79
91
  }
80
92
  }
93
+ unordered = remaining;
81
94
  }
82
95
 
83
- void ReorderTableEntries(vector<reference<TableCatalogEntry>> &tables) {
84
- vector<reference<TableCatalogEntry>> ordered;
85
- vector<reference<TableCatalogEntry>> unordered = tables;
96
+ void ReorderTableEntries(catalog_entry_vector_t &tables) {
97
+ catalog_entry_vector_t ordered;
98
+ catalog_entry_vector_t unordered = tables;
99
+ // First only move the tables that don't have any dependencies
86
100
  ScanForeignKeyTable(ordered, unordered, true);
87
101
  while (!unordered.empty()) {
102
+ // Now we will start moving tables that have foreign key constraints
103
+ // if the tables they reference are already moved
88
104
  ScanForeignKeyTable(ordered, unordered, false);
89
105
  }
90
106
  tables = ordered;
@@ -130,7 +146,7 @@ BoundStatement Binder::Bind(ExportStatement &stmt) {
130
146
 
131
147
  // gather a list of all the tables
132
148
  string catalog = stmt.database.empty() ? INVALID_CATALOG : stmt.database;
133
- vector<reference<TableCatalogEntry>> tables;
149
+ catalog_entry_vector_t tables;
134
150
  auto schemas = Catalog::GetSchemas(context, catalog);
135
151
  for (auto &schema : schemas) {
136
152
  schema.get().Scan(context, CatalogType::TABLE_ENTRY, [&](CatalogEntry &entry) {
@@ -151,7 +167,7 @@ BoundStatement Binder::Bind(ExportStatement &stmt) {
151
167
 
152
168
  unordered_set<string> table_name_index;
153
169
  for (auto &t : tables) {
154
- auto &table = t.get();
170
+ auto &table = t.get().Cast<TableCatalogEntry>();
155
171
  auto info = make_uniq<CopyInfo>();
156
172
  // we copy the options supplied to the EXPORT
157
173
  info->format = stmt.info->format;
@@ -110,8 +110,8 @@ void BoundAggregateExpression::FormatSerialize(FormatSerializer &serializer) con
110
110
  serializer.WriteProperty(201, "children", children);
111
111
  FunctionSerializer::FormatSerialize(serializer, function, bind_info.get());
112
112
  serializer.WriteProperty(203, "aggregate_type", aggr_type);
113
- serializer.WriteOptionalProperty(204, "filter", filter);
114
- serializer.WriteOptionalProperty(205, "order_bys", order_bys);
113
+ serializer.WritePropertyWithDefault(204, "filter", filter, unique_ptr<Expression>());
114
+ serializer.WritePropertyWithDefault(205, "order_bys", order_bys, unique_ptr<BoundOrderModifier>());
115
115
  }
116
116
 
117
117
  unique_ptr<Expression> BoundAggregateExpression::FormatDeserialize(FormatDeserializer &deserializer) {
@@ -120,10 +120,10 @@ unique_ptr<Expression> BoundAggregateExpression::FormatDeserialize(FormatDeseria
120
120
  auto entry = FunctionSerializer::FormatDeserialize<AggregateFunction, AggregateFunctionCatalogEntry>(
121
121
  deserializer, CatalogType::AGGREGATE_FUNCTION_ENTRY, children);
122
122
  auto aggregate_type = deserializer.ReadProperty<AggregateType>(203, "aggregate_type");
123
- auto filter = deserializer.ReadOptionalProperty<unique_ptr<Expression>>(204, "filter");
123
+ auto filter = deserializer.ReadPropertyWithDefault<unique_ptr<Expression>>(204, "filter", unique_ptr<Expression>());
124
124
  auto result = make_uniq<BoundAggregateExpression>(std::move(entry.first), std::move(children), std::move(filter),
125
125
  std::move(entry.second), aggregate_type);
126
- deserializer.ReadOptionalProperty(205, "order_bys", result->order_bys);
126
+ deserializer.ReadPropertyWithDefault(205, "order_bys", result->order_bys, unique_ptr<BoundOrderModifier>());
127
127
  return std::move(result);
128
128
  }
129
129
 
@@ -172,14 +172,14 @@ void BoundWindowExpression::FormatSerialize(FormatSerializer &serializer) const
172
172
  }
173
173
  serializer.WriteProperty(202, "partitions", partitions);
174
174
  serializer.WriteProperty(203, "orders", orders);
175
- serializer.WriteOptionalProperty(204, "filters", filter_expr);
175
+ serializer.WritePropertyWithDefault(204, "filters", filter_expr, unique_ptr<Expression>());
176
176
  serializer.WriteProperty(205, "ignore_nulls", ignore_nulls);
177
177
  serializer.WriteProperty(206, "start", start);
178
178
  serializer.WriteProperty(207, "end", end);
179
- serializer.WriteOptionalProperty(208, "start_expr", start_expr);
180
- serializer.WriteOptionalProperty(209, "end_expr", end_expr);
181
- serializer.WriteOptionalProperty(210, "offset_expr", offset_expr);
182
- serializer.WriteOptionalProperty(211, "default_expr", default_expr);
179
+ serializer.WritePropertyWithDefault(208, "start_expr", start_expr, unique_ptr<Expression>());
180
+ serializer.WritePropertyWithDefault(209, "end_expr", end_expr, unique_ptr<Expression>());
181
+ serializer.WritePropertyWithDefault(210, "offset_expr", offset_expr, unique_ptr<Expression>());
182
+ serializer.WritePropertyWithDefault(211, "default_expr", default_expr, unique_ptr<Expression>());
183
183
  }
184
184
 
185
185
  unique_ptr<Expression> BoundWindowExpression::FormatDeserialize(FormatDeserializer &deserializer) {
@@ -198,14 +198,14 @@ unique_ptr<Expression> BoundWindowExpression::FormatDeserialize(FormatDeserializ
198
198
  make_uniq<BoundWindowExpression>(expression_type, return_type, std::move(aggregate), std::move(bind_info));
199
199
  deserializer.ReadProperty(202, "partitions", result->partitions);
200
200
  deserializer.ReadProperty(203, "orders", result->orders);
201
- deserializer.ReadOptionalProperty(204, "filters", result->filter_expr);
201
+ deserializer.ReadPropertyWithDefault(204, "filters", result->filter_expr, unique_ptr<Expression>());
202
202
  deserializer.ReadProperty(205, "ignore_nulls", result->ignore_nulls);
203
203
  deserializer.ReadProperty(206, "start", result->start);
204
204
  deserializer.ReadProperty(207, "end", result->end);
205
- deserializer.ReadOptionalProperty(208, "start_expr", result->start_expr);
206
- deserializer.ReadOptionalProperty(209, "end_expr", result->end_expr);
207
- deserializer.ReadOptionalProperty(210, "offset_expr", result->offset_expr);
208
- deserializer.ReadOptionalProperty(211, "default_expr", result->default_expr);
205
+ deserializer.ReadPropertyWithDefault(208, "start_expr", result->start_expr, unique_ptr<Expression>());
206
+ deserializer.ReadPropertyWithDefault(209, "end_expr", result->end_expr, unique_ptr<Expression>());
207
+ deserializer.ReadPropertyWithDefault(210, "offset_expr", result->offset_expr, unique_ptr<Expression>());
208
+ deserializer.ReadPropertyWithDefault(211, "default_expr", result->default_expr, unique_ptr<Expression>());
209
209
  return std::move(result);
210
210
  }
211
211
 
@@ -146,7 +146,7 @@ void LogicalOperator::Verify(ClientContext &context) {
146
146
 
147
147
  // format (de)serialization of expressions
148
148
  try {
149
- auto blob = BinarySerializer::Serialize(*expressions[expr_idx]);
149
+ auto blob = BinarySerializer::Serialize(*expressions[expr_idx], true);
150
150
  bound_parameter_map_t parameters;
151
151
  auto result = BinaryDeserializer::Deserialize<Expression>(context, parameters, blob.data(), blob.size());
152
152
  result->Hash();
@@ -169,7 +169,7 @@ void Planner::VerifyPlan(ClientContext &context, unique_ptr<LogicalOperator> &op
169
169
 
170
170
  // format (de)serialization of this operator
171
171
  try {
172
- auto blob = BinarySerializer::Serialize(*op);
172
+ auto blob = BinarySerializer::Serialize(*op, true);
173
173
  bound_parameter_map_t parameters;
174
174
  auto result = BinaryDeserializer::Deserialize<LogicalOperator>(context, parameters, blob.data(), blob.size());
175
175
  } catch (SerializationException &ex) {
@@ -34,7 +34,7 @@
34
34
 
35
35
  namespace duckdb {
36
36
 
37
- void ReorderTableEntries(vector<reference<TableCatalogEntry>> &tables);
37
+ void ReorderTableEntries(catalog_entry_vector_t &tables);
38
38
 
39
39
  SingleFileCheckpointWriter::SingleFileCheckpointWriter(AttachedDatabase &db, BlockManager &block_manager)
40
40
  : CheckpointWriter(db), partial_block_manager(block_manager, CheckpointType::FULL_CHECKPOINT) {
@@ -157,7 +157,7 @@ void CheckpointWriter::WriteSchema(SchemaCatalogEntry &schema) {
157
157
  // write the schema data
158
158
  schema.Serialize(GetMetadataWriter());
159
159
  // then, we fetch the tables/views/sequences information
160
- vector<reference<TableCatalogEntry>> tables;
160
+ catalog_entry_vector_t tables;
161
161
  vector<reference<ViewCatalogEntry>> views;
162
162
  schema.Scan(CatalogType::TABLE_ENTRY, [&](CatalogEntry &entry) {
163
163
  if (entry.internal) {
@@ -235,7 +235,8 @@ void CheckpointWriter::WriteSchema(SchemaCatalogEntry &schema) {
235
235
  // reorder tables because of foreign key constraint
236
236
  ReorderTableEntries(tables);
237
237
  // Write the tables
238
- for (auto &table : tables) {
238
+ for (auto &entry : tables) {
239
+ auto &table = entry.get().Cast<TableCatalogEntry>();
239
240
  WriteTable(table);
240
241
  }
241
242
  // Write the views
@@ -37,7 +37,7 @@ unique_ptr<Constraint> Constraint::FormatDeserialize(FormatDeserializer &deseria
37
37
 
38
38
  void CheckConstraint::FormatSerialize(FormatSerializer &serializer) const {
39
39
  Constraint::FormatSerialize(serializer);
40
- serializer.WriteProperty(200, "expression", *expression);
40
+ serializer.WriteProperty(200, "expression", expression);
41
41
  }
42
42
 
43
43
  unique_ptr<Constraint> CheckConstraint::FormatDeserialize(FormatDeserializer &deserializer) {
@@ -102,7 +102,7 @@ unique_ptr<CreateInfo> CreateIndexInfo::FormatDeserialize(FormatDeserializer &de
102
102
  void CreateMacroInfo::FormatSerialize(FormatSerializer &serializer) const {
103
103
  CreateInfo::FormatSerialize(serializer);
104
104
  serializer.WriteProperty(200, "name", name);
105
- serializer.WriteProperty(201, "function", *function);
105
+ serializer.WriteProperty(201, "function", function);
106
106
  }
107
107
 
108
108
  unique_ptr<CreateInfo> CreateMacroInfo::FormatDeserialize(FormatDeserializer &deserializer) {
@@ -149,7 +149,7 @@ void CreateTableInfo::FormatSerialize(FormatSerializer &serializer) const {
149
149
  serializer.WriteProperty(200, "table", table);
150
150
  serializer.WriteProperty(201, "columns", columns);
151
151
  serializer.WriteProperty(202, "constraints", constraints);
152
- serializer.WriteOptionalProperty(203, "query", query);
152
+ serializer.WritePropertyWithDefault(203, "query", query, unique_ptr<SelectStatement>());
153
153
  }
154
154
 
155
155
  unique_ptr<CreateInfo> CreateTableInfo::FormatDeserialize(FormatDeserializer &deserializer) {
@@ -157,7 +157,7 @@ unique_ptr<CreateInfo> CreateTableInfo::FormatDeserialize(FormatDeserializer &de
157
157
  deserializer.ReadProperty(200, "table", result->table);
158
158
  deserializer.ReadProperty(201, "columns", result->columns);
159
159
  deserializer.ReadProperty(202, "constraints", result->constraints);
160
- deserializer.ReadOptionalProperty(203, "query", result->query);
160
+ deserializer.ReadPropertyWithDefault(203, "query", result->query, unique_ptr<SelectStatement>());
161
161
  return std::move(result);
162
162
  }
163
163
 
@@ -179,7 +179,7 @@ void CreateViewInfo::FormatSerialize(FormatSerializer &serializer) const {
179
179
  serializer.WriteProperty(200, "view_name", view_name);
180
180
  serializer.WriteProperty(201, "aliases", aliases);
181
181
  serializer.WriteProperty(202, "types", types);
182
- serializer.WriteOptionalProperty(203, "query", query);
182
+ serializer.WritePropertyWithDefault(203, "query", query, unique_ptr<SelectStatement>());
183
183
  }
184
184
 
185
185
  unique_ptr<CreateInfo> CreateViewInfo::FormatDeserialize(FormatDeserializer &deserializer) {
@@ -187,7 +187,7 @@ unique_ptr<CreateInfo> CreateViewInfo::FormatDeserialize(FormatDeserializer &des
187
187
  deserializer.ReadProperty(200, "view_name", result->view_name);
188
188
  deserializer.ReadProperty(201, "aliases", result->aliases);
189
189
  deserializer.ReadProperty(202, "types", result->types);
190
- deserializer.ReadOptionalProperty(203, "query", result->query);
190
+ deserializer.ReadPropertyWithDefault(203, "query", result->query, unique_ptr<SelectStatement>());
191
191
  return std::move(result);
192
192
  }
193
193
 
@@ -83,9 +83,9 @@ unique_ptr<Expression> Expression::FormatDeserialize(FormatDeserializer &deseria
83
83
 
84
84
  void BoundBetweenExpression::FormatSerialize(FormatSerializer &serializer) const {
85
85
  Expression::FormatSerialize(serializer);
86
- serializer.WriteProperty(200, "input", *input);
87
- serializer.WriteProperty(201, "lower", *lower);
88
- serializer.WriteProperty(202, "upper", *upper);
86
+ serializer.WriteProperty(200, "input", input);
87
+ serializer.WriteProperty(201, "lower", lower);
88
+ serializer.WriteProperty(202, "upper", upper);
89
89
  serializer.WriteProperty(203, "lower_inclusive", lower_inclusive);
90
90
  serializer.WriteProperty(204, "upper_inclusive", upper_inclusive);
91
91
  }
@@ -104,7 +104,7 @@ void BoundCaseExpression::FormatSerialize(FormatSerializer &serializer) const {
104
104
  Expression::FormatSerialize(serializer);
105
105
  serializer.WriteProperty(200, "return_type", return_type);
106
106
  serializer.WriteProperty(201, "case_checks", case_checks);
107
- serializer.WriteProperty(202, "else_expr", *else_expr);
107
+ serializer.WriteProperty(202, "else_expr", else_expr);
108
108
  }
109
109
 
110
110
  unique_ptr<Expression> BoundCaseExpression::FormatDeserialize(FormatDeserializer &deserializer) {
@@ -117,7 +117,7 @@ unique_ptr<Expression> BoundCaseExpression::FormatDeserialize(FormatDeserializer
117
117
 
118
118
  void BoundCastExpression::FormatSerialize(FormatSerializer &serializer) const {
119
119
  Expression::FormatSerialize(serializer);
120
- serializer.WriteProperty(200, "child", *child);
120
+ serializer.WriteProperty(200, "child", child);
121
121
  serializer.WriteProperty(201, "return_type", return_type);
122
122
  serializer.WriteProperty(202, "try_cast", try_cast);
123
123
  }
@@ -147,8 +147,8 @@ unique_ptr<Expression> BoundColumnRefExpression::FormatDeserialize(FormatDeseria
147
147
 
148
148
  void BoundComparisonExpression::FormatSerialize(FormatSerializer &serializer) const {
149
149
  Expression::FormatSerialize(serializer);
150
- serializer.WriteProperty(200, "left", *left);
151
- serializer.WriteProperty(201, "right", *right);
150
+ serializer.WriteProperty(200, "left", left);
151
+ serializer.WriteProperty(201, "right", right);
152
152
  }
153
153
 
154
154
  unique_ptr<Expression> BoundComparisonExpression::FormatDeserialize(FormatDeserializer &deserializer) {
@@ -194,7 +194,7 @@ unique_ptr<Expression> BoundDefaultExpression::FormatDeserialize(FormatDeseriali
194
194
  void BoundLambdaExpression::FormatSerialize(FormatSerializer &serializer) const {
195
195
  Expression::FormatSerialize(serializer);
196
196
  serializer.WriteProperty(200, "return_type", return_type);
197
- serializer.WriteProperty(201, "lambda_expr", *lambda_expr);
197
+ serializer.WriteProperty(201, "lambda_expr", lambda_expr);
198
198
  serializer.WriteProperty(202, "captures", captures);
199
199
  serializer.WriteProperty(203, "parameter_count", parameter_count);
200
200
  }
@@ -243,7 +243,7 @@ void BoundParameterExpression::FormatSerialize(FormatSerializer &serializer) con
243
243
  Expression::FormatSerialize(serializer);
244
244
  serializer.WriteProperty(200, "identifier", identifier);
245
245
  serializer.WriteProperty(201, "return_type", return_type);
246
- serializer.WriteProperty(202, "parameter_data", *parameter_data);
246
+ serializer.WriteProperty(202, "parameter_data", parameter_data);
247
247
  }
248
248
 
249
249
  unique_ptr<Expression> BoundParameterExpression::FormatDeserialize(FormatDeserializer &deserializer) {
@@ -270,7 +270,7 @@ unique_ptr<Expression> BoundReferenceExpression::FormatDeserialize(FormatDeseria
270
270
  void BoundUnnestExpression::FormatSerialize(FormatSerializer &serializer) const {
271
271
  Expression::FormatSerialize(serializer);
272
272
  serializer.WriteProperty(200, "return_type", return_type);
273
- serializer.WriteProperty(201, "child", *child);
273
+ serializer.WriteProperty(201, "child", child);
274
274
  }
275
275
 
276
276
  unique_ptr<Expression> BoundUnnestExpression::FormatDeserialize(FormatDeserializer &deserializer) {
@@ -218,7 +218,7 @@ void LogicalAnyJoin::FormatSerialize(FormatSerializer &serializer) const {
218
218
  serializer.WriteProperty(201, "mark_index", mark_index);
219
219
  serializer.WriteProperty(202, "left_projection_map", left_projection_map);
220
220
  serializer.WriteProperty(203, "right_projection_map", right_projection_map);
221
- serializer.WriteProperty(204, "condition", *condition);
221
+ serializer.WriteProperty(204, "condition", condition);
222
222
  }
223
223
 
224
224
  unique_ptr<LogicalOperator> LogicalAnyJoin::FormatDeserialize(FormatDeserializer &deserializer) {
@@ -254,7 +254,7 @@ void LogicalColumnDataGet::FormatSerialize(FormatSerializer &serializer) const {
254
254
  LogicalOperator::FormatSerialize(serializer);
255
255
  serializer.WriteProperty(200, "table_index", table_index);
256
256
  serializer.WriteProperty(201, "chunk_types", chunk_types);
257
- serializer.WriteProperty(202, "collection", *collection);
257
+ serializer.WriteProperty(202, "collection", collection);
258
258
  }
259
259
 
260
260
  unique_ptr<LogicalOperator> LogicalColumnDataGet::FormatDeserialize(FormatDeserializer &deserializer) {
@@ -290,7 +290,7 @@ unique_ptr<LogicalOperator> LogicalComparisonJoin::FormatDeserialize(FormatDeser
290
290
 
291
291
  void LogicalCreate::FormatSerialize(FormatSerializer &serializer) const {
292
292
  LogicalOperator::FormatSerialize(serializer);
293
- serializer.WriteProperty(200, "info", *info);
293
+ serializer.WriteProperty(200, "info", info);
294
294
  }
295
295
 
296
296
  unique_ptr<LogicalOperator> LogicalCreate::FormatDeserialize(FormatDeserializer &deserializer) {
@@ -301,7 +301,7 @@ unique_ptr<LogicalOperator> LogicalCreate::FormatDeserialize(FormatDeserializer
301
301
 
302
302
  void LogicalCreateIndex::FormatSerialize(FormatSerializer &serializer) const {
303
303
  LogicalOperator::FormatSerialize(serializer);
304
- serializer.WriteProperty(200, "info", *info);
304
+ serializer.WriteProperty(200, "info", info);
305
305
  serializer.WriteProperty(201, "unbound_expressions", unbound_expressions);
306
306
  }
307
307
 
@@ -316,7 +316,7 @@ void LogicalCreateTable::FormatSerialize(FormatSerializer &serializer) const {
316
316
  LogicalOperator::FormatSerialize(serializer);
317
317
  serializer.WriteProperty(200, "catalog", schema.ParentCatalog().GetName());
318
318
  serializer.WriteProperty(201, "schema", schema.name);
319
- serializer.WriteProperty(202, "info", *info->base);
319
+ serializer.WriteProperty(202, "info", info->base);
320
320
  }
321
321
 
322
322
  unique_ptr<LogicalOperator> LogicalCreateTable::FormatDeserialize(FormatDeserializer &deserializer) {
@@ -374,14 +374,14 @@ void LogicalDistinct::FormatSerialize(FormatSerializer &serializer) const {
374
374
  LogicalOperator::FormatSerialize(serializer);
375
375
  serializer.WriteProperty(200, "distinct_type", distinct_type);
376
376
  serializer.WriteProperty(201, "distinct_targets", distinct_targets);
377
- serializer.WriteOptionalProperty(202, "order_by", order_by);
377
+ serializer.WritePropertyWithDefault(202, "order_by", order_by, unique_ptr<BoundOrderModifier>());
378
378
  }
379
379
 
380
380
  unique_ptr<LogicalOperator> LogicalDistinct::FormatDeserialize(FormatDeserializer &deserializer) {
381
381
  auto distinct_type = deserializer.ReadProperty<DistinctType>(200, "distinct_type");
382
382
  auto distinct_targets = deserializer.ReadProperty<vector<unique_ptr<Expression>>>(201, "distinct_targets");
383
383
  auto result = duckdb::unique_ptr<LogicalDistinct>(new LogicalDistinct(std::move(distinct_targets), distinct_type));
384
- deserializer.ReadOptionalProperty(202, "order_by", result->order_by);
384
+ deserializer.ReadPropertyWithDefault(202, "order_by", result->order_by, unique_ptr<BoundOrderModifier>());
385
385
  return std::move(result);
386
386
  }
387
387
 
@@ -468,8 +468,8 @@ void LogicalInsert::FormatSerialize(FormatSerializer &serializer) const {
468
468
  serializer.WriteProperty(209, "action_type", action_type);
469
469
  serializer.WriteProperty(210, "expected_set_types", expected_set_types);
470
470
  serializer.WriteProperty(211, "on_conflict_filter", on_conflict_filter);
471
- serializer.WriteOptionalProperty(212, "on_conflict_condition", on_conflict_condition);
472
- serializer.WriteOptionalProperty(213, "do_update_condition", do_update_condition);
471
+ serializer.WritePropertyWithDefault(212, "on_conflict_condition", on_conflict_condition, unique_ptr<Expression>());
472
+ serializer.WritePropertyWithDefault(213, "do_update_condition", do_update_condition, unique_ptr<Expression>());
473
473
  serializer.WriteProperty(214, "set_columns", set_columns);
474
474
  serializer.WriteProperty(215, "set_types", set_types);
475
475
  serializer.WriteProperty(216, "excluded_table_index", excluded_table_index);
@@ -491,8 +491,8 @@ unique_ptr<LogicalOperator> LogicalInsert::FormatDeserialize(FormatDeserializer
491
491
  deserializer.ReadProperty(209, "action_type", result->action_type);
492
492
  deserializer.ReadProperty(210, "expected_set_types", result->expected_set_types);
493
493
  deserializer.ReadProperty(211, "on_conflict_filter", result->on_conflict_filter);
494
- deserializer.ReadOptionalProperty(212, "on_conflict_condition", result->on_conflict_condition);
495
- deserializer.ReadOptionalProperty(213, "do_update_condition", result->do_update_condition);
494
+ deserializer.ReadPropertyWithDefault(212, "on_conflict_condition", result->on_conflict_condition, unique_ptr<Expression>());
495
+ deserializer.ReadPropertyWithDefault(213, "do_update_condition", result->do_update_condition, unique_ptr<Expression>());
496
496
  deserializer.ReadProperty(214, "set_columns", result->set_columns);
497
497
  deserializer.ReadProperty(215, "set_types", result->set_types);
498
498
  deserializer.ReadProperty(216, "excluded_table_index", result->excluded_table_index);
@@ -505,15 +505,15 @@ void LogicalLimit::FormatSerialize(FormatSerializer &serializer) const {
505
505
  LogicalOperator::FormatSerialize(serializer);
506
506
  serializer.WriteProperty(200, "limit_val", limit_val);
507
507
  serializer.WriteProperty(201, "offset_val", offset_val);
508
- serializer.WriteOptionalProperty(202, "limit", limit);
509
- serializer.WriteOptionalProperty(203, "offset", offset);
508
+ serializer.WritePropertyWithDefault(202, "limit", limit, unique_ptr<Expression>());
509
+ serializer.WritePropertyWithDefault(203, "offset", offset, unique_ptr<Expression>());
510
510
  }
511
511
 
512
512
  unique_ptr<LogicalOperator> LogicalLimit::FormatDeserialize(FormatDeserializer &deserializer) {
513
513
  auto limit_val = deserializer.ReadProperty<int64_t>(200, "limit_val");
514
514
  auto offset_val = deserializer.ReadProperty<int64_t>(201, "offset_val");
515
- auto limit = deserializer.ReadOptionalProperty<unique_ptr<Expression>>(202, "limit");
516
- auto offset = deserializer.ReadOptionalProperty<unique_ptr<Expression>>(203, "offset");
515
+ auto limit = deserializer.ReadPropertyWithDefault<unique_ptr<Expression>>(202, "limit", unique_ptr<Expression>());
516
+ auto offset = deserializer.ReadPropertyWithDefault<unique_ptr<Expression>>(203, "offset", unique_ptr<Expression>());
517
517
  auto result = duckdb::unique_ptr<LogicalLimit>(new LogicalLimit(limit_val, offset_val, std::move(limit), std::move(offset)));
518
518
  return std::move(result);
519
519
  }
@@ -522,15 +522,15 @@ void LogicalLimitPercent::FormatSerialize(FormatSerializer &serializer) const {
522
522
  LogicalOperator::FormatSerialize(serializer);
523
523
  serializer.WriteProperty(200, "limit_percent", limit_percent);
524
524
  serializer.WriteProperty(201, "offset_val", offset_val);
525
- serializer.WriteOptionalProperty(202, "limit", limit);
526
- serializer.WriteOptionalProperty(203, "offset", offset);
525
+ serializer.WritePropertyWithDefault(202, "limit", limit, unique_ptr<Expression>());
526
+ serializer.WritePropertyWithDefault(203, "offset", offset, unique_ptr<Expression>());
527
527
  }
528
528
 
529
529
  unique_ptr<LogicalOperator> LogicalLimitPercent::FormatDeserialize(FormatDeserializer &deserializer) {
530
530
  auto limit_percent = deserializer.ReadProperty<double>(200, "limit_percent");
531
531
  auto offset_val = deserializer.ReadProperty<int64_t>(201, "offset_val");
532
- auto limit = deserializer.ReadOptionalProperty<unique_ptr<Expression>>(202, "limit");
533
- auto offset = deserializer.ReadOptionalProperty<unique_ptr<Expression>>(203, "offset");
532
+ auto limit = deserializer.ReadPropertyWithDefault<unique_ptr<Expression>>(202, "limit", unique_ptr<Expression>());
533
+ auto offset = deserializer.ReadPropertyWithDefault<unique_ptr<Expression>>(203, "offset", unique_ptr<Expression>());
534
534
  auto result = duckdb::unique_ptr<LogicalLimitPercent>(new LogicalLimitPercent(limit_percent, offset_val, std::move(limit), std::move(offset)));
535
535
  return std::move(result);
536
536
  }
@@ -682,7 +682,7 @@ unique_ptr<LogicalOperator> LogicalShow::FormatDeserialize(FormatDeserializer &d
682
682
 
683
683
  void LogicalSimple::FormatSerialize(FormatSerializer &serializer) const {
684
684
  LogicalOperator::FormatSerialize(serializer);
685
- serializer.WriteProperty(200, "info", *info);
685
+ serializer.WriteProperty(200, "info", info);
686
686
  }
687
687
 
688
688
  unique_ptr<LogicalOperator> LogicalSimple::FormatDeserialize(FormatDeserializer &deserializer) {
@@ -39,7 +39,7 @@ unique_ptr<MacroFunction> MacroFunction::FormatDeserialize(FormatDeserializer &d
39
39
 
40
40
  void ScalarMacroFunction::FormatSerialize(FormatSerializer &serializer) const {
41
41
  MacroFunction::FormatSerialize(serializer);
42
- serializer.WriteProperty(200, "expression", *expression);
42
+ serializer.WriteProperty(200, "expression", expression);
43
43
  }
44
44
 
45
45
  unique_ptr<MacroFunction> ScalarMacroFunction::FormatDeserialize(FormatDeserializer &deserializer) {
@@ -50,7 +50,7 @@ unique_ptr<MacroFunction> ScalarMacroFunction::FormatDeserialize(FormatDeseriali
50
50
 
51
51
  void TableMacroFunction::FormatSerialize(FormatSerializer &serializer) const {
52
52
  MacroFunction::FormatSerialize(serializer);
53
- serializer.WriteProperty(200, "query_node", *query_node);
53
+ serializer.WriteProperty(200, "query_node", query_node);
54
54
  }
55
55
 
56
56
  unique_ptr<MacroFunction> TableMacroFunction::FormatDeserialize(FormatDeserializer &deserializer) {