duckdb 0.3.2-dev1156.0 → 0.3.2-dev1199.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.
package/src/duckdb.cpp CHANGED
@@ -853,6 +853,262 @@ string IndexCatalogEntry::ToSQL() {
853
853
  } // namespace duckdb
854
854
 
855
855
 
856
+ //===----------------------------------------------------------------------===//
857
+ // DuckDB
858
+ //
859
+ // duckdb/common/field_writer.hpp
860
+ //
861
+ //
862
+ //===----------------------------------------------------------------------===//
863
+
864
+
865
+
866
+
867
+
868
+ #include <type_traits>
869
+
870
+ namespace duckdb {
871
+ class BufferedSerializer;
872
+
873
+ class FieldWriter {
874
+ public:
875
+ FieldWriter(Serializer &serializer);
876
+ ~FieldWriter();
877
+
878
+ public:
879
+ template <class T>
880
+ void WriteField(const T &element) {
881
+ static_assert(std::is_trivially_destructible<T>(), "WriteField object must be trivially destructible");
882
+
883
+ AddField();
884
+ WriteData((const_data_ptr_t)&element, sizeof(T));
885
+ }
886
+
887
+ //! Write a string with a length prefix
888
+ void WriteString(const string &val) {
889
+ WriteStringLen((const_data_ptr_t)val.c_str(), val.size());
890
+ }
891
+ void WriteStringLen(const_data_ptr_t val, idx_t len) {
892
+ AddField();
893
+ Write<uint32_t>((uint32_t)len);
894
+ if (len > 0) {
895
+ WriteData(val, len);
896
+ }
897
+ }
898
+ void WriteBlob(const_data_ptr_t val, idx_t len) {
899
+ AddField();
900
+ if (len > 0) {
901
+ WriteData(val, len);
902
+ }
903
+ }
904
+
905
+ template <class T, class CONTAINER_TYPE = vector<T>>
906
+ void WriteList(const CONTAINER_TYPE &elements) {
907
+ AddField();
908
+ Write<uint32_t>(elements.size());
909
+ for (auto &element : elements) {
910
+ Write<T>(element);
911
+ }
912
+ }
913
+
914
+ template <class T>
915
+ void WriteSerializable(const T &element) {
916
+ AddField();
917
+ element.Serialize(*buffer);
918
+ }
919
+
920
+ template <class T>
921
+ void WriteSerializableList(const vector<unique_ptr<T>> &elements) {
922
+ AddField();
923
+ Write<uint32_t>(elements.size());
924
+ for (idx_t i = 0; i < elements.size(); i++) {
925
+ elements[i]->Serialize(*buffer);
926
+ }
927
+ }
928
+
929
+ template <class T>
930
+ void WriteRegularSerializableList(const vector<T> &elements) {
931
+ AddField();
932
+ Write<uint32_t>(elements.size());
933
+ for (idx_t i = 0; i < elements.size(); i++) {
934
+ elements[i].Serialize(*buffer);
935
+ }
936
+ }
937
+
938
+ template <class T>
939
+ void WriteOptional(const unique_ptr<T> &element) {
940
+ AddField();
941
+ Write<bool>(element ? true : false);
942
+ if (element) {
943
+ element->Serialize(*buffer);
944
+ }
945
+ }
946
+
947
+ // Called after all fields have been written. Should always be called.
948
+ void Finalize();
949
+
950
+ Serializer &GetSerializer() {
951
+ return *buffer;
952
+ }
953
+
954
+ private:
955
+ void AddField() {
956
+ field_count++;
957
+ }
958
+
959
+ template <class T>
960
+ void Write(const T &element) {
961
+ WriteData((const_data_ptr_t)&element, sizeof(T));
962
+ }
963
+
964
+ void WriteData(const_data_ptr_t buffer, idx_t write_size);
965
+
966
+ private:
967
+ Serializer &serializer;
968
+ unique_ptr<BufferedSerializer> buffer;
969
+ idx_t field_count;
970
+ };
971
+
972
+ template <>
973
+ void FieldWriter::Write(const string &val);
974
+
975
+ class FieldDeserializer : public Deserializer {
976
+ public:
977
+ FieldDeserializer(Deserializer &root);
978
+
979
+ public:
980
+ void ReadData(data_ptr_t buffer, idx_t read_size) override;
981
+
982
+ void SetRemainingData(idx_t remaining_data);
983
+ idx_t RemainingData();
984
+
985
+ private:
986
+ Deserializer &root;
987
+ idx_t remaining_data;
988
+ };
989
+
990
+ class FieldReader {
991
+ public:
992
+ FieldReader(Deserializer &source);
993
+ ~FieldReader();
994
+
995
+ public:
996
+ template <class T>
997
+ T ReadRequired() {
998
+ if (field_count >= max_field_count) {
999
+ // field is not there, throw an exception
1000
+ throw SerializationException("Attempting to read a required field, but field is missing");
1001
+ }
1002
+ // field is there, read the actual value
1003
+ AddField();
1004
+ return source.Read<T>();
1005
+ }
1006
+
1007
+ template <class T>
1008
+ T ReadField(T default_value) {
1009
+ if (field_count >= max_field_count) {
1010
+ // field is not there, read the default value
1011
+ return default_value;
1012
+ }
1013
+ // field is there, read the actual value
1014
+ AddField();
1015
+ return source.Read<T>();
1016
+ }
1017
+
1018
+ template <class T>
1019
+ vector<T> ReadRequiredList() {
1020
+ if (field_count >= max_field_count) {
1021
+ // field is not there, throw an exception
1022
+ throw SerializationException("Attempting to read a required field, but field is missing");
1023
+ }
1024
+ AddField();
1025
+ auto result_count = source.Read<uint32_t>();
1026
+ vector<T> result;
1027
+ for (idx_t i = 0; i < result_count; i++) {
1028
+ result.push_back(source.Read<T>());
1029
+ }
1030
+ return result;
1031
+ }
1032
+
1033
+ template <class T>
1034
+ unique_ptr<T> ReadOptional(unique_ptr<T> default_value) {
1035
+ if (field_count >= max_field_count) {
1036
+ // field is not there, read the default value
1037
+ return default_value;
1038
+ }
1039
+ // field is there, read the actual value
1040
+ AddField();
1041
+ return source.template ReadOptional<T>();
1042
+ }
1043
+
1044
+ template <class T, class RETURN_TYPE = unique_ptr<T>>
1045
+ RETURN_TYPE ReadSerializable(RETURN_TYPE default_value) {
1046
+ if (field_count >= max_field_count) {
1047
+ // field is not there, read the default value
1048
+ return default_value;
1049
+ }
1050
+ // field is there, read the actual value
1051
+ AddField();
1052
+ return T::Deserialize(source);
1053
+ }
1054
+
1055
+ template <class T, class RETURN_TYPE = unique_ptr<T>>
1056
+ RETURN_TYPE ReadRequiredSerializable() {
1057
+ if (field_count >= max_field_count) {
1058
+ // field is not there, read the default value
1059
+ throw SerializationException("Attempting to read mandatory field, but field is missing");
1060
+ }
1061
+ // field is there, read the actual value
1062
+ AddField();
1063
+ return T::Deserialize(source);
1064
+ }
1065
+
1066
+ template <class T, class RETURN_TYPE = unique_ptr<T>>
1067
+ vector<RETURN_TYPE> ReadRequiredSerializableList() {
1068
+ if (field_count >= max_field_count) {
1069
+ // field is not there, read the default value
1070
+ throw SerializationException("Attempting to read mandatory field, but field is missing");
1071
+ }
1072
+ // field is there, read the actual value
1073
+ AddField();
1074
+ auto result_count = source.Read<uint32_t>();
1075
+
1076
+ vector<RETURN_TYPE> result;
1077
+ for (idx_t i = 0; i < result_count; i++) {
1078
+ result.push_back(T::Deserialize(source));
1079
+ }
1080
+ return result;
1081
+ }
1082
+ void ReadBlob(data_ptr_t result, idx_t read_size) {
1083
+ if (field_count >= max_field_count) {
1084
+ // field is not there, throw an exception
1085
+ throw SerializationException("Attempting to read a required field, but field is missing");
1086
+ }
1087
+ // field is there, read the actual value
1088
+ AddField();
1089
+ source.ReadData(result, read_size);
1090
+ }
1091
+
1092
+ //! Called after all fields have been read. Should always be called.
1093
+ void Finalize();
1094
+
1095
+ Deserializer &GetSource() {
1096
+ return source;
1097
+ }
1098
+
1099
+ private:
1100
+ void AddField() {
1101
+ field_count++;
1102
+ }
1103
+
1104
+ private:
1105
+ FieldDeserializer source;
1106
+ idx_t field_count;
1107
+ idx_t max_field_count;
1108
+ idx_t total_size;
1109
+ };
1110
+
1111
+ } // namespace duckdb
856
1112
 
857
1113
 
858
1114
  namespace duckdb {
@@ -863,36 +1119,39 @@ MacroCatalogEntry::MacroCatalogEntry(Catalog *catalog, SchemaCatalogEntry *schem
863
1119
  this->internal = info->internal;
864
1120
  }
865
1121
 
866
- void MacroCatalogEntry::Serialize(Serializer &serializer) {
1122
+ void MacroCatalogEntry::Serialize(Serializer &main_serializer) {
867
1123
  D_ASSERT(!internal);
868
- serializer.WriteString(schema->name);
869
- serializer.WriteString(name);
870
- function->expression->Serialize(serializer);
871
- serializer.Write<uint32_t>((uint32_t)function->parameters.size());
872
- for (auto &param : function->parameters) {
873
- param->Serialize(serializer);
874
- }
875
- serializer.Write<uint32_t>((uint32_t)function->default_parameters.size());
1124
+ FieldWriter writer(main_serializer);
1125
+ writer.WriteString(schema->name);
1126
+ writer.WriteString(name);
1127
+ writer.WriteSerializable(*function->expression);
1128
+ writer.WriteSerializableList(function->parameters);
1129
+ writer.WriteField<uint32_t>((uint32_t)function->default_parameters.size());
1130
+ auto &serializer = writer.GetSerializer();
876
1131
  for (auto &kv : function->default_parameters) {
877
1132
  serializer.WriteString(kv.first);
878
1133
  kv.second->Serialize(serializer);
879
1134
  }
1135
+ writer.Finalize();
880
1136
  }
881
1137
 
882
- unique_ptr<CreateMacroInfo> MacroCatalogEntry::Deserialize(Deserializer &source) {
1138
+ unique_ptr<CreateMacroInfo> MacroCatalogEntry::Deserialize(Deserializer &main_source) {
883
1139
  auto info = make_unique<CreateMacroInfo>();
884
- info->schema = source.Read<string>();
885
- info->name = source.Read<string>();
886
- info->function = make_unique<MacroFunction>(ParsedExpression::Deserialize(source));
887
- auto param_count = source.Read<uint32_t>();
888
- for (idx_t i = 0; i < param_count; i++) {
889
- info->function->parameters.push_back(ParsedExpression::Deserialize(source));
890
- }
891
- auto default_param_count = source.Read<uint32_t>();
1140
+
1141
+ FieldReader reader(main_source);
1142
+ info->schema = reader.ReadRequired<string>();
1143
+ info->name = reader.ReadRequired<string>();
1144
+ auto expression = reader.ReadRequiredSerializable<ParsedExpression>();
1145
+ info->function = make_unique<MacroFunction>(move(expression));
1146
+ info->function->parameters = reader.ReadRequiredSerializableList<ParsedExpression>();
1147
+ auto default_param_count = reader.ReadRequired<uint32_t>();
1148
+ auto &source = reader.GetSource();
892
1149
  for (idx_t i = 0; i < default_param_count; i++) {
893
1150
  auto name = source.Read<string>();
894
1151
  info->function->default_parameters[name] = ParsedExpression::Deserialize(source);
895
1152
  }
1153
+ reader.Finalize();
1154
+
896
1155
  return info;
897
1156
  }
898
1157
 
@@ -945,7 +1204,7 @@ public:
945
1204
  //! Create a TypeCatalogEntry and initialize storage for it
946
1205
  TypeCatalogEntry(Catalog *catalog, SchemaCatalogEntry *schema, CreateTypeInfo *info);
947
1206
 
948
- unique_ptr<LogicalType> user_type;
1207
+ LogicalType user_type;
949
1208
 
950
1209
  public:
951
1210
  //! Serialize the meta information of the TypeCatalogEntry a serializer
@@ -1238,12 +1497,18 @@ void SchemaCatalogEntry::Scan(CatalogType type, const std::function<void(Catalog
1238
1497
  }
1239
1498
 
1240
1499
  void SchemaCatalogEntry::Serialize(Serializer &serializer) {
1241
- serializer.WriteString(name);
1500
+ FieldWriter writer(serializer);
1501
+ writer.WriteString(name);
1502
+ writer.Finalize();
1242
1503
  }
1243
1504
 
1244
1505
  unique_ptr<CreateSchemaInfo> SchemaCatalogEntry::Deserialize(Deserializer &source) {
1245
1506
  auto info = make_unique<CreateSchemaInfo>();
1246
- info->schema = source.Read<string>();
1507
+
1508
+ FieldReader reader(source);
1509
+ info->schema = reader.ReadRequired<string>();
1510
+ reader.Finalize();
1511
+
1247
1512
  return info;
1248
1513
  }
1249
1514
 
@@ -1303,28 +1568,32 @@ SequenceCatalogEntry::SequenceCatalogEntry(Catalog *catalog, SchemaCatalogEntry
1303
1568
  }
1304
1569
 
1305
1570
  void SequenceCatalogEntry::Serialize(Serializer &serializer) {
1306
- serializer.WriteString(schema->name);
1307
- serializer.WriteString(name);
1308
- // serializer.Write<int64_t>(counter);
1309
- serializer.Write<uint64_t>(usage_count);
1310
- serializer.Write<int64_t>(increment);
1311
- serializer.Write<int64_t>(min_value);
1312
- serializer.Write<int64_t>(max_value);
1313
- serializer.Write<int64_t>(counter);
1314
- serializer.Write<bool>(cycle);
1571
+ FieldWriter writer(serializer);
1572
+ writer.WriteString(schema->name);
1573
+ writer.WriteString(name);
1574
+ writer.WriteField<uint64_t>(usage_count);
1575
+ writer.WriteField<int64_t>(increment);
1576
+ writer.WriteField<int64_t>(min_value);
1577
+ writer.WriteField<int64_t>(max_value);
1578
+ writer.WriteField<int64_t>(counter);
1579
+ writer.WriteField<bool>(cycle);
1580
+ writer.Finalize();
1315
1581
  }
1316
1582
 
1317
1583
  unique_ptr<CreateSequenceInfo> SequenceCatalogEntry::Deserialize(Deserializer &source) {
1318
1584
  auto info = make_unique<CreateSequenceInfo>();
1319
- info->schema = source.Read<string>();
1320
- info->name = source.Read<string>();
1321
- // info->counter = source.Read<int64_t>();
1322
- info->usage_count = source.Read<uint64_t>();
1323
- info->increment = source.Read<int64_t>();
1324
- info->min_value = source.Read<int64_t>();
1325
- info->max_value = source.Read<int64_t>();
1326
- info->start_value = source.Read<int64_t>();
1327
- info->cycle = source.Read<bool>();
1585
+
1586
+ FieldReader reader(source);
1587
+ info->schema = reader.ReadRequired<string>();
1588
+ info->name = reader.ReadRequired<string>();
1589
+ info->usage_count = reader.ReadRequired<uint64_t>();
1590
+ info->increment = reader.ReadRequired<int64_t>();
1591
+ info->min_value = reader.ReadRequired<int64_t>();
1592
+ info->max_value = reader.ReadRequired<int64_t>();
1593
+ info->start_value = reader.ReadRequired<int64_t>();
1594
+ info->cycle = reader.ReadRequired<bool>();
1595
+ reader.Finalize();
1596
+
1328
1597
  return info;
1329
1598
  }
1330
1599
 
@@ -1375,12 +1644,10 @@ public:
1375
1644
  public:
1376
1645
  DUCKDB_API string ToString() const override;
1377
1646
 
1378
- DUCKDB_API unique_ptr<Constraint> Copy() override;
1647
+ DUCKDB_API unique_ptr<Constraint> Copy() const override;
1379
1648
 
1380
- //! Serialize to a stand-alone binary blob
1381
- DUCKDB_API void Serialize(Serializer &serializer) override;
1382
- //! Deserializes a CheckConstraint
1383
- DUCKDB_API static unique_ptr<Constraint> Deserialize(Deserializer &source);
1649
+ DUCKDB_API void Serialize(FieldWriter &writer) const override;
1650
+ DUCKDB_API static unique_ptr<Constraint> Deserialize(FieldReader &source);
1384
1651
  };
1385
1652
 
1386
1653
  } // namespace duckdb
@@ -1417,12 +1684,12 @@ public:
1417
1684
  public:
1418
1685
  DUCKDB_API string ToString() const override;
1419
1686
 
1420
- DUCKDB_API unique_ptr<Constraint> Copy() override;
1687
+ DUCKDB_API unique_ptr<Constraint> Copy() const override;
1421
1688
 
1422
1689
  //! Serialize to a stand-alone binary blob
1423
- DUCKDB_API void Serialize(Serializer &serializer) override;
1690
+ DUCKDB_API void Serialize(FieldWriter &writer) const override;
1424
1691
  //! Deserializes a ParsedConstraint
1425
- DUCKDB_API static unique_ptr<Constraint> Deserialize(Deserializer &source);
1692
+ DUCKDB_API static unique_ptr<Constraint> Deserialize(FieldReader &source);
1426
1693
  };
1427
1694
 
1428
1695
  } // namespace duckdb
@@ -2398,6 +2665,7 @@ public:
2398
2665
  } // namespace duckdb
2399
2666
 
2400
2667
 
2668
+
2401
2669
  #include <algorithm>
2402
2670
  #include <sstream>
2403
2671
 
@@ -2760,18 +3028,26 @@ vector<LogicalType> TableCatalogEntry::GetTypes() {
2760
3028
 
2761
3029
  void TableCatalogEntry::Serialize(Serializer &serializer) {
2762
3030
  D_ASSERT(!internal);
2763
- serializer.WriteString(schema->name);
2764
- serializer.WriteString(name);
2765
- D_ASSERT(columns.size() <= NumericLimits<uint32_t>::Maximum());
2766
- serializer.Write<uint32_t>((uint32_t)columns.size());
2767
- for (auto &column : columns) {
2768
- column.Serialize(serializer);
2769
- }
2770
- D_ASSERT(constraints.size() <= NumericLimits<uint32_t>::Maximum());
2771
- serializer.Write<uint32_t>((uint32_t)constraints.size());
2772
- for (auto &constraint : constraints) {
2773
- constraint->Serialize(serializer);
2774
- }
3031
+
3032
+ FieldWriter writer(serializer);
3033
+ writer.WriteString(schema->name);
3034
+ writer.WriteString(name);
3035
+ writer.WriteRegularSerializableList(columns);
3036
+ writer.WriteSerializableList(constraints);
3037
+ writer.Finalize();
3038
+ }
3039
+
3040
+ unique_ptr<CreateTableInfo> TableCatalogEntry::Deserialize(Deserializer &source) {
3041
+ auto info = make_unique<CreateTableInfo>();
3042
+
3043
+ FieldReader reader(source);
3044
+ info->schema = reader.ReadRequired<string>();
3045
+ info->table = reader.ReadRequired<string>();
3046
+ info->columns = reader.ReadRequiredSerializableList<ColumnDefinition, ColumnDefinition>();
3047
+ info->constraints = reader.ReadRequiredSerializableList<Constraint>();
3048
+ reader.Finalize();
3049
+
3050
+ return info;
2775
3051
  }
2776
3052
 
2777
3053
  string TableCatalogEntry::ToSQL() {
@@ -2856,26 +3132,6 @@ string TableCatalogEntry::ToSQL() {
2856
3132
  return ss.str();
2857
3133
  }
2858
3134
 
2859
- unique_ptr<CreateTableInfo> TableCatalogEntry::Deserialize(Deserializer &source) {
2860
- auto info = make_unique<CreateTableInfo>();
2861
-
2862
- info->schema = source.Read<string>();
2863
- info->table = source.Read<string>();
2864
- auto column_count = source.Read<uint32_t>();
2865
-
2866
- for (uint32_t i = 0; i < column_count; i++) {
2867
- auto column = ColumnDefinition::Deserialize(source);
2868
- info->columns.push_back(move(column));
2869
- }
2870
- auto constraint_count = source.Read<uint32_t>();
2871
-
2872
- for (uint32_t i = 0; i < constraint_count; i++) {
2873
- auto constraint = Constraint::Deserialize(source);
2874
- info->constraints.push_back(move(constraint));
2875
- }
2876
- return info;
2877
- }
2878
-
2879
3135
  unique_ptr<CatalogEntry> TableCatalogEntry::Copy(ClientContext &context) {
2880
3136
  auto create_info = make_unique<CreateTableInfo>(schema->name, name);
2881
3137
  for (idx_t i = 0; i < columns.size(); i++) {
@@ -2959,30 +3215,35 @@ TableFunctionCatalogEntry::TableFunctionCatalogEntry(Catalog *catalog, SchemaCat
2959
3215
  namespace duckdb {
2960
3216
 
2961
3217
  TypeCatalogEntry::TypeCatalogEntry(Catalog *catalog, SchemaCatalogEntry *schema, CreateTypeInfo *info)
2962
- : StandardEntry(CatalogType::TYPE_ENTRY, schema, catalog, info->name) {
2963
- user_type = make_unique<LogicalType>(*info->type);
3218
+ : StandardEntry(CatalogType::TYPE_ENTRY, schema, catalog, info->name), user_type(info->type) {
2964
3219
  }
2965
3220
 
2966
3221
  void TypeCatalogEntry::Serialize(Serializer &serializer) {
2967
- serializer.WriteString(schema->name);
2968
- serializer.WriteString(name);
2969
- user_type->Serialize(serializer);
3222
+ FieldWriter writer(serializer);
3223
+ writer.WriteString(schema->name);
3224
+ writer.WriteString(name);
3225
+ writer.WriteSerializable(user_type);
3226
+ writer.Finalize();
2970
3227
  }
2971
3228
 
2972
3229
  unique_ptr<CreateTypeInfo> TypeCatalogEntry::Deserialize(Deserializer &source) {
2973
3230
  auto info = make_unique<CreateTypeInfo>();
2974
- info->schema = source.Read<string>();
2975
- info->name = source.Read<string>();
2976
- info->type = make_unique<LogicalType>(LogicalType::Deserialize(source));
3231
+
3232
+ FieldReader reader(source);
3233
+ info->schema = reader.ReadRequired<string>();
3234
+ info->name = reader.ReadRequired<string>();
3235
+ info->type = reader.ReadRequiredSerializable<LogicalType, LogicalType>();
3236
+ reader.Finalize();
3237
+
2977
3238
  return info;
2978
3239
  }
2979
3240
 
2980
3241
  string TypeCatalogEntry::ToSQL() {
2981
3242
  std::stringstream ss;
2982
- switch (user_type->id()) {
3243
+ switch (user_type.id()) {
2983
3244
  case (LogicalTypeId::ENUM): {
2984
- Vector values_insert_order(EnumType::GetValuesInsertOrder(*user_type));
2985
- idx_t size = EnumType::GetSize(*user_type);
3245
+ Vector values_insert_order(EnumType::GetValuesInsertOrder(user_type));
3246
+ idx_t size = EnumType::GetSize(user_type);
2986
3247
  ss << "CREATE TYPE ";
2987
3248
  ss << name;
2988
3249
  ss << " AS ENUM ( ";
@@ -3051,35 +3312,28 @@ unique_ptr<CatalogEntry> ViewCatalogEntry::AlterEntry(ClientContext &context, Al
3051
3312
 
3052
3313
  void ViewCatalogEntry::Serialize(Serializer &serializer) {
3053
3314
  D_ASSERT(!internal);
3054
- serializer.WriteString(schema->name);
3055
- serializer.WriteString(name);
3056
- serializer.WriteString(sql);
3057
- query->Serialize(serializer);
3058
- D_ASSERT(aliases.size() <= NumericLimits<uint32_t>::Maximum());
3059
- serializer.Write<uint32_t>((uint32_t)aliases.size());
3060
- for (auto &alias : aliases) {
3061
- serializer.WriteString(alias);
3062
- }
3063
- serializer.Write<uint32_t>((uint32_t)types.size());
3064
- for (auto &sql_type : types) {
3065
- sql_type.Serialize(serializer);
3066
- }
3315
+ FieldWriter writer(serializer);
3316
+ writer.WriteString(schema->name);
3317
+ writer.WriteString(name);
3318
+ writer.WriteString(sql);
3319
+ writer.WriteSerializable(*query);
3320
+ writer.WriteList<string>(aliases);
3321
+ writer.WriteRegularSerializableList<LogicalType>(types);
3322
+ writer.Finalize();
3067
3323
  }
3068
3324
 
3069
3325
  unique_ptr<CreateViewInfo> ViewCatalogEntry::Deserialize(Deserializer &source) {
3070
3326
  auto info = make_unique<CreateViewInfo>();
3071
- info->schema = source.Read<string>();
3072
- info->view_name = source.Read<string>();
3073
- info->sql = source.Read<string>();
3074
- info->query = SelectStatement::Deserialize(source);
3075
- auto alias_count = source.Read<uint32_t>();
3076
- for (uint32_t i = 0; i < alias_count; i++) {
3077
- info->aliases.push_back(source.Read<string>());
3078
- }
3079
- auto type_count = source.Read<uint32_t>();
3080
- for (uint32_t i = 0; i < type_count; i++) {
3081
- info->types.push_back(LogicalType::Deserialize(source));
3082
- }
3327
+
3328
+ FieldReader reader(source);
3329
+ info->schema = reader.ReadRequired<string>();
3330
+ info->view_name = reader.ReadRequired<string>();
3331
+ info->sql = reader.ReadRequired<string>();
3332
+ info->query = reader.ReadRequiredSerializable<SelectStatement>();
3333
+ info->aliases = reader.ReadRequiredList<string>();
3334
+ info->types = reader.ReadRequiredSerializableList<LogicalType, LogicalType>();
3335
+ reader.Finalize();
3336
+
3083
3337
  return info;
3084
3338
  }
3085
3339
 
@@ -4265,7 +4519,7 @@ void DependencyManager::AlterObject(ClientContext &context, CatalogEntry *old_ob
4265
4519
  auto table = (TableCatalogEntry *)new_obj;
4266
4520
  bool deleted_dependency = true;
4267
4521
  for (auto &column : table->columns) {
4268
- if (column.type == *user_type->user_type) {
4522
+ if (column.type == user_type->user_type) {
4269
4523
  deleted_dependency = false;
4270
4524
  break;
4271
4525
  }
@@ -11993,6 +12247,92 @@ string ExceptionFormatValue::Format(const string &msg, vector<ExceptionFormatVal
11993
12247
  } // namespace duckdb
11994
12248
 
11995
12249
 
12250
+ namespace duckdb {
12251
+
12252
+ //===--------------------------------------------------------------------===//
12253
+ // Field Writer
12254
+ //===--------------------------------------------------------------------===//
12255
+ FieldWriter::FieldWriter(Serializer &serializer_p)
12256
+ : serializer(serializer_p), buffer(make_unique<BufferedSerializer>()), field_count(0) {
12257
+ }
12258
+
12259
+ FieldWriter::~FieldWriter() {
12260
+ if (Exception::UncaughtException()) {
12261
+ return;
12262
+ }
12263
+ // finalize should always have been called, unless this is destroyed as part of stack unwinding
12264
+ D_ASSERT(!buffer);
12265
+ }
12266
+
12267
+ void FieldWriter::WriteData(const_data_ptr_t buffer_ptr, idx_t write_size) {
12268
+ D_ASSERT(buffer);
12269
+ buffer->WriteData(buffer_ptr, write_size);
12270
+ }
12271
+
12272
+ template <>
12273
+ void FieldWriter::Write(const string &val) {
12274
+ Write<uint32_t>((uint32_t)val.size());
12275
+ if (!val.empty()) {
12276
+ WriteData((const_data_ptr_t)val.c_str(), val.size());
12277
+ }
12278
+ }
12279
+
12280
+ void FieldWriter::Finalize() {
12281
+ D_ASSERT(buffer);
12282
+
12283
+ serializer.Write<uint32_t>(field_count);
12284
+ serializer.Write<uint64_t>(buffer->blob.size);
12285
+ serializer.WriteData(buffer->blob.data.get(), buffer->blob.size);
12286
+
12287
+ buffer.reset();
12288
+ }
12289
+
12290
+ //===--------------------------------------------------------------------===//
12291
+ // Field Deserializer
12292
+ //===--------------------------------------------------------------------===//
12293
+ FieldDeserializer::FieldDeserializer(Deserializer &root) : root(root), remaining_data(idx_t(-1)) {
12294
+ }
12295
+
12296
+ void FieldDeserializer::ReadData(data_ptr_t buffer, idx_t read_size) {
12297
+ D_ASSERT(remaining_data != idx_t(-1));
12298
+ D_ASSERT(read_size <= remaining_data);
12299
+ root.ReadData(buffer, read_size);
12300
+ remaining_data -= read_size;
12301
+ }
12302
+
12303
+ idx_t FieldDeserializer::RemainingData() {
12304
+ return remaining_data;
12305
+ }
12306
+
12307
+ void FieldDeserializer::SetRemainingData(idx_t remaining_data) {
12308
+ this->remaining_data = remaining_data;
12309
+ }
12310
+
12311
+ //===--------------------------------------------------------------------===//
12312
+ // Field Reader
12313
+ //===--------------------------------------------------------------------===//
12314
+ FieldReader::FieldReader(Deserializer &source_p) : source(source_p), field_count(0) {
12315
+ max_field_count = source_p.Read<uint32_t>();
12316
+ total_size = source_p.Read<uint64_t>();
12317
+ D_ASSERT(max_field_count > 0);
12318
+ source.SetRemainingData(total_size);
12319
+ }
12320
+
12321
+ FieldReader::~FieldReader() {
12322
+ }
12323
+
12324
+ void FieldReader::Finalize() {
12325
+ if (field_count < max_field_count) {
12326
+ // we can handle this case by calling source.ReadData(buffer, source.RemainingData())
12327
+ throw SerializationException("Not all fields were read. This file might have been written with a newer version "
12328
+ "of DuckDB and is incompatible with this version of DuckDB.");
12329
+ }
12330
+ D_ASSERT(source.RemainingData() == 0);
12331
+ }
12332
+
12333
+ } // namespace duckdb
12334
+
12335
+
11996
12336
 
11997
12337
 
11998
12338
 
@@ -23894,6 +24234,9 @@ namespace duckdb {
23894
24234
  template <>
23895
24235
  string Deserializer::Read() {
23896
24236
  uint32_t size = Read<uint32_t>();
24237
+ if (size == 0) {
24238
+ return string();
24239
+ }
23897
24240
  auto buffer = unique_ptr<data_t[]>(new data_t[size]);
23898
24241
  ReadData(buffer.get(), size);
23899
24242
  return string((char *)buffer.get(), size);
@@ -35503,10 +35846,12 @@ bool Value::TryCastAs(const LogicalType &target_type, bool strict) {
35503
35846
  return true;
35504
35847
  }
35505
35848
 
35506
- void Value::Serialize(Serializer &serializer) {
35507
- type_.Serialize(serializer);
35508
- serializer.Write<bool>(IsNull());
35849
+ void Value::Serialize(Serializer &main_serializer) const {
35850
+ FieldWriter writer(main_serializer);
35851
+ writer.WriteSerializable(type_);
35852
+ writer.WriteField<bool>(IsNull());
35509
35853
  if (!IsNull()) {
35854
+ auto &serializer = writer.GetSerializer();
35510
35855
  switch (type_.InternalType()) {
35511
35856
  case PhysicalType::BOOL:
35512
35857
  serializer.Write<int8_t>(value_.boolean);
@@ -35557,16 +35902,19 @@ void Value::Serialize(Serializer &serializer) {
35557
35902
  }
35558
35903
  }
35559
35904
  }
35905
+ writer.Finalize();
35560
35906
  }
35561
35907
 
35562
- Value Value::Deserialize(Deserializer &source) {
35563
- auto type = LogicalType::Deserialize(source);
35564
- auto is_null = source.Read<bool>();
35908
+ Value Value::Deserialize(Deserializer &main_source) {
35909
+ FieldReader reader(main_source);
35910
+ auto type = reader.ReadRequiredSerializable<LogicalType, LogicalType>();
35911
+ auto is_null = reader.ReadRequired<bool>();
35565
35912
  Value new_value = Value(type);
35566
35913
  if (is_null) {
35567
35914
  return new_value;
35568
35915
  }
35569
35916
  new_value.is_null = false;
35917
+ auto &source = reader.GetSource();
35570
35918
  switch (type.InternalType()) {
35571
35919
  case PhysicalType::BOOL:
35572
35920
  new_value.value_.boolean = source.Read<int8_t>();
@@ -35613,9 +35961,11 @@ Value Value::Deserialize(Deserializer &source) {
35613
35961
  default: {
35614
35962
  Vector v(type);
35615
35963
  v.Deserialize(1, source);
35616
- return v.GetValue(0);
35964
+ new_value = v.GetValue(0);
35965
+ break;
35617
35966
  }
35618
35967
  }
35968
+ reader.Finalize();
35619
35969
  return new_value;
35620
35970
  }
35621
35971
 
@@ -35688,8 +36038,6 @@ bool Value::IsValid(double value) {
35688
36038
 
35689
36039
 
35690
36040
 
35691
-
35692
-
35693
36041
  #include <cstring> // strlen() on Solaris
35694
36042
 
35695
36043
  namespace duckdb {
@@ -38181,13 +38529,13 @@ struct ExtraTypeInfo {
38181
38529
  ExtraTypeInfoType type;
38182
38530
 
38183
38531
  public:
38184
- virtual bool Equals(ExtraTypeInfo *other) = 0;
38532
+ virtual bool Equals(ExtraTypeInfo *other) const = 0;
38185
38533
  //! Serializes a ExtraTypeInfo to a stand-alone binary blob
38186
- virtual void Serialize(Serializer &serializer) = 0;
38534
+ virtual void Serialize(FieldWriter &writer) const = 0;
38187
38535
  //! Serializes a ExtraTypeInfo to a stand-alone binary blob
38188
- static void Serialize(ExtraTypeInfo *info, Serializer &serializer);
38536
+ static void Serialize(ExtraTypeInfo *info, FieldWriter &writer);
38189
38537
  //! Deserializes a blob back into an ExtraTypeInfo
38190
- static shared_ptr<ExtraTypeInfo> Deserialize(Deserializer &source);
38538
+ static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader);
38191
38539
  };
38192
38540
 
38193
38541
  //===--------------------------------------------------------------------===//
@@ -38202,7 +38550,7 @@ struct DecimalTypeInfo : public ExtraTypeInfo {
38202
38550
  uint8_t scale;
38203
38551
 
38204
38552
  public:
38205
- bool Equals(ExtraTypeInfo *other_p) override {
38553
+ bool Equals(ExtraTypeInfo *other_p) const override {
38206
38554
  if (!other_p) {
38207
38555
  return false;
38208
38556
  }
@@ -38213,14 +38561,14 @@ public:
38213
38561
  return width == other.width && scale == other.scale;
38214
38562
  }
38215
38563
 
38216
- void Serialize(Serializer &serializer) override {
38217
- serializer.Write<uint8_t>(width);
38218
- serializer.Write<uint8_t>(scale);
38564
+ void Serialize(FieldWriter &writer) const override {
38565
+ writer.WriteField<uint8_t>(width);
38566
+ writer.WriteField<uint8_t>(scale);
38219
38567
  }
38220
38568
 
38221
- static shared_ptr<ExtraTypeInfo> Deserialize(Deserializer &source) {
38222
- auto width = source.Read<uint8_t>();
38223
- auto scale = source.Read<uint8_t>();
38569
+ static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
38570
+ auto width = reader.ReadRequired<uint8_t>();
38571
+ auto scale = reader.ReadRequired<uint8_t>();
38224
38572
  return make_shared<DecimalTypeInfo>(width, scale);
38225
38573
  }
38226
38574
  };
@@ -38255,17 +38603,17 @@ struct StringTypeInfo : public ExtraTypeInfo {
38255
38603
  string collation;
38256
38604
 
38257
38605
  public:
38258
- bool Equals(ExtraTypeInfo *other_p) override {
38606
+ bool Equals(ExtraTypeInfo *other_p) const override {
38259
38607
  // collation info has no impact on equality
38260
38608
  return true;
38261
38609
  }
38262
38610
 
38263
- void Serialize(Serializer &serializer) override {
38264
- serializer.WriteString(collation);
38611
+ void Serialize(FieldWriter &writer) const override {
38612
+ writer.WriteString(collation);
38265
38613
  }
38266
38614
 
38267
- static shared_ptr<ExtraTypeInfo> Deserialize(Deserializer &source) {
38268
- auto collation = source.Read<string>();
38615
+ static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
38616
+ auto collation = reader.ReadRequired<string>();
38269
38617
  return make_shared<StringTypeInfo>(move(collation));
38270
38618
  }
38271
38619
  };
@@ -38297,7 +38645,7 @@ struct ListTypeInfo : public ExtraTypeInfo {
38297
38645
  LogicalType child_type;
38298
38646
 
38299
38647
  public:
38300
- bool Equals(ExtraTypeInfo *other_p) override {
38648
+ bool Equals(ExtraTypeInfo *other_p) const override {
38301
38649
  if (!other_p) {
38302
38650
  return false;
38303
38651
  }
@@ -38308,12 +38656,12 @@ public:
38308
38656
  return child_type == other.child_type;
38309
38657
  }
38310
38658
 
38311
- void Serialize(Serializer &serializer) override {
38312
- child_type.Serialize(serializer);
38659
+ void Serialize(FieldWriter &writer) const override {
38660
+ writer.WriteSerializable(child_type);
38313
38661
  }
38314
38662
 
38315
- static shared_ptr<ExtraTypeInfo> Deserialize(Deserializer &source) {
38316
- auto child_type = LogicalType::Deserialize(source);
38663
+ static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
38664
+ auto child_type = reader.ReadRequiredSerializable<LogicalType, LogicalType>();
38317
38665
  return make_shared<ListTypeInfo>(move(child_type));
38318
38666
  }
38319
38667
  };
@@ -38341,7 +38689,7 @@ struct StructTypeInfo : public ExtraTypeInfo {
38341
38689
  child_list_t<LogicalType> child_types;
38342
38690
 
38343
38691
  public:
38344
- bool Equals(ExtraTypeInfo *other_p) override {
38692
+ bool Equals(ExtraTypeInfo *other_p) const override {
38345
38693
  if (!other_p) {
38346
38694
  return false;
38347
38695
  }
@@ -38352,17 +38700,19 @@ public:
38352
38700
  return child_types == other.child_types;
38353
38701
  }
38354
38702
 
38355
- void Serialize(Serializer &serializer) override {
38356
- serializer.Write<uint32_t>(child_types.size());
38703
+ void Serialize(FieldWriter &writer) const override {
38704
+ writer.WriteField<uint32_t>(child_types.size());
38705
+ auto &serializer = writer.GetSerializer();
38357
38706
  for (idx_t i = 0; i < child_types.size(); i++) {
38358
38707
  serializer.WriteString(child_types[i].first);
38359
38708
  child_types[i].second.Serialize(serializer);
38360
38709
  }
38361
38710
  }
38362
38711
 
38363
- static shared_ptr<ExtraTypeInfo> Deserialize(Deserializer &source) {
38712
+ static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
38364
38713
  child_list_t<LogicalType> child_list;
38365
- auto child_types_size = source.Read<uint32_t>();
38714
+ auto child_types_size = reader.ReadRequired<uint32_t>();
38715
+ auto &source = reader.GetSource();
38366
38716
  for (uint32_t i = 0; i < child_types_size; i++) {
38367
38717
  auto name = source.Read<string>();
38368
38718
  auto type = LogicalType::Deserialize(source);
@@ -38436,7 +38786,7 @@ struct UserTypeInfo : public ExtraTypeInfo {
38436
38786
  string user_type_name;
38437
38787
 
38438
38788
  public:
38439
- bool Equals(ExtraTypeInfo *other_p) override {
38789
+ bool Equals(ExtraTypeInfo *other_p) const override {
38440
38790
  if (!other_p) {
38441
38791
  return false;
38442
38792
  }
@@ -38447,12 +38797,12 @@ public:
38447
38797
  return other.user_type_name == user_type_name;
38448
38798
  }
38449
38799
 
38450
- void Serialize(Serializer &serializer) override {
38451
- serializer.WriteString(user_type_name);
38800
+ void Serialize(FieldWriter &writer) const override {
38801
+ writer.WriteString(user_type_name);
38452
38802
  }
38453
38803
 
38454
- static shared_ptr<ExtraTypeInfo> Deserialize(Deserializer &source) {
38455
- auto enum_name = source.Read<string>();
38804
+ static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
38805
+ auto enum_name = reader.ReadRequired<string>();
38456
38806
  return make_shared<UserTypeInfo>(move(enum_name));
38457
38807
  }
38458
38808
  };
@@ -38484,7 +38834,7 @@ struct EnumTypeInfo : public ExtraTypeInfo {
38484
38834
 
38485
38835
  public:
38486
38836
  // Equalities are only used in enums with different catalog entries
38487
- bool Equals(ExtraTypeInfo *other_p) override {
38837
+ bool Equals(ExtraTypeInfo *other_p) const override {
38488
38838
  if (!other_p) {
38489
38839
  return false;
38490
38840
  }
@@ -38508,10 +38858,11 @@ public:
38508
38858
  }
38509
38859
  return true;
38510
38860
  }
38511
- void Serialize(Serializer &serializer) override {
38512
- serializer.Write<uint32_t>(size);
38513
- serializer.WriteString(enum_name);
38514
- values_insert_order.Serialize(size, serializer);
38861
+
38862
+ void Serialize(FieldWriter &writer) const override {
38863
+ writer.WriteField<uint32_t>(size);
38864
+ writer.WriteString(enum_name);
38865
+ ((Vector &)values_insert_order).Serialize(size, writer.GetSerializer());
38515
38866
  }
38516
38867
  };
38517
38868
 
@@ -38523,10 +38874,11 @@ struct EnumTypeInfoTemplated : public EnumTypeInfo {
38523
38874
  values[values_insert_order_p.GetValue(count).ToString()] = count;
38524
38875
  }
38525
38876
  }
38526
- static shared_ptr<EnumTypeInfoTemplated> Deserialize(Deserializer &source, uint32_t size) {
38527
- auto enum_name = source.Read<string>();
38877
+
38878
+ static shared_ptr<EnumTypeInfoTemplated> Deserialize(FieldReader &reader, uint32_t size) {
38879
+ auto enum_name = reader.ReadRequired<string>();
38528
38880
  Vector values_insert_order(LogicalType::VARCHAR, size);
38529
- values_insert_order.Deserialize(size, source);
38881
+ values_insert_order.Deserialize(size, reader.GetSource());
38530
38882
  return make_shared<EnumTypeInfoTemplated>(move(enum_name), values_insert_order, size);
38531
38883
  }
38532
38884
  unordered_map<string, T> values;
@@ -38630,39 +38982,39 @@ PhysicalType EnumType::GetPhysicalType(idx_t size) {
38630
38982
  //===--------------------------------------------------------------------===//
38631
38983
  // Extra Type Info
38632
38984
  //===--------------------------------------------------------------------===//
38633
- void ExtraTypeInfo::Serialize(ExtraTypeInfo *info, Serializer &serializer) {
38985
+ void ExtraTypeInfo::Serialize(ExtraTypeInfo *info, FieldWriter &writer) {
38634
38986
  if (!info) {
38635
- serializer.Write<ExtraTypeInfoType>(ExtraTypeInfoType::INVALID_TYPE_INFO);
38987
+ writer.WriteField<ExtraTypeInfoType>(ExtraTypeInfoType::INVALID_TYPE_INFO);
38636
38988
  } else {
38637
- serializer.Write<ExtraTypeInfoType>(info->type);
38638
- info->Serialize(serializer);
38989
+ writer.WriteField<ExtraTypeInfoType>(info->type);
38990
+ info->Serialize(writer);
38639
38991
  }
38640
38992
  }
38641
- shared_ptr<ExtraTypeInfo> ExtraTypeInfo::Deserialize(Deserializer &source) {
38642
- auto type = source.Read<ExtraTypeInfoType>();
38993
+ shared_ptr<ExtraTypeInfo> ExtraTypeInfo::Deserialize(FieldReader &reader) {
38994
+ auto type = reader.ReadRequired<ExtraTypeInfoType>();
38643
38995
  switch (type) {
38644
38996
  case ExtraTypeInfoType::INVALID_TYPE_INFO:
38645
38997
  return nullptr;
38646
38998
  case ExtraTypeInfoType::DECIMAL_TYPE_INFO:
38647
- return DecimalTypeInfo::Deserialize(source);
38999
+ return DecimalTypeInfo::Deserialize(reader);
38648
39000
  case ExtraTypeInfoType::STRING_TYPE_INFO:
38649
- return StringTypeInfo::Deserialize(source);
39001
+ return StringTypeInfo::Deserialize(reader);
38650
39002
  case ExtraTypeInfoType::LIST_TYPE_INFO:
38651
- return ListTypeInfo::Deserialize(source);
39003
+ return ListTypeInfo::Deserialize(reader);
38652
39004
  case ExtraTypeInfoType::STRUCT_TYPE_INFO:
38653
- return StructTypeInfo::Deserialize(source);
39005
+ return StructTypeInfo::Deserialize(reader);
38654
39006
  case ExtraTypeInfoType::USER_TYPE_INFO:
38655
- return UserTypeInfo::Deserialize(source);
39007
+ return UserTypeInfo::Deserialize(reader);
38656
39008
  case ExtraTypeInfoType::ENUM_TYPE_INFO: {
38657
- auto enum_size = source.Read<uint32_t>();
39009
+ auto enum_size = reader.ReadRequired<uint32_t>();
38658
39010
  auto enum_internal_type = EnumType::GetPhysicalType(enum_size);
38659
39011
  switch (enum_internal_type) {
38660
39012
  case PhysicalType::UINT8:
38661
- return EnumTypeInfoTemplated<uint8_t>::Deserialize(source, enum_size);
39013
+ return EnumTypeInfoTemplated<uint8_t>::Deserialize(reader, enum_size);
38662
39014
  case PhysicalType::UINT16:
38663
- return EnumTypeInfoTemplated<uint16_t>::Deserialize(source, enum_size);
39015
+ return EnumTypeInfoTemplated<uint16_t>::Deserialize(reader, enum_size);
38664
39016
  case PhysicalType::UINT32:
38665
- return EnumTypeInfoTemplated<uint32_t>::Deserialize(source, enum_size);
39017
+ return EnumTypeInfoTemplated<uint32_t>::Deserialize(reader, enum_size);
38666
39018
  default:
38667
39019
  throw InternalException("Invalid Physical Type for ENUMs");
38668
39020
  }
@@ -38681,13 +39033,18 @@ LogicalType::~LogicalType() {
38681
39033
  }
38682
39034
 
38683
39035
  void LogicalType::Serialize(Serializer &serializer) const {
38684
- serializer.Write<LogicalTypeId>(id_);
38685
- ExtraTypeInfo::Serialize(type_info_.get(), serializer);
39036
+ FieldWriter writer(serializer);
39037
+ writer.WriteField<LogicalTypeId>(id_);
39038
+ ExtraTypeInfo::Serialize(type_info_.get(), writer);
39039
+ writer.Finalize();
38686
39040
  }
38687
39041
 
38688
39042
  LogicalType LogicalType::Deserialize(Deserializer &source) {
38689
- auto id = source.Read<LogicalTypeId>();
38690
- auto info = ExtraTypeInfo::Deserialize(source);
39043
+ FieldReader reader(source);
39044
+ auto id = reader.ReadRequired<LogicalTypeId>();
39045
+ auto info = ExtraTypeInfo::Deserialize(reader);
39046
+ reader.Finalize();
39047
+
38691
39048
  return LogicalType(id, move(info));
38692
39049
  }
38693
39050
 
@@ -80324,14 +80681,14 @@ public:
80324
80681
 
80325
80682
  public:
80326
80683
  void Merge(const BaseStatistics &other) override;
80327
- FilterPropagateResult CheckZonemap(ExpressionType comparison_type, const Value &constant);
80684
+ FilterPropagateResult CheckZonemap(ExpressionType comparison_type, const Value &constant) const;
80328
80685
 
80329
- unique_ptr<BaseStatistics> Copy() override;
80330
- void Serialize(Serializer &serializer) override;
80331
- static unique_ptr<BaseStatistics> Deserialize(Deserializer &source, LogicalType type);
80332
- void Verify(Vector &vector, const SelectionVector &sel, idx_t count) override;
80686
+ unique_ptr<BaseStatistics> Copy() const override;
80687
+ void Serialize(FieldWriter &serializer) const override;
80688
+ static unique_ptr<BaseStatistics> Deserialize(FieldReader &source, LogicalType type);
80689
+ void Verify(Vector &vector, const SelectionVector &sel, idx_t count) const override;
80333
80690
 
80334
- string ToString() override;
80691
+ string ToString() const override;
80335
80692
  };
80336
80693
 
80337
80694
  } // namespace duckdb
@@ -89142,14 +89499,14 @@ public:
89142
89499
 
89143
89500
  public:
89144
89501
  void Merge(const BaseStatistics &other) override;
89145
- FilterPropagateResult CheckZonemap(ExpressionType comparison_type, const Value &constant);
89502
+ FilterPropagateResult CheckZonemap(ExpressionType comparison_type, const Value &constant) const;
89146
89503
 
89147
- unique_ptr<BaseStatistics> Copy() override;
89148
- void Serialize(Serializer &serializer) override;
89149
- static unique_ptr<BaseStatistics> Deserialize(Deserializer &source, LogicalType type);
89150
- void Verify(Vector &vector, const SelectionVector &sel, idx_t count) override;
89504
+ unique_ptr<BaseStatistics> Copy() const override;
89505
+ void Serialize(FieldWriter &writer) const override;
89506
+ static unique_ptr<BaseStatistics> Deserialize(FieldReader &reader, LogicalType type);
89507
+ void Verify(Vector &vector, const SelectionVector &sel, idx_t count) const override;
89151
89508
 
89152
- string ToString() override;
89509
+ string ToString() const override;
89153
89510
  };
89154
89511
 
89155
89512
  } // namespace duckdb
@@ -95682,12 +96039,14 @@ public:
95682
96039
  public:
95683
96040
  bool Equals(const QueryNode *other) const override;
95684
96041
  //! Create a copy of this SelectNode
95685
- unique_ptr<QueryNode> Copy() override;
95686
- //! Serializes a SelectNode to a stand-alone binary blob
95687
- void Serialize(Serializer &serializer) override;
95688
- //! Deserializes a blob back into a SelectNode
95689
- static unique_ptr<QueryNode> Deserialize(Deserializer &source);
96042
+ unique_ptr<QueryNode> Copy() const override;
96043
+
96044
+ //! Serializes a QueryNode to a stand-alone binary blob
96045
+ void Serialize(FieldWriter &writer) const override;
96046
+ //! Deserializes a blob back into a QueryNode
96047
+ static unique_ptr<QueryNode> Deserialize(FieldReader &reader);
95690
96048
  };
96049
+
95691
96050
  } // namespace duckdb
95692
96051
 
95693
96052
 
@@ -99068,7 +99427,12 @@ unique_ptr<PendingQueryResult> ClientContext::PendingStatementOrPreparedStatemen
99068
99427
  auto copied_statement = statement->Copy();
99069
99428
  if (statement->type == StatementType::SELECT_STATEMENT) {
99070
99429
  // in case this is a select query, we verify the original statement
99071
- string error = VerifyQuery(lock, query, move(statement));
99430
+ string error;
99431
+ try {
99432
+ error = VerifyQuery(lock, query, move(statement));
99433
+ } catch (std::exception &ex) {
99434
+ error = ex.what();
99435
+ }
99072
99436
  if (!error.empty()) {
99073
99437
  // error in verifying query
99074
99438
  return make_unique<PendingQueryResult>(error);
@@ -110209,6 +110573,79 @@ string CreateViewRelation::ToString(idx_t depth) {
110209
110573
  return str + child->ToString(depth + 1);
110210
110574
  }
110211
110575
 
110576
+ } // namespace duckdb
110577
+ //===----------------------------------------------------------------------===//
110578
+ // DuckDB
110579
+ //
110580
+ // duckdb/main/relation/cross_product_relation.hpp
110581
+ //
110582
+ //
110583
+ //===----------------------------------------------------------------------===//
110584
+
110585
+
110586
+
110587
+
110588
+
110589
+ namespace duckdb {
110590
+
110591
+ class CrossProductRelation : public Relation {
110592
+ public:
110593
+ CrossProductRelation(shared_ptr<Relation> left, shared_ptr<Relation> right);
110594
+
110595
+ shared_ptr<Relation> left;
110596
+ shared_ptr<Relation> right;
110597
+ vector<ColumnDefinition> columns;
110598
+
110599
+ public:
110600
+ unique_ptr<QueryNode> GetQueryNode() override;
110601
+
110602
+ const vector<ColumnDefinition> &Columns() override;
110603
+ string ToString(idx_t depth) override;
110604
+
110605
+ unique_ptr<TableRef> GetTableRef() override;
110606
+ };
110607
+
110608
+ } // namespace duckdb
110609
+
110610
+
110611
+
110612
+
110613
+
110614
+
110615
+ namespace duckdb {
110616
+
110617
+ CrossProductRelation::CrossProductRelation(shared_ptr<Relation> left_p, shared_ptr<Relation> right_p)
110618
+ : Relation(left_p->context, RelationType::CROSS_PRODUCT_RELATION), left(move(left_p)), right(move(right_p)) {
110619
+ if (&left->context != &right->context) {
110620
+ throw Exception("Cannot combine LEFT and RIGHT relations of different connections!");
110621
+ }
110622
+ context.TryBindRelation(*this, this->columns);
110623
+ }
110624
+
110625
+ unique_ptr<QueryNode> CrossProductRelation::GetQueryNode() {
110626
+ auto result = make_unique<SelectNode>();
110627
+ result->select_list.push_back(make_unique<StarExpression>());
110628
+ result->from_table = GetTableRef();
110629
+ return move(result);
110630
+ }
110631
+
110632
+ unique_ptr<TableRef> CrossProductRelation::GetTableRef() {
110633
+ auto cross_product_ref = make_unique<CrossProductRef>();
110634
+ cross_product_ref->left = left->GetTableRef();
110635
+ cross_product_ref->right = right->GetTableRef();
110636
+ return move(cross_product_ref);
110637
+ }
110638
+
110639
+ const vector<ColumnDefinition> &CrossProductRelation::Columns() {
110640
+ return this->columns;
110641
+ }
110642
+
110643
+ string CrossProductRelation::ToString(idx_t depth) {
110644
+ string str = RenderWhitespace(depth);
110645
+ str = "Cross Product";
110646
+ return str + "\n" + left->ToString(depth + 1) + right->ToString(depth + 1);
110647
+ }
110648
+
110212
110649
  } // namespace duckdb
110213
110650
  //===----------------------------------------------------------------------===//
110214
110651
  // DuckDB
@@ -110539,12 +110976,12 @@ public:
110539
110976
  public:
110540
110977
  bool Equals(const QueryNode *other) const override;
110541
110978
  //! Create a copy of this SelectNode
110542
- unique_ptr<QueryNode> Copy() override;
110979
+ unique_ptr<QueryNode> Copy() const override;
110543
110980
 
110544
- //! Serializes a SelectNode to a stand-alone binary blob
110545
- void Serialize(Serializer &serializer) override;
110546
- //! Deserializes a blob back into a SelectNode
110547
- static unique_ptr<QueryNode> Deserialize(Deserializer &source);
110981
+ //! Serializes a QueryNode to a stand-alone binary blob
110982
+ void Serialize(FieldWriter &writer) const override;
110983
+ //! Deserializes a blob back into a QueryNode
110984
+ static unique_ptr<QueryNode> Deserialize(FieldReader &reader);
110548
110985
  };
110549
110986
 
110550
110987
  } // namespace duckdb
@@ -110793,8 +111230,8 @@ const vector<ColumnDefinition> &JoinRelation::Columns() {
110793
111230
 
110794
111231
  string JoinRelation::ToString(idx_t depth) {
110795
111232
  string str = RenderWhitespace(depth);
110796
- str = "Join";
110797
- return str + "\n" + left->ToString(depth + 1) + right->ToString(depth + 1);
111233
+ str = "Join " + JoinTypeToString(join_type);
111234
+ return str + "\n" + left->ToString(depth + 1) + "\n" + right->ToString(depth + 1);
110798
111235
  }
110799
111236
 
110800
111237
  } // namespace duckdb
@@ -111855,6 +112292,7 @@ string WriteCSVRelation::ToString(idx_t depth) {
111855
112292
 
111856
112293
 
111857
112294
 
112295
+
111858
112296
 
111859
112297
 
111860
112298
  namespace duckdb {
@@ -111967,6 +112405,10 @@ shared_ptr<Relation> Relation::Join(const shared_ptr<Relation> &other, const str
111967
112405
  }
111968
112406
  }
111969
112407
 
112408
+ shared_ptr<Relation> Relation::CrossProduct(const shared_ptr<Relation> &other) {
112409
+ return make_shared<CrossProductRelation>(shared_from_this(), other);
112410
+ }
112411
+
111970
112412
  shared_ptr<Relation> Relation::Union(const shared_ptr<Relation> &other) {
111971
112413
  return make_shared<SetOpRelation>(shared_from_this(), other, SetOperationType::UNION);
111972
112414
  }
@@ -127557,15 +127999,20 @@ ColumnDefinition ColumnDefinition::Copy() const {
127557
127999
  }
127558
128000
 
127559
128001
  void ColumnDefinition::Serialize(Serializer &serializer) const {
127560
- serializer.WriteString(name);
127561
- type.Serialize(serializer);
127562
- serializer.WriteOptional(default_value);
128002
+ FieldWriter writer(serializer);
128003
+ writer.WriteString(name);
128004
+ writer.WriteSerializable(type);
128005
+ writer.WriteOptional(default_value);
128006
+ writer.Finalize();
127563
128007
  }
127564
128008
 
127565
128009
  ColumnDefinition ColumnDefinition::Deserialize(Deserializer &source) {
127566
- auto column_name = source.Read<string>();
127567
- auto column_type = LogicalType::Deserialize(source);
127568
- auto default_value = source.ReadOptional<ParsedExpression>();
128010
+ FieldReader reader(source);
128011
+ auto column_name = reader.ReadRequired<string>();
128012
+ auto column_type = reader.ReadRequiredSerializable<LogicalType, LogicalType>();
128013
+ auto default_value = reader.ReadOptional<ParsedExpression>(nullptr);
128014
+ reader.Finalize();
128015
+
127569
128016
  return ColumnDefinition(column_name, column_type, move(default_value));
127570
128017
  }
127571
128018
 
@@ -127576,6 +128023,7 @@ ColumnDefinition ColumnDefinition::Deserialize(Deserializer &source) {
127576
128023
 
127577
128024
 
127578
128025
 
128026
+
127579
128027
  namespace duckdb {
127580
128028
 
127581
128029
  Constraint::Constraint(ConstraintType type) : type(type) {
@@ -127584,25 +128032,35 @@ Constraint::Constraint(ConstraintType type) : type(type) {
127584
128032
  Constraint::~Constraint() {
127585
128033
  }
127586
128034
 
127587
- void Constraint::Serialize(Serializer &serializer) {
127588
- serializer.Write<ConstraintType>(type);
128035
+ void Constraint::Serialize(Serializer &serializer) const {
128036
+ FieldWriter writer(serializer);
128037
+ writer.WriteField<ConstraintType>(type);
128038
+ Serialize(writer);
128039
+ writer.Finalize();
127589
128040
  }
127590
128041
 
127591
128042
  unique_ptr<Constraint> Constraint::Deserialize(Deserializer &source) {
127592
- auto type = source.Read<ConstraintType>();
128043
+ FieldReader reader(source);
128044
+ auto type = reader.ReadRequired<ConstraintType>();
128045
+ unique_ptr<Constraint> result;
127593
128046
  switch (type) {
127594
128047
  case ConstraintType::NOT_NULL:
127595
- return NotNullConstraint::Deserialize(source);
128048
+ result = NotNullConstraint::Deserialize(reader);
128049
+ break;
127596
128050
  case ConstraintType::CHECK:
127597
- return CheckConstraint::Deserialize(source);
128051
+ result = CheckConstraint::Deserialize(reader);
128052
+ break;
127598
128053
  case ConstraintType::UNIQUE:
127599
- return UniqueConstraint::Deserialize(source);
128054
+ result = UniqueConstraint::Deserialize(reader);
128055
+ break;
127600
128056
  default:
127601
128057
  throw InternalException("Unrecognized constraint type for serialization");
127602
128058
  }
128059
+ reader.Finalize();
128060
+ return result;
127603
128061
  }
127604
128062
 
127605
- void Constraint::Print() {
128063
+ void Constraint::Print() const {
127606
128064
  Printer::Print(ToString());
127607
128065
  }
127608
128066
 
@@ -127621,17 +128079,16 @@ string CheckConstraint::ToString() const {
127621
128079
  return "CHECK(" + expression->ToString() + ")";
127622
128080
  }
127623
128081
 
127624
- unique_ptr<Constraint> CheckConstraint::Copy() {
128082
+ unique_ptr<Constraint> CheckConstraint::Copy() const {
127625
128083
  return make_unique<CheckConstraint>(expression->Copy());
127626
128084
  }
127627
128085
 
127628
- void CheckConstraint::Serialize(Serializer &serializer) {
127629
- Constraint::Serialize(serializer);
127630
- expression->Serialize(serializer);
128086
+ void CheckConstraint::Serialize(FieldWriter &writer) const {
128087
+ writer.WriteSerializable(*expression);
127631
128088
  }
127632
128089
 
127633
- unique_ptr<Constraint> CheckConstraint::Deserialize(Deserializer &source) {
127634
- auto expression = ParsedExpression::Deserialize(source);
128090
+ unique_ptr<Constraint> CheckConstraint::Deserialize(FieldReader &source) {
128091
+ auto expression = source.ReadRequiredSerializable<ParsedExpression>();
127635
128092
  return make_unique<CheckConstraint>(move(expression));
127636
128093
  }
127637
128094
 
@@ -127652,17 +128109,16 @@ string NotNullConstraint::ToString() const {
127652
128109
  return "NOT NULL";
127653
128110
  }
127654
128111
 
127655
- unique_ptr<Constraint> NotNullConstraint::Copy() {
128112
+ unique_ptr<Constraint> NotNullConstraint::Copy() const {
127656
128113
  return make_unique<NotNullConstraint>(index);
127657
128114
  }
127658
128115
 
127659
- void NotNullConstraint::Serialize(Serializer &serializer) {
127660
- Constraint::Serialize(serializer);
127661
- serializer.Write<idx_t>(index);
128116
+ void NotNullConstraint::Serialize(FieldWriter &writer) const {
128117
+ writer.WriteField<idx_t>(index);
127662
128118
  }
127663
128119
 
127664
- unique_ptr<Constraint> NotNullConstraint::Deserialize(Deserializer &source) {
127665
- auto index = source.Read<idx_t>();
128120
+ unique_ptr<Constraint> NotNullConstraint::Deserialize(FieldReader &source) {
128121
+ auto index = source.ReadRequired<idx_t>();
127666
128122
  return make_unique_base<Constraint, NotNullConstraint>(index);
127667
128123
  }
127668
128124
 
@@ -127694,7 +128150,7 @@ string UniqueConstraint::ToString() const {
127694
128150
  return base + ")";
127695
128151
  }
127696
128152
 
127697
- unique_ptr<Constraint> UniqueConstraint::Copy() {
128153
+ unique_ptr<Constraint> UniqueConstraint::Copy() const {
127698
128154
  if (index == DConstants::INVALID_INDEX) {
127699
128155
  return make_unique<UniqueConstraint>(columns, is_primary_key);
127700
128156
  } else {
@@ -127704,26 +128160,17 @@ unique_ptr<Constraint> UniqueConstraint::Copy() {
127704
128160
  }
127705
128161
  }
127706
128162
 
127707
- void UniqueConstraint::Serialize(Serializer &serializer) {
127708
- Constraint::Serialize(serializer);
127709
- serializer.Write<bool>(is_primary_key);
127710
- serializer.Write<uint64_t>(index);
128163
+ void UniqueConstraint::Serialize(FieldWriter &writer) const {
128164
+ writer.WriteField<bool>(is_primary_key);
128165
+ writer.WriteField<uint64_t>(index);
127711
128166
  D_ASSERT(columns.size() <= NumericLimits<uint32_t>::Maximum());
127712
- serializer.Write<uint32_t>((uint32_t)columns.size());
127713
- for (auto &column : columns) {
127714
- serializer.WriteString(column);
127715
- }
128167
+ writer.WriteList<string>(columns);
127716
128168
  }
127717
128169
 
127718
- unique_ptr<Constraint> UniqueConstraint::Deserialize(Deserializer &source) {
127719
- auto is_primary_key = source.Read<bool>();
127720
- auto index = source.Read<uint64_t>();
127721
- auto column_count = source.Read<uint32_t>();
127722
- vector<string> columns;
127723
- for (uint32_t i = 0; i < column_count; i++) {
127724
- auto column_name = source.Read<string>();
127725
- columns.push_back(column_name);
127726
- }
128170
+ unique_ptr<Constraint> UniqueConstraint::Deserialize(FieldReader &source) {
128171
+ auto is_primary_key = source.ReadRequired<bool>();
128172
+ auto index = source.ReadRequired<uint64_t>();
128173
+ auto columns = source.ReadRequiredList<string>();
127727
128174
 
127728
128175
  if (index != DConstants::INVALID_INDEX) {
127729
128176
  // single column parsed constraint
@@ -127739,6 +128186,7 @@ unique_ptr<Constraint> UniqueConstraint::Deserialize(Deserializer &source) {
127739
128186
  } // namespace duckdb
127740
128187
 
127741
128188
 
128189
+
127742
128190
  namespace duckdb {
127743
128191
 
127744
128192
  BetweenExpression::BetweenExpression(unique_ptr<ParsedExpression> input_p, unique_ptr<ParsedExpression> lower_p,
@@ -127770,17 +128218,16 @@ unique_ptr<ParsedExpression> BetweenExpression::Copy() const {
127770
128218
  return move(copy);
127771
128219
  }
127772
128220
 
127773
- void BetweenExpression::Serialize(Serializer &serializer) {
127774
- ParsedExpression::Serialize(serializer);
127775
- input->Serialize(serializer);
127776
- lower->Serialize(serializer);
127777
- upper->Serialize(serializer);
128221
+ void BetweenExpression::Serialize(FieldWriter &writer) const {
128222
+ writer.WriteSerializable(*input);
128223
+ writer.WriteSerializable(*lower);
128224
+ writer.WriteSerializable(*upper);
127778
128225
  }
127779
128226
 
127780
- unique_ptr<ParsedExpression> BetweenExpression::Deserialize(ExpressionType type, Deserializer &source) {
127781
- auto input = ParsedExpression::Deserialize(source);
127782
- auto lower = ParsedExpression::Deserialize(source);
127783
- auto upper = ParsedExpression::Deserialize(source);
128227
+ unique_ptr<ParsedExpression> BetweenExpression::Deserialize(ExpressionType type, FieldReader &source) {
128228
+ auto input = source.ReadRequiredSerializable<ParsedExpression>();
128229
+ auto lower = source.ReadRequiredSerializable<ParsedExpression>();
128230
+ auto upper = source.ReadRequiredSerializable<ParsedExpression>();
127784
128231
  return make_unique<BetweenExpression>(move(input), move(lower), move(upper));
127785
128232
  }
127786
128233
 
@@ -127835,26 +128282,29 @@ unique_ptr<ParsedExpression> CaseExpression::Copy() const {
127835
128282
  return move(copy);
127836
128283
  }
127837
128284
 
127838
- void CaseExpression::Serialize(Serializer &serializer) {
127839
- ParsedExpression::Serialize(serializer);
127840
- serializer.Write<uint32_t>(case_checks.size());
128285
+ void CaseExpression::Serialize(FieldWriter &writer) const {
128286
+ auto &serializer = writer.GetSerializer();
128287
+ // we write a list of multiple expressions here
128288
+ // in order to write this as a single field we directly use the field writers' internal serializer
128289
+ writer.WriteField<uint32_t>(case_checks.size());
127841
128290
  for (auto &check : case_checks) {
127842
128291
  check.when_expr->Serialize(serializer);
127843
128292
  check.then_expr->Serialize(serializer);
127844
128293
  }
127845
- else_expr->Serialize(serializer);
128294
+ writer.WriteSerializable<ParsedExpression>(*else_expr);
127846
128295
  }
127847
128296
 
127848
- unique_ptr<ParsedExpression> CaseExpression::Deserialize(ExpressionType type, Deserializer &source) {
128297
+ unique_ptr<ParsedExpression> CaseExpression::Deserialize(ExpressionType type, FieldReader &reader) {
127849
128298
  auto result = make_unique<CaseExpression>();
127850
- auto count = source.Read<uint32_t>();
128299
+ auto &source = reader.GetSource();
128300
+ auto count = reader.ReadRequired<uint32_t>();
127851
128301
  for (idx_t i = 0; i < count; i++) {
127852
128302
  CaseCheck new_check;
127853
128303
  new_check.when_expr = ParsedExpression::Deserialize(source);
127854
128304
  new_check.then_expr = ParsedExpression::Deserialize(source);
127855
128305
  result->case_checks.push_back(move(new_check));
127856
128306
  }
127857
- result->else_expr = ParsedExpression::Deserialize(source);
128307
+ result->else_expr = reader.ReadRequiredSerializable<ParsedExpression>();
127858
128308
  return move(result);
127859
128309
  }
127860
128310
 
@@ -127896,17 +128346,16 @@ unique_ptr<ParsedExpression> CastExpression::Copy() const {
127896
128346
  return move(copy);
127897
128347
  }
127898
128348
 
127899
- void CastExpression::Serialize(Serializer &serializer) {
127900
- ParsedExpression::Serialize(serializer);
127901
- child->Serialize(serializer);
127902
- cast_type.Serialize(serializer);
127903
- serializer.Write<bool>(try_cast);
128349
+ void CastExpression::Serialize(FieldWriter &writer) const {
128350
+ writer.WriteSerializable(*child);
128351
+ writer.WriteSerializable(cast_type);
128352
+ writer.WriteField<bool>(try_cast);
127904
128353
  }
127905
128354
 
127906
- unique_ptr<ParsedExpression> CastExpression::Deserialize(ExpressionType type, Deserializer &source) {
127907
- auto child = ParsedExpression::Deserialize(source);
127908
- auto cast_type = LogicalType::Deserialize(source);
127909
- auto try_cast = source.Read<bool>();
128355
+ unique_ptr<ParsedExpression> CastExpression::Deserialize(ExpressionType type, FieldReader &reader) {
128356
+ auto child = reader.ReadRequiredSerializable<ParsedExpression>();
128357
+ auto cast_type = reader.ReadRequiredSerializable<LogicalType, LogicalType>();
128358
+ auto try_cast = reader.ReadRequired<bool>();
127910
128359
  return make_unique_base<ParsedExpression, CastExpression>(cast_type, move(child), try_cast);
127911
128360
  }
127912
128361
 
@@ -127944,15 +128393,14 @@ unique_ptr<ParsedExpression> CollateExpression::Copy() const {
127944
128393
  return move(copy);
127945
128394
  }
127946
128395
 
127947
- void CollateExpression::Serialize(Serializer &serializer) {
127948
- ParsedExpression::Serialize(serializer);
127949
- child->Serialize(serializer);
127950
- serializer.WriteString(collation);
128396
+ void CollateExpression::Serialize(FieldWriter &writer) const {
128397
+ writer.WriteSerializable(*child);
128398
+ writer.WriteString(collation);
127951
128399
  }
127952
128400
 
127953
- unique_ptr<ParsedExpression> CollateExpression::Deserialize(ExpressionType type, Deserializer &source) {
127954
- auto child = ParsedExpression::Deserialize(source);
127955
- auto collation = source.Read<string>();
128401
+ unique_ptr<ParsedExpression> CollateExpression::Deserialize(ExpressionType type, FieldReader &reader) {
128402
+ auto child = reader.ReadRequiredSerializable<ParsedExpression>();
128403
+ auto collation = reader.ReadRequired<string>();
127956
128404
  return make_unique_base<ParsedExpression, CollateExpression>(collation, move(child));
127957
128405
  }
127958
128406
 
@@ -127963,7 +128411,6 @@ unique_ptr<ParsedExpression> CollateExpression::Deserialize(ExpressionType type,
127963
128411
 
127964
128412
 
127965
128413
 
127966
-
127967
128414
  namespace duckdb {
127968
128415
 
127969
128416
  ColumnRefExpression::ColumnRefExpression(string column_name, string table_name)
@@ -128041,20 +128488,12 @@ unique_ptr<ParsedExpression> ColumnRefExpression::Copy() const {
128041
128488
  return move(copy);
128042
128489
  }
128043
128490
 
128044
- void ColumnRefExpression::Serialize(Serializer &serializer) {
128045
- ParsedExpression::Serialize(serializer);
128046
- serializer.Write<idx_t>(column_names.size());
128047
- for (auto &column_name : column_names) {
128048
- serializer.WriteString(column_name);
128049
- }
128491
+ void ColumnRefExpression::Serialize(FieldWriter &writer) const {
128492
+ writer.WriteList<string>(column_names);
128050
128493
  }
128051
128494
 
128052
- unique_ptr<ParsedExpression> ColumnRefExpression::Deserialize(ExpressionType type, Deserializer &source) {
128053
- auto column_count = source.Read<idx_t>();
128054
- vector<string> column_names;
128055
- for (idx_t i = 0; i < column_count; i++) {
128056
- column_names.push_back(source.Read<string>());
128057
- }
128495
+ unique_ptr<ParsedExpression> ColumnRefExpression::Deserialize(ExpressionType type, FieldReader &reader) {
128496
+ auto column_names = reader.ReadRequiredList<string>();
128058
128497
  auto expression = make_unique<ColumnRefExpression>(move(column_names));
128059
128498
  return move(expression);
128060
128499
  }
@@ -128095,15 +128534,14 @@ unique_ptr<ParsedExpression> ComparisonExpression::Copy() const {
128095
128534
  return move(copy);
128096
128535
  }
128097
128536
 
128098
- void ComparisonExpression::Serialize(Serializer &serializer) {
128099
- ParsedExpression::Serialize(serializer);
128100
- left->Serialize(serializer);
128101
- right->Serialize(serializer);
128537
+ void ComparisonExpression::Serialize(FieldWriter &writer) const {
128538
+ writer.WriteSerializable(*left);
128539
+ writer.WriteSerializable(*right);
128102
128540
  }
128103
128541
 
128104
- unique_ptr<ParsedExpression> ComparisonExpression::Deserialize(ExpressionType type, Deserializer &source) {
128105
- auto left_child = ParsedExpression::Deserialize(source);
128106
- auto right_child = ParsedExpression::Deserialize(source);
128542
+ unique_ptr<ParsedExpression> ComparisonExpression::Deserialize(ExpressionType type, FieldReader &reader) {
128543
+ auto left_child = reader.ReadRequiredSerializable<ParsedExpression>();
128544
+ auto right_child = reader.ReadRequiredSerializable<ParsedExpression>();
128107
128545
  return make_unique<ComparisonExpression>(type, move(left_child), move(right_child));
128108
128546
  }
128109
128547
 
@@ -128202,14 +128640,13 @@ unique_ptr<ParsedExpression> ConjunctionExpression::Copy() const {
128202
128640
  return move(copy);
128203
128641
  }
128204
128642
 
128205
- void ConjunctionExpression::Serialize(Serializer &serializer) {
128206
- ParsedExpression::Serialize(serializer);
128207
- serializer.WriteList<ParsedExpression>(children);
128643
+ void ConjunctionExpression::Serialize(FieldWriter &writer) const {
128644
+ writer.WriteSerializableList(children);
128208
128645
  }
128209
128646
 
128210
- unique_ptr<ParsedExpression> ConjunctionExpression::Deserialize(ExpressionType type, Deserializer &source) {
128647
+ unique_ptr<ParsedExpression> ConjunctionExpression::Deserialize(ExpressionType type, FieldReader &reader) {
128211
128648
  auto result = make_unique<ConjunctionExpression>(type);
128212
- source.ReadList<ParsedExpression>(result->children);
128649
+ result->children = reader.ReadRequiredSerializableList<ParsedExpression>();
128213
128650
  return move(result);
128214
128651
  }
128215
128652
 
@@ -128220,6 +128657,7 @@ unique_ptr<ParsedExpression> ConjunctionExpression::Deserialize(ExpressionType t
128220
128657
 
128221
128658
 
128222
128659
 
128660
+
128223
128661
  namespace duckdb {
128224
128662
 
128225
128663
  ConstantExpression::ConstantExpression(Value val)
@@ -128244,13 +128682,12 @@ unique_ptr<ParsedExpression> ConstantExpression::Copy() const {
128244
128682
  return move(copy);
128245
128683
  }
128246
128684
 
128247
- void ConstantExpression::Serialize(Serializer &serializer) {
128248
- ParsedExpression::Serialize(serializer);
128249
- value.Serialize(serializer);
128685
+ void ConstantExpression::Serialize(FieldWriter &writer) const {
128686
+ writer.WriteSerializable(value);
128250
128687
  }
128251
128688
 
128252
- unique_ptr<ParsedExpression> ConstantExpression::Deserialize(ExpressionType type, Deserializer &source) {
128253
- Value value = Value::Deserialize(source);
128689
+ unique_ptr<ParsedExpression> ConstantExpression::Deserialize(ExpressionType type, FieldReader &reader) {
128690
+ Value value = reader.ReadRequiredSerializable<Value, Value>();
128254
128691
  return make_unique<ConstantExpression>(move(value));
128255
128692
  }
128256
128693
 
@@ -128274,7 +128711,10 @@ unique_ptr<ParsedExpression> DefaultExpression::Copy() const {
128274
128711
  return move(copy);
128275
128712
  }
128276
128713
 
128277
- unique_ptr<ParsedExpression> DefaultExpression::Deserialize(ExpressionType type, Deserializer &source) {
128714
+ void DefaultExpression::Serialize(FieldWriter &writer) const {
128715
+ }
128716
+
128717
+ unique_ptr<ParsedExpression> DefaultExpression::Deserialize(ExpressionType type, FieldReader &source) {
128278
128718
  return make_unique<DefaultExpression>();
128279
128719
  }
128280
128720
 
@@ -128388,26 +128828,24 @@ unique_ptr<ParsedExpression> FunctionExpression::Copy() const {
128388
128828
  return move(copy);
128389
128829
  }
128390
128830
 
128391
- void FunctionExpression::Serialize(Serializer &serializer) {
128392
- ParsedExpression::Serialize(serializer);
128393
- serializer.WriteString(function_name);
128394
- serializer.WriteString(schema);
128395
- serializer.WriteList(children);
128396
- serializer.WriteOptional(filter);
128397
- order_bys->Serialize(serializer);
128398
- serializer.Write<bool>(distinct);
128399
- serializer.Write<bool>(is_operator);
128400
- }
128401
-
128402
- unique_ptr<ParsedExpression> FunctionExpression::Deserialize(ExpressionType type, Deserializer &source) {
128403
- vector<unique_ptr<ParsedExpression>> children;
128404
- auto function_name = source.Read<string>();
128405
- auto schema = source.Read<string>();
128406
- source.ReadList<ParsedExpression>(children);
128407
- auto filter = source.ReadOptional<ParsedExpression>();
128408
- unique_ptr<OrderModifier> order_bys(static_cast<OrderModifier *>(ResultModifier::Deserialize(source).release()));
128409
- auto distinct = source.Read<bool>();
128410
- auto is_operator = source.Read<bool>();
128831
+ void FunctionExpression::Serialize(FieldWriter &writer) const {
128832
+ writer.WriteString(function_name);
128833
+ writer.WriteString(schema);
128834
+ writer.WriteSerializableList(children);
128835
+ writer.WriteOptional(filter);
128836
+ writer.WriteSerializable((ResultModifier &)*order_bys);
128837
+ writer.WriteField<bool>(distinct);
128838
+ writer.WriteField<bool>(is_operator);
128839
+ }
128840
+
128841
+ unique_ptr<ParsedExpression> FunctionExpression::Deserialize(ExpressionType type, FieldReader &reader) {
128842
+ auto function_name = reader.ReadRequired<string>();
128843
+ auto schema = reader.ReadRequired<string>();
128844
+ auto children = reader.ReadRequiredSerializableList<ParsedExpression>();
128845
+ auto filter = reader.ReadOptional<ParsedExpression>(nullptr);
128846
+ auto order_bys = unique_ptr_cast<ResultModifier, OrderModifier>(reader.ReadRequiredSerializable<ResultModifier>());
128847
+ auto distinct = reader.ReadRequired<bool>();
128848
+ auto is_operator = reader.ReadRequired<bool>();
128411
128849
  unique_ptr<FunctionExpression> function;
128412
128850
  function = make_unique<FunctionExpression>(function_name, move(children), move(filter), move(order_bys), distinct,
128413
128851
  is_operator);
@@ -128420,7 +128858,6 @@ unique_ptr<ParsedExpression> FunctionExpression::Deserialize(ExpressionType type
128420
128858
 
128421
128859
 
128422
128860
 
128423
-
128424
128861
  namespace duckdb {
128425
128862
 
128426
128863
  LambdaExpression::LambdaExpression(vector<string> parameters, unique_ptr<ParsedExpression> expression)
@@ -128467,24 +128904,14 @@ unique_ptr<ParsedExpression> LambdaExpression::Copy() const {
128467
128904
  return make_unique<LambdaExpression>(parameters, expression->Copy());
128468
128905
  }
128469
128906
 
128470
- void LambdaExpression::Serialize(Serializer &serializer) {
128471
- ParsedExpression::Serialize(serializer);
128472
- serializer.Write<uint32_t>(parameters.size());
128473
- for (auto &parameter : parameters) {
128474
- serializer.WriteString(parameter);
128475
- }
128476
- expression->Serialize(serializer);
128907
+ void LambdaExpression::Serialize(FieldWriter &writer) const {
128908
+ writer.WriteList<string>(parameters);
128909
+ writer.WriteSerializable(*expression);
128477
128910
  }
128478
128911
 
128479
- unique_ptr<ParsedExpression> LambdaExpression::Deserialize(ExpressionType type, Deserializer &source) {
128480
- auto parameter_count = source.Read<uint32_t>();
128481
- vector<string> parameters;
128482
- parameters.reserve(parameter_count);
128483
- for (size_t i = 0; i < parameter_count; i++) {
128484
- parameters.push_back(source.Read<string>());
128485
- }
128486
- auto expression = ParsedExpression::Deserialize(source);
128487
-
128912
+ unique_ptr<ParsedExpression> LambdaExpression::Deserialize(ExpressionType type, FieldReader &reader) {
128913
+ auto parameters = reader.ReadRequiredList<string>();
128914
+ auto expression = reader.ReadRequiredSerializable<ParsedExpression>();
128488
128915
  return make_unique<LambdaExpression>(move(parameters), move(expression));
128489
128916
  }
128490
128917
 
@@ -128551,14 +128978,13 @@ unique_ptr<ParsedExpression> OperatorExpression::Copy() const {
128551
128978
  return move(copy);
128552
128979
  }
128553
128980
 
128554
- void OperatorExpression::Serialize(Serializer &serializer) {
128555
- ParsedExpression::Serialize(serializer);
128556
- serializer.WriteList(children);
128981
+ void OperatorExpression::Serialize(FieldWriter &writer) const {
128982
+ writer.WriteSerializableList(children);
128557
128983
  }
128558
128984
 
128559
- unique_ptr<ParsedExpression> OperatorExpression::Deserialize(ExpressionType type, Deserializer &source) {
128985
+ unique_ptr<ParsedExpression> OperatorExpression::Deserialize(ExpressionType type, FieldReader &reader) {
128560
128986
  auto expression = make_unique<OperatorExpression>(type);
128561
- source.ReadList<ParsedExpression>(expression->children);
128987
+ expression->children = reader.ReadRequiredSerializableList<ParsedExpression>();
128562
128988
  return move(expression);
128563
128989
  }
128564
128990
 
@@ -128592,14 +129018,13 @@ hash_t ParameterExpression::Hash() const {
128592
129018
  return CombineHash(duckdb::Hash(parameter_nr), result);
128593
129019
  }
128594
129020
 
128595
- void ParameterExpression::Serialize(Serializer &serializer) {
128596
- ParsedExpression::Serialize(serializer);
128597
- serializer.Write<idx_t>(parameter_nr);
129021
+ void ParameterExpression::Serialize(FieldWriter &writer) const {
129022
+ writer.WriteField<idx_t>(parameter_nr);
128598
129023
  }
128599
129024
 
128600
- unique_ptr<ParsedExpression> ParameterExpression::Deserialize(ExpressionType type, Deserializer &source) {
129025
+ unique_ptr<ParsedExpression> ParameterExpression::Deserialize(ExpressionType type, FieldReader &reader) {
128601
129026
  auto expression = make_unique<ParameterExpression>();
128602
- expression->parameter_nr = source.Read<idx_t>();
129027
+ expression->parameter_nr = reader.ReadRequired<idx_t>();
128603
129028
  return move(expression);
128604
129029
  }
128605
129030
 
@@ -128637,13 +129062,12 @@ hash_t PositionalReferenceExpression::Hash() const {
128637
129062
  return CombineHash(duckdb::Hash(index), result);
128638
129063
  }
128639
129064
 
128640
- void PositionalReferenceExpression::Serialize(Serializer &serializer) {
128641
- ParsedExpression::Serialize(serializer);
128642
- serializer.Write<idx_t>(index);
129065
+ void PositionalReferenceExpression::Serialize(FieldWriter &writer) const {
129066
+ writer.WriteField<idx_t>(index);
128643
129067
  }
128644
129068
 
128645
- unique_ptr<ParsedExpression> PositionalReferenceExpression::Deserialize(ExpressionType type, Deserializer &source) {
128646
- auto expression = make_unique<PositionalReferenceExpression>(source.Read<idx_t>());
129069
+ unique_ptr<ParsedExpression> PositionalReferenceExpression::Deserialize(ExpressionType type, FieldReader &reader) {
129070
+ auto expression = make_unique<PositionalReferenceExpression>(reader.ReadRequired<idx_t>());
128647
129071
  return move(expression);
128648
129072
  }
128649
129073
 
@@ -128709,28 +129133,34 @@ bool StarExpression::Equals(const StarExpression *a, const StarExpression *b) {
128709
129133
  return true;
128710
129134
  }
128711
129135
 
128712
- void StarExpression::Serialize(Serializer &serializer) {
128713
- ParsedExpression::Serialize(serializer);
128714
- serializer.WriteString(relation_name);
128715
- serializer.Write<uint32_t>(exclude_list.size());
129136
+ void StarExpression::Serialize(FieldWriter &writer) const {
129137
+ auto &serializer = writer.GetSerializer();
129138
+
129139
+ writer.WriteString(relation_name);
129140
+
129141
+ // in order to write the exclude_list/replace_list as single fields we directly use the field writers' internal
129142
+ // serializer
129143
+ writer.WriteField<uint32_t>(exclude_list.size());
128716
129144
  for (auto &exclusion : exclude_list) {
128717
129145
  serializer.WriteString(exclusion);
128718
129146
  }
128719
- serializer.Write<uint32_t>(replace_list.size());
129147
+ writer.WriteField<uint32_t>(replace_list.size());
128720
129148
  for (auto &entry : replace_list) {
128721
129149
  serializer.WriteString(entry.first);
128722
129150
  entry.second->Serialize(serializer);
128723
129151
  }
128724
129152
  }
128725
129153
 
128726
- unique_ptr<ParsedExpression> StarExpression::Deserialize(ExpressionType type, Deserializer &source) {
129154
+ unique_ptr<ParsedExpression> StarExpression::Deserialize(ExpressionType type, FieldReader &reader) {
129155
+ auto &source = reader.GetSource();
129156
+
128727
129157
  auto result = make_unique<StarExpression>();
128728
- result->relation_name = source.Read<string>();
128729
- auto exclusion_count = source.Read<uint32_t>();
129158
+ result->relation_name = reader.ReadRequired<string>();
129159
+ auto exclusion_count = reader.ReadRequired<uint32_t>();
128730
129160
  for (idx_t i = 0; i < exclusion_count; i++) {
128731
129161
  result->exclude_list.insert(source.Read<string>());
128732
129162
  }
128733
- auto replace_count = source.Read<uint32_t>();
129163
+ auto replace_count = reader.ReadRequired<uint32_t>();
128734
129164
  for (idx_t i = 0; i < replace_count; i++) {
128735
129165
  auto name = source.Read<string>();
128736
129166
  auto expr = ParsedExpression::Deserialize(source);
@@ -128787,23 +129217,28 @@ unique_ptr<ParsedExpression> SubqueryExpression::Copy() const {
128787
129217
  return move(copy);
128788
129218
  }
128789
129219
 
128790
- void SubqueryExpression::Serialize(Serializer &serializer) {
128791
- ParsedExpression::Serialize(serializer);
128792
- serializer.Write<SubqueryType>(subquery_type);
129220
+ void SubqueryExpression::Serialize(FieldWriter &writer) const {
129221
+ auto &serializer = writer.GetSerializer();
129222
+
129223
+ writer.WriteField<SubqueryType>(subquery_type);
129224
+ // FIXME: this shouldn't use a serializer (probably)?
128793
129225
  subquery->Serialize(serializer);
128794
- serializer.WriteOptional(child);
128795
- serializer.Write<ExpressionType>(comparison_type);
129226
+ writer.WriteOptional(child);
129227
+ writer.WriteField<ExpressionType>(comparison_type);
128796
129228
  }
128797
129229
 
128798
- unique_ptr<ParsedExpression> SubqueryExpression::Deserialize(ExpressionType type, Deserializer &source) {
128799
- auto subquery_type = source.Read<SubqueryType>();
129230
+ unique_ptr<ParsedExpression> SubqueryExpression::Deserialize(ExpressionType type, FieldReader &reader) {
129231
+ // FIXME: this shouldn't use a source
129232
+ auto &source = reader.GetSource();
129233
+
129234
+ auto subquery_type = reader.ReadRequired<SubqueryType>();
128800
129235
  auto subquery = SelectStatement::Deserialize(source);
128801
129236
 
128802
129237
  auto expression = make_unique<SubqueryExpression>();
128803
129238
  expression->subquery_type = subquery_type;
128804
129239
  expression->subquery = move(subquery);
128805
- expression->child = source.ReadOptional<ParsedExpression>();
128806
- expression->comparison_type = source.Read<ExpressionType>();
129240
+ expression->child = reader.ReadOptional<ParsedExpression>(nullptr);
129241
+ expression->comparison_type = reader.ReadRequired<ExpressionType>();
128807
129242
  return move(expression);
128808
129243
  }
128809
129244
 
@@ -129034,46 +129469,49 @@ unique_ptr<ParsedExpression> WindowExpression::Copy() const {
129034
129469
  return move(new_window);
129035
129470
  }
129036
129471
 
129037
- void WindowExpression::Serialize(Serializer &serializer) {
129038
- ParsedExpression::Serialize(serializer);
129039
- serializer.WriteString(function_name);
129040
- serializer.WriteString(schema);
129041
- serializer.WriteList(children);
129042
- serializer.WriteList(partitions);
129472
+ void WindowExpression::Serialize(FieldWriter &writer) const {
129473
+ auto &serializer = writer.GetSerializer();
129474
+
129475
+ writer.WriteString(function_name);
129476
+ writer.WriteString(schema);
129477
+ writer.WriteSerializableList(children);
129478
+ writer.WriteSerializableList(partitions);
129479
+ // FIXME: should not use serializer here (probably)?
129043
129480
  D_ASSERT(orders.size() <= NumericLimits<uint32_t>::Maximum());
129044
- serializer.Write<uint32_t>((uint32_t)orders.size());
129481
+ writer.WriteField<uint32_t>((uint32_t)orders.size());
129045
129482
  for (auto &order : orders) {
129046
129483
  order.Serialize(serializer);
129047
129484
  }
129048
- serializer.Write<WindowBoundary>(start);
129049
- serializer.Write<WindowBoundary>(end);
129485
+ writer.WriteField<WindowBoundary>(start);
129486
+ writer.WriteField<WindowBoundary>(end);
129050
129487
 
129051
- serializer.WriteOptional(start_expr);
129052
- serializer.WriteOptional(end_expr);
129053
- serializer.WriteOptional(offset_expr);
129054
- serializer.WriteOptional(default_expr);
129055
- serializer.Write<bool>(ignore_nulls);
129488
+ writer.WriteOptional(start_expr);
129489
+ writer.WriteOptional(end_expr);
129490
+ writer.WriteOptional(offset_expr);
129491
+ writer.WriteOptional(default_expr);
129492
+ writer.WriteField<bool>(ignore_nulls);
129056
129493
  }
129057
129494
 
129058
- unique_ptr<ParsedExpression> WindowExpression::Deserialize(ExpressionType type, Deserializer &source) {
129059
- auto function_name = source.Read<string>();
129060
- auto schema = source.Read<string>();
129495
+ unique_ptr<ParsedExpression> WindowExpression::Deserialize(ExpressionType type, FieldReader &reader) {
129496
+ auto function_name = reader.ReadRequired<string>();
129497
+ auto schema = reader.ReadRequired<string>();
129061
129498
  auto expr = make_unique<WindowExpression>(type, schema, function_name);
129062
- source.ReadList<ParsedExpression>(expr->children);
129063
- source.ReadList<ParsedExpression>(expr->partitions);
129499
+ expr->children = reader.ReadRequiredSerializableList<ParsedExpression>();
129500
+ expr->partitions = reader.ReadRequiredSerializableList<ParsedExpression>();
129064
129501
 
129065
- auto order_count = source.Read<uint32_t>();
129502
+ auto order_count = reader.ReadRequired<uint32_t>();
129503
+ auto &source = reader.GetSource();
129066
129504
  for (idx_t i = 0; i < order_count; i++) {
129067
129505
  expr->orders.push_back(OrderByNode::Deserialize((source)));
129068
129506
  }
129069
- expr->start = source.Read<WindowBoundary>();
129070
- expr->end = source.Read<WindowBoundary>();
129507
+ expr->start = reader.ReadRequired<WindowBoundary>();
129508
+ expr->end = reader.ReadRequired<WindowBoundary>();
129071
129509
 
129072
- expr->start_expr = source.ReadOptional<ParsedExpression>();
129073
- expr->end_expr = source.ReadOptional<ParsedExpression>();
129074
- expr->offset_expr = source.ReadOptional<ParsedExpression>();
129075
- expr->default_expr = source.ReadOptional<ParsedExpression>();
129076
- expr->ignore_nulls = source.Read<bool>();
129510
+ expr->start_expr = reader.ReadOptional<ParsedExpression>(nullptr);
129511
+ expr->end_expr = reader.ReadOptional<ParsedExpression>(nullptr);
129512
+ expr->offset_expr = reader.ReadOptional<ParsedExpression>(nullptr);
129513
+ expr->default_expr = reader.ReadOptional<ParsedExpression>(nullptr);
129514
+ expr->ignore_nulls = reader.ReadRequired<bool>();
129077
129515
  return move(expr);
129078
129516
  }
129079
129517
 
@@ -129188,27 +129626,50 @@ string KeywordHelper::WriteOptionallyQuoted(const string &text) {
129188
129626
 
129189
129627
  namespace duckdb {
129190
129628
 
129191
- void AlterInfo::Serialize(Serializer &serializer) {
129192
- serializer.Write<AlterType>(type);
129629
+ AlterInfo::AlterInfo(AlterType type, string schema_p, string name_p)
129630
+ : type(type), schema(move(schema_p)), name(move(name_p)) {
129631
+ }
129632
+
129633
+ AlterInfo::~AlterInfo() {
129634
+ }
129635
+
129636
+ void AlterInfo::Serialize(Serializer &serializer) const {
129637
+ FieldWriter writer(serializer);
129638
+ writer.WriteField<AlterType>(type);
129639
+ Serialize(writer);
129640
+ writer.Finalize();
129193
129641
  }
129194
129642
 
129195
129643
  unique_ptr<AlterInfo> AlterInfo::Deserialize(Deserializer &source) {
129196
- auto type = source.Read<AlterType>();
129644
+ FieldReader reader(source);
129645
+ auto type = reader.ReadRequired<AlterType>();
129646
+
129647
+ unique_ptr<AlterInfo> result;
129197
129648
  switch (type) {
129198
129649
  case AlterType::ALTER_TABLE:
129199
- return AlterTableInfo::Deserialize(source);
129650
+ result = AlterTableInfo::Deserialize(reader);
129651
+ break;
129200
129652
  case AlterType::ALTER_VIEW:
129201
- return AlterViewInfo::Deserialize(source);
129653
+ result = AlterViewInfo::Deserialize(reader);
129654
+ break;
129202
129655
  default:
129203
129656
  throw SerializationException("Unknown alter type for deserialization!");
129204
129657
  }
129658
+ reader.Finalize();
129659
+
129660
+ return result;
129205
129661
  }
129206
129662
 
129207
129663
  //===--------------------------------------------------------------------===//
129208
129664
  // ChangeOwnershipInfo
129209
129665
  //===--------------------------------------------------------------------===//
129666
+ ChangeOwnershipInfo::ChangeOwnershipInfo(CatalogType entry_catalog_type, string entry_schema_p, string entry_name_p,
129667
+ string owner_schema_p, string owner_name_p)
129668
+ : AlterInfo(AlterType::CHANGE_OWNERSHIP, move(entry_schema_p), move(entry_name_p)),
129669
+ entry_catalog_type(entry_catalog_type), owner_schema(move(owner_schema_p)), owner_name(move(owner_name_p)) {
129670
+ }
129210
129671
 
129211
- CatalogType ChangeOwnershipInfo::GetCatalogType() {
129672
+ CatalogType ChangeOwnershipInfo::GetCatalogType() const {
129212
129673
  return entry_catalog_type;
129213
129674
  }
129214
129675
 
@@ -129216,35 +129677,48 @@ unique_ptr<AlterInfo> ChangeOwnershipInfo::Copy() const {
129216
129677
  return make_unique_base<AlterInfo, ChangeOwnershipInfo>(entry_catalog_type, schema, name, owner_schema, owner_name);
129217
129678
  }
129218
129679
 
129680
+ void ChangeOwnershipInfo::Serialize(FieldWriter &writer) const {
129681
+ throw InternalException("ChangeOwnershipInfo cannot be serialized");
129682
+ }
129683
+
129219
129684
  //===--------------------------------------------------------------------===//
129220
129685
  // AlterTableInfo
129221
129686
  //===--------------------------------------------------------------------===//
129687
+ AlterTableInfo::AlterTableInfo(AlterTableType type, string schema_p, string table_p)
129688
+ : AlterInfo(AlterType::ALTER_TABLE, move(move(schema_p)), move(table_p)), alter_table_type(type) {
129689
+ }
129690
+ AlterTableInfo::~AlterTableInfo() {
129691
+ }
129222
129692
 
129223
- void AlterTableInfo::Serialize(Serializer &serializer) {
129224
- AlterInfo::Serialize(serializer);
129225
- serializer.Write<AlterTableType>(alter_table_type);
129226
- serializer.WriteString(schema);
129227
- serializer.WriteString(name);
129693
+ CatalogType AlterTableInfo::GetCatalogType() const {
129694
+ return CatalogType::TABLE_ENTRY;
129228
129695
  }
129229
129696
 
129230
- unique_ptr<AlterInfo> AlterTableInfo::Deserialize(Deserializer &source) {
129231
- auto type = source.Read<AlterTableType>();
129232
- auto schema = source.Read<string>();
129233
- auto table = source.Read<string>();
129697
+ void AlterTableInfo::Serialize(FieldWriter &writer) const {
129698
+ writer.WriteField<AlterTableType>(alter_table_type);
129699
+ writer.WriteString(schema);
129700
+ writer.WriteString(name);
129701
+ SerializeAlterTable(writer);
129702
+ }
129703
+
129704
+ unique_ptr<AlterInfo> AlterTableInfo::Deserialize(FieldReader &reader) {
129705
+ auto type = reader.ReadRequired<AlterTableType>();
129706
+ auto schema = reader.ReadRequired<string>();
129707
+ auto table = reader.ReadRequired<string>();
129234
129708
  unique_ptr<AlterTableInfo> info;
129235
129709
  switch (type) {
129236
129710
  case AlterTableType::RENAME_COLUMN:
129237
- return RenameColumnInfo::Deserialize(source, schema, table);
129711
+ return RenameColumnInfo::Deserialize(reader, schema, table);
129238
129712
  case AlterTableType::RENAME_TABLE:
129239
- return RenameTableInfo::Deserialize(source, schema, table);
129713
+ return RenameTableInfo::Deserialize(reader, schema, table);
129240
129714
  case AlterTableType::ADD_COLUMN:
129241
- return AddColumnInfo::Deserialize(source, schema, table);
129715
+ return AddColumnInfo::Deserialize(reader, schema, table);
129242
129716
  case AlterTableType::REMOVE_COLUMN:
129243
- return RemoveColumnInfo::Deserialize(source, schema, table);
129717
+ return RemoveColumnInfo::Deserialize(reader, schema, table);
129244
129718
  case AlterTableType::ALTER_COLUMN_TYPE:
129245
- return ChangeColumnTypeInfo::Deserialize(source, schema, table);
129719
+ return ChangeColumnTypeInfo::Deserialize(reader, schema, table);
129246
129720
  case AlterTableType::SET_DEFAULT:
129247
- return SetDefaultInfo::Deserialize(source, schema, table);
129721
+ return SetDefaultInfo::Deserialize(reader, schema, table);
129248
129722
  default:
129249
129723
  throw SerializationException("Unknown alter table type for deserialization!");
129250
129724
  }
@@ -129253,94 +129727,123 @@ unique_ptr<AlterInfo> AlterTableInfo::Deserialize(Deserializer &source) {
129253
129727
  //===--------------------------------------------------------------------===//
129254
129728
  // RenameColumnInfo
129255
129729
  //===--------------------------------------------------------------------===//
129730
+ RenameColumnInfo::RenameColumnInfo(string schema_p, string table_p, string old_name_p, string new_name_p)
129731
+ : AlterTableInfo(AlterTableType::RENAME_COLUMN, move(schema_p), move(table_p)), old_name(move(old_name_p)),
129732
+ new_name(move(new_name_p)) {
129733
+ }
129734
+ RenameColumnInfo::~RenameColumnInfo() {
129735
+ }
129736
+
129256
129737
  unique_ptr<AlterInfo> RenameColumnInfo::Copy() const {
129257
129738
  return make_unique_base<AlterInfo, RenameColumnInfo>(schema, name, old_name, new_name);
129258
129739
  }
129259
129740
 
129260
- void RenameColumnInfo::Serialize(Serializer &serializer) {
129261
- AlterTableInfo::Serialize(serializer);
129262
- serializer.WriteString(old_name);
129263
- serializer.WriteString(new_name);
129741
+ void RenameColumnInfo::SerializeAlterTable(FieldWriter &writer) const {
129742
+ writer.WriteString(old_name);
129743
+ writer.WriteString(new_name);
129264
129744
  }
129265
129745
 
129266
- unique_ptr<AlterInfo> RenameColumnInfo::Deserialize(Deserializer &source, string schema, string table) {
129267
- auto old_name = source.Read<string>();
129268
- auto new_name = source.Read<string>();
129746
+ unique_ptr<AlterInfo> RenameColumnInfo::Deserialize(FieldReader &reader, string schema, string table) {
129747
+ auto old_name = reader.ReadRequired<string>();
129748
+ auto new_name = reader.ReadRequired<string>();
129269
129749
  return make_unique<RenameColumnInfo>(move(schema), move(table), old_name, new_name);
129270
129750
  }
129271
129751
 
129272
129752
  //===--------------------------------------------------------------------===//
129273
129753
  // RenameTableInfo
129274
129754
  //===--------------------------------------------------------------------===//
129755
+ RenameTableInfo::RenameTableInfo(string schema_p, string table_p, string new_name_p)
129756
+ : AlterTableInfo(AlterTableType::RENAME_TABLE, move(schema_p), move(table_p)), new_table_name(move(new_name_p)) {
129757
+ }
129758
+ RenameTableInfo::~RenameTableInfo() {
129759
+ }
129760
+
129275
129761
  unique_ptr<AlterInfo> RenameTableInfo::Copy() const {
129276
129762
  return make_unique_base<AlterInfo, RenameTableInfo>(schema, name, new_table_name);
129277
129763
  }
129278
129764
 
129279
- void RenameTableInfo::Serialize(Serializer &serializer) {
129280
- AlterTableInfo::Serialize(serializer);
129281
- serializer.WriteString(new_table_name);
129765
+ void RenameTableInfo::SerializeAlterTable(FieldWriter &writer) const {
129766
+ writer.WriteString(new_table_name);
129282
129767
  }
129283
129768
 
129284
- unique_ptr<AlterInfo> RenameTableInfo::Deserialize(Deserializer &source, string schema, string table) {
129285
- auto new_name = source.Read<string>();
129769
+ unique_ptr<AlterInfo> RenameTableInfo::Deserialize(FieldReader &reader, string schema, string table) {
129770
+ auto new_name = reader.ReadRequired<string>();
129286
129771
  return make_unique<RenameTableInfo>(move(schema), move(table), new_name);
129287
129772
  }
129288
129773
 
129289
129774
  //===--------------------------------------------------------------------===//
129290
129775
  // AddColumnInfo
129291
129776
  //===--------------------------------------------------------------------===//
129777
+ AddColumnInfo::AddColumnInfo(string schema_p, string table_p, ColumnDefinition new_column)
129778
+ : AlterTableInfo(AlterTableType::ADD_COLUMN, move(schema_p), move(table_p)), new_column(move(new_column)) {
129779
+ }
129780
+ AddColumnInfo::~AddColumnInfo() {
129781
+ }
129782
+
129292
129783
  unique_ptr<AlterInfo> AddColumnInfo::Copy() const {
129293
129784
  return make_unique_base<AlterInfo, AddColumnInfo>(schema, name, new_column.Copy());
129294
129785
  }
129295
129786
 
129296
- void AddColumnInfo::Serialize(Serializer &serializer) {
129297
- AlterTableInfo::Serialize(serializer);
129298
- new_column.Serialize(serializer);
129787
+ void AddColumnInfo::SerializeAlterTable(FieldWriter &writer) const {
129788
+ writer.WriteSerializable(new_column);
129299
129789
  }
129300
129790
 
129301
- unique_ptr<AlterInfo> AddColumnInfo::Deserialize(Deserializer &source, string schema, string table) {
129302
- auto new_column = ColumnDefinition::Deserialize(source);
129791
+ unique_ptr<AlterInfo> AddColumnInfo::Deserialize(FieldReader &reader, string schema, string table) {
129792
+ auto new_column = reader.ReadRequiredSerializable<ColumnDefinition, ColumnDefinition>();
129303
129793
  return make_unique<AddColumnInfo>(move(schema), move(table), move(new_column));
129304
129794
  }
129305
129795
 
129306
129796
  //===--------------------------------------------------------------------===//
129307
129797
  // RemoveColumnInfo
129308
129798
  //===--------------------------------------------------------------------===//
129799
+ RemoveColumnInfo::RemoveColumnInfo(string schema_p, string table_p, string removed_column, bool if_exists)
129800
+ : AlterTableInfo(AlterTableType::REMOVE_COLUMN, move(schema_p), move(table_p)),
129801
+ removed_column(move(removed_column)), if_exists(if_exists) {
129802
+ }
129803
+ RemoveColumnInfo::~RemoveColumnInfo() {
129804
+ }
129805
+
129309
129806
  unique_ptr<AlterInfo> RemoveColumnInfo::Copy() const {
129310
129807
  return make_unique_base<AlterInfo, RemoveColumnInfo>(schema, name, removed_column, if_exists);
129311
129808
  }
129312
129809
 
129313
- void RemoveColumnInfo::Serialize(Serializer &serializer) {
129314
- AlterTableInfo::Serialize(serializer);
129315
- serializer.WriteString(removed_column);
129316
- serializer.Write<bool>(if_exists);
129810
+ void RemoveColumnInfo::SerializeAlterTable(FieldWriter &writer) const {
129811
+ writer.WriteString(removed_column);
129812
+ writer.WriteField<bool>(if_exists);
129317
129813
  }
129318
129814
 
129319
- unique_ptr<AlterInfo> RemoveColumnInfo::Deserialize(Deserializer &source, string schema, string table) {
129320
- auto new_name = source.Read<string>();
129321
- auto if_exists = source.Read<bool>();
129815
+ unique_ptr<AlterInfo> RemoveColumnInfo::Deserialize(FieldReader &reader, string schema, string table) {
129816
+ auto new_name = reader.ReadRequired<string>();
129817
+ auto if_exists = reader.ReadRequired<bool>();
129322
129818
  return make_unique<RemoveColumnInfo>(move(schema), move(table), new_name, if_exists);
129323
129819
  }
129324
129820
 
129325
129821
  //===--------------------------------------------------------------------===//
129326
129822
  // ChangeColumnTypeInfo
129327
129823
  //===--------------------------------------------------------------------===//
129824
+ ChangeColumnTypeInfo::ChangeColumnTypeInfo(string schema_p, string table_p, string column_name, LogicalType target_type,
129825
+ unique_ptr<ParsedExpression> expression)
129826
+ : AlterTableInfo(AlterTableType::ALTER_COLUMN_TYPE, move(schema_p), move(table_p)), column_name(move(column_name)),
129827
+ target_type(move(target_type)), expression(move(expression)) {
129828
+ }
129829
+ ChangeColumnTypeInfo::~ChangeColumnTypeInfo() {
129830
+ }
129831
+
129328
129832
  unique_ptr<AlterInfo> ChangeColumnTypeInfo::Copy() const {
129329
129833
  return make_unique_base<AlterInfo, ChangeColumnTypeInfo>(schema, name, column_name, target_type,
129330
129834
  expression->Copy());
129331
129835
  }
129332
129836
 
129333
- void ChangeColumnTypeInfo::Serialize(Serializer &serializer) {
129334
- AlterTableInfo::Serialize(serializer);
129335
- serializer.WriteString(column_name);
129336
- target_type.Serialize(serializer);
129337
- serializer.WriteOptional(expression);
129837
+ void ChangeColumnTypeInfo::SerializeAlterTable(FieldWriter &writer) const {
129838
+ writer.WriteString(column_name);
129839
+ writer.WriteSerializable(target_type);
129840
+ writer.WriteOptional(expression);
129338
129841
  }
129339
129842
 
129340
- unique_ptr<AlterInfo> ChangeColumnTypeInfo::Deserialize(Deserializer &source, string schema, string table) {
129341
- auto column_name = source.Read<string>();
129342
- auto target_type = LogicalType::Deserialize(source);
129343
- auto expression = source.ReadOptional<ParsedExpression>();
129843
+ unique_ptr<AlterInfo> ChangeColumnTypeInfo::Deserialize(FieldReader &reader, string schema, string table) {
129844
+ auto column_name = reader.ReadRequired<string>();
129845
+ auto target_type = reader.ReadRequiredSerializable<LogicalType, LogicalType>();
129846
+ auto expression = reader.ReadOptional<ParsedExpression>(nullptr);
129344
129847
  return make_unique<ChangeColumnTypeInfo>(move(schema), move(table), move(column_name), move(target_type),
129345
129848
  move(expression));
129346
129849
  }
@@ -129348,41 +129851,58 @@ unique_ptr<AlterInfo> ChangeColumnTypeInfo::Deserialize(Deserializer &source, st
129348
129851
  //===--------------------------------------------------------------------===//
129349
129852
  // SetDefaultInfo
129350
129853
  //===--------------------------------------------------------------------===//
129854
+ SetDefaultInfo::SetDefaultInfo(string schema_p, string table_p, string column_name_p,
129855
+ unique_ptr<ParsedExpression> new_default)
129856
+ : AlterTableInfo(AlterTableType::SET_DEFAULT, move(schema_p), move(table_p)), column_name(move(column_name_p)),
129857
+ expression(move(new_default)) {
129858
+ }
129859
+ SetDefaultInfo::~SetDefaultInfo() {
129860
+ }
129861
+
129351
129862
  unique_ptr<AlterInfo> SetDefaultInfo::Copy() const {
129352
129863
  return make_unique_base<AlterInfo, SetDefaultInfo>(schema, name, column_name,
129353
129864
  expression ? expression->Copy() : nullptr);
129354
129865
  }
129355
129866
 
129356
- void SetDefaultInfo::Serialize(Serializer &serializer) {
129357
- AlterTableInfo::Serialize(serializer);
129358
- serializer.WriteString(column_name);
129359
- serializer.WriteOptional(expression);
129867
+ void SetDefaultInfo::SerializeAlterTable(FieldWriter &writer) const {
129868
+ writer.WriteString(column_name);
129869
+ writer.WriteOptional(expression);
129360
129870
  }
129361
129871
 
129362
- unique_ptr<AlterInfo> SetDefaultInfo::Deserialize(Deserializer &source, string schema, string table) {
129363
- auto column_name = source.Read<string>();
129364
- auto new_default = source.ReadOptional<ParsedExpression>();
129872
+ unique_ptr<AlterInfo> SetDefaultInfo::Deserialize(FieldReader &reader, string schema, string table) {
129873
+ auto column_name = reader.ReadRequired<string>();
129874
+ auto new_default = reader.ReadOptional<ParsedExpression>(nullptr);
129365
129875
  return make_unique<SetDefaultInfo>(move(schema), move(table), move(column_name), move(new_default));
129366
129876
  }
129367
129877
 
129368
129878
  //===--------------------------------------------------------------------===//
129369
129879
  // Alter View
129370
129880
  //===--------------------------------------------------------------------===//
129371
- void AlterViewInfo::Serialize(Serializer &serializer) {
129372
- AlterInfo::Serialize(serializer);
129373
- serializer.Write<AlterViewType>(alter_view_type);
129374
- serializer.WriteString(schema);
129375
- serializer.WriteString(name);
129881
+ AlterViewInfo::AlterViewInfo(AlterViewType type, string schema_p, string view_p)
129882
+ : AlterInfo(AlterType::ALTER_VIEW, move(schema_p), move(view_p)), alter_view_type(type) {
129883
+ }
129884
+ AlterViewInfo::~AlterViewInfo() {
129376
129885
  }
129377
129886
 
129378
- unique_ptr<AlterInfo> AlterViewInfo::Deserialize(Deserializer &source) {
129379
- auto type = source.Read<AlterViewType>();
129380
- auto schema = source.Read<string>();
129381
- auto view = source.Read<string>();
129887
+ CatalogType AlterViewInfo::GetCatalogType() const {
129888
+ return CatalogType::VIEW_ENTRY;
129889
+ }
129890
+
129891
+ void AlterViewInfo::Serialize(FieldWriter &writer) const {
129892
+ writer.WriteField<AlterViewType>(alter_view_type);
129893
+ writer.WriteString(schema);
129894
+ writer.WriteString(name);
129895
+ SerializeAlterView(writer);
129896
+ }
129897
+
129898
+ unique_ptr<AlterInfo> AlterViewInfo::Deserialize(FieldReader &reader) {
129899
+ auto type = reader.ReadRequired<AlterViewType>();
129900
+ auto schema = reader.ReadRequired<string>();
129901
+ auto view = reader.ReadRequired<string>();
129382
129902
  unique_ptr<AlterViewInfo> info;
129383
129903
  switch (type) {
129384
129904
  case AlterViewType::RENAME_VIEW:
129385
- return RenameViewInfo::Deserialize(source, schema, view);
129905
+ return RenameViewInfo::Deserialize(reader, schema, view);
129386
129906
  default:
129387
129907
  throw SerializationException("Unknown alter view type for deserialization!");
129388
129908
  }
@@ -129391,17 +129911,22 @@ unique_ptr<AlterInfo> AlterViewInfo::Deserialize(Deserializer &source) {
129391
129911
  //===--------------------------------------------------------------------===//
129392
129912
  // RenameViewInfo
129393
129913
  //===--------------------------------------------------------------------===//
129914
+ RenameViewInfo::RenameViewInfo(string schema_p, string view_p, string new_name_p)
129915
+ : AlterViewInfo(AlterViewType::RENAME_VIEW, move(schema_p), move(view_p)), new_view_name(move(new_name_p)) {
129916
+ }
129917
+ RenameViewInfo::~RenameViewInfo() {
129918
+ }
129919
+
129394
129920
  unique_ptr<AlterInfo> RenameViewInfo::Copy() const {
129395
129921
  return make_unique_base<AlterInfo, RenameViewInfo>(schema, name, new_view_name);
129396
129922
  }
129397
129923
 
129398
- void RenameViewInfo::Serialize(Serializer &serializer) {
129399
- AlterViewInfo::Serialize(serializer);
129400
- serializer.WriteString(new_view_name);
129924
+ void RenameViewInfo::SerializeAlterView(FieldWriter &writer) const {
129925
+ writer.WriteString(new_view_name);
129401
129926
  }
129402
129927
 
129403
- unique_ptr<AlterInfo> RenameViewInfo::Deserialize(Deserializer &source, string schema, string view) {
129404
- auto new_name = source.Read<string>();
129928
+ unique_ptr<AlterInfo> RenameViewInfo::Deserialize(FieldReader &reader, string schema, string view) {
129929
+ auto new_name = reader.ReadRequired<string>();
129405
129930
  return make_unique<RenameViewInfo>(move(schema), move(view), new_name);
129406
129931
  }
129407
129932
  } // namespace duckdb
@@ -129424,18 +129949,24 @@ string SampleMethodToString(SampleMethod method) {
129424
129949
  }
129425
129950
 
129426
129951
  void SampleOptions::Serialize(Serializer &serializer) {
129427
- sample_size.Serialize(serializer);
129428
- serializer.Write<bool>(is_percentage);
129429
- serializer.Write<SampleMethod>(method);
129430
- serializer.Write<int64_t>(seed);
129952
+ FieldWriter writer(serializer);
129953
+ writer.WriteSerializable(sample_size);
129954
+ writer.WriteField<bool>(is_percentage);
129955
+ writer.WriteField<SampleMethod>(method);
129956
+ writer.WriteField<int64_t>(seed);
129957
+ writer.Finalize();
129431
129958
  }
129432
129959
 
129433
129960
  unique_ptr<SampleOptions> SampleOptions::Deserialize(Deserializer &source) {
129434
129961
  auto result = make_unique<SampleOptions>();
129435
- result->sample_size = Value::Deserialize(source);
129436
- result->is_percentage = source.Read<bool>();
129437
- result->method = source.Read<SampleMethod>();
129438
- result->seed = source.Read<int64_t>();
129962
+
129963
+ FieldReader reader(source);
129964
+ result->sample_size = reader.ReadRequiredSerializable<Value, Value>();
129965
+ result->is_percentage = reader.ReadRequired<bool>();
129966
+ result->method = reader.ReadRequired<SampleMethod>();
129967
+ result->seed = reader.ReadRequired<int64_t>();
129968
+ reader.Finalize();
129969
+
129439
129970
  return result;
129440
129971
  }
129441
129972
 
@@ -129562,73 +130093,78 @@ hash_t ParsedExpression::Hash() const {
129562
130093
  return hash;
129563
130094
  }
129564
130095
 
129565
- void ParsedExpression::Serialize(Serializer &serializer) {
129566
- serializer.Write<ExpressionClass>(GetExpressionClass());
129567
- serializer.Write<ExpressionType>(type);
129568
- serializer.WriteString(alias);
130096
+ void ParsedExpression::Serialize(Serializer &serializer) const {
130097
+ FieldWriter writer(serializer);
130098
+ writer.WriteField<ExpressionClass>(GetExpressionClass());
130099
+ writer.WriteField<ExpressionType>(type);
130100
+ writer.WriteString(alias);
130101
+ Serialize(writer);
130102
+ writer.Finalize();
129569
130103
  }
129570
130104
 
129571
130105
  unique_ptr<ParsedExpression> ParsedExpression::Deserialize(Deserializer &source) {
129572
- auto expression_class = source.Read<ExpressionClass>();
129573
- auto type = source.Read<ExpressionType>();
129574
- auto alias = source.Read<string>();
130106
+ FieldReader reader(source);
130107
+ auto expression_class = reader.ReadRequired<ExpressionClass>();
130108
+ auto type = reader.ReadRequired<ExpressionType>();
130109
+ auto alias = reader.ReadRequired<string>();
129575
130110
  unique_ptr<ParsedExpression> result;
129576
130111
  switch (expression_class) {
129577
130112
  case ExpressionClass::BETWEEN:
129578
- result = BetweenExpression::Deserialize(type, source);
130113
+ result = BetweenExpression::Deserialize(type, reader);
129579
130114
  break;
129580
130115
  case ExpressionClass::CASE:
129581
- result = CaseExpression::Deserialize(type, source);
130116
+ result = CaseExpression::Deserialize(type, reader);
129582
130117
  break;
129583
130118
  case ExpressionClass::CAST:
129584
- result = CastExpression::Deserialize(type, source);
130119
+ result = CastExpression::Deserialize(type, reader);
129585
130120
  break;
129586
130121
  case ExpressionClass::COLLATE:
129587
- result = CollateExpression::Deserialize(type, source);
130122
+ result = CollateExpression::Deserialize(type, reader);
129588
130123
  break;
129589
130124
  case ExpressionClass::COLUMN_REF:
129590
- result = ColumnRefExpression::Deserialize(type, source);
130125
+ result = ColumnRefExpression::Deserialize(type, reader);
129591
130126
  break;
129592
130127
  case ExpressionClass::COMPARISON:
129593
- result = ComparisonExpression::Deserialize(type, source);
130128
+ result = ComparisonExpression::Deserialize(type, reader);
129594
130129
  break;
129595
130130
  case ExpressionClass::CONJUNCTION:
129596
- result = ConjunctionExpression::Deserialize(type, source);
130131
+ result = ConjunctionExpression::Deserialize(type, reader);
129597
130132
  break;
129598
130133
  case ExpressionClass::CONSTANT:
129599
- result = ConstantExpression::Deserialize(type, source);
130134
+ result = ConstantExpression::Deserialize(type, reader);
129600
130135
  break;
129601
130136
  case ExpressionClass::DEFAULT:
129602
- result = DefaultExpression::Deserialize(type, source);
130137
+ result = DefaultExpression::Deserialize(type, reader);
129603
130138
  break;
129604
130139
  case ExpressionClass::FUNCTION:
129605
- result = FunctionExpression::Deserialize(type, source);
130140
+ result = FunctionExpression::Deserialize(type, reader);
129606
130141
  break;
129607
130142
  case ExpressionClass::LAMBDA:
129608
- result = LambdaExpression::Deserialize(type, source);
130143
+ result = LambdaExpression::Deserialize(type, reader);
129609
130144
  break;
129610
130145
  case ExpressionClass::OPERATOR:
129611
- result = OperatorExpression::Deserialize(type, source);
130146
+ result = OperatorExpression::Deserialize(type, reader);
129612
130147
  break;
129613
130148
  case ExpressionClass::PARAMETER:
129614
- result = ParameterExpression::Deserialize(type, source);
130149
+ result = ParameterExpression::Deserialize(type, reader);
129615
130150
  break;
129616
130151
  case ExpressionClass::POSITIONAL_REFERENCE:
129617
- result = PositionalReferenceExpression::Deserialize(type, source);
130152
+ result = PositionalReferenceExpression::Deserialize(type, reader);
129618
130153
  break;
129619
130154
  case ExpressionClass::STAR:
129620
- result = StarExpression::Deserialize(type, source);
130155
+ result = StarExpression::Deserialize(type, reader);
129621
130156
  break;
129622
130157
  case ExpressionClass::SUBQUERY:
129623
- result = SubqueryExpression::Deserialize(type, source);
130158
+ result = SubqueryExpression::Deserialize(type, reader);
129624
130159
  break;
129625
130160
  case ExpressionClass::WINDOW:
129626
- result = WindowExpression::Deserialize(type, source);
130161
+ result = WindowExpression::Deserialize(type, reader);
129627
130162
  break;
129628
130163
  default:
129629
130164
  throw SerializationException("Unsupported type for expression deserialization!");
129630
130165
  }
129631
130166
  result->alias = alias;
130167
+ reader.Finalize();
129632
130168
  return result;
129633
130169
  }
129634
130170
 
@@ -129674,12 +130210,12 @@ public:
129674
130210
  public:
129675
130211
  bool Equals(const QueryNode *other) const override;
129676
130212
  //! Create a copy of this SelectNode
129677
- unique_ptr<QueryNode> Copy() override;
130213
+ unique_ptr<QueryNode> Copy() const override;
129678
130214
 
129679
- //! Serializes a SelectNode to a stand-alone binary blob
129680
- void Serialize(Serializer &serializer) override;
129681
- //! Deserializes a blob back into a SelectNode
129682
- static unique_ptr<QueryNode> Deserialize(Deserializer &source);
130215
+ //! Serializes a QueryNode to a stand-alone binary blob
130216
+ void Serialize(FieldWriter &writer) const override;
130217
+ //! Deserializes a blob back into a QueryNode
130218
+ static unique_ptr<QueryNode> Deserialize(FieldReader &reader);
129683
130219
  };
129684
130220
 
129685
130221
  } // namespace duckdb
@@ -135637,6 +136173,7 @@ string QueryErrorContext::FormatErrorRecursive(const string &msg, vector<Excepti
135637
136173
  } // namespace duckdb
135638
136174
 
135639
136175
 
136176
+
135640
136177
  namespace duckdb {
135641
136178
 
135642
136179
  bool RecursiveCTENode::Equals(const QueryNode *other_p) const {
@@ -135660,7 +136197,7 @@ bool RecursiveCTENode::Equals(const QueryNode *other_p) const {
135660
136197
  return true;
135661
136198
  }
135662
136199
 
135663
- unique_ptr<QueryNode> RecursiveCTENode::Copy() {
136200
+ unique_ptr<QueryNode> RecursiveCTENode::Copy() const {
135664
136201
  auto result = make_unique<RecursiveCTENode>();
135665
136202
  result->ctename = ctename;
135666
136203
  result->union_all = union_all;
@@ -135671,22 +136208,21 @@ unique_ptr<QueryNode> RecursiveCTENode::Copy() {
135671
136208
  return move(result);
135672
136209
  }
135673
136210
 
135674
- void RecursiveCTENode::Serialize(Serializer &serializer) {
135675
- QueryNode::Serialize(serializer);
135676
- serializer.WriteString(ctename);
135677
- serializer.WriteString(union_all ? "T" : "F");
135678
- left->Serialize(serializer);
135679
- right->Serialize(serializer);
135680
- serializer.WriteStringVector(aliases);
136211
+ void RecursiveCTENode::Serialize(FieldWriter &writer) const {
136212
+ writer.WriteString(ctename);
136213
+ writer.WriteField<bool>(union_all);
136214
+ writer.WriteSerializable(*left);
136215
+ writer.WriteSerializable(*right);
136216
+ writer.WriteList<string>(aliases);
135681
136217
  }
135682
136218
 
135683
- unique_ptr<QueryNode> RecursiveCTENode::Deserialize(Deserializer &source) {
136219
+ unique_ptr<QueryNode> RecursiveCTENode::Deserialize(FieldReader &reader) {
135684
136220
  auto result = make_unique<RecursiveCTENode>();
135685
- result->ctename = source.Read<string>();
135686
- result->union_all = source.Read<string>() == "T" ? true : false;
135687
- result->left = QueryNode::Deserialize(source);
135688
- result->right = QueryNode::Deserialize(source);
135689
- source.ReadStringVector(result->aliases);
136221
+ result->ctename = reader.ReadRequired<string>();
136222
+ result->union_all = reader.ReadRequired<bool>();
136223
+ result->left = reader.ReadRequiredSerializable<QueryNode>();
136224
+ result->right = reader.ReadRequiredSerializable<QueryNode>();
136225
+ result->aliases = reader.ReadRequiredList<string>();
135690
136226
  return move(result);
135691
136227
  }
135692
136228
 
@@ -135694,6 +136230,7 @@ unique_ptr<QueryNode> RecursiveCTENode::Deserialize(Deserializer &source) {
135694
136230
 
135695
136231
 
135696
136232
 
136233
+
135697
136234
  namespace duckdb {
135698
136235
 
135699
136236
  SelectNode::SelectNode()
@@ -135749,7 +136286,7 @@ bool SelectNode::Equals(const QueryNode *other_p) const {
135749
136286
  return true;
135750
136287
  }
135751
136288
 
135752
- unique_ptr<QueryNode> SelectNode::Copy() {
136289
+ unique_ptr<QueryNode> SelectNode::Copy() const {
135753
136290
  auto result = make_unique<SelectNode>();
135754
136291
  for (auto &child : select_list) {
135755
136292
  result->select_list.push_back(child->Copy());
@@ -135769,42 +136306,34 @@ unique_ptr<QueryNode> SelectNode::Copy() {
135769
136306
  return move(result);
135770
136307
  }
135771
136308
 
135772
- void SelectNode::Serialize(Serializer &serializer) {
135773
- QueryNode::Serialize(serializer);
135774
- // select_list
135775
- serializer.WriteList(select_list);
135776
- // from clause
135777
- serializer.WriteOptional(from_table);
135778
- // where_clause
135779
- serializer.WriteOptional(where_clause);
135780
- // group by
135781
- serializer.WriteList(groups.group_expressions);
135782
- serializer.Write<idx_t>(groups.grouping_sets.size());
136309
+ void SelectNode::Serialize(FieldWriter &writer) const {
136310
+ writer.WriteSerializableList(select_list);
136311
+ writer.WriteOptional(from_table);
136312
+ writer.WriteOptional(where_clause);
136313
+ writer.WriteSerializableList(groups.group_expressions);
136314
+ writer.WriteField<uint32_t>(groups.grouping_sets.size());
136315
+ auto &serializer = writer.GetSerializer();
135783
136316
  for (auto &grouping_set : groups.grouping_sets) {
135784
136317
  serializer.Write<idx_t>(grouping_set.size());
135785
136318
  for (auto &idx : grouping_set) {
135786
136319
  serializer.Write<idx_t>(idx);
135787
136320
  }
135788
136321
  }
135789
- serializer.Write<AggregateHandling>(aggregate_handling);
135790
- // having / sample
135791
- serializer.WriteOptional(having);
135792
- serializer.WriteOptional(sample);
135793
- // qualify
135794
- serializer.WriteOptional(qualify);
136322
+ writer.WriteField<AggregateHandling>(aggregate_handling);
136323
+ writer.WriteOptional(having);
136324
+ writer.WriteOptional(sample);
136325
+ writer.WriteOptional(qualify);
135795
136326
  }
135796
136327
 
135797
- unique_ptr<QueryNode> SelectNode::Deserialize(Deserializer &source) {
136328
+ unique_ptr<QueryNode> SelectNode::Deserialize(FieldReader &reader) {
135798
136329
  auto result = make_unique<SelectNode>();
135799
- // select_list
135800
- source.ReadList<ParsedExpression>(result->select_list);
135801
- // from clause
135802
- result->from_table = source.ReadOptional<TableRef>();
135803
- // where_clause
135804
- result->where_clause = source.ReadOptional<ParsedExpression>();
135805
- // group by
135806
- source.ReadList<ParsedExpression>(result->groups.group_expressions);
135807
- auto grouping_set_count = source.Read<idx_t>();
136330
+ result->select_list = reader.ReadRequiredSerializableList<ParsedExpression>();
136331
+ result->from_table = reader.ReadOptional<TableRef>(nullptr);
136332
+ result->where_clause = reader.ReadOptional<ParsedExpression>(nullptr);
136333
+ result->groups.group_expressions = reader.ReadRequiredSerializableList<ParsedExpression>();
136334
+
136335
+ auto grouping_set_count = reader.ReadRequired<uint32_t>();
136336
+ auto &source = reader.GetSource();
135808
136337
  for (idx_t set_idx = 0; set_idx < grouping_set_count; set_idx++) {
135809
136338
  auto set_entries = source.Read<idx_t>();
135810
136339
  GroupingSet grouping_set;
@@ -135813,19 +136342,17 @@ unique_ptr<QueryNode> SelectNode::Deserialize(Deserializer &source) {
135813
136342
  }
135814
136343
  result->groups.grouping_sets.push_back(grouping_set);
135815
136344
  }
135816
- result->aggregate_handling = source.Read<AggregateHandling>();
135817
-
135818
- // having / sample
135819
- result->having = source.ReadOptional<ParsedExpression>();
135820
- result->sample = source.ReadOptional<SampleOptions>();
135821
- // qualify
135822
- result->qualify = source.ReadOptional<ParsedExpression>();
136345
+ result->aggregate_handling = reader.ReadRequired<AggregateHandling>();
136346
+ result->having = reader.ReadOptional<ParsedExpression>(nullptr);
136347
+ result->sample = reader.ReadOptional<SampleOptions>(nullptr);
136348
+ result->qualify = reader.ReadOptional<ParsedExpression>(nullptr);
135823
136349
  return move(result);
135824
136350
  }
135825
136351
 
135826
136352
  } // namespace duckdb
135827
136353
 
135828
136354
 
136355
+
135829
136356
  namespace duckdb {
135830
136357
 
135831
136358
  bool SetOperationNode::Equals(const QueryNode *other_p) const {
@@ -135848,7 +136375,7 @@ bool SetOperationNode::Equals(const QueryNode *other_p) const {
135848
136375
  return true;
135849
136376
  }
135850
136377
 
135851
- unique_ptr<QueryNode> SetOperationNode::Copy() {
136378
+ unique_ptr<QueryNode> SetOperationNode::Copy() const {
135852
136379
  auto result = make_unique<SetOperationNode>();
135853
136380
  result->setop_type = setop_type;
135854
136381
  result->left = left->Copy();
@@ -135857,18 +136384,17 @@ unique_ptr<QueryNode> SetOperationNode::Copy() {
135857
136384
  return move(result);
135858
136385
  }
135859
136386
 
135860
- void SetOperationNode::Serialize(Serializer &serializer) {
135861
- QueryNode::Serialize(serializer);
135862
- serializer.Write<SetOperationType>(setop_type);
135863
- left->Serialize(serializer);
135864
- right->Serialize(serializer);
136387
+ void SetOperationNode::Serialize(FieldWriter &writer) const {
136388
+ writer.WriteField<SetOperationType>(setop_type);
136389
+ writer.WriteSerializable(*left);
136390
+ writer.WriteSerializable(*right);
135865
136391
  }
135866
136392
 
135867
- unique_ptr<QueryNode> SetOperationNode::Deserialize(Deserializer &source) {
136393
+ unique_ptr<QueryNode> SetOperationNode::Deserialize(FieldReader &reader) {
135868
136394
  auto result = make_unique<SetOperationNode>();
135869
- result->setop_type = source.Read<SetOperationType>();
135870
- result->left = QueryNode::Deserialize(source);
135871
- result->right = QueryNode::Deserialize(source);
136395
+ result->setop_type = reader.ReadRequired<SetOperationType>();
136396
+ result->left = reader.ReadRequiredSerializable<QueryNode>();
136397
+ result->right = reader.ReadRequiredSerializable<QueryNode>();
135872
136398
  return move(result);
135873
136399
  }
135874
136400
 
@@ -135880,6 +136406,7 @@ unique_ptr<QueryNode> SetOperationNode::Deserialize(Deserializer &source) {
135880
136406
 
135881
136407
 
135882
136408
 
136409
+
135883
136410
  namespace duckdb {
135884
136411
 
135885
136412
  bool QueryNode::Equals(const QueryNode *other) const {
@@ -135933,32 +136460,30 @@ void QueryNode::CopyProperties(QueryNode &other) const {
135933
136460
  }
135934
136461
  }
135935
136462
 
135936
- void QueryNode::Serialize(Serializer &serializer) {
135937
- serializer.Write<QueryNodeType>(type);
135938
- serializer.Write<idx_t>(modifiers.size());
135939
- for (idx_t i = 0; i < modifiers.size(); i++) {
135940
- modifiers[i]->Serialize(serializer);
135941
- }
136463
+ void QueryNode::Serialize(Serializer &main_serializer) const {
136464
+ FieldWriter writer(main_serializer);
136465
+ writer.WriteField<QueryNodeType>(type);
136466
+ writer.WriteSerializableList(modifiers);
135942
136467
  // cte_map
135943
- D_ASSERT(cte_map.size() <= NumericLimits<uint32_t>::Maximum());
135944
- serializer.Write<uint32_t>((uint32_t)cte_map.size());
136468
+ writer.WriteField<uint32_t>((uint32_t)cte_map.size());
136469
+ auto &serializer = writer.GetSerializer();
135945
136470
  for (auto &cte : cte_map) {
135946
136471
  serializer.WriteString(cte.first);
135947
136472
  serializer.WriteStringVector(cte.second->aliases);
135948
136473
  cte.second->query->Serialize(serializer);
135949
136474
  }
136475
+ Serialize(writer);
136476
+ writer.Finalize();
135950
136477
  }
135951
136478
 
135952
- unique_ptr<QueryNode> QueryNode::Deserialize(Deserializer &source) {
135953
- unique_ptr<QueryNode> result;
135954
- auto type = source.Read<QueryNodeType>();
135955
- auto modifier_count = source.Read<idx_t>();
135956
- vector<unique_ptr<ResultModifier>> modifiers;
135957
- for (idx_t i = 0; i < modifier_count; i++) {
135958
- modifiers.push_back(ResultModifier::Deserialize(source));
135959
- }
136479
+ unique_ptr<QueryNode> QueryNode::Deserialize(Deserializer &main_source) {
136480
+ FieldReader reader(main_source);
136481
+
136482
+ auto type = reader.ReadRequired<QueryNodeType>();
136483
+ auto modifiers = reader.ReadRequiredSerializableList<ResultModifier>();
135960
136484
  // cte_map
135961
- auto cte_count = source.Read<uint32_t>();
136485
+ auto cte_count = reader.ReadRequired<uint32_t>();
136486
+ auto &source = reader.GetSource();
135962
136487
  unordered_map<string, unique_ptr<CommonTableExpressionInfo>> cte_map;
135963
136488
  for (idx_t i = 0; i < cte_count; i++) {
135964
136489
  auto name = source.Read<string>();
@@ -135967,15 +136492,17 @@ unique_ptr<QueryNode> QueryNode::Deserialize(Deserializer &source) {
135967
136492
  info->query = SelectStatement::Deserialize(source);
135968
136493
  cte_map[name] = move(info);
135969
136494
  }
136495
+
136496
+ unique_ptr<QueryNode> result;
135970
136497
  switch (type) {
135971
136498
  case QueryNodeType::SELECT_NODE:
135972
- result = SelectNode::Deserialize(source);
136499
+ result = SelectNode::Deserialize(reader);
135973
136500
  break;
135974
136501
  case QueryNodeType::SET_OPERATION_NODE:
135975
- result = SetOperationNode::Deserialize(source);
136502
+ result = SetOperationNode::Deserialize(reader);
135976
136503
  break;
135977
136504
  case QueryNodeType::RECURSIVE_CTE_NODE:
135978
- result = RecursiveCTENode::Deserialize(source);
136505
+ result = RecursiveCTENode::Deserialize(reader);
135979
136506
  break;
135980
136507
  default:
135981
136508
  throw SerializationException("Could not deserialize Query Node: unknown type!");
@@ -135999,24 +136526,35 @@ bool ResultModifier::Equals(const ResultModifier *other) const {
135999
136526
  return type == other->type;
136000
136527
  }
136001
136528
 
136002
- void ResultModifier::Serialize(Serializer &serializer) {
136003
- serializer.Write<ResultModifierType>(type);
136529
+ void ResultModifier::Serialize(Serializer &serializer) const {
136530
+ FieldWriter writer(serializer);
136531
+ writer.WriteField<ResultModifierType>(type);
136532
+ Serialize(writer);
136533
+ writer.Finalize();
136004
136534
  }
136005
136535
 
136006
136536
  unique_ptr<ResultModifier> ResultModifier::Deserialize(Deserializer &source) {
136007
- auto type = source.Read<ResultModifierType>();
136537
+ FieldReader reader(source);
136538
+ auto type = reader.ReadRequired<ResultModifierType>();
136539
+
136540
+ unique_ptr<ResultModifier> result;
136008
136541
  switch (type) {
136009
136542
  case ResultModifierType::LIMIT_MODIFIER:
136010
- return LimitModifier::Deserialize(source);
136543
+ result = LimitModifier::Deserialize(reader);
136544
+ break;
136011
136545
  case ResultModifierType::ORDER_MODIFIER:
136012
- return OrderModifier::Deserialize(source);
136546
+ result = OrderModifier::Deserialize(reader);
136547
+ break;
136013
136548
  case ResultModifierType::DISTINCT_MODIFIER:
136014
- return DistinctModifier::Deserialize(source);
136549
+ result = DistinctModifier::Deserialize(reader);
136550
+ break;
136015
136551
  case ResultModifierType::LIMIT_PERCENT_MODIFIER:
136016
- return LimitPercentModifier::Deserialize(source);
136552
+ result = LimitPercentModifier::Deserialize(reader);
136553
+ break;
136017
136554
  default:
136018
136555
  throw InternalException("Unrecognized ResultModifierType for Deserialization");
136019
136556
  }
136557
+ return result;
136020
136558
  }
136021
136559
 
136022
136560
  bool LimitModifier::Equals(const ResultModifier *other_p) const {
@@ -136033,7 +136571,7 @@ bool LimitModifier::Equals(const ResultModifier *other_p) const {
136033
136571
  return true;
136034
136572
  }
136035
136573
 
136036
- unique_ptr<ResultModifier> LimitModifier::Copy() {
136574
+ unique_ptr<ResultModifier> LimitModifier::Copy() const {
136037
136575
  auto copy = make_unique<LimitModifier>();
136038
136576
  if (limit) {
136039
136577
  copy->limit = limit->Copy();
@@ -136044,16 +136582,15 @@ unique_ptr<ResultModifier> LimitModifier::Copy() {
136044
136582
  return move(copy);
136045
136583
  }
136046
136584
 
136047
- void LimitModifier::Serialize(Serializer &serializer) {
136048
- ResultModifier::Serialize(serializer);
136049
- serializer.WriteOptional(limit);
136050
- serializer.WriteOptional(offset);
136585
+ void LimitModifier::Serialize(FieldWriter &writer) const {
136586
+ writer.WriteOptional(limit);
136587
+ writer.WriteOptional(offset);
136051
136588
  }
136052
136589
 
136053
- unique_ptr<ResultModifier> LimitModifier::Deserialize(Deserializer &source) {
136590
+ unique_ptr<ResultModifier> LimitModifier::Deserialize(FieldReader &reader) {
136054
136591
  auto mod = make_unique<LimitModifier>();
136055
- mod->limit = source.ReadOptional<ParsedExpression>();
136056
- mod->offset = source.ReadOptional<ParsedExpression>();
136592
+ mod->limit = reader.ReadOptional<ParsedExpression>(nullptr);
136593
+ mod->offset = reader.ReadOptional<ParsedExpression>(nullptr);
136057
136594
  return move(mod);
136058
136595
  }
136059
136596
 
@@ -136068,7 +136605,7 @@ bool DistinctModifier::Equals(const ResultModifier *other_p) const {
136068
136605
  return true;
136069
136606
  }
136070
136607
 
136071
- unique_ptr<ResultModifier> DistinctModifier::Copy() {
136608
+ unique_ptr<ResultModifier> DistinctModifier::Copy() const {
136072
136609
  auto copy = make_unique<DistinctModifier>();
136073
136610
  for (auto &expr : distinct_on_targets) {
136074
136611
  copy->distinct_on_targets.push_back(expr->Copy());
@@ -136076,14 +136613,13 @@ unique_ptr<ResultModifier> DistinctModifier::Copy() {
136076
136613
  return move(copy);
136077
136614
  }
136078
136615
 
136079
- void DistinctModifier::Serialize(Serializer &serializer) {
136080
- ResultModifier::Serialize(serializer);
136081
- serializer.WriteList(distinct_on_targets);
136616
+ void DistinctModifier::Serialize(FieldWriter &writer) const {
136617
+ writer.WriteSerializableList(distinct_on_targets);
136082
136618
  }
136083
136619
 
136084
- unique_ptr<ResultModifier> DistinctModifier::Deserialize(Deserializer &source) {
136620
+ unique_ptr<ResultModifier> DistinctModifier::Deserialize(FieldReader &reader) {
136085
136621
  auto mod = make_unique<DistinctModifier>();
136086
- source.ReadList<ParsedExpression>(mod->distinct_on_targets);
136622
+ mod->distinct_on_targets = reader.ReadRequiredSerializableList<ParsedExpression>();
136087
136623
  return move(mod);
136088
136624
  }
136089
136625
 
@@ -136106,7 +136642,7 @@ bool OrderModifier::Equals(const ResultModifier *other_p) const {
136106
136642
  return true;
136107
136643
  }
136108
136644
 
136109
- unique_ptr<ResultModifier> OrderModifier::Copy() {
136645
+ unique_ptr<ResultModifier> OrderModifier::Copy() const {
136110
136646
  auto copy = make_unique<OrderModifier>();
136111
136647
  for (auto &order : orders) {
136112
136648
  copy->orders.emplace_back(order.type, order.null_order, order.expression->Copy());
@@ -136140,33 +136676,29 @@ string OrderByNode::ToString() const {
136140
136676
  return str;
136141
136677
  }
136142
136678
 
136143
- void OrderByNode::Serialize(Serializer &serializer) {
136144
- serializer.Write<OrderType>(type);
136145
- serializer.Write<OrderByNullType>(null_order);
136146
- expression->Serialize(serializer);
136679
+ void OrderByNode::Serialize(Serializer &serializer) const {
136680
+ FieldWriter writer(serializer);
136681
+ writer.WriteField<OrderType>(type);
136682
+ writer.WriteField<OrderByNullType>(null_order);
136683
+ writer.WriteSerializable(*expression);
136684
+ writer.Finalize();
136147
136685
  }
136148
136686
 
136149
136687
  OrderByNode OrderByNode::Deserialize(Deserializer &source) {
136150
- auto type = source.Read<OrderType>();
136151
- auto null_order = source.Read<OrderByNullType>();
136152
- auto expression = ParsedExpression::Deserialize(source);
136688
+ FieldReader reader(source);
136689
+ auto type = reader.ReadRequired<OrderType>();
136690
+ auto null_order = reader.ReadRequired<OrderByNullType>();
136691
+ auto expression = reader.ReadRequiredSerializable<ParsedExpression>();
136153
136692
  return OrderByNode(type, null_order, move(expression));
136154
136693
  }
136155
136694
 
136156
- void OrderModifier::Serialize(Serializer &serializer) {
136157
- ResultModifier::Serialize(serializer);
136158
- serializer.Write<int64_t>(orders.size());
136159
- for (auto &order : orders) {
136160
- order.Serialize(serializer);
136161
- }
136695
+ void OrderModifier::Serialize(FieldWriter &writer) const {
136696
+ writer.WriteRegularSerializableList(orders);
136162
136697
  }
136163
136698
 
136164
- unique_ptr<ResultModifier> OrderModifier::Deserialize(Deserializer &source) {
136699
+ unique_ptr<ResultModifier> OrderModifier::Deserialize(FieldReader &reader) {
136165
136700
  auto mod = make_unique<OrderModifier>();
136166
- auto order_count = source.Read<int64_t>();
136167
- for (int64_t i = 0; i < order_count; i++) {
136168
- mod->orders.push_back(OrderByNode::Deserialize((source)));
136169
- }
136701
+ mod->orders = reader.ReadRequiredSerializableList<OrderByNode, OrderByNode>();
136170
136702
  return move(mod);
136171
136703
  }
136172
136704
 
@@ -136184,7 +136716,7 @@ bool LimitPercentModifier::Equals(const ResultModifier *other_p) const {
136184
136716
  return true;
136185
136717
  }
136186
136718
 
136187
- unique_ptr<ResultModifier> LimitPercentModifier::Copy() {
136719
+ unique_ptr<ResultModifier> LimitPercentModifier::Copy() const {
136188
136720
  auto copy = make_unique<LimitPercentModifier>();
136189
136721
  if (limit) {
136190
136722
  copy->limit = limit->Copy();
@@ -136195,16 +136727,15 @@ unique_ptr<ResultModifier> LimitPercentModifier::Copy() {
136195
136727
  return move(copy);
136196
136728
  }
136197
136729
 
136198
- void LimitPercentModifier::Serialize(Serializer &serializer) {
136199
- ResultModifier::Serialize(serializer);
136200
- serializer.WriteOptional(limit);
136201
- serializer.WriteOptional(offset);
136730
+ void LimitPercentModifier::Serialize(FieldWriter &writer) const {
136731
+ writer.WriteOptional(limit);
136732
+ writer.WriteOptional(offset);
136202
136733
  }
136203
136734
 
136204
- unique_ptr<ResultModifier> LimitPercentModifier::Deserialize(Deserializer &source) {
136735
+ unique_ptr<ResultModifier> LimitPercentModifier::Deserialize(FieldReader &reader) {
136205
136736
  auto mod = make_unique<LimitPercentModifier>();
136206
- mod->limit = source.ReadOptional<ParsedExpression>();
136207
- mod->offset = source.ReadOptional<ParsedExpression>();
136737
+ mod->limit = reader.ReadOptional<ParsedExpression>(nullptr);
136738
+ mod->offset = reader.ReadOptional<ParsedExpression>(nullptr);
136208
136739
  return move(mod);
136209
136740
  }
136210
136741
 
@@ -136540,7 +137071,7 @@ unique_ptr<SQLStatement> SelectStatement::Copy() const {
136540
137071
  return move(result);
136541
137072
  }
136542
137073
 
136543
- void SelectStatement::Serialize(Serializer &serializer) {
137074
+ void SelectStatement::Serialize(Serializer &serializer) const {
136544
137075
  node->Serialize(serializer);
136545
137076
  }
136546
137077
 
@@ -136760,20 +137291,18 @@ bool BaseTableRef::Equals(const TableRef *other_p) const {
136760
137291
  column_name_alias == other->column_name_alias;
136761
137292
  }
136762
137293
 
136763
- void BaseTableRef::Serialize(Serializer &serializer) {
136764
- TableRef::Serialize(serializer);
136765
-
136766
- serializer.WriteString(schema_name);
136767
- serializer.WriteString(table_name);
136768
- serializer.WriteStringVector(column_name_alias);
137294
+ void BaseTableRef::Serialize(FieldWriter &writer) const {
137295
+ writer.WriteString(schema_name);
137296
+ writer.WriteString(table_name);
137297
+ writer.WriteList<string>(column_name_alias);
136769
137298
  }
136770
137299
 
136771
- unique_ptr<TableRef> BaseTableRef::Deserialize(Deserializer &source) {
137300
+ unique_ptr<TableRef> BaseTableRef::Deserialize(FieldReader &reader) {
136772
137301
  auto result = make_unique<BaseTableRef>();
136773
137302
 
136774
- result->schema_name = source.Read<string>();
136775
- result->table_name = source.Read<string>();
136776
- source.ReadStringVector(result->column_name_alias);
137303
+ result->schema_name = reader.ReadRequired<string>();
137304
+ result->table_name = reader.ReadRequired<string>();
137305
+ result->column_name_alias = reader.ReadRequiredList<string>();
136777
137306
 
136778
137307
  return move(result);
136779
137308
  }
@@ -136811,22 +137340,18 @@ unique_ptr<TableRef> CrossProductRef::Copy() {
136811
137340
  return move(copy);
136812
137341
  }
136813
137342
 
136814
- void CrossProductRef::Serialize(Serializer &serializer) {
136815
- TableRef::Serialize(serializer);
136816
-
136817
- left->Serialize(serializer);
136818
- right->Serialize(serializer);
137343
+ void CrossProductRef::Serialize(FieldWriter &writer) const {
137344
+ writer.WriteSerializable(*left);
137345
+ writer.WriteSerializable(*right);
136819
137346
  }
136820
137347
 
136821
- unique_ptr<TableRef> CrossProductRef::Deserialize(Deserializer &source) {
137348
+ unique_ptr<TableRef> CrossProductRef::Deserialize(FieldReader &reader) {
136822
137349
  auto result = make_unique<CrossProductRef>();
136823
137350
 
136824
- result->left = TableRef::Deserialize(source);
136825
- result->right = TableRef::Deserialize(source);
136826
-
136827
- if (!result->left || !result->right) {
136828
- return nullptr;
136829
- }
137351
+ result->left = reader.ReadRequiredSerializable<TableRef>();
137352
+ result->right = reader.ReadRequiredSerializable<TableRef>();
137353
+ D_ASSERT(result->left);
137354
+ D_ASSERT(result->right);
136830
137355
 
136831
137356
  return move(result);
136832
137357
  }
@@ -136846,11 +137371,10 @@ unique_ptr<TableRef> EmptyTableRef::Copy() {
136846
137371
  return make_unique<EmptyTableRef>();
136847
137372
  }
136848
137373
 
136849
- void EmptyTableRef::Serialize(Serializer &serializer) {
136850
- TableRef::Serialize(serializer);
137374
+ void EmptyTableRef::Serialize(FieldWriter &writer) const {
136851
137375
  }
136852
137376
 
136853
- unique_ptr<TableRef> EmptyTableRef::Deserialize(Deserializer &source) {
137377
+ unique_ptr<TableRef> EmptyTableRef::Deserialize(FieldReader &reader) {
136854
137378
  return make_unique<EmptyTableRef>();
136855
137379
  }
136856
137380
 
@@ -136899,34 +137423,23 @@ unique_ptr<TableRef> ExpressionListRef::Copy() {
136899
137423
  return move(result);
136900
137424
  }
136901
137425
 
136902
- void ExpressionListRef::Serialize(Serializer &serializer) {
136903
- TableRef::Serialize(serializer);
136904
- serializer.Write<idx_t>(expected_names.size());
136905
- for (idx_t i = 0; i < expected_names.size(); i++) {
136906
- serializer.WriteString(expected_names[i]);
136907
- }
136908
- serializer.Write<idx_t>(expected_types.size());
136909
- for (idx_t i = 0; i < expected_types.size(); i++) {
136910
- expected_types[i].Serialize(serializer);
136911
- }
136912
- serializer.Write<idx_t>(values.size());
137426
+ void ExpressionListRef::Serialize(FieldWriter &writer) const {
137427
+ writer.WriteList<string>(expected_names);
137428
+ writer.WriteRegularSerializableList<LogicalType>(expected_types);
137429
+ auto &serializer = writer.GetSerializer();
137430
+ writer.WriteField<uint32_t>(values.size());
136913
137431
  for (idx_t i = 0; i < values.size(); i++) {
136914
137432
  serializer.WriteList(values[i]);
136915
137433
  }
136916
137434
  }
136917
137435
 
136918
- unique_ptr<TableRef> ExpressionListRef::Deserialize(Deserializer &source) {
137436
+ unique_ptr<TableRef> ExpressionListRef::Deserialize(FieldReader &reader) {
136919
137437
  auto result = make_unique<ExpressionListRef>();
136920
137438
  // value list
136921
- auto name_count = source.Read<idx_t>();
136922
- for (idx_t i = 0; i < name_count; i++) {
136923
- result->expected_names.push_back(source.Read<string>());
136924
- }
136925
- auto type_count = source.Read<idx_t>();
136926
- for (idx_t i = 0; i < type_count; i++) {
136927
- result->expected_types.push_back(LogicalType::Deserialize(source));
136928
- }
136929
- idx_t value_list_size = source.Read<idx_t>();
137439
+ result->expected_names = reader.ReadRequiredList<string>();
137440
+ result->expected_types = reader.ReadRequiredSerializableList<LogicalType, LogicalType>();
137441
+ idx_t value_list_size = reader.ReadRequired<uint32_t>();
137442
+ auto &source = reader.GetSource();
136930
137443
  for (idx_t i = 0; i < value_list_size; i++) {
136931
137444
  vector<unique_ptr<ParsedExpression>> value_list;
136932
137445
  source.ReadList<ParsedExpression>(value_list);
@@ -136974,33 +137487,23 @@ unique_ptr<TableRef> JoinRef::Copy() {
136974
137487
  return move(copy);
136975
137488
  }
136976
137489
 
136977
- void JoinRef::Serialize(Serializer &serializer) {
136978
- TableRef::Serialize(serializer);
136979
-
136980
- left->Serialize(serializer);
136981
- right->Serialize(serializer);
136982
- serializer.WriteOptional(condition);
136983
- serializer.Write<JoinType>(type);
136984
- serializer.Write<bool>(is_natural);
136985
- D_ASSERT(using_columns.size() <= NumericLimits<uint32_t>::Maximum());
136986
- serializer.Write<uint32_t>((uint32_t)using_columns.size());
136987
- for (auto &using_column : using_columns) {
136988
- serializer.WriteString(using_column);
136989
- }
137490
+ void JoinRef::Serialize(FieldWriter &writer) const {
137491
+ writer.WriteSerializable(*left);
137492
+ writer.WriteSerializable(*right);
137493
+ writer.WriteOptional(condition);
137494
+ writer.WriteField<JoinType>(type);
137495
+ writer.WriteField<bool>(is_natural);
137496
+ writer.WriteList<string>(using_columns);
136990
137497
  }
136991
137498
 
136992
- unique_ptr<TableRef> JoinRef::Deserialize(Deserializer &source) {
137499
+ unique_ptr<TableRef> JoinRef::Deserialize(FieldReader &reader) {
136993
137500
  auto result = make_unique<JoinRef>();
136994
-
136995
- result->left = TableRef::Deserialize(source);
136996
- result->right = TableRef::Deserialize(source);
136997
- result->condition = source.ReadOptional<ParsedExpression>();
136998
- result->type = source.Read<JoinType>();
136999
- result->is_natural = source.Read<bool>();
137000
- auto count = source.Read<uint32_t>();
137001
- for (idx_t i = 0; i < count; i++) {
137002
- result->using_columns.push_back(source.Read<string>());
137003
- }
137501
+ result->left = reader.ReadRequiredSerializable<TableRef>();
137502
+ result->right = reader.ReadRequiredSerializable<TableRef>();
137503
+ result->condition = reader.ReadOptional<ParsedExpression>(nullptr);
137504
+ result->type = reader.ReadRequired<JoinType>();
137505
+ result->is_natural = reader.ReadRequired<bool>();
137506
+ result->using_columns = reader.ReadRequiredList<string>();
137004
137507
  return move(result);
137005
137508
  }
137006
137509
 
@@ -137032,19 +137535,15 @@ unique_ptr<TableRef> SubqueryRef::Copy() {
137032
137535
  return move(copy);
137033
137536
  }
137034
137537
 
137035
- void SubqueryRef::Serialize(Serializer &serializer) {
137036
- TableRef::Serialize(serializer);
137037
- subquery->Serialize(serializer);
137038
- serializer.WriteStringVector(column_name_alias);
137538
+ void SubqueryRef::Serialize(FieldWriter &writer) const {
137539
+ writer.WriteSerializable(*subquery);
137540
+ writer.WriteList<string>(column_name_alias);
137039
137541
  }
137040
137542
 
137041
- unique_ptr<TableRef> SubqueryRef::Deserialize(Deserializer &source) {
137042
- auto subquery = SelectStatement::Deserialize(source);
137043
- if (!subquery) {
137044
- return nullptr;
137045
- }
137543
+ unique_ptr<TableRef> SubqueryRef::Deserialize(FieldReader &reader) {
137544
+ auto subquery = reader.ReadRequiredSerializable<SelectStatement>();
137046
137545
  auto result = make_unique<SubqueryRef>(move(subquery));
137047
- source.ReadStringVector(result->column_name_alias);
137546
+ result->column_name_alias = reader.ReadRequiredList<string>();
137048
137547
  return move(result);
137049
137548
  }
137050
137549
 
@@ -137067,20 +137566,17 @@ bool TableFunctionRef::Equals(const TableRef *other_p) const {
137067
137566
  return function->Equals(other->function.get());
137068
137567
  }
137069
137568
 
137070
- void TableFunctionRef::Serialize(Serializer &serializer) {
137071
- TableRef::Serialize(serializer);
137072
- function->Serialize(serializer);
137073
- serializer.WriteString(alias);
137074
- serializer.WriteStringVector(column_name_alias);
137569
+ void TableFunctionRef::Serialize(FieldWriter &writer) const {
137570
+ writer.WriteSerializable(*function);
137571
+ writer.WriteString(alias);
137572
+ writer.WriteList<string>(column_name_alias);
137075
137573
  }
137076
137574
 
137077
- unique_ptr<TableRef> TableFunctionRef::Deserialize(Deserializer &source) {
137575
+ unique_ptr<TableRef> TableFunctionRef::Deserialize(FieldReader &reader) {
137078
137576
  auto result = make_unique<TableFunctionRef>();
137079
-
137080
- result->function = ParsedExpression::Deserialize(source);
137081
- result->alias = source.Read<string>();
137082
- source.ReadStringVector(result->column_name_alias);
137083
-
137577
+ result->function = reader.ReadRequiredSerializable<ParsedExpression>();
137578
+ result->alias = reader.ReadRequired<string>();
137579
+ result->column_name_alias = reader.ReadRequiredList<string>();
137084
137580
  return move(result);
137085
137581
  }
137086
137582
 
@@ -137112,44 +137608,50 @@ bool TableRef::Equals(const TableRef *other) const {
137112
137608
  SampleOptions::Equals(sample.get(), other->sample.get());
137113
137609
  }
137114
137610
 
137115
- void TableRef::Serialize(Serializer &serializer) {
137116
- serializer.Write<TableReferenceType>(type);
137117
- serializer.WriteString(alias);
137118
- serializer.WriteOptional(sample);
137611
+ void TableRef::Serialize(Serializer &serializer) const {
137612
+ FieldWriter writer(serializer);
137613
+ writer.WriteField<TableReferenceType>(type);
137614
+ writer.WriteString(alias);
137615
+ writer.WriteOptional(sample);
137616
+ Serialize(writer);
137617
+ writer.Finalize();
137119
137618
  }
137120
137619
 
137121
- //! Deserializes a blob back into an TableRef
137122
137620
  unique_ptr<TableRef> TableRef::Deserialize(Deserializer &source) {
137123
- auto type = source.Read<TableReferenceType>();
137124
- auto alias = source.Read<string>();
137125
- auto sample = source.ReadOptional<SampleOptions>();
137621
+ FieldReader reader(source);
137622
+
137623
+ auto type = reader.ReadRequired<TableReferenceType>();
137624
+ auto alias = reader.ReadRequired<string>();
137625
+ auto sample = reader.ReadOptional<SampleOptions>(nullptr);
137126
137626
  unique_ptr<TableRef> result;
137127
137627
  switch (type) {
137128
137628
  case TableReferenceType::BASE_TABLE:
137129
- result = BaseTableRef::Deserialize(source);
137629
+ result = BaseTableRef::Deserialize(reader);
137130
137630
  break;
137131
137631
  case TableReferenceType::CROSS_PRODUCT:
137132
- result = CrossProductRef::Deserialize(source);
137632
+ result = CrossProductRef::Deserialize(reader);
137133
137633
  break;
137134
137634
  case TableReferenceType::JOIN:
137135
- result = JoinRef::Deserialize(source);
137635
+ result = JoinRef::Deserialize(reader);
137136
137636
  break;
137137
137637
  case TableReferenceType::SUBQUERY:
137138
- result = SubqueryRef::Deserialize(source);
137638
+ result = SubqueryRef::Deserialize(reader);
137139
137639
  break;
137140
137640
  case TableReferenceType::TABLE_FUNCTION:
137141
- result = TableFunctionRef::Deserialize(source);
137641
+ result = TableFunctionRef::Deserialize(reader);
137142
137642
  break;
137143
137643
  case TableReferenceType::EMPTY:
137144
- result = EmptyTableRef::Deserialize(source);
137644
+ result = EmptyTableRef::Deserialize(reader);
137145
137645
  break;
137146
137646
  case TableReferenceType::EXPRESSION_LIST:
137147
- result = ExpressionListRef::Deserialize(source);
137647
+ result = ExpressionListRef::Deserialize(reader);
137148
137648
  break;
137149
137649
  case TableReferenceType::CTE:
137150
137650
  case TableReferenceType::INVALID:
137151
137651
  throw InternalException("Unsupported type for TableRef::Deserialize");
137152
137652
  }
137653
+ reader.Finalize();
137654
+
137153
137655
  result->alias = alias;
137154
137656
  result->sample = move(sample);
137155
137657
  return result;
@@ -140200,7 +140702,7 @@ unique_ptr<CreateStatement> Transformer::TransformCreateEnum(duckdb_libpgquery::
140200
140702
  info->name = ReadPgListToString(stmt->typeName)[0];
140201
140703
  idx_t size = 0;
140202
140704
  auto ordered_array = ReadPgListToVector(stmt->vals, size);
140203
- info->type = make_unique<LogicalType>(LogicalType::ENUM(info->name, ordered_array, size));
140705
+ info->type = LogicalType::ENUM(info->name, ordered_array, size);
140204
140706
  result->info = move(info);
140205
140707
  return result;
140206
140708
  }
@@ -143642,11 +144144,14 @@ public:
143642
144144
  unique_ptr<SelectStatement> subquery;
143643
144145
 
143644
144146
  const vector<unique_ptr<ParsedExpression>> &GetSelectList() const override {
143645
- throw Exception("Cannot get select list of bound subquery node");
144147
+ throw InternalException("Cannot get select list of bound subquery node");
143646
144148
  }
143647
144149
 
143648
- unique_ptr<QueryNode> Copy() override {
143649
- throw Exception("Cannot copy bound subquery node");
144150
+ unique_ptr<QueryNode> Copy() const override {
144151
+ throw InternalException("Cannot copy bound subquery node");
144152
+ }
144153
+ void Serialize(FieldWriter &writer) const override {
144154
+ throw InternalException("Cannot copy bound subquery node");
143650
144155
  }
143651
144156
  };
143652
144157
 
@@ -146099,7 +146604,7 @@ void Binder::BindLogicalType(ClientContext &context, LogicalType &type, const st
146099
146604
  if (!user_type_catalog) {
146100
146605
  throw NotImplementedException("DataType %s not supported yet...\n", user_type_name);
146101
146606
  }
146102
- type = *user_type_catalog->user_type;
146607
+ type = user_type_catalog->user_type;
146103
146608
  EnumType::SetCatalog(type, user_type_catalog);
146104
146609
  } else if (type.id() == LogicalTypeId::ENUM) {
146105
146610
  auto &enum_type_name = EnumType::GetTypeName(type);
@@ -160868,6 +161373,7 @@ private:
160868
161373
 
160869
161374
 
160870
161375
 
161376
+
160871
161377
  #include <algorithm>
160872
161378
  #include <cstring>
160873
161379
 
@@ -160878,9 +161384,11 @@ const char MainHeader::MAGIC_BYTES[] = "DUCK";
160878
161384
  void MainHeader::Serialize(Serializer &ser) {
160879
161385
  ser.WriteData((data_ptr_t)MAGIC_BYTES, MAGIC_BYTE_SIZE);
160880
161386
  ser.Write<uint64_t>(version_number);
161387
+ FieldWriter writer(ser);
160881
161388
  for (idx_t i = 0; i < FLAG_COUNT; i++) {
160882
- ser.Write<uint64_t>(flags[i]);
161389
+ writer.WriteField<uint64_t>(flags[i]);
160883
161390
  }
161391
+ writer.Finalize();
160884
161392
  }
160885
161393
 
160886
161394
  void MainHeader::CheckMagicBytes(FileHandle &handle) {
@@ -160903,9 +161411,11 @@ MainHeader MainHeader::Deserialize(Deserializer &source) {
160903
161411
  }
160904
161412
  header.version_number = source.Read<uint64_t>();
160905
161413
  // read the flags
161414
+ FieldReader reader(source);
160906
161415
  for (idx_t i = 0; i < FLAG_COUNT; i++) {
160907
- header.flags[i] = source.Read<uint64_t>();
161416
+ header.flags[i] = reader.ReadRequired<uint64_t>();
160908
161417
  }
161418
+ reader.Finalize();
160909
161419
  return header;
160910
161420
  }
160911
161421
 
@@ -161272,7 +161782,7 @@ BaseStatistics::BaseStatistics(LogicalType type) : type(move(type)) {
161272
161782
  BaseStatistics::~BaseStatistics() {
161273
161783
  }
161274
161784
 
161275
- bool BaseStatistics::CanHaveNull() {
161785
+ bool BaseStatistics::CanHaveNull() const {
161276
161786
  if (!validity_stats) {
161277
161787
  // we don't know
161278
161788
  // solid maybe
@@ -161281,7 +161791,7 @@ bool BaseStatistics::CanHaveNull() {
161281
161791
  return ((ValidityStatistics &)*validity_stats).has_null;
161282
161792
  }
161283
161793
 
161284
- bool BaseStatistics::CanHaveNoNull() {
161794
+ bool BaseStatistics::CanHaveNoNull() const {
161285
161795
  if (!validity_stats) {
161286
161796
  // we don't know
161287
161797
  // solid maybe
@@ -161290,14 +161800,6 @@ bool BaseStatistics::CanHaveNoNull() {
161290
161800
  return ((ValidityStatistics &)*validity_stats).has_no_null;
161291
161801
  }
161292
161802
 
161293
- unique_ptr<BaseStatistics> BaseStatistics::Copy() {
161294
- auto statistics = make_unique<BaseStatistics>(type);
161295
- if (validity_stats) {
161296
- statistics->validity_stats = validity_stats->Copy();
161297
- }
161298
- return statistics;
161299
- }
161300
-
161301
161803
  void BaseStatistics::Merge(const BaseStatistics &other) {
161302
161804
  D_ASSERT(type == other.type);
161303
161805
  if (other.validity_stats) {
@@ -161340,18 +161842,33 @@ unique_ptr<BaseStatistics> BaseStatistics::CreateEmpty(LogicalType type) {
161340
161842
  }
161341
161843
  }
161342
161844
 
161343
- void BaseStatistics::Serialize(Serializer &serializer) {
161344
- serializer.Write<bool>(CanHaveNull());
161345
- serializer.Write<bool>(CanHaveNoNull());
161845
+ unique_ptr<BaseStatistics> BaseStatistics::Copy() const {
161846
+ auto statistics = make_unique<BaseStatistics>(type);
161847
+ if (validity_stats) {
161848
+ statistics->validity_stats = validity_stats->Copy();
161849
+ }
161850
+ return statistics;
161851
+ }
161852
+
161853
+ void BaseStatistics::Serialize(Serializer &serializer) const {
161854
+ FieldWriter writer(serializer);
161855
+ writer.WriteField<bool>(CanHaveNull());
161856
+ writer.WriteField<bool>(CanHaveNoNull());
161857
+ Serialize(writer);
161858
+ writer.Finalize();
161859
+ }
161860
+
161861
+ void BaseStatistics::Serialize(FieldWriter &writer) const {
161346
161862
  }
161347
161863
 
161348
161864
  unique_ptr<BaseStatistics> BaseStatistics::Deserialize(Deserializer &source, LogicalType type) {
161349
- bool can_have_null = source.Read<bool>();
161350
- bool can_have_no_null = source.Read<bool>();
161865
+ FieldReader reader(source);
161866
+ bool can_have_null = reader.ReadRequired<bool>();
161867
+ bool can_have_no_null = reader.ReadRequired<bool>();
161351
161868
  unique_ptr<BaseStatistics> result;
161352
161869
  switch (type.InternalType()) {
161353
161870
  case PhysicalType::BIT:
161354
- return ValidityStatistics::Deserialize(source);
161871
+ return ValidityStatistics::Deserialize(reader);
161355
161872
  case PhysicalType::BOOL:
161356
161873
  case PhysicalType::INT8:
161357
161874
  case PhysicalType::INT16:
@@ -161364,16 +161881,16 @@ unique_ptr<BaseStatistics> BaseStatistics::Deserialize(Deserializer &source, Log
161364
161881
  case PhysicalType::INT128:
161365
161882
  case PhysicalType::FLOAT:
161366
161883
  case PhysicalType::DOUBLE:
161367
- result = NumericStatistics::Deserialize(source, move(type));
161884
+ result = NumericStatistics::Deserialize(reader, move(type));
161368
161885
  break;
161369
161886
  case PhysicalType::VARCHAR:
161370
- result = StringStatistics::Deserialize(source, move(type));
161887
+ result = StringStatistics::Deserialize(reader, move(type));
161371
161888
  break;
161372
161889
  case PhysicalType::STRUCT:
161373
- result = StructStatistics::Deserialize(source, move(type));
161890
+ result = StructStatistics::Deserialize(reader, move(type));
161374
161891
  break;
161375
161892
  case PhysicalType::LIST:
161376
- result = ListStatistics::Deserialize(source, move(type));
161893
+ result = ListStatistics::Deserialize(reader, move(type));
161377
161894
  break;
161378
161895
  case PhysicalType::INTERVAL:
161379
161896
  result = make_unique<BaseStatistics>(move(type));
@@ -161385,18 +161902,18 @@ unique_ptr<BaseStatistics> BaseStatistics::Deserialize(Deserializer &source, Log
161385
161902
  return result;
161386
161903
  }
161387
161904
 
161388
- string BaseStatistics::ToString() {
161905
+ string BaseStatistics::ToString() const {
161389
161906
  return StringUtil::Format("Base Statistics %s", validity_stats ? validity_stats->ToString() : "[]");
161390
161907
  }
161391
161908
 
161392
- void BaseStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) {
161909
+ void BaseStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) const {
161393
161910
  D_ASSERT(vector.GetType() == this->type);
161394
161911
  if (validity_stats) {
161395
161912
  validity_stats->Verify(vector, sel, count);
161396
161913
  }
161397
161914
  }
161398
161915
 
161399
- void BaseStatistics::Verify(Vector &vector, idx_t count) {
161916
+ void BaseStatistics::Verify(Vector &vector, idx_t count) const {
161400
161917
  SelectionVector owned_sel;
161401
161918
  auto sel = FlatVector::IncrementalSelectionVector(count, owned_sel);
161402
161919
  Verify(vector, *sel, count);
@@ -161406,6 +161923,7 @@ void BaseStatistics::Verify(Vector &vector, idx_t count) {
161406
161923
 
161407
161924
 
161408
161925
 
161926
+
161409
161927
  namespace duckdb {
161410
161928
 
161411
161929
  ListStatistics::ListStatistics(LogicalType type_p) : BaseStatistics(move(type_p)) {
@@ -161428,32 +161946,32 @@ void ListStatistics::Merge(const BaseStatistics &other_p) {
161428
161946
  }
161429
161947
 
161430
161948
  // LCOV_EXCL_START
161431
- FilterPropagateResult ListStatistics::CheckZonemap(ExpressionType comparison_type, const Value &constant) {
161949
+ FilterPropagateResult ListStatistics::CheckZonemap(ExpressionType comparison_type, const Value &constant) const {
161432
161950
  throw InternalException("List zonemaps are not supported yet");
161433
161951
  }
161434
161952
  // LCOV_EXCL_STOP
161435
161953
 
161436
- unique_ptr<BaseStatistics> ListStatistics::Copy() {
161954
+ unique_ptr<BaseStatistics> ListStatistics::Copy() const {
161437
161955
  auto copy = make_unique<ListStatistics>(type);
161438
161956
  copy->validity_stats = validity_stats ? validity_stats->Copy() : nullptr;
161439
161957
  copy->child_stats = child_stats ? child_stats->Copy() : nullptr;
161440
161958
  return move(copy);
161441
161959
  }
161442
161960
 
161443
- void ListStatistics::Serialize(Serializer &serializer) {
161444
- BaseStatistics::Serialize(serializer);
161445
- child_stats->Serialize(serializer);
161961
+ void ListStatistics::Serialize(FieldWriter &writer) const {
161962
+ writer.WriteSerializable(*child_stats);
161446
161963
  }
161447
161964
 
161448
- unique_ptr<BaseStatistics> ListStatistics::Deserialize(Deserializer &source, LogicalType type) {
161965
+ unique_ptr<BaseStatistics> ListStatistics::Deserialize(FieldReader &reader, LogicalType type) {
161449
161966
  D_ASSERT(type.InternalType() == PhysicalType::LIST);
161450
161967
  auto result = make_unique<ListStatistics>(move(type));
161451
161968
  auto &child_type = ListType::GetChildType(result->type);
161969
+ auto &source = reader.GetSource();
161452
161970
  result->child_stats = BaseStatistics::Deserialize(source, child_type);
161453
161971
  return move(result);
161454
161972
  }
161455
161973
 
161456
- string ListStatistics::ToString() {
161974
+ string ListStatistics::ToString() const {
161457
161975
  string result;
161458
161976
  result += " [";
161459
161977
  result += child_stats ? child_stats->ToString() : "No Stats";
@@ -161462,7 +161980,7 @@ string ListStatistics::ToString() {
161462
161980
  return result;
161463
161981
  }
161464
161982
 
161465
- void ListStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) {
161983
+ void ListStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) const {
161466
161984
  BaseStatistics::Verify(vector, sel, count);
161467
161985
 
161468
161986
  if (child_stats) {
@@ -161504,6 +162022,7 @@ void ListStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t co
161504
162022
 
161505
162023
 
161506
162024
 
162025
+
161507
162026
  namespace duckdb {
161508
162027
 
161509
162028
  template <>
@@ -161539,7 +162058,7 @@ void NumericStatistics::Merge(const BaseStatistics &other_p) {
161539
162058
  }
161540
162059
  }
161541
162060
 
161542
- FilterPropagateResult NumericStatistics::CheckZonemap(ExpressionType comparison_type, const Value &constant) {
162061
+ FilterPropagateResult NumericStatistics::CheckZonemap(ExpressionType comparison_type, const Value &constant) const {
161543
162062
  if (constant.IsNull()) {
161544
162063
  return FilterPropagateResult::FILTER_ALWAYS_FALSE;
161545
162064
  }
@@ -161612,7 +162131,7 @@ FilterPropagateResult NumericStatistics::CheckZonemap(ExpressionType comparison_
161612
162131
  }
161613
162132
  }
161614
162133
 
161615
- unique_ptr<BaseStatistics> NumericStatistics::Copy() {
162134
+ unique_ptr<BaseStatistics> NumericStatistics::Copy() const {
161616
162135
  auto stats = make_unique<NumericStatistics>(type, min, max);
161617
162136
  if (validity_stats) {
161618
162137
  stats->validity_stats = validity_stats->Copy();
@@ -161620,29 +162139,28 @@ unique_ptr<BaseStatistics> NumericStatistics::Copy() {
161620
162139
  return move(stats);
161621
162140
  }
161622
162141
 
161623
- bool NumericStatistics::IsConstant() {
162142
+ bool NumericStatistics::IsConstant() const {
161624
162143
  return max <= min;
161625
162144
  }
161626
162145
 
161627
- void NumericStatistics::Serialize(Serializer &serializer) {
161628
- BaseStatistics::Serialize(serializer);
161629
- min.Serialize(serializer);
161630
- max.Serialize(serializer);
162146
+ void NumericStatistics::Serialize(FieldWriter &writer) const {
162147
+ writer.WriteSerializable(min);
162148
+ writer.WriteSerializable(max);
161631
162149
  }
161632
162150
 
161633
- unique_ptr<BaseStatistics> NumericStatistics::Deserialize(Deserializer &source, LogicalType type) {
161634
- auto min = Value::Deserialize(source);
161635
- auto max = Value::Deserialize(source);
162151
+ unique_ptr<BaseStatistics> NumericStatistics::Deserialize(FieldReader &reader, LogicalType type) {
162152
+ auto min = reader.ReadRequiredSerializable<Value, Value>();
162153
+ auto max = reader.ReadRequiredSerializable<Value, Value>();
161636
162154
  return make_unique_base<BaseStatistics, NumericStatistics>(move(type), min, max);
161637
162155
  }
161638
162156
 
161639
- string NumericStatistics::ToString() {
162157
+ string NumericStatistics::ToString() const {
161640
162158
  return StringUtil::Format("[Min: %s, Max: %s]%s", min.ToString(), max.ToString(),
161641
162159
  validity_stats ? validity_stats->ToString() : "");
161642
162160
  }
161643
162161
 
161644
162162
  template <class T>
161645
- void NumericStatistics::TemplatedVerify(Vector &vector, const SelectionVector &sel, idx_t count) {
162163
+ void NumericStatistics::TemplatedVerify(Vector &vector, const SelectionVector &sel, idx_t count) const {
161646
162164
  VectorData vdata;
161647
162165
  vector.Orrify(count, vdata);
161648
162166
 
@@ -161664,7 +162182,7 @@ void NumericStatistics::TemplatedVerify(Vector &vector, const SelectionVector &s
161664
162182
  }
161665
162183
  }
161666
162184
 
161667
- void NumericStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) {
162185
+ void NumericStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) const {
161668
162186
  BaseStatistics::Verify(vector, sel, count);
161669
162187
 
161670
162188
  switch (type.InternalType()) {
@@ -161753,7 +162271,7 @@ StringStatistics::StringStatistics(LogicalType type_p) : BaseStatistics(move(typ
161753
162271
  validity_stats = make_unique<ValidityStatistics>(false);
161754
162272
  }
161755
162273
 
161756
- unique_ptr<BaseStatistics> StringStatistics::Copy() {
162274
+ unique_ptr<BaseStatistics> StringStatistics::Copy() const {
161757
162275
  auto stats = make_unique<StringStatistics>(type);
161758
162276
  memcpy(stats->min, min, MAX_STRING_MINMAX_SIZE);
161759
162277
  memcpy(stats->max, max, MAX_STRING_MINMAX_SIZE);
@@ -161765,22 +162283,21 @@ unique_ptr<BaseStatistics> StringStatistics::Copy() {
161765
162283
  return move(stats);
161766
162284
  }
161767
162285
 
161768
- void StringStatistics::Serialize(Serializer &serializer) {
161769
- BaseStatistics::Serialize(serializer);
161770
- serializer.WriteData(min, MAX_STRING_MINMAX_SIZE);
161771
- serializer.WriteData(max, MAX_STRING_MINMAX_SIZE);
161772
- serializer.Write<bool>(has_unicode);
161773
- serializer.Write<uint32_t>(max_string_length);
161774
- serializer.Write<bool>(has_overflow_strings);
162286
+ void StringStatistics::Serialize(FieldWriter &writer) const {
162287
+ writer.WriteBlob(min, MAX_STRING_MINMAX_SIZE);
162288
+ writer.WriteBlob(max, MAX_STRING_MINMAX_SIZE);
162289
+ writer.WriteField<bool>(has_unicode);
162290
+ writer.WriteField<uint32_t>(max_string_length);
162291
+ writer.WriteField<bool>(has_overflow_strings);
161775
162292
  }
161776
162293
 
161777
- unique_ptr<BaseStatistics> StringStatistics::Deserialize(Deserializer &source, LogicalType type) {
162294
+ unique_ptr<BaseStatistics> StringStatistics::Deserialize(FieldReader &reader, LogicalType type) {
161778
162295
  auto stats = make_unique<StringStatistics>(move(type));
161779
- source.ReadData(stats->min, MAX_STRING_MINMAX_SIZE);
161780
- source.ReadData(stats->max, MAX_STRING_MINMAX_SIZE);
161781
- stats->has_unicode = source.Read<bool>();
161782
- stats->max_string_length = source.Read<uint32_t>();
161783
- stats->has_overflow_strings = source.Read<bool>();
162296
+ reader.ReadBlob(stats->min, MAX_STRING_MINMAX_SIZE);
162297
+ reader.ReadBlob(stats->max, MAX_STRING_MINMAX_SIZE);
162298
+ stats->has_unicode = reader.ReadRequired<bool>();
162299
+ stats->max_string_length = reader.ReadRequired<uint32_t>();
162300
+ stats->has_overflow_strings = reader.ReadRequired<bool>();
161784
162301
  return move(stats);
161785
162302
  }
161786
162303
 
@@ -161848,7 +162365,7 @@ void StringStatistics::Merge(const BaseStatistics &other_p) {
161848
162365
  has_overflow_strings = has_overflow_strings || other.has_overflow_strings;
161849
162366
  }
161850
162367
 
161851
- FilterPropagateResult StringStatistics::CheckZonemap(ExpressionType comparison_type, const string &constant) {
162368
+ FilterPropagateResult StringStatistics::CheckZonemap(ExpressionType comparison_type, const string &constant) const {
161852
162369
  auto data = (const_data_ptr_t)constant.c_str();
161853
162370
  auto size = constant.size();
161854
162371
 
@@ -161886,7 +162403,7 @@ FilterPropagateResult StringStatistics::CheckZonemap(ExpressionType comparison_t
161886
162403
  }
161887
162404
  }
161888
162405
 
161889
- static idx_t GetValidMinMaxSubstring(data_ptr_t data) {
162406
+ static idx_t GetValidMinMaxSubstring(const_data_ptr_t data) {
161890
162407
  for (idx_t i = 0; i < StringStatistics::MAX_STRING_MINMAX_SIZE; i++) {
161891
162408
  if (data[i] == '\0') {
161892
162409
  return i;
@@ -161898,7 +162415,7 @@ static idx_t GetValidMinMaxSubstring(data_ptr_t data) {
161898
162415
  return StringStatistics::MAX_STRING_MINMAX_SIZE;
161899
162416
  }
161900
162417
 
161901
- string StringStatistics::ToString() {
162418
+ string StringStatistics::ToString() const {
161902
162419
  idx_t min_len = GetValidMinMaxSubstring(min);
161903
162420
  idx_t max_len = GetValidMinMaxSubstring(max);
161904
162421
  return StringUtil::Format("[Min: %s, Max: %s, Has Unicode: %s, Max String Length: %lld]%s",
@@ -161907,7 +162424,7 @@ string StringStatistics::ToString() {
161907
162424
  validity_stats ? validity_stats->ToString() : "");
161908
162425
  }
161909
162426
 
161910
- void StringStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) {
162427
+ void StringStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) const {
161911
162428
  BaseStatistics::Verify(vector, sel, count);
161912
162429
 
161913
162430
  string_t min_string((const char *)min, MAX_STRING_MINMAX_SIZE);
@@ -161986,12 +162503,12 @@ void StructStatistics::Merge(const BaseStatistics &other_p) {
161986
162503
  }
161987
162504
 
161988
162505
  // LCOV_EXCL_START
161989
- FilterPropagateResult StructStatistics::CheckZonemap(ExpressionType comparison_type, const Value &constant) {
162506
+ FilterPropagateResult StructStatistics::CheckZonemap(ExpressionType comparison_type, const Value &constant) const {
161990
162507
  throw InternalException("Struct zonemaps are not supported yet");
161991
162508
  }
161992
162509
  // LCOV_EXCL_STOP
161993
162510
 
161994
- unique_ptr<BaseStatistics> StructStatistics::Copy() {
162511
+ unique_ptr<BaseStatistics> StructStatistics::Copy() const {
161995
162512
  auto copy = make_unique<StructStatistics>(type);
161996
162513
  if (validity_stats) {
161997
162514
  copy->validity_stats = validity_stats->Copy();
@@ -162002,8 +162519,9 @@ unique_ptr<BaseStatistics> StructStatistics::Copy() {
162002
162519
  return move(copy);
162003
162520
  }
162004
162521
 
162005
- void StructStatistics::Serialize(Serializer &serializer) {
162006
- BaseStatistics::Serialize(serializer);
162522
+ void StructStatistics::Serialize(FieldWriter &writer) const {
162523
+ writer.WriteField<uint32_t>(child_stats.size());
162524
+ auto &serializer = writer.GetSerializer();
162007
162525
  for (idx_t i = 0; i < child_stats.size(); i++) {
162008
162526
  serializer.Write<bool>(child_stats[i] ? true : false);
162009
162527
  if (child_stats[i]) {
@@ -162012,10 +162530,16 @@ void StructStatistics::Serialize(Serializer &serializer) {
162012
162530
  }
162013
162531
  }
162014
162532
 
162015
- unique_ptr<BaseStatistics> StructStatistics::Deserialize(Deserializer &source, LogicalType type) {
162533
+ unique_ptr<BaseStatistics> StructStatistics::Deserialize(FieldReader &reader, LogicalType type) {
162016
162534
  D_ASSERT(type.InternalType() == PhysicalType::STRUCT);
162017
162535
  auto result = make_unique<StructStatistics>(move(type));
162018
162536
  auto &child_types = StructType::GetChildTypes(result->type);
162537
+
162538
+ auto child_type_count = reader.ReadRequired<uint32_t>();
162539
+ if (child_types.size() != child_type_count) {
162540
+ throw InternalException("Struct stats deserialization failure: child count does not match type count!");
162541
+ }
162542
+ auto &source = reader.GetSource();
162019
162543
  for (idx_t i = 0; i < child_types.size(); i++) {
162020
162544
  auto has_child = source.Read<bool>();
162021
162545
  if (has_child) {
@@ -162027,7 +162551,7 @@ unique_ptr<BaseStatistics> StructStatistics::Deserialize(Deserializer &source, L
162027
162551
  return move(result);
162028
162552
  }
162029
162553
 
162030
- string StructStatistics::ToString() {
162554
+ string StructStatistics::ToString() const {
162031
162555
  string result;
162032
162556
  result += " {";
162033
162557
  auto &child_types = StructType::GetChildTypes(type);
@@ -162042,7 +162566,7 @@ string StructStatistics::ToString() {
162042
162566
  return result;
162043
162567
  }
162044
162568
 
162045
- void StructStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) {
162569
+ void StructStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) const {
162046
162570
  BaseStatistics::Verify(vector, sel, count);
162047
162571
 
162048
162572
  auto &child_entries = StructVector::GetEntries(vector);
@@ -162080,7 +162604,7 @@ unique_ptr<BaseStatistics> ValidityStatistics::Combine(const unique_ptr<BaseStat
162080
162604
  }
162081
162605
  }
162082
162606
 
162083
- bool ValidityStatistics::IsConstant() {
162607
+ bool ValidityStatistics::IsConstant() const {
162084
162608
  if (!has_null) {
162085
162609
  return true;
162086
162610
  }
@@ -162096,23 +162620,22 @@ void ValidityStatistics::Merge(const BaseStatistics &other_p) {
162096
162620
  has_no_null = has_no_null || other.has_no_null;
162097
162621
  }
162098
162622
 
162099
- unique_ptr<BaseStatistics> ValidityStatistics::Copy() {
162623
+ unique_ptr<BaseStatistics> ValidityStatistics::Copy() const {
162100
162624
  return make_unique<ValidityStatistics>(has_null, has_no_null);
162101
162625
  }
162102
162626
 
162103
- void ValidityStatistics::Serialize(Serializer &serializer) {
162104
- BaseStatistics::Serialize(serializer);
162105
- serializer.Write<bool>(has_null);
162106
- serializer.Write<bool>(has_no_null);
162627
+ void ValidityStatistics::Serialize(FieldWriter &writer) const {
162628
+ writer.WriteField<bool>(has_null);
162629
+ writer.WriteField<bool>(has_no_null);
162107
162630
  }
162108
162631
 
162109
- unique_ptr<BaseStatistics> ValidityStatistics::Deserialize(Deserializer &source) {
162110
- bool has_null = source.Read<bool>();
162111
- bool has_no_null = source.Read<bool>();
162632
+ unique_ptr<BaseStatistics> ValidityStatistics::Deserialize(FieldReader &reader) {
162633
+ bool has_null = reader.ReadRequired<bool>();
162634
+ bool has_no_null = reader.ReadRequired<bool>();
162112
162635
  return make_unique<ValidityStatistics>(has_null, has_no_null);
162113
162636
  }
162114
162637
 
162115
- void ValidityStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) {
162638
+ void ValidityStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) const {
162116
162639
  if (has_null && has_no_null) {
162117
162640
  // nothing to verify
162118
162641
  return;
@@ -162136,7 +162659,7 @@ void ValidityStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_
162136
162659
  }
162137
162660
  }
162138
162661
 
162139
- string ValidityStatistics::ToString() {
162662
+ string ValidityStatistics::ToString() const {
162140
162663
  return has_null ? "[Has Null: true]" : "[Has Null: false]";
162141
162664
  }
162142
162665
 
@@ -164595,6 +165118,7 @@ PersistentTableData::~PersistentTableData() {
164595
165118
 
164596
165119
 
164597
165120
 
165121
+
164598
165122
  namespace duckdb {
164599
165123
 
164600
165124
  constexpr const idx_t RowGroup::ROW_GROUP_VECTOR_COUNT;
@@ -165312,9 +165836,11 @@ shared_ptr<VersionNode> RowGroup::DeserializeDeletes(Deserializer &source) {
165312
165836
  return version_info;
165313
165837
  }
165314
165838
 
165315
- void RowGroup::Serialize(RowGroupPointer &pointer, Serializer &serializer) {
165316
- serializer.Write<uint64_t>(pointer.row_start);
165317
- serializer.Write<uint64_t>(pointer.tuple_count);
165839
+ void RowGroup::Serialize(RowGroupPointer &pointer, Serializer &main_serializer) {
165840
+ FieldWriter writer(main_serializer);
165841
+ writer.WriteField<uint64_t>(pointer.row_start);
165842
+ writer.WriteField<uint64_t>(pointer.tuple_count);
165843
+ auto &serializer = writer.GetSerializer();
165318
165844
  for (auto &stats : pointer.statistics) {
165319
165845
  stats->Serialize(serializer);
165320
165846
  }
@@ -165323,16 +165849,20 @@ void RowGroup::Serialize(RowGroupPointer &pointer, Serializer &serializer) {
165323
165849
  serializer.Write<uint64_t>(data_pointer.offset);
165324
165850
  }
165325
165851
  CheckpointDeletes(pointer.versions.get(), serializer);
165852
+ writer.Finalize();
165326
165853
  }
165327
165854
 
165328
- RowGroupPointer RowGroup::Deserialize(Deserializer &source, const vector<ColumnDefinition> &columns) {
165855
+ RowGroupPointer RowGroup::Deserialize(Deserializer &main_source, const vector<ColumnDefinition> &columns) {
165329
165856
  RowGroupPointer result;
165330
- result.row_start = source.Read<uint64_t>();
165331
- result.tuple_count = source.Read<uint64_t>();
165857
+
165858
+ FieldReader reader(main_source);
165859
+ result.row_start = reader.ReadRequired<uint64_t>();
165860
+ result.tuple_count = reader.ReadRequired<uint64_t>();
165332
165861
 
165333
165862
  result.data_pointers.reserve(columns.size());
165334
165863
  result.statistics.reserve(columns.size());
165335
165864
 
165865
+ auto &source = reader.GetSource();
165336
165866
  for (idx_t i = 0; i < columns.size(); i++) {
165337
165867
  auto stats = BaseStatistics::Deserialize(source, columns[i].type);
165338
165868
  result.statistics.push_back(move(stats));
@@ -165344,6 +165874,8 @@ RowGroupPointer RowGroup::Deserialize(Deserializer &source, const vector<ColumnD
165344
165874
  result.data_pointers.push_back(pointer);
165345
165875
  }
165346
165876
  result.versions = DeserializeDeletes(source);
165877
+
165878
+ reader.Finalize();
165347
165879
  return result;
165348
165880
  }
165349
165881
 
@@ -167306,8 +167838,11 @@ bool ValidityColumnData::CheckZonemap(ColumnScanState &state, TableFilter &filte
167306
167838
 
167307
167839
 
167308
167840
 
167841
+
167842
+
167309
167843
 
167310
167844
  namespace duckdb {
167845
+
167311
167846
  class ReplayState {
167312
167847
  public:
167313
167848
  ReplayState(DatabaseInstance &db, ClientContext &context, Deserializer &source)
@@ -167603,18 +168138,13 @@ void ReplayState::ReplayDropSchema() {
167603
168138
  // Replay Custom Type
167604
168139
  //===--------------------------------------------------------------------===//
167605
168140
  void ReplayState::ReplayCreateType() {
167606
- CreateTypeInfo info;
167607
-
167608
- info.schema = source.Read<string>();
167609
- info.name = source.Read<string>();
167610
- info.type = make_unique<LogicalType>(LogicalType::Deserialize(source));
167611
-
168141
+ auto info = TypeCatalogEntry::Deserialize(source);
167612
168142
  if (deserialize_only) {
167613
168143
  return;
167614
168144
  }
167615
168145
 
167616
168146
  auto &catalog = Catalog::GetCatalog(context);
167617
- catalog.CreateType(context, &info);
168147
+ catalog.CreateType(context, info.get());
167618
168148
  }
167619
168149
 
167620
168150
  void ReplayState::ReplayDropType() {