duckdb 0.3.2-dev1175.0 → 0.3.2-dev1197.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);
@@ -110612,12 +110976,12 @@ public:
110612
110976
  public:
110613
110977
  bool Equals(const QueryNode *other) const override;
110614
110978
  //! Create a copy of this SelectNode
110615
- unique_ptr<QueryNode> Copy() override;
110979
+ unique_ptr<QueryNode> Copy() const override;
110616
110980
 
110617
- //! Serializes a SelectNode to a stand-alone binary blob
110618
- void Serialize(Serializer &serializer) override;
110619
- //! Deserializes a blob back into a SelectNode
110620
- 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);
110621
110985
  };
110622
110986
 
110623
110987
  } // namespace duckdb
@@ -127635,15 +127999,20 @@ ColumnDefinition ColumnDefinition::Copy() const {
127635
127999
  }
127636
128000
 
127637
128001
  void ColumnDefinition::Serialize(Serializer &serializer) const {
127638
- serializer.WriteString(name);
127639
- type.Serialize(serializer);
127640
- serializer.WriteOptional(default_value);
128002
+ FieldWriter writer(serializer);
128003
+ writer.WriteString(name);
128004
+ writer.WriteSerializable(type);
128005
+ writer.WriteOptional(default_value);
128006
+ writer.Finalize();
127641
128007
  }
127642
128008
 
127643
128009
  ColumnDefinition ColumnDefinition::Deserialize(Deserializer &source) {
127644
- auto column_name = source.Read<string>();
127645
- auto column_type = LogicalType::Deserialize(source);
127646
- 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
+
127647
128016
  return ColumnDefinition(column_name, column_type, move(default_value));
127648
128017
  }
127649
128018
 
@@ -127654,6 +128023,7 @@ ColumnDefinition ColumnDefinition::Deserialize(Deserializer &source) {
127654
128023
 
127655
128024
 
127656
128025
 
128026
+
127657
128027
  namespace duckdb {
127658
128028
 
127659
128029
  Constraint::Constraint(ConstraintType type) : type(type) {
@@ -127662,25 +128032,35 @@ Constraint::Constraint(ConstraintType type) : type(type) {
127662
128032
  Constraint::~Constraint() {
127663
128033
  }
127664
128034
 
127665
- void Constraint::Serialize(Serializer &serializer) {
127666
- 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();
127667
128040
  }
127668
128041
 
127669
128042
  unique_ptr<Constraint> Constraint::Deserialize(Deserializer &source) {
127670
- auto type = source.Read<ConstraintType>();
128043
+ FieldReader reader(source);
128044
+ auto type = reader.ReadRequired<ConstraintType>();
128045
+ unique_ptr<Constraint> result;
127671
128046
  switch (type) {
127672
128047
  case ConstraintType::NOT_NULL:
127673
- return NotNullConstraint::Deserialize(source);
128048
+ result = NotNullConstraint::Deserialize(reader);
128049
+ break;
127674
128050
  case ConstraintType::CHECK:
127675
- return CheckConstraint::Deserialize(source);
128051
+ result = CheckConstraint::Deserialize(reader);
128052
+ break;
127676
128053
  case ConstraintType::UNIQUE:
127677
- return UniqueConstraint::Deserialize(source);
128054
+ result = UniqueConstraint::Deserialize(reader);
128055
+ break;
127678
128056
  default:
127679
128057
  throw InternalException("Unrecognized constraint type for serialization");
127680
128058
  }
128059
+ reader.Finalize();
128060
+ return result;
127681
128061
  }
127682
128062
 
127683
- void Constraint::Print() {
128063
+ void Constraint::Print() const {
127684
128064
  Printer::Print(ToString());
127685
128065
  }
127686
128066
 
@@ -127699,17 +128079,16 @@ string CheckConstraint::ToString() const {
127699
128079
  return "CHECK(" + expression->ToString() + ")";
127700
128080
  }
127701
128081
 
127702
- unique_ptr<Constraint> CheckConstraint::Copy() {
128082
+ unique_ptr<Constraint> CheckConstraint::Copy() const {
127703
128083
  return make_unique<CheckConstraint>(expression->Copy());
127704
128084
  }
127705
128085
 
127706
- void CheckConstraint::Serialize(Serializer &serializer) {
127707
- Constraint::Serialize(serializer);
127708
- expression->Serialize(serializer);
128086
+ void CheckConstraint::Serialize(FieldWriter &writer) const {
128087
+ writer.WriteSerializable(*expression);
127709
128088
  }
127710
128089
 
127711
- unique_ptr<Constraint> CheckConstraint::Deserialize(Deserializer &source) {
127712
- auto expression = ParsedExpression::Deserialize(source);
128090
+ unique_ptr<Constraint> CheckConstraint::Deserialize(FieldReader &source) {
128091
+ auto expression = source.ReadRequiredSerializable<ParsedExpression>();
127713
128092
  return make_unique<CheckConstraint>(move(expression));
127714
128093
  }
127715
128094
 
@@ -127730,17 +128109,16 @@ string NotNullConstraint::ToString() const {
127730
128109
  return "NOT NULL";
127731
128110
  }
127732
128111
 
127733
- unique_ptr<Constraint> NotNullConstraint::Copy() {
128112
+ unique_ptr<Constraint> NotNullConstraint::Copy() const {
127734
128113
  return make_unique<NotNullConstraint>(index);
127735
128114
  }
127736
128115
 
127737
- void NotNullConstraint::Serialize(Serializer &serializer) {
127738
- Constraint::Serialize(serializer);
127739
- serializer.Write<idx_t>(index);
128116
+ void NotNullConstraint::Serialize(FieldWriter &writer) const {
128117
+ writer.WriteField<idx_t>(index);
127740
128118
  }
127741
128119
 
127742
- unique_ptr<Constraint> NotNullConstraint::Deserialize(Deserializer &source) {
127743
- auto index = source.Read<idx_t>();
128120
+ unique_ptr<Constraint> NotNullConstraint::Deserialize(FieldReader &source) {
128121
+ auto index = source.ReadRequired<idx_t>();
127744
128122
  return make_unique_base<Constraint, NotNullConstraint>(index);
127745
128123
  }
127746
128124
 
@@ -127772,7 +128150,7 @@ string UniqueConstraint::ToString() const {
127772
128150
  return base + ")";
127773
128151
  }
127774
128152
 
127775
- unique_ptr<Constraint> UniqueConstraint::Copy() {
128153
+ unique_ptr<Constraint> UniqueConstraint::Copy() const {
127776
128154
  if (index == DConstants::INVALID_INDEX) {
127777
128155
  return make_unique<UniqueConstraint>(columns, is_primary_key);
127778
128156
  } else {
@@ -127782,26 +128160,17 @@ unique_ptr<Constraint> UniqueConstraint::Copy() {
127782
128160
  }
127783
128161
  }
127784
128162
 
127785
- void UniqueConstraint::Serialize(Serializer &serializer) {
127786
- Constraint::Serialize(serializer);
127787
- serializer.Write<bool>(is_primary_key);
127788
- 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);
127789
128166
  D_ASSERT(columns.size() <= NumericLimits<uint32_t>::Maximum());
127790
- serializer.Write<uint32_t>((uint32_t)columns.size());
127791
- for (auto &column : columns) {
127792
- serializer.WriteString(column);
127793
- }
128167
+ writer.WriteList<string>(columns);
127794
128168
  }
127795
128169
 
127796
- unique_ptr<Constraint> UniqueConstraint::Deserialize(Deserializer &source) {
127797
- auto is_primary_key = source.Read<bool>();
127798
- auto index = source.Read<uint64_t>();
127799
- auto column_count = source.Read<uint32_t>();
127800
- vector<string> columns;
127801
- for (uint32_t i = 0; i < column_count; i++) {
127802
- auto column_name = source.Read<string>();
127803
- columns.push_back(column_name);
127804
- }
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>();
127805
128174
 
127806
128175
  if (index != DConstants::INVALID_INDEX) {
127807
128176
  // single column parsed constraint
@@ -127817,6 +128186,7 @@ unique_ptr<Constraint> UniqueConstraint::Deserialize(Deserializer &source) {
127817
128186
  } // namespace duckdb
127818
128187
 
127819
128188
 
128189
+
127820
128190
  namespace duckdb {
127821
128191
 
127822
128192
  BetweenExpression::BetweenExpression(unique_ptr<ParsedExpression> input_p, unique_ptr<ParsedExpression> lower_p,
@@ -127848,17 +128218,16 @@ unique_ptr<ParsedExpression> BetweenExpression::Copy() const {
127848
128218
  return move(copy);
127849
128219
  }
127850
128220
 
127851
- void BetweenExpression::Serialize(Serializer &serializer) {
127852
- ParsedExpression::Serialize(serializer);
127853
- input->Serialize(serializer);
127854
- lower->Serialize(serializer);
127855
- upper->Serialize(serializer);
128221
+ void BetweenExpression::Serialize(FieldWriter &writer) const {
128222
+ writer.WriteSerializable(*input);
128223
+ writer.WriteSerializable(*lower);
128224
+ writer.WriteSerializable(*upper);
127856
128225
  }
127857
128226
 
127858
- unique_ptr<ParsedExpression> BetweenExpression::Deserialize(ExpressionType type, Deserializer &source) {
127859
- auto input = ParsedExpression::Deserialize(source);
127860
- auto lower = ParsedExpression::Deserialize(source);
127861
- 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>();
127862
128231
  return make_unique<BetweenExpression>(move(input), move(lower), move(upper));
127863
128232
  }
127864
128233
 
@@ -127913,26 +128282,29 @@ unique_ptr<ParsedExpression> CaseExpression::Copy() const {
127913
128282
  return move(copy);
127914
128283
  }
127915
128284
 
127916
- void CaseExpression::Serialize(Serializer &serializer) {
127917
- ParsedExpression::Serialize(serializer);
127918
- 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());
127919
128290
  for (auto &check : case_checks) {
127920
128291
  check.when_expr->Serialize(serializer);
127921
128292
  check.then_expr->Serialize(serializer);
127922
128293
  }
127923
- else_expr->Serialize(serializer);
128294
+ writer.WriteSerializable<ParsedExpression>(*else_expr);
127924
128295
  }
127925
128296
 
127926
- unique_ptr<ParsedExpression> CaseExpression::Deserialize(ExpressionType type, Deserializer &source) {
128297
+ unique_ptr<ParsedExpression> CaseExpression::Deserialize(ExpressionType type, FieldReader &reader) {
127927
128298
  auto result = make_unique<CaseExpression>();
127928
- auto count = source.Read<uint32_t>();
128299
+ auto &source = reader.GetSource();
128300
+ auto count = reader.ReadRequired<uint32_t>();
127929
128301
  for (idx_t i = 0; i < count; i++) {
127930
128302
  CaseCheck new_check;
127931
128303
  new_check.when_expr = ParsedExpression::Deserialize(source);
127932
128304
  new_check.then_expr = ParsedExpression::Deserialize(source);
127933
128305
  result->case_checks.push_back(move(new_check));
127934
128306
  }
127935
- result->else_expr = ParsedExpression::Deserialize(source);
128307
+ result->else_expr = reader.ReadRequiredSerializable<ParsedExpression>();
127936
128308
  return move(result);
127937
128309
  }
127938
128310
 
@@ -127974,17 +128346,16 @@ unique_ptr<ParsedExpression> CastExpression::Copy() const {
127974
128346
  return move(copy);
127975
128347
  }
127976
128348
 
127977
- void CastExpression::Serialize(Serializer &serializer) {
127978
- ParsedExpression::Serialize(serializer);
127979
- child->Serialize(serializer);
127980
- cast_type.Serialize(serializer);
127981
- 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);
127982
128353
  }
127983
128354
 
127984
- unique_ptr<ParsedExpression> CastExpression::Deserialize(ExpressionType type, Deserializer &source) {
127985
- auto child = ParsedExpression::Deserialize(source);
127986
- auto cast_type = LogicalType::Deserialize(source);
127987
- 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>();
127988
128359
  return make_unique_base<ParsedExpression, CastExpression>(cast_type, move(child), try_cast);
127989
128360
  }
127990
128361
 
@@ -128022,15 +128393,14 @@ unique_ptr<ParsedExpression> CollateExpression::Copy() const {
128022
128393
  return move(copy);
128023
128394
  }
128024
128395
 
128025
- void CollateExpression::Serialize(Serializer &serializer) {
128026
- ParsedExpression::Serialize(serializer);
128027
- child->Serialize(serializer);
128028
- serializer.WriteString(collation);
128396
+ void CollateExpression::Serialize(FieldWriter &writer) const {
128397
+ writer.WriteSerializable(*child);
128398
+ writer.WriteString(collation);
128029
128399
  }
128030
128400
 
128031
- unique_ptr<ParsedExpression> CollateExpression::Deserialize(ExpressionType type, Deserializer &source) {
128032
- auto child = ParsedExpression::Deserialize(source);
128033
- 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>();
128034
128404
  return make_unique_base<ParsedExpression, CollateExpression>(collation, move(child));
128035
128405
  }
128036
128406
 
@@ -128041,7 +128411,6 @@ unique_ptr<ParsedExpression> CollateExpression::Deserialize(ExpressionType type,
128041
128411
 
128042
128412
 
128043
128413
 
128044
-
128045
128414
  namespace duckdb {
128046
128415
 
128047
128416
  ColumnRefExpression::ColumnRefExpression(string column_name, string table_name)
@@ -128119,20 +128488,12 @@ unique_ptr<ParsedExpression> ColumnRefExpression::Copy() const {
128119
128488
  return move(copy);
128120
128489
  }
128121
128490
 
128122
- void ColumnRefExpression::Serialize(Serializer &serializer) {
128123
- ParsedExpression::Serialize(serializer);
128124
- serializer.Write<idx_t>(column_names.size());
128125
- for (auto &column_name : column_names) {
128126
- serializer.WriteString(column_name);
128127
- }
128491
+ void ColumnRefExpression::Serialize(FieldWriter &writer) const {
128492
+ writer.WriteList<string>(column_names);
128128
128493
  }
128129
128494
 
128130
- unique_ptr<ParsedExpression> ColumnRefExpression::Deserialize(ExpressionType type, Deserializer &source) {
128131
- auto column_count = source.Read<idx_t>();
128132
- vector<string> column_names;
128133
- for (idx_t i = 0; i < column_count; i++) {
128134
- column_names.push_back(source.Read<string>());
128135
- }
128495
+ unique_ptr<ParsedExpression> ColumnRefExpression::Deserialize(ExpressionType type, FieldReader &reader) {
128496
+ auto column_names = reader.ReadRequiredList<string>();
128136
128497
  auto expression = make_unique<ColumnRefExpression>(move(column_names));
128137
128498
  return move(expression);
128138
128499
  }
@@ -128173,15 +128534,14 @@ unique_ptr<ParsedExpression> ComparisonExpression::Copy() const {
128173
128534
  return move(copy);
128174
128535
  }
128175
128536
 
128176
- void ComparisonExpression::Serialize(Serializer &serializer) {
128177
- ParsedExpression::Serialize(serializer);
128178
- left->Serialize(serializer);
128179
- right->Serialize(serializer);
128537
+ void ComparisonExpression::Serialize(FieldWriter &writer) const {
128538
+ writer.WriteSerializable(*left);
128539
+ writer.WriteSerializable(*right);
128180
128540
  }
128181
128541
 
128182
- unique_ptr<ParsedExpression> ComparisonExpression::Deserialize(ExpressionType type, Deserializer &source) {
128183
- auto left_child = ParsedExpression::Deserialize(source);
128184
- 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>();
128185
128545
  return make_unique<ComparisonExpression>(type, move(left_child), move(right_child));
128186
128546
  }
128187
128547
 
@@ -128280,14 +128640,13 @@ unique_ptr<ParsedExpression> ConjunctionExpression::Copy() const {
128280
128640
  return move(copy);
128281
128641
  }
128282
128642
 
128283
- void ConjunctionExpression::Serialize(Serializer &serializer) {
128284
- ParsedExpression::Serialize(serializer);
128285
- serializer.WriteList<ParsedExpression>(children);
128643
+ void ConjunctionExpression::Serialize(FieldWriter &writer) const {
128644
+ writer.WriteSerializableList(children);
128286
128645
  }
128287
128646
 
128288
- unique_ptr<ParsedExpression> ConjunctionExpression::Deserialize(ExpressionType type, Deserializer &source) {
128647
+ unique_ptr<ParsedExpression> ConjunctionExpression::Deserialize(ExpressionType type, FieldReader &reader) {
128289
128648
  auto result = make_unique<ConjunctionExpression>(type);
128290
- source.ReadList<ParsedExpression>(result->children);
128649
+ result->children = reader.ReadRequiredSerializableList<ParsedExpression>();
128291
128650
  return move(result);
128292
128651
  }
128293
128652
 
@@ -128298,6 +128657,7 @@ unique_ptr<ParsedExpression> ConjunctionExpression::Deserialize(ExpressionType t
128298
128657
 
128299
128658
 
128300
128659
 
128660
+
128301
128661
  namespace duckdb {
128302
128662
 
128303
128663
  ConstantExpression::ConstantExpression(Value val)
@@ -128322,13 +128682,12 @@ unique_ptr<ParsedExpression> ConstantExpression::Copy() const {
128322
128682
  return move(copy);
128323
128683
  }
128324
128684
 
128325
- void ConstantExpression::Serialize(Serializer &serializer) {
128326
- ParsedExpression::Serialize(serializer);
128327
- value.Serialize(serializer);
128685
+ void ConstantExpression::Serialize(FieldWriter &writer) const {
128686
+ writer.WriteSerializable(value);
128328
128687
  }
128329
128688
 
128330
- unique_ptr<ParsedExpression> ConstantExpression::Deserialize(ExpressionType type, Deserializer &source) {
128331
- Value value = Value::Deserialize(source);
128689
+ unique_ptr<ParsedExpression> ConstantExpression::Deserialize(ExpressionType type, FieldReader &reader) {
128690
+ Value value = reader.ReadRequiredSerializable<Value, Value>();
128332
128691
  return make_unique<ConstantExpression>(move(value));
128333
128692
  }
128334
128693
 
@@ -128352,7 +128711,10 @@ unique_ptr<ParsedExpression> DefaultExpression::Copy() const {
128352
128711
  return move(copy);
128353
128712
  }
128354
128713
 
128355
- 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) {
128356
128718
  return make_unique<DefaultExpression>();
128357
128719
  }
128358
128720
 
@@ -128466,26 +128828,24 @@ unique_ptr<ParsedExpression> FunctionExpression::Copy() const {
128466
128828
  return move(copy);
128467
128829
  }
128468
128830
 
128469
- void FunctionExpression::Serialize(Serializer &serializer) {
128470
- ParsedExpression::Serialize(serializer);
128471
- serializer.WriteString(function_name);
128472
- serializer.WriteString(schema);
128473
- serializer.WriteList(children);
128474
- serializer.WriteOptional(filter);
128475
- order_bys->Serialize(serializer);
128476
- serializer.Write<bool>(distinct);
128477
- serializer.Write<bool>(is_operator);
128478
- }
128479
-
128480
- unique_ptr<ParsedExpression> FunctionExpression::Deserialize(ExpressionType type, Deserializer &source) {
128481
- vector<unique_ptr<ParsedExpression>> children;
128482
- auto function_name = source.Read<string>();
128483
- auto schema = source.Read<string>();
128484
- source.ReadList<ParsedExpression>(children);
128485
- auto filter = source.ReadOptional<ParsedExpression>();
128486
- unique_ptr<OrderModifier> order_bys(static_cast<OrderModifier *>(ResultModifier::Deserialize(source).release()));
128487
- auto distinct = source.Read<bool>();
128488
- 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>();
128489
128849
  unique_ptr<FunctionExpression> function;
128490
128850
  function = make_unique<FunctionExpression>(function_name, move(children), move(filter), move(order_bys), distinct,
128491
128851
  is_operator);
@@ -128498,7 +128858,6 @@ unique_ptr<ParsedExpression> FunctionExpression::Deserialize(ExpressionType type
128498
128858
 
128499
128859
 
128500
128860
 
128501
-
128502
128861
  namespace duckdb {
128503
128862
 
128504
128863
  LambdaExpression::LambdaExpression(vector<string> parameters, unique_ptr<ParsedExpression> expression)
@@ -128545,24 +128904,14 @@ unique_ptr<ParsedExpression> LambdaExpression::Copy() const {
128545
128904
  return make_unique<LambdaExpression>(parameters, expression->Copy());
128546
128905
  }
128547
128906
 
128548
- void LambdaExpression::Serialize(Serializer &serializer) {
128549
- ParsedExpression::Serialize(serializer);
128550
- serializer.Write<uint32_t>(parameters.size());
128551
- for (auto &parameter : parameters) {
128552
- serializer.WriteString(parameter);
128553
- }
128554
- expression->Serialize(serializer);
128907
+ void LambdaExpression::Serialize(FieldWriter &writer) const {
128908
+ writer.WriteList<string>(parameters);
128909
+ writer.WriteSerializable(*expression);
128555
128910
  }
128556
128911
 
128557
- unique_ptr<ParsedExpression> LambdaExpression::Deserialize(ExpressionType type, Deserializer &source) {
128558
- auto parameter_count = source.Read<uint32_t>();
128559
- vector<string> parameters;
128560
- parameters.reserve(parameter_count);
128561
- for (size_t i = 0; i < parameter_count; i++) {
128562
- parameters.push_back(source.Read<string>());
128563
- }
128564
- auto expression = ParsedExpression::Deserialize(source);
128565
-
128912
+ unique_ptr<ParsedExpression> LambdaExpression::Deserialize(ExpressionType type, FieldReader &reader) {
128913
+ auto parameters = reader.ReadRequiredList<string>();
128914
+ auto expression = reader.ReadRequiredSerializable<ParsedExpression>();
128566
128915
  return make_unique<LambdaExpression>(move(parameters), move(expression));
128567
128916
  }
128568
128917
 
@@ -128629,14 +128978,13 @@ unique_ptr<ParsedExpression> OperatorExpression::Copy() const {
128629
128978
  return move(copy);
128630
128979
  }
128631
128980
 
128632
- void OperatorExpression::Serialize(Serializer &serializer) {
128633
- ParsedExpression::Serialize(serializer);
128634
- serializer.WriteList(children);
128981
+ void OperatorExpression::Serialize(FieldWriter &writer) const {
128982
+ writer.WriteSerializableList(children);
128635
128983
  }
128636
128984
 
128637
- unique_ptr<ParsedExpression> OperatorExpression::Deserialize(ExpressionType type, Deserializer &source) {
128985
+ unique_ptr<ParsedExpression> OperatorExpression::Deserialize(ExpressionType type, FieldReader &reader) {
128638
128986
  auto expression = make_unique<OperatorExpression>(type);
128639
- source.ReadList<ParsedExpression>(expression->children);
128987
+ expression->children = reader.ReadRequiredSerializableList<ParsedExpression>();
128640
128988
  return move(expression);
128641
128989
  }
128642
128990
 
@@ -128670,14 +129018,13 @@ hash_t ParameterExpression::Hash() const {
128670
129018
  return CombineHash(duckdb::Hash(parameter_nr), result);
128671
129019
  }
128672
129020
 
128673
- void ParameterExpression::Serialize(Serializer &serializer) {
128674
- ParsedExpression::Serialize(serializer);
128675
- serializer.Write<idx_t>(parameter_nr);
129021
+ void ParameterExpression::Serialize(FieldWriter &writer) const {
129022
+ writer.WriteField<idx_t>(parameter_nr);
128676
129023
  }
128677
129024
 
128678
- unique_ptr<ParsedExpression> ParameterExpression::Deserialize(ExpressionType type, Deserializer &source) {
129025
+ unique_ptr<ParsedExpression> ParameterExpression::Deserialize(ExpressionType type, FieldReader &reader) {
128679
129026
  auto expression = make_unique<ParameterExpression>();
128680
- expression->parameter_nr = source.Read<idx_t>();
129027
+ expression->parameter_nr = reader.ReadRequired<idx_t>();
128681
129028
  return move(expression);
128682
129029
  }
128683
129030
 
@@ -128715,13 +129062,12 @@ hash_t PositionalReferenceExpression::Hash() const {
128715
129062
  return CombineHash(duckdb::Hash(index), result);
128716
129063
  }
128717
129064
 
128718
- void PositionalReferenceExpression::Serialize(Serializer &serializer) {
128719
- ParsedExpression::Serialize(serializer);
128720
- serializer.Write<idx_t>(index);
129065
+ void PositionalReferenceExpression::Serialize(FieldWriter &writer) const {
129066
+ writer.WriteField<idx_t>(index);
128721
129067
  }
128722
129068
 
128723
- unique_ptr<ParsedExpression> PositionalReferenceExpression::Deserialize(ExpressionType type, Deserializer &source) {
128724
- 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>());
128725
129071
  return move(expression);
128726
129072
  }
128727
129073
 
@@ -128787,28 +129133,34 @@ bool StarExpression::Equals(const StarExpression *a, const StarExpression *b) {
128787
129133
  return true;
128788
129134
  }
128789
129135
 
128790
- void StarExpression::Serialize(Serializer &serializer) {
128791
- ParsedExpression::Serialize(serializer);
128792
- serializer.WriteString(relation_name);
128793
- 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());
128794
129144
  for (auto &exclusion : exclude_list) {
128795
129145
  serializer.WriteString(exclusion);
128796
129146
  }
128797
- serializer.Write<uint32_t>(replace_list.size());
129147
+ writer.WriteField<uint32_t>(replace_list.size());
128798
129148
  for (auto &entry : replace_list) {
128799
129149
  serializer.WriteString(entry.first);
128800
129150
  entry.second->Serialize(serializer);
128801
129151
  }
128802
129152
  }
128803
129153
 
128804
- 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
+
128805
129157
  auto result = make_unique<StarExpression>();
128806
- result->relation_name = source.Read<string>();
128807
- auto exclusion_count = source.Read<uint32_t>();
129158
+ result->relation_name = reader.ReadRequired<string>();
129159
+ auto exclusion_count = reader.ReadRequired<uint32_t>();
128808
129160
  for (idx_t i = 0; i < exclusion_count; i++) {
128809
129161
  result->exclude_list.insert(source.Read<string>());
128810
129162
  }
128811
- auto replace_count = source.Read<uint32_t>();
129163
+ auto replace_count = reader.ReadRequired<uint32_t>();
128812
129164
  for (idx_t i = 0; i < replace_count; i++) {
128813
129165
  auto name = source.Read<string>();
128814
129166
  auto expr = ParsedExpression::Deserialize(source);
@@ -128865,23 +129217,28 @@ unique_ptr<ParsedExpression> SubqueryExpression::Copy() const {
128865
129217
  return move(copy);
128866
129218
  }
128867
129219
 
128868
- void SubqueryExpression::Serialize(Serializer &serializer) {
128869
- ParsedExpression::Serialize(serializer);
128870
- 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)?
128871
129225
  subquery->Serialize(serializer);
128872
- serializer.WriteOptional(child);
128873
- serializer.Write<ExpressionType>(comparison_type);
129226
+ writer.WriteOptional(child);
129227
+ writer.WriteField<ExpressionType>(comparison_type);
128874
129228
  }
128875
129229
 
128876
- unique_ptr<ParsedExpression> SubqueryExpression::Deserialize(ExpressionType type, Deserializer &source) {
128877
- 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>();
128878
129235
  auto subquery = SelectStatement::Deserialize(source);
128879
129236
 
128880
129237
  auto expression = make_unique<SubqueryExpression>();
128881
129238
  expression->subquery_type = subquery_type;
128882
129239
  expression->subquery = move(subquery);
128883
- expression->child = source.ReadOptional<ParsedExpression>();
128884
- expression->comparison_type = source.Read<ExpressionType>();
129240
+ expression->child = reader.ReadOptional<ParsedExpression>(nullptr);
129241
+ expression->comparison_type = reader.ReadRequired<ExpressionType>();
128885
129242
  return move(expression);
128886
129243
  }
128887
129244
 
@@ -129112,46 +129469,49 @@ unique_ptr<ParsedExpression> WindowExpression::Copy() const {
129112
129469
  return move(new_window);
129113
129470
  }
129114
129471
 
129115
- void WindowExpression::Serialize(Serializer &serializer) {
129116
- ParsedExpression::Serialize(serializer);
129117
- serializer.WriteString(function_name);
129118
- serializer.WriteString(schema);
129119
- serializer.WriteList(children);
129120
- 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)?
129121
129480
  D_ASSERT(orders.size() <= NumericLimits<uint32_t>::Maximum());
129122
- serializer.Write<uint32_t>((uint32_t)orders.size());
129481
+ writer.WriteField<uint32_t>((uint32_t)orders.size());
129123
129482
  for (auto &order : orders) {
129124
129483
  order.Serialize(serializer);
129125
129484
  }
129126
- serializer.Write<WindowBoundary>(start);
129127
- serializer.Write<WindowBoundary>(end);
129485
+ writer.WriteField<WindowBoundary>(start);
129486
+ writer.WriteField<WindowBoundary>(end);
129128
129487
 
129129
- serializer.WriteOptional(start_expr);
129130
- serializer.WriteOptional(end_expr);
129131
- serializer.WriteOptional(offset_expr);
129132
- serializer.WriteOptional(default_expr);
129133
- 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);
129134
129493
  }
129135
129494
 
129136
- unique_ptr<ParsedExpression> WindowExpression::Deserialize(ExpressionType type, Deserializer &source) {
129137
- auto function_name = source.Read<string>();
129138
- 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>();
129139
129498
  auto expr = make_unique<WindowExpression>(type, schema, function_name);
129140
- source.ReadList<ParsedExpression>(expr->children);
129141
- source.ReadList<ParsedExpression>(expr->partitions);
129499
+ expr->children = reader.ReadRequiredSerializableList<ParsedExpression>();
129500
+ expr->partitions = reader.ReadRequiredSerializableList<ParsedExpression>();
129142
129501
 
129143
- auto order_count = source.Read<uint32_t>();
129502
+ auto order_count = reader.ReadRequired<uint32_t>();
129503
+ auto &source = reader.GetSource();
129144
129504
  for (idx_t i = 0; i < order_count; i++) {
129145
129505
  expr->orders.push_back(OrderByNode::Deserialize((source)));
129146
129506
  }
129147
- expr->start = source.Read<WindowBoundary>();
129148
- expr->end = source.Read<WindowBoundary>();
129507
+ expr->start = reader.ReadRequired<WindowBoundary>();
129508
+ expr->end = reader.ReadRequired<WindowBoundary>();
129149
129509
 
129150
- expr->start_expr = source.ReadOptional<ParsedExpression>();
129151
- expr->end_expr = source.ReadOptional<ParsedExpression>();
129152
- expr->offset_expr = source.ReadOptional<ParsedExpression>();
129153
- expr->default_expr = source.ReadOptional<ParsedExpression>();
129154
- 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>();
129155
129515
  return move(expr);
129156
129516
  }
129157
129517
 
@@ -129266,27 +129626,50 @@ string KeywordHelper::WriteOptionallyQuoted(const string &text) {
129266
129626
 
129267
129627
  namespace duckdb {
129268
129628
 
129269
- void AlterInfo::Serialize(Serializer &serializer) {
129270
- 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();
129271
129641
  }
129272
129642
 
129273
129643
  unique_ptr<AlterInfo> AlterInfo::Deserialize(Deserializer &source) {
129274
- auto type = source.Read<AlterType>();
129644
+ FieldReader reader(source);
129645
+ auto type = reader.ReadRequired<AlterType>();
129646
+
129647
+ unique_ptr<AlterInfo> result;
129275
129648
  switch (type) {
129276
129649
  case AlterType::ALTER_TABLE:
129277
- return AlterTableInfo::Deserialize(source);
129650
+ result = AlterTableInfo::Deserialize(reader);
129651
+ break;
129278
129652
  case AlterType::ALTER_VIEW:
129279
- return AlterViewInfo::Deserialize(source);
129653
+ result = AlterViewInfo::Deserialize(reader);
129654
+ break;
129280
129655
  default:
129281
129656
  throw SerializationException("Unknown alter type for deserialization!");
129282
129657
  }
129658
+ reader.Finalize();
129659
+
129660
+ return result;
129283
129661
  }
129284
129662
 
129285
129663
  //===--------------------------------------------------------------------===//
129286
129664
  // ChangeOwnershipInfo
129287
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
+ }
129288
129671
 
129289
- CatalogType ChangeOwnershipInfo::GetCatalogType() {
129672
+ CatalogType ChangeOwnershipInfo::GetCatalogType() const {
129290
129673
  return entry_catalog_type;
129291
129674
  }
129292
129675
 
@@ -129294,35 +129677,48 @@ unique_ptr<AlterInfo> ChangeOwnershipInfo::Copy() const {
129294
129677
  return make_unique_base<AlterInfo, ChangeOwnershipInfo>(entry_catalog_type, schema, name, owner_schema, owner_name);
129295
129678
  }
129296
129679
 
129680
+ void ChangeOwnershipInfo::Serialize(FieldWriter &writer) const {
129681
+ throw InternalException("ChangeOwnershipInfo cannot be serialized");
129682
+ }
129683
+
129297
129684
  //===--------------------------------------------------------------------===//
129298
129685
  // AlterTableInfo
129299
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
+ }
129300
129692
 
129301
- void AlterTableInfo::Serialize(Serializer &serializer) {
129302
- AlterInfo::Serialize(serializer);
129303
- serializer.Write<AlterTableType>(alter_table_type);
129304
- serializer.WriteString(schema);
129305
- serializer.WriteString(name);
129693
+ CatalogType AlterTableInfo::GetCatalogType() const {
129694
+ return CatalogType::TABLE_ENTRY;
129306
129695
  }
129307
129696
 
129308
- unique_ptr<AlterInfo> AlterTableInfo::Deserialize(Deserializer &source) {
129309
- auto type = source.Read<AlterTableType>();
129310
- auto schema = source.Read<string>();
129311
- 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>();
129312
129708
  unique_ptr<AlterTableInfo> info;
129313
129709
  switch (type) {
129314
129710
  case AlterTableType::RENAME_COLUMN:
129315
- return RenameColumnInfo::Deserialize(source, schema, table);
129711
+ return RenameColumnInfo::Deserialize(reader, schema, table);
129316
129712
  case AlterTableType::RENAME_TABLE:
129317
- return RenameTableInfo::Deserialize(source, schema, table);
129713
+ return RenameTableInfo::Deserialize(reader, schema, table);
129318
129714
  case AlterTableType::ADD_COLUMN:
129319
- return AddColumnInfo::Deserialize(source, schema, table);
129715
+ return AddColumnInfo::Deserialize(reader, schema, table);
129320
129716
  case AlterTableType::REMOVE_COLUMN:
129321
- return RemoveColumnInfo::Deserialize(source, schema, table);
129717
+ return RemoveColumnInfo::Deserialize(reader, schema, table);
129322
129718
  case AlterTableType::ALTER_COLUMN_TYPE:
129323
- return ChangeColumnTypeInfo::Deserialize(source, schema, table);
129719
+ return ChangeColumnTypeInfo::Deserialize(reader, schema, table);
129324
129720
  case AlterTableType::SET_DEFAULT:
129325
- return SetDefaultInfo::Deserialize(source, schema, table);
129721
+ return SetDefaultInfo::Deserialize(reader, schema, table);
129326
129722
  default:
129327
129723
  throw SerializationException("Unknown alter table type for deserialization!");
129328
129724
  }
@@ -129331,94 +129727,123 @@ unique_ptr<AlterInfo> AlterTableInfo::Deserialize(Deserializer &source) {
129331
129727
  //===--------------------------------------------------------------------===//
129332
129728
  // RenameColumnInfo
129333
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
+
129334
129737
  unique_ptr<AlterInfo> RenameColumnInfo::Copy() const {
129335
129738
  return make_unique_base<AlterInfo, RenameColumnInfo>(schema, name, old_name, new_name);
129336
129739
  }
129337
129740
 
129338
- void RenameColumnInfo::Serialize(Serializer &serializer) {
129339
- AlterTableInfo::Serialize(serializer);
129340
- serializer.WriteString(old_name);
129341
- serializer.WriteString(new_name);
129741
+ void RenameColumnInfo::SerializeAlterTable(FieldWriter &writer) const {
129742
+ writer.WriteString(old_name);
129743
+ writer.WriteString(new_name);
129342
129744
  }
129343
129745
 
129344
- unique_ptr<AlterInfo> RenameColumnInfo::Deserialize(Deserializer &source, string schema, string table) {
129345
- auto old_name = source.Read<string>();
129346
- 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>();
129347
129749
  return make_unique<RenameColumnInfo>(move(schema), move(table), old_name, new_name);
129348
129750
  }
129349
129751
 
129350
129752
  //===--------------------------------------------------------------------===//
129351
129753
  // RenameTableInfo
129352
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
+
129353
129761
  unique_ptr<AlterInfo> RenameTableInfo::Copy() const {
129354
129762
  return make_unique_base<AlterInfo, RenameTableInfo>(schema, name, new_table_name);
129355
129763
  }
129356
129764
 
129357
- void RenameTableInfo::Serialize(Serializer &serializer) {
129358
- AlterTableInfo::Serialize(serializer);
129359
- serializer.WriteString(new_table_name);
129765
+ void RenameTableInfo::SerializeAlterTable(FieldWriter &writer) const {
129766
+ writer.WriteString(new_table_name);
129360
129767
  }
129361
129768
 
129362
- unique_ptr<AlterInfo> RenameTableInfo::Deserialize(Deserializer &source, string schema, string table) {
129363
- 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>();
129364
129771
  return make_unique<RenameTableInfo>(move(schema), move(table), new_name);
129365
129772
  }
129366
129773
 
129367
129774
  //===--------------------------------------------------------------------===//
129368
129775
  // AddColumnInfo
129369
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
+
129370
129783
  unique_ptr<AlterInfo> AddColumnInfo::Copy() const {
129371
129784
  return make_unique_base<AlterInfo, AddColumnInfo>(schema, name, new_column.Copy());
129372
129785
  }
129373
129786
 
129374
- void AddColumnInfo::Serialize(Serializer &serializer) {
129375
- AlterTableInfo::Serialize(serializer);
129376
- new_column.Serialize(serializer);
129787
+ void AddColumnInfo::SerializeAlterTable(FieldWriter &writer) const {
129788
+ writer.WriteSerializable(new_column);
129377
129789
  }
129378
129790
 
129379
- unique_ptr<AlterInfo> AddColumnInfo::Deserialize(Deserializer &source, string schema, string table) {
129380
- 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>();
129381
129793
  return make_unique<AddColumnInfo>(move(schema), move(table), move(new_column));
129382
129794
  }
129383
129795
 
129384
129796
  //===--------------------------------------------------------------------===//
129385
129797
  // RemoveColumnInfo
129386
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
+
129387
129806
  unique_ptr<AlterInfo> RemoveColumnInfo::Copy() const {
129388
129807
  return make_unique_base<AlterInfo, RemoveColumnInfo>(schema, name, removed_column, if_exists);
129389
129808
  }
129390
129809
 
129391
- void RemoveColumnInfo::Serialize(Serializer &serializer) {
129392
- AlterTableInfo::Serialize(serializer);
129393
- serializer.WriteString(removed_column);
129394
- serializer.Write<bool>(if_exists);
129810
+ void RemoveColumnInfo::SerializeAlterTable(FieldWriter &writer) const {
129811
+ writer.WriteString(removed_column);
129812
+ writer.WriteField<bool>(if_exists);
129395
129813
  }
129396
129814
 
129397
- unique_ptr<AlterInfo> RemoveColumnInfo::Deserialize(Deserializer &source, string schema, string table) {
129398
- auto new_name = source.Read<string>();
129399
- 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>();
129400
129818
  return make_unique<RemoveColumnInfo>(move(schema), move(table), new_name, if_exists);
129401
129819
  }
129402
129820
 
129403
129821
  //===--------------------------------------------------------------------===//
129404
129822
  // ChangeColumnTypeInfo
129405
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
+
129406
129832
  unique_ptr<AlterInfo> ChangeColumnTypeInfo::Copy() const {
129407
129833
  return make_unique_base<AlterInfo, ChangeColumnTypeInfo>(schema, name, column_name, target_type,
129408
129834
  expression->Copy());
129409
129835
  }
129410
129836
 
129411
- void ChangeColumnTypeInfo::Serialize(Serializer &serializer) {
129412
- AlterTableInfo::Serialize(serializer);
129413
- serializer.WriteString(column_name);
129414
- target_type.Serialize(serializer);
129415
- serializer.WriteOptional(expression);
129837
+ void ChangeColumnTypeInfo::SerializeAlterTable(FieldWriter &writer) const {
129838
+ writer.WriteString(column_name);
129839
+ writer.WriteSerializable(target_type);
129840
+ writer.WriteOptional(expression);
129416
129841
  }
129417
129842
 
129418
- unique_ptr<AlterInfo> ChangeColumnTypeInfo::Deserialize(Deserializer &source, string schema, string table) {
129419
- auto column_name = source.Read<string>();
129420
- auto target_type = LogicalType::Deserialize(source);
129421
- 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);
129422
129847
  return make_unique<ChangeColumnTypeInfo>(move(schema), move(table), move(column_name), move(target_type),
129423
129848
  move(expression));
129424
129849
  }
@@ -129426,41 +129851,58 @@ unique_ptr<AlterInfo> ChangeColumnTypeInfo::Deserialize(Deserializer &source, st
129426
129851
  //===--------------------------------------------------------------------===//
129427
129852
  // SetDefaultInfo
129428
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
+
129429
129862
  unique_ptr<AlterInfo> SetDefaultInfo::Copy() const {
129430
129863
  return make_unique_base<AlterInfo, SetDefaultInfo>(schema, name, column_name,
129431
129864
  expression ? expression->Copy() : nullptr);
129432
129865
  }
129433
129866
 
129434
- void SetDefaultInfo::Serialize(Serializer &serializer) {
129435
- AlterTableInfo::Serialize(serializer);
129436
- serializer.WriteString(column_name);
129437
- serializer.WriteOptional(expression);
129867
+ void SetDefaultInfo::SerializeAlterTable(FieldWriter &writer) const {
129868
+ writer.WriteString(column_name);
129869
+ writer.WriteOptional(expression);
129438
129870
  }
129439
129871
 
129440
- unique_ptr<AlterInfo> SetDefaultInfo::Deserialize(Deserializer &source, string schema, string table) {
129441
- auto column_name = source.Read<string>();
129442
- 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);
129443
129875
  return make_unique<SetDefaultInfo>(move(schema), move(table), move(column_name), move(new_default));
129444
129876
  }
129445
129877
 
129446
129878
  //===--------------------------------------------------------------------===//
129447
129879
  // Alter View
129448
129880
  //===--------------------------------------------------------------------===//
129449
- void AlterViewInfo::Serialize(Serializer &serializer) {
129450
- AlterInfo::Serialize(serializer);
129451
- serializer.Write<AlterViewType>(alter_view_type);
129452
- serializer.WriteString(schema);
129453
- 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() {
129454
129885
  }
129455
129886
 
129456
- unique_ptr<AlterInfo> AlterViewInfo::Deserialize(Deserializer &source) {
129457
- auto type = source.Read<AlterViewType>();
129458
- auto schema = source.Read<string>();
129459
- 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>();
129460
129902
  unique_ptr<AlterViewInfo> info;
129461
129903
  switch (type) {
129462
129904
  case AlterViewType::RENAME_VIEW:
129463
- return RenameViewInfo::Deserialize(source, schema, view);
129905
+ return RenameViewInfo::Deserialize(reader, schema, view);
129464
129906
  default:
129465
129907
  throw SerializationException("Unknown alter view type for deserialization!");
129466
129908
  }
@@ -129469,17 +129911,22 @@ unique_ptr<AlterInfo> AlterViewInfo::Deserialize(Deserializer &source) {
129469
129911
  //===--------------------------------------------------------------------===//
129470
129912
  // RenameViewInfo
129471
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
+
129472
129920
  unique_ptr<AlterInfo> RenameViewInfo::Copy() const {
129473
129921
  return make_unique_base<AlterInfo, RenameViewInfo>(schema, name, new_view_name);
129474
129922
  }
129475
129923
 
129476
- void RenameViewInfo::Serialize(Serializer &serializer) {
129477
- AlterViewInfo::Serialize(serializer);
129478
- serializer.WriteString(new_view_name);
129924
+ void RenameViewInfo::SerializeAlterView(FieldWriter &writer) const {
129925
+ writer.WriteString(new_view_name);
129479
129926
  }
129480
129927
 
129481
- unique_ptr<AlterInfo> RenameViewInfo::Deserialize(Deserializer &source, string schema, string view) {
129482
- 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>();
129483
129930
  return make_unique<RenameViewInfo>(move(schema), move(view), new_name);
129484
129931
  }
129485
129932
  } // namespace duckdb
@@ -129502,18 +129949,24 @@ string SampleMethodToString(SampleMethod method) {
129502
129949
  }
129503
129950
 
129504
129951
  void SampleOptions::Serialize(Serializer &serializer) {
129505
- sample_size.Serialize(serializer);
129506
- serializer.Write<bool>(is_percentage);
129507
- serializer.Write<SampleMethod>(method);
129508
- 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();
129509
129958
  }
129510
129959
 
129511
129960
  unique_ptr<SampleOptions> SampleOptions::Deserialize(Deserializer &source) {
129512
129961
  auto result = make_unique<SampleOptions>();
129513
- result->sample_size = Value::Deserialize(source);
129514
- result->is_percentage = source.Read<bool>();
129515
- result->method = source.Read<SampleMethod>();
129516
- 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
+
129517
129970
  return result;
129518
129971
  }
129519
129972
 
@@ -129640,73 +130093,78 @@ hash_t ParsedExpression::Hash() const {
129640
130093
  return hash;
129641
130094
  }
129642
130095
 
129643
- void ParsedExpression::Serialize(Serializer &serializer) {
129644
- serializer.Write<ExpressionClass>(GetExpressionClass());
129645
- serializer.Write<ExpressionType>(type);
129646
- 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();
129647
130103
  }
129648
130104
 
129649
130105
  unique_ptr<ParsedExpression> ParsedExpression::Deserialize(Deserializer &source) {
129650
- auto expression_class = source.Read<ExpressionClass>();
129651
- auto type = source.Read<ExpressionType>();
129652
- 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>();
129653
130110
  unique_ptr<ParsedExpression> result;
129654
130111
  switch (expression_class) {
129655
130112
  case ExpressionClass::BETWEEN:
129656
- result = BetweenExpression::Deserialize(type, source);
130113
+ result = BetweenExpression::Deserialize(type, reader);
129657
130114
  break;
129658
130115
  case ExpressionClass::CASE:
129659
- result = CaseExpression::Deserialize(type, source);
130116
+ result = CaseExpression::Deserialize(type, reader);
129660
130117
  break;
129661
130118
  case ExpressionClass::CAST:
129662
- result = CastExpression::Deserialize(type, source);
130119
+ result = CastExpression::Deserialize(type, reader);
129663
130120
  break;
129664
130121
  case ExpressionClass::COLLATE:
129665
- result = CollateExpression::Deserialize(type, source);
130122
+ result = CollateExpression::Deserialize(type, reader);
129666
130123
  break;
129667
130124
  case ExpressionClass::COLUMN_REF:
129668
- result = ColumnRefExpression::Deserialize(type, source);
130125
+ result = ColumnRefExpression::Deserialize(type, reader);
129669
130126
  break;
129670
130127
  case ExpressionClass::COMPARISON:
129671
- result = ComparisonExpression::Deserialize(type, source);
130128
+ result = ComparisonExpression::Deserialize(type, reader);
129672
130129
  break;
129673
130130
  case ExpressionClass::CONJUNCTION:
129674
- result = ConjunctionExpression::Deserialize(type, source);
130131
+ result = ConjunctionExpression::Deserialize(type, reader);
129675
130132
  break;
129676
130133
  case ExpressionClass::CONSTANT:
129677
- result = ConstantExpression::Deserialize(type, source);
130134
+ result = ConstantExpression::Deserialize(type, reader);
129678
130135
  break;
129679
130136
  case ExpressionClass::DEFAULT:
129680
- result = DefaultExpression::Deserialize(type, source);
130137
+ result = DefaultExpression::Deserialize(type, reader);
129681
130138
  break;
129682
130139
  case ExpressionClass::FUNCTION:
129683
- result = FunctionExpression::Deserialize(type, source);
130140
+ result = FunctionExpression::Deserialize(type, reader);
129684
130141
  break;
129685
130142
  case ExpressionClass::LAMBDA:
129686
- result = LambdaExpression::Deserialize(type, source);
130143
+ result = LambdaExpression::Deserialize(type, reader);
129687
130144
  break;
129688
130145
  case ExpressionClass::OPERATOR:
129689
- result = OperatorExpression::Deserialize(type, source);
130146
+ result = OperatorExpression::Deserialize(type, reader);
129690
130147
  break;
129691
130148
  case ExpressionClass::PARAMETER:
129692
- result = ParameterExpression::Deserialize(type, source);
130149
+ result = ParameterExpression::Deserialize(type, reader);
129693
130150
  break;
129694
130151
  case ExpressionClass::POSITIONAL_REFERENCE:
129695
- result = PositionalReferenceExpression::Deserialize(type, source);
130152
+ result = PositionalReferenceExpression::Deserialize(type, reader);
129696
130153
  break;
129697
130154
  case ExpressionClass::STAR:
129698
- result = StarExpression::Deserialize(type, source);
130155
+ result = StarExpression::Deserialize(type, reader);
129699
130156
  break;
129700
130157
  case ExpressionClass::SUBQUERY:
129701
- result = SubqueryExpression::Deserialize(type, source);
130158
+ result = SubqueryExpression::Deserialize(type, reader);
129702
130159
  break;
129703
130160
  case ExpressionClass::WINDOW:
129704
- result = WindowExpression::Deserialize(type, source);
130161
+ result = WindowExpression::Deserialize(type, reader);
129705
130162
  break;
129706
130163
  default:
129707
130164
  throw SerializationException("Unsupported type for expression deserialization!");
129708
130165
  }
129709
130166
  result->alias = alias;
130167
+ reader.Finalize();
129710
130168
  return result;
129711
130169
  }
129712
130170
 
@@ -129752,12 +130210,12 @@ public:
129752
130210
  public:
129753
130211
  bool Equals(const QueryNode *other) const override;
129754
130212
  //! Create a copy of this SelectNode
129755
- unique_ptr<QueryNode> Copy() override;
130213
+ unique_ptr<QueryNode> Copy() const override;
129756
130214
 
129757
- //! Serializes a SelectNode to a stand-alone binary blob
129758
- void Serialize(Serializer &serializer) override;
129759
- //! Deserializes a blob back into a SelectNode
129760
- 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);
129761
130219
  };
129762
130220
 
129763
130221
  } // namespace duckdb
@@ -135715,6 +136173,7 @@ string QueryErrorContext::FormatErrorRecursive(const string &msg, vector<Excepti
135715
136173
  } // namespace duckdb
135716
136174
 
135717
136175
 
136176
+
135718
136177
  namespace duckdb {
135719
136178
 
135720
136179
  bool RecursiveCTENode::Equals(const QueryNode *other_p) const {
@@ -135738,7 +136197,7 @@ bool RecursiveCTENode::Equals(const QueryNode *other_p) const {
135738
136197
  return true;
135739
136198
  }
135740
136199
 
135741
- unique_ptr<QueryNode> RecursiveCTENode::Copy() {
136200
+ unique_ptr<QueryNode> RecursiveCTENode::Copy() const {
135742
136201
  auto result = make_unique<RecursiveCTENode>();
135743
136202
  result->ctename = ctename;
135744
136203
  result->union_all = union_all;
@@ -135749,22 +136208,21 @@ unique_ptr<QueryNode> RecursiveCTENode::Copy() {
135749
136208
  return move(result);
135750
136209
  }
135751
136210
 
135752
- void RecursiveCTENode::Serialize(Serializer &serializer) {
135753
- QueryNode::Serialize(serializer);
135754
- serializer.WriteString(ctename);
135755
- serializer.WriteString(union_all ? "T" : "F");
135756
- left->Serialize(serializer);
135757
- right->Serialize(serializer);
135758
- 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);
135759
136217
  }
135760
136218
 
135761
- unique_ptr<QueryNode> RecursiveCTENode::Deserialize(Deserializer &source) {
136219
+ unique_ptr<QueryNode> RecursiveCTENode::Deserialize(FieldReader &reader) {
135762
136220
  auto result = make_unique<RecursiveCTENode>();
135763
- result->ctename = source.Read<string>();
135764
- result->union_all = source.Read<string>() == "T" ? true : false;
135765
- result->left = QueryNode::Deserialize(source);
135766
- result->right = QueryNode::Deserialize(source);
135767
- 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>();
135768
136226
  return move(result);
135769
136227
  }
135770
136228
 
@@ -135772,6 +136230,7 @@ unique_ptr<QueryNode> RecursiveCTENode::Deserialize(Deserializer &source) {
135772
136230
 
135773
136231
 
135774
136232
 
136233
+
135775
136234
  namespace duckdb {
135776
136235
 
135777
136236
  SelectNode::SelectNode()
@@ -135827,7 +136286,7 @@ bool SelectNode::Equals(const QueryNode *other_p) const {
135827
136286
  return true;
135828
136287
  }
135829
136288
 
135830
- unique_ptr<QueryNode> SelectNode::Copy() {
136289
+ unique_ptr<QueryNode> SelectNode::Copy() const {
135831
136290
  auto result = make_unique<SelectNode>();
135832
136291
  for (auto &child : select_list) {
135833
136292
  result->select_list.push_back(child->Copy());
@@ -135847,42 +136306,34 @@ unique_ptr<QueryNode> SelectNode::Copy() {
135847
136306
  return move(result);
135848
136307
  }
135849
136308
 
135850
- void SelectNode::Serialize(Serializer &serializer) {
135851
- QueryNode::Serialize(serializer);
135852
- // select_list
135853
- serializer.WriteList(select_list);
135854
- // from clause
135855
- serializer.WriteOptional(from_table);
135856
- // where_clause
135857
- serializer.WriteOptional(where_clause);
135858
- // group by
135859
- serializer.WriteList(groups.group_expressions);
135860
- 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();
135861
136316
  for (auto &grouping_set : groups.grouping_sets) {
135862
136317
  serializer.Write<idx_t>(grouping_set.size());
135863
136318
  for (auto &idx : grouping_set) {
135864
136319
  serializer.Write<idx_t>(idx);
135865
136320
  }
135866
136321
  }
135867
- serializer.Write<AggregateHandling>(aggregate_handling);
135868
- // having / sample
135869
- serializer.WriteOptional(having);
135870
- serializer.WriteOptional(sample);
135871
- // qualify
135872
- serializer.WriteOptional(qualify);
136322
+ writer.WriteField<AggregateHandling>(aggregate_handling);
136323
+ writer.WriteOptional(having);
136324
+ writer.WriteOptional(sample);
136325
+ writer.WriteOptional(qualify);
135873
136326
  }
135874
136327
 
135875
- unique_ptr<QueryNode> SelectNode::Deserialize(Deserializer &source) {
136328
+ unique_ptr<QueryNode> SelectNode::Deserialize(FieldReader &reader) {
135876
136329
  auto result = make_unique<SelectNode>();
135877
- // select_list
135878
- source.ReadList<ParsedExpression>(result->select_list);
135879
- // from clause
135880
- result->from_table = source.ReadOptional<TableRef>();
135881
- // where_clause
135882
- result->where_clause = source.ReadOptional<ParsedExpression>();
135883
- // group by
135884
- source.ReadList<ParsedExpression>(result->groups.group_expressions);
135885
- 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();
135886
136337
  for (idx_t set_idx = 0; set_idx < grouping_set_count; set_idx++) {
135887
136338
  auto set_entries = source.Read<idx_t>();
135888
136339
  GroupingSet grouping_set;
@@ -135891,19 +136342,17 @@ unique_ptr<QueryNode> SelectNode::Deserialize(Deserializer &source) {
135891
136342
  }
135892
136343
  result->groups.grouping_sets.push_back(grouping_set);
135893
136344
  }
135894
- result->aggregate_handling = source.Read<AggregateHandling>();
135895
-
135896
- // having / sample
135897
- result->having = source.ReadOptional<ParsedExpression>();
135898
- result->sample = source.ReadOptional<SampleOptions>();
135899
- // qualify
135900
- 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);
135901
136349
  return move(result);
135902
136350
  }
135903
136351
 
135904
136352
  } // namespace duckdb
135905
136353
 
135906
136354
 
136355
+
135907
136356
  namespace duckdb {
135908
136357
 
135909
136358
  bool SetOperationNode::Equals(const QueryNode *other_p) const {
@@ -135926,7 +136375,7 @@ bool SetOperationNode::Equals(const QueryNode *other_p) const {
135926
136375
  return true;
135927
136376
  }
135928
136377
 
135929
- unique_ptr<QueryNode> SetOperationNode::Copy() {
136378
+ unique_ptr<QueryNode> SetOperationNode::Copy() const {
135930
136379
  auto result = make_unique<SetOperationNode>();
135931
136380
  result->setop_type = setop_type;
135932
136381
  result->left = left->Copy();
@@ -135935,18 +136384,17 @@ unique_ptr<QueryNode> SetOperationNode::Copy() {
135935
136384
  return move(result);
135936
136385
  }
135937
136386
 
135938
- void SetOperationNode::Serialize(Serializer &serializer) {
135939
- QueryNode::Serialize(serializer);
135940
- serializer.Write<SetOperationType>(setop_type);
135941
- left->Serialize(serializer);
135942
- right->Serialize(serializer);
136387
+ void SetOperationNode::Serialize(FieldWriter &writer) const {
136388
+ writer.WriteField<SetOperationType>(setop_type);
136389
+ writer.WriteSerializable(*left);
136390
+ writer.WriteSerializable(*right);
135943
136391
  }
135944
136392
 
135945
- unique_ptr<QueryNode> SetOperationNode::Deserialize(Deserializer &source) {
136393
+ unique_ptr<QueryNode> SetOperationNode::Deserialize(FieldReader &reader) {
135946
136394
  auto result = make_unique<SetOperationNode>();
135947
- result->setop_type = source.Read<SetOperationType>();
135948
- result->left = QueryNode::Deserialize(source);
135949
- result->right = QueryNode::Deserialize(source);
136395
+ result->setop_type = reader.ReadRequired<SetOperationType>();
136396
+ result->left = reader.ReadRequiredSerializable<QueryNode>();
136397
+ result->right = reader.ReadRequiredSerializable<QueryNode>();
135950
136398
  return move(result);
135951
136399
  }
135952
136400
 
@@ -135958,6 +136406,7 @@ unique_ptr<QueryNode> SetOperationNode::Deserialize(Deserializer &source) {
135958
136406
 
135959
136407
 
135960
136408
 
136409
+
135961
136410
  namespace duckdb {
135962
136411
 
135963
136412
  bool QueryNode::Equals(const QueryNode *other) const {
@@ -136011,32 +136460,30 @@ void QueryNode::CopyProperties(QueryNode &other) const {
136011
136460
  }
136012
136461
  }
136013
136462
 
136014
- void QueryNode::Serialize(Serializer &serializer) {
136015
- serializer.Write<QueryNodeType>(type);
136016
- serializer.Write<idx_t>(modifiers.size());
136017
- for (idx_t i = 0; i < modifiers.size(); i++) {
136018
- modifiers[i]->Serialize(serializer);
136019
- }
136463
+ void QueryNode::Serialize(Serializer &main_serializer) const {
136464
+ FieldWriter writer(main_serializer);
136465
+ writer.WriteField<QueryNodeType>(type);
136466
+ writer.WriteSerializableList(modifiers);
136020
136467
  // cte_map
136021
- D_ASSERT(cte_map.size() <= NumericLimits<uint32_t>::Maximum());
136022
- serializer.Write<uint32_t>((uint32_t)cte_map.size());
136468
+ writer.WriteField<uint32_t>((uint32_t)cte_map.size());
136469
+ auto &serializer = writer.GetSerializer();
136023
136470
  for (auto &cte : cte_map) {
136024
136471
  serializer.WriteString(cte.first);
136025
136472
  serializer.WriteStringVector(cte.second->aliases);
136026
136473
  cte.second->query->Serialize(serializer);
136027
136474
  }
136475
+ Serialize(writer);
136476
+ writer.Finalize();
136028
136477
  }
136029
136478
 
136030
- unique_ptr<QueryNode> QueryNode::Deserialize(Deserializer &source) {
136031
- unique_ptr<QueryNode> result;
136032
- auto type = source.Read<QueryNodeType>();
136033
- auto modifier_count = source.Read<idx_t>();
136034
- vector<unique_ptr<ResultModifier>> modifiers;
136035
- for (idx_t i = 0; i < modifier_count; i++) {
136036
- modifiers.push_back(ResultModifier::Deserialize(source));
136037
- }
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>();
136038
136484
  // cte_map
136039
- auto cte_count = source.Read<uint32_t>();
136485
+ auto cte_count = reader.ReadRequired<uint32_t>();
136486
+ auto &source = reader.GetSource();
136040
136487
  unordered_map<string, unique_ptr<CommonTableExpressionInfo>> cte_map;
136041
136488
  for (idx_t i = 0; i < cte_count; i++) {
136042
136489
  auto name = source.Read<string>();
@@ -136045,15 +136492,17 @@ unique_ptr<QueryNode> QueryNode::Deserialize(Deserializer &source) {
136045
136492
  info->query = SelectStatement::Deserialize(source);
136046
136493
  cte_map[name] = move(info);
136047
136494
  }
136495
+
136496
+ unique_ptr<QueryNode> result;
136048
136497
  switch (type) {
136049
136498
  case QueryNodeType::SELECT_NODE:
136050
- result = SelectNode::Deserialize(source);
136499
+ result = SelectNode::Deserialize(reader);
136051
136500
  break;
136052
136501
  case QueryNodeType::SET_OPERATION_NODE:
136053
- result = SetOperationNode::Deserialize(source);
136502
+ result = SetOperationNode::Deserialize(reader);
136054
136503
  break;
136055
136504
  case QueryNodeType::RECURSIVE_CTE_NODE:
136056
- result = RecursiveCTENode::Deserialize(source);
136505
+ result = RecursiveCTENode::Deserialize(reader);
136057
136506
  break;
136058
136507
  default:
136059
136508
  throw SerializationException("Could not deserialize Query Node: unknown type!");
@@ -136077,24 +136526,35 @@ bool ResultModifier::Equals(const ResultModifier *other) const {
136077
136526
  return type == other->type;
136078
136527
  }
136079
136528
 
136080
- void ResultModifier::Serialize(Serializer &serializer) {
136081
- 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();
136082
136534
  }
136083
136535
 
136084
136536
  unique_ptr<ResultModifier> ResultModifier::Deserialize(Deserializer &source) {
136085
- auto type = source.Read<ResultModifierType>();
136537
+ FieldReader reader(source);
136538
+ auto type = reader.ReadRequired<ResultModifierType>();
136539
+
136540
+ unique_ptr<ResultModifier> result;
136086
136541
  switch (type) {
136087
136542
  case ResultModifierType::LIMIT_MODIFIER:
136088
- return LimitModifier::Deserialize(source);
136543
+ result = LimitModifier::Deserialize(reader);
136544
+ break;
136089
136545
  case ResultModifierType::ORDER_MODIFIER:
136090
- return OrderModifier::Deserialize(source);
136546
+ result = OrderModifier::Deserialize(reader);
136547
+ break;
136091
136548
  case ResultModifierType::DISTINCT_MODIFIER:
136092
- return DistinctModifier::Deserialize(source);
136549
+ result = DistinctModifier::Deserialize(reader);
136550
+ break;
136093
136551
  case ResultModifierType::LIMIT_PERCENT_MODIFIER:
136094
- return LimitPercentModifier::Deserialize(source);
136552
+ result = LimitPercentModifier::Deserialize(reader);
136553
+ break;
136095
136554
  default:
136096
136555
  throw InternalException("Unrecognized ResultModifierType for Deserialization");
136097
136556
  }
136557
+ return result;
136098
136558
  }
136099
136559
 
136100
136560
  bool LimitModifier::Equals(const ResultModifier *other_p) const {
@@ -136111,7 +136571,7 @@ bool LimitModifier::Equals(const ResultModifier *other_p) const {
136111
136571
  return true;
136112
136572
  }
136113
136573
 
136114
- unique_ptr<ResultModifier> LimitModifier::Copy() {
136574
+ unique_ptr<ResultModifier> LimitModifier::Copy() const {
136115
136575
  auto copy = make_unique<LimitModifier>();
136116
136576
  if (limit) {
136117
136577
  copy->limit = limit->Copy();
@@ -136122,16 +136582,15 @@ unique_ptr<ResultModifier> LimitModifier::Copy() {
136122
136582
  return move(copy);
136123
136583
  }
136124
136584
 
136125
- void LimitModifier::Serialize(Serializer &serializer) {
136126
- ResultModifier::Serialize(serializer);
136127
- serializer.WriteOptional(limit);
136128
- serializer.WriteOptional(offset);
136585
+ void LimitModifier::Serialize(FieldWriter &writer) const {
136586
+ writer.WriteOptional(limit);
136587
+ writer.WriteOptional(offset);
136129
136588
  }
136130
136589
 
136131
- unique_ptr<ResultModifier> LimitModifier::Deserialize(Deserializer &source) {
136590
+ unique_ptr<ResultModifier> LimitModifier::Deserialize(FieldReader &reader) {
136132
136591
  auto mod = make_unique<LimitModifier>();
136133
- mod->limit = source.ReadOptional<ParsedExpression>();
136134
- mod->offset = source.ReadOptional<ParsedExpression>();
136592
+ mod->limit = reader.ReadOptional<ParsedExpression>(nullptr);
136593
+ mod->offset = reader.ReadOptional<ParsedExpression>(nullptr);
136135
136594
  return move(mod);
136136
136595
  }
136137
136596
 
@@ -136146,7 +136605,7 @@ bool DistinctModifier::Equals(const ResultModifier *other_p) const {
136146
136605
  return true;
136147
136606
  }
136148
136607
 
136149
- unique_ptr<ResultModifier> DistinctModifier::Copy() {
136608
+ unique_ptr<ResultModifier> DistinctModifier::Copy() const {
136150
136609
  auto copy = make_unique<DistinctModifier>();
136151
136610
  for (auto &expr : distinct_on_targets) {
136152
136611
  copy->distinct_on_targets.push_back(expr->Copy());
@@ -136154,14 +136613,13 @@ unique_ptr<ResultModifier> DistinctModifier::Copy() {
136154
136613
  return move(copy);
136155
136614
  }
136156
136615
 
136157
- void DistinctModifier::Serialize(Serializer &serializer) {
136158
- ResultModifier::Serialize(serializer);
136159
- serializer.WriteList(distinct_on_targets);
136616
+ void DistinctModifier::Serialize(FieldWriter &writer) const {
136617
+ writer.WriteSerializableList(distinct_on_targets);
136160
136618
  }
136161
136619
 
136162
- unique_ptr<ResultModifier> DistinctModifier::Deserialize(Deserializer &source) {
136620
+ unique_ptr<ResultModifier> DistinctModifier::Deserialize(FieldReader &reader) {
136163
136621
  auto mod = make_unique<DistinctModifier>();
136164
- source.ReadList<ParsedExpression>(mod->distinct_on_targets);
136622
+ mod->distinct_on_targets = reader.ReadRequiredSerializableList<ParsedExpression>();
136165
136623
  return move(mod);
136166
136624
  }
136167
136625
 
@@ -136184,7 +136642,7 @@ bool OrderModifier::Equals(const ResultModifier *other_p) const {
136184
136642
  return true;
136185
136643
  }
136186
136644
 
136187
- unique_ptr<ResultModifier> OrderModifier::Copy() {
136645
+ unique_ptr<ResultModifier> OrderModifier::Copy() const {
136188
136646
  auto copy = make_unique<OrderModifier>();
136189
136647
  for (auto &order : orders) {
136190
136648
  copy->orders.emplace_back(order.type, order.null_order, order.expression->Copy());
@@ -136218,33 +136676,29 @@ string OrderByNode::ToString() const {
136218
136676
  return str;
136219
136677
  }
136220
136678
 
136221
- void OrderByNode::Serialize(Serializer &serializer) {
136222
- serializer.Write<OrderType>(type);
136223
- serializer.Write<OrderByNullType>(null_order);
136224
- 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();
136225
136685
  }
136226
136686
 
136227
136687
  OrderByNode OrderByNode::Deserialize(Deserializer &source) {
136228
- auto type = source.Read<OrderType>();
136229
- auto null_order = source.Read<OrderByNullType>();
136230
- 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>();
136231
136692
  return OrderByNode(type, null_order, move(expression));
136232
136693
  }
136233
136694
 
136234
- void OrderModifier::Serialize(Serializer &serializer) {
136235
- ResultModifier::Serialize(serializer);
136236
- serializer.Write<int64_t>(orders.size());
136237
- for (auto &order : orders) {
136238
- order.Serialize(serializer);
136239
- }
136695
+ void OrderModifier::Serialize(FieldWriter &writer) const {
136696
+ writer.WriteRegularSerializableList(orders);
136240
136697
  }
136241
136698
 
136242
- unique_ptr<ResultModifier> OrderModifier::Deserialize(Deserializer &source) {
136699
+ unique_ptr<ResultModifier> OrderModifier::Deserialize(FieldReader &reader) {
136243
136700
  auto mod = make_unique<OrderModifier>();
136244
- auto order_count = source.Read<int64_t>();
136245
- for (int64_t i = 0; i < order_count; i++) {
136246
- mod->orders.push_back(OrderByNode::Deserialize((source)));
136247
- }
136701
+ mod->orders = reader.ReadRequiredSerializableList<OrderByNode, OrderByNode>();
136248
136702
  return move(mod);
136249
136703
  }
136250
136704
 
@@ -136262,7 +136716,7 @@ bool LimitPercentModifier::Equals(const ResultModifier *other_p) const {
136262
136716
  return true;
136263
136717
  }
136264
136718
 
136265
- unique_ptr<ResultModifier> LimitPercentModifier::Copy() {
136719
+ unique_ptr<ResultModifier> LimitPercentModifier::Copy() const {
136266
136720
  auto copy = make_unique<LimitPercentModifier>();
136267
136721
  if (limit) {
136268
136722
  copy->limit = limit->Copy();
@@ -136273,16 +136727,15 @@ unique_ptr<ResultModifier> LimitPercentModifier::Copy() {
136273
136727
  return move(copy);
136274
136728
  }
136275
136729
 
136276
- void LimitPercentModifier::Serialize(Serializer &serializer) {
136277
- ResultModifier::Serialize(serializer);
136278
- serializer.WriteOptional(limit);
136279
- serializer.WriteOptional(offset);
136730
+ void LimitPercentModifier::Serialize(FieldWriter &writer) const {
136731
+ writer.WriteOptional(limit);
136732
+ writer.WriteOptional(offset);
136280
136733
  }
136281
136734
 
136282
- unique_ptr<ResultModifier> LimitPercentModifier::Deserialize(Deserializer &source) {
136735
+ unique_ptr<ResultModifier> LimitPercentModifier::Deserialize(FieldReader &reader) {
136283
136736
  auto mod = make_unique<LimitPercentModifier>();
136284
- mod->limit = source.ReadOptional<ParsedExpression>();
136285
- mod->offset = source.ReadOptional<ParsedExpression>();
136737
+ mod->limit = reader.ReadOptional<ParsedExpression>(nullptr);
136738
+ mod->offset = reader.ReadOptional<ParsedExpression>(nullptr);
136286
136739
  return move(mod);
136287
136740
  }
136288
136741
 
@@ -136618,7 +137071,7 @@ unique_ptr<SQLStatement> SelectStatement::Copy() const {
136618
137071
  return move(result);
136619
137072
  }
136620
137073
 
136621
- void SelectStatement::Serialize(Serializer &serializer) {
137074
+ void SelectStatement::Serialize(Serializer &serializer) const {
136622
137075
  node->Serialize(serializer);
136623
137076
  }
136624
137077
 
@@ -136838,20 +137291,18 @@ bool BaseTableRef::Equals(const TableRef *other_p) const {
136838
137291
  column_name_alias == other->column_name_alias;
136839
137292
  }
136840
137293
 
136841
- void BaseTableRef::Serialize(Serializer &serializer) {
136842
- TableRef::Serialize(serializer);
136843
-
136844
- serializer.WriteString(schema_name);
136845
- serializer.WriteString(table_name);
136846
- 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);
136847
137298
  }
136848
137299
 
136849
- unique_ptr<TableRef> BaseTableRef::Deserialize(Deserializer &source) {
137300
+ unique_ptr<TableRef> BaseTableRef::Deserialize(FieldReader &reader) {
136850
137301
  auto result = make_unique<BaseTableRef>();
136851
137302
 
136852
- result->schema_name = source.Read<string>();
136853
- result->table_name = source.Read<string>();
136854
- 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>();
136855
137306
 
136856
137307
  return move(result);
136857
137308
  }
@@ -136889,22 +137340,18 @@ unique_ptr<TableRef> CrossProductRef::Copy() {
136889
137340
  return move(copy);
136890
137341
  }
136891
137342
 
136892
- void CrossProductRef::Serialize(Serializer &serializer) {
136893
- TableRef::Serialize(serializer);
136894
-
136895
- left->Serialize(serializer);
136896
- right->Serialize(serializer);
137343
+ void CrossProductRef::Serialize(FieldWriter &writer) const {
137344
+ writer.WriteSerializable(*left);
137345
+ writer.WriteSerializable(*right);
136897
137346
  }
136898
137347
 
136899
- unique_ptr<TableRef> CrossProductRef::Deserialize(Deserializer &source) {
137348
+ unique_ptr<TableRef> CrossProductRef::Deserialize(FieldReader &reader) {
136900
137349
  auto result = make_unique<CrossProductRef>();
136901
137350
 
136902
- result->left = TableRef::Deserialize(source);
136903
- result->right = TableRef::Deserialize(source);
136904
-
136905
- if (!result->left || !result->right) {
136906
- return nullptr;
136907
- }
137351
+ result->left = reader.ReadRequiredSerializable<TableRef>();
137352
+ result->right = reader.ReadRequiredSerializable<TableRef>();
137353
+ D_ASSERT(result->left);
137354
+ D_ASSERT(result->right);
136908
137355
 
136909
137356
  return move(result);
136910
137357
  }
@@ -136924,11 +137371,10 @@ unique_ptr<TableRef> EmptyTableRef::Copy() {
136924
137371
  return make_unique<EmptyTableRef>();
136925
137372
  }
136926
137373
 
136927
- void EmptyTableRef::Serialize(Serializer &serializer) {
136928
- TableRef::Serialize(serializer);
137374
+ void EmptyTableRef::Serialize(FieldWriter &writer) const {
136929
137375
  }
136930
137376
 
136931
- unique_ptr<TableRef> EmptyTableRef::Deserialize(Deserializer &source) {
137377
+ unique_ptr<TableRef> EmptyTableRef::Deserialize(FieldReader &reader) {
136932
137378
  return make_unique<EmptyTableRef>();
136933
137379
  }
136934
137380
 
@@ -136977,34 +137423,23 @@ unique_ptr<TableRef> ExpressionListRef::Copy() {
136977
137423
  return move(result);
136978
137424
  }
136979
137425
 
136980
- void ExpressionListRef::Serialize(Serializer &serializer) {
136981
- TableRef::Serialize(serializer);
136982
- serializer.Write<idx_t>(expected_names.size());
136983
- for (idx_t i = 0; i < expected_names.size(); i++) {
136984
- serializer.WriteString(expected_names[i]);
136985
- }
136986
- serializer.Write<idx_t>(expected_types.size());
136987
- for (idx_t i = 0; i < expected_types.size(); i++) {
136988
- expected_types[i].Serialize(serializer);
136989
- }
136990
- 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());
136991
137431
  for (idx_t i = 0; i < values.size(); i++) {
136992
137432
  serializer.WriteList(values[i]);
136993
137433
  }
136994
137434
  }
136995
137435
 
136996
- unique_ptr<TableRef> ExpressionListRef::Deserialize(Deserializer &source) {
137436
+ unique_ptr<TableRef> ExpressionListRef::Deserialize(FieldReader &reader) {
136997
137437
  auto result = make_unique<ExpressionListRef>();
136998
137438
  // value list
136999
- auto name_count = source.Read<idx_t>();
137000
- for (idx_t i = 0; i < name_count; i++) {
137001
- result->expected_names.push_back(source.Read<string>());
137002
- }
137003
- auto type_count = source.Read<idx_t>();
137004
- for (idx_t i = 0; i < type_count; i++) {
137005
- result->expected_types.push_back(LogicalType::Deserialize(source));
137006
- }
137007
- 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();
137008
137443
  for (idx_t i = 0; i < value_list_size; i++) {
137009
137444
  vector<unique_ptr<ParsedExpression>> value_list;
137010
137445
  source.ReadList<ParsedExpression>(value_list);
@@ -137052,33 +137487,23 @@ unique_ptr<TableRef> JoinRef::Copy() {
137052
137487
  return move(copy);
137053
137488
  }
137054
137489
 
137055
- void JoinRef::Serialize(Serializer &serializer) {
137056
- TableRef::Serialize(serializer);
137057
-
137058
- left->Serialize(serializer);
137059
- right->Serialize(serializer);
137060
- serializer.WriteOptional(condition);
137061
- serializer.Write<JoinType>(type);
137062
- serializer.Write<bool>(is_natural);
137063
- D_ASSERT(using_columns.size() <= NumericLimits<uint32_t>::Maximum());
137064
- serializer.Write<uint32_t>((uint32_t)using_columns.size());
137065
- for (auto &using_column : using_columns) {
137066
- serializer.WriteString(using_column);
137067
- }
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);
137068
137497
  }
137069
137498
 
137070
- unique_ptr<TableRef> JoinRef::Deserialize(Deserializer &source) {
137499
+ unique_ptr<TableRef> JoinRef::Deserialize(FieldReader &reader) {
137071
137500
  auto result = make_unique<JoinRef>();
137072
-
137073
- result->left = TableRef::Deserialize(source);
137074
- result->right = TableRef::Deserialize(source);
137075
- result->condition = source.ReadOptional<ParsedExpression>();
137076
- result->type = source.Read<JoinType>();
137077
- result->is_natural = source.Read<bool>();
137078
- auto count = source.Read<uint32_t>();
137079
- for (idx_t i = 0; i < count; i++) {
137080
- result->using_columns.push_back(source.Read<string>());
137081
- }
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>();
137082
137507
  return move(result);
137083
137508
  }
137084
137509
 
@@ -137110,19 +137535,15 @@ unique_ptr<TableRef> SubqueryRef::Copy() {
137110
137535
  return move(copy);
137111
137536
  }
137112
137537
 
137113
- void SubqueryRef::Serialize(Serializer &serializer) {
137114
- TableRef::Serialize(serializer);
137115
- subquery->Serialize(serializer);
137116
- serializer.WriteStringVector(column_name_alias);
137538
+ void SubqueryRef::Serialize(FieldWriter &writer) const {
137539
+ writer.WriteSerializable(*subquery);
137540
+ writer.WriteList<string>(column_name_alias);
137117
137541
  }
137118
137542
 
137119
- unique_ptr<TableRef> SubqueryRef::Deserialize(Deserializer &source) {
137120
- auto subquery = SelectStatement::Deserialize(source);
137121
- if (!subquery) {
137122
- return nullptr;
137123
- }
137543
+ unique_ptr<TableRef> SubqueryRef::Deserialize(FieldReader &reader) {
137544
+ auto subquery = reader.ReadRequiredSerializable<SelectStatement>();
137124
137545
  auto result = make_unique<SubqueryRef>(move(subquery));
137125
- source.ReadStringVector(result->column_name_alias);
137546
+ result->column_name_alias = reader.ReadRequiredList<string>();
137126
137547
  return move(result);
137127
137548
  }
137128
137549
 
@@ -137145,20 +137566,17 @@ bool TableFunctionRef::Equals(const TableRef *other_p) const {
137145
137566
  return function->Equals(other->function.get());
137146
137567
  }
137147
137568
 
137148
- void TableFunctionRef::Serialize(Serializer &serializer) {
137149
- TableRef::Serialize(serializer);
137150
- function->Serialize(serializer);
137151
- serializer.WriteString(alias);
137152
- 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);
137153
137573
  }
137154
137574
 
137155
- unique_ptr<TableRef> TableFunctionRef::Deserialize(Deserializer &source) {
137575
+ unique_ptr<TableRef> TableFunctionRef::Deserialize(FieldReader &reader) {
137156
137576
  auto result = make_unique<TableFunctionRef>();
137157
-
137158
- result->function = ParsedExpression::Deserialize(source);
137159
- result->alias = source.Read<string>();
137160
- source.ReadStringVector(result->column_name_alias);
137161
-
137577
+ result->function = reader.ReadRequiredSerializable<ParsedExpression>();
137578
+ result->alias = reader.ReadRequired<string>();
137579
+ result->column_name_alias = reader.ReadRequiredList<string>();
137162
137580
  return move(result);
137163
137581
  }
137164
137582
 
@@ -137190,44 +137608,50 @@ bool TableRef::Equals(const TableRef *other) const {
137190
137608
  SampleOptions::Equals(sample.get(), other->sample.get());
137191
137609
  }
137192
137610
 
137193
- void TableRef::Serialize(Serializer &serializer) {
137194
- serializer.Write<TableReferenceType>(type);
137195
- serializer.WriteString(alias);
137196
- 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();
137197
137618
  }
137198
137619
 
137199
- //! Deserializes a blob back into an TableRef
137200
137620
  unique_ptr<TableRef> TableRef::Deserialize(Deserializer &source) {
137201
- auto type = source.Read<TableReferenceType>();
137202
- auto alias = source.Read<string>();
137203
- 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);
137204
137626
  unique_ptr<TableRef> result;
137205
137627
  switch (type) {
137206
137628
  case TableReferenceType::BASE_TABLE:
137207
- result = BaseTableRef::Deserialize(source);
137629
+ result = BaseTableRef::Deserialize(reader);
137208
137630
  break;
137209
137631
  case TableReferenceType::CROSS_PRODUCT:
137210
- result = CrossProductRef::Deserialize(source);
137632
+ result = CrossProductRef::Deserialize(reader);
137211
137633
  break;
137212
137634
  case TableReferenceType::JOIN:
137213
- result = JoinRef::Deserialize(source);
137635
+ result = JoinRef::Deserialize(reader);
137214
137636
  break;
137215
137637
  case TableReferenceType::SUBQUERY:
137216
- result = SubqueryRef::Deserialize(source);
137638
+ result = SubqueryRef::Deserialize(reader);
137217
137639
  break;
137218
137640
  case TableReferenceType::TABLE_FUNCTION:
137219
- result = TableFunctionRef::Deserialize(source);
137641
+ result = TableFunctionRef::Deserialize(reader);
137220
137642
  break;
137221
137643
  case TableReferenceType::EMPTY:
137222
- result = EmptyTableRef::Deserialize(source);
137644
+ result = EmptyTableRef::Deserialize(reader);
137223
137645
  break;
137224
137646
  case TableReferenceType::EXPRESSION_LIST:
137225
- result = ExpressionListRef::Deserialize(source);
137647
+ result = ExpressionListRef::Deserialize(reader);
137226
137648
  break;
137227
137649
  case TableReferenceType::CTE:
137228
137650
  case TableReferenceType::INVALID:
137229
137651
  throw InternalException("Unsupported type for TableRef::Deserialize");
137230
137652
  }
137653
+ reader.Finalize();
137654
+
137231
137655
  result->alias = alias;
137232
137656
  result->sample = move(sample);
137233
137657
  return result;
@@ -140278,7 +140702,7 @@ unique_ptr<CreateStatement> Transformer::TransformCreateEnum(duckdb_libpgquery::
140278
140702
  info->name = ReadPgListToString(stmt->typeName)[0];
140279
140703
  idx_t size = 0;
140280
140704
  auto ordered_array = ReadPgListToVector(stmt->vals, size);
140281
- info->type = make_unique<LogicalType>(LogicalType::ENUM(info->name, ordered_array, size));
140705
+ info->type = LogicalType::ENUM(info->name, ordered_array, size);
140282
140706
  result->info = move(info);
140283
140707
  return result;
140284
140708
  }
@@ -143720,11 +144144,14 @@ public:
143720
144144
  unique_ptr<SelectStatement> subquery;
143721
144145
 
143722
144146
  const vector<unique_ptr<ParsedExpression>> &GetSelectList() const override {
143723
- throw Exception("Cannot get select list of bound subquery node");
144147
+ throw InternalException("Cannot get select list of bound subquery node");
143724
144148
  }
143725
144149
 
143726
- unique_ptr<QueryNode> Copy() override {
143727
- 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");
143728
144155
  }
143729
144156
  };
143730
144157
 
@@ -146177,7 +146604,7 @@ void Binder::BindLogicalType(ClientContext &context, LogicalType &type, const st
146177
146604
  if (!user_type_catalog) {
146178
146605
  throw NotImplementedException("DataType %s not supported yet...\n", user_type_name);
146179
146606
  }
146180
- type = *user_type_catalog->user_type;
146607
+ type = user_type_catalog->user_type;
146181
146608
  EnumType::SetCatalog(type, user_type_catalog);
146182
146609
  } else if (type.id() == LogicalTypeId::ENUM) {
146183
146610
  auto &enum_type_name = EnumType::GetTypeName(type);
@@ -160946,6 +161373,7 @@ private:
160946
161373
 
160947
161374
 
160948
161375
 
161376
+
160949
161377
  #include <algorithm>
160950
161378
  #include <cstring>
160951
161379
 
@@ -160956,9 +161384,11 @@ const char MainHeader::MAGIC_BYTES[] = "DUCK";
160956
161384
  void MainHeader::Serialize(Serializer &ser) {
160957
161385
  ser.WriteData((data_ptr_t)MAGIC_BYTES, MAGIC_BYTE_SIZE);
160958
161386
  ser.Write<uint64_t>(version_number);
161387
+ FieldWriter writer(ser);
160959
161388
  for (idx_t i = 0; i < FLAG_COUNT; i++) {
160960
- ser.Write<uint64_t>(flags[i]);
161389
+ writer.WriteField<uint64_t>(flags[i]);
160961
161390
  }
161391
+ writer.Finalize();
160962
161392
  }
160963
161393
 
160964
161394
  void MainHeader::CheckMagicBytes(FileHandle &handle) {
@@ -160981,9 +161411,11 @@ MainHeader MainHeader::Deserialize(Deserializer &source) {
160981
161411
  }
160982
161412
  header.version_number = source.Read<uint64_t>();
160983
161413
  // read the flags
161414
+ FieldReader reader(source);
160984
161415
  for (idx_t i = 0; i < FLAG_COUNT; i++) {
160985
- header.flags[i] = source.Read<uint64_t>();
161416
+ header.flags[i] = reader.ReadRequired<uint64_t>();
160986
161417
  }
161418
+ reader.Finalize();
160987
161419
  return header;
160988
161420
  }
160989
161421
 
@@ -161350,7 +161782,7 @@ BaseStatistics::BaseStatistics(LogicalType type) : type(move(type)) {
161350
161782
  BaseStatistics::~BaseStatistics() {
161351
161783
  }
161352
161784
 
161353
- bool BaseStatistics::CanHaveNull() {
161785
+ bool BaseStatistics::CanHaveNull() const {
161354
161786
  if (!validity_stats) {
161355
161787
  // we don't know
161356
161788
  // solid maybe
@@ -161359,7 +161791,7 @@ bool BaseStatistics::CanHaveNull() {
161359
161791
  return ((ValidityStatistics &)*validity_stats).has_null;
161360
161792
  }
161361
161793
 
161362
- bool BaseStatistics::CanHaveNoNull() {
161794
+ bool BaseStatistics::CanHaveNoNull() const {
161363
161795
  if (!validity_stats) {
161364
161796
  // we don't know
161365
161797
  // solid maybe
@@ -161368,14 +161800,6 @@ bool BaseStatistics::CanHaveNoNull() {
161368
161800
  return ((ValidityStatistics &)*validity_stats).has_no_null;
161369
161801
  }
161370
161802
 
161371
- unique_ptr<BaseStatistics> BaseStatistics::Copy() {
161372
- auto statistics = make_unique<BaseStatistics>(type);
161373
- if (validity_stats) {
161374
- statistics->validity_stats = validity_stats->Copy();
161375
- }
161376
- return statistics;
161377
- }
161378
-
161379
161803
  void BaseStatistics::Merge(const BaseStatistics &other) {
161380
161804
  D_ASSERT(type == other.type);
161381
161805
  if (other.validity_stats) {
@@ -161418,18 +161842,33 @@ unique_ptr<BaseStatistics> BaseStatistics::CreateEmpty(LogicalType type) {
161418
161842
  }
161419
161843
  }
161420
161844
 
161421
- void BaseStatistics::Serialize(Serializer &serializer) {
161422
- serializer.Write<bool>(CanHaveNull());
161423
- 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 {
161424
161862
  }
161425
161863
 
161426
161864
  unique_ptr<BaseStatistics> BaseStatistics::Deserialize(Deserializer &source, LogicalType type) {
161427
- bool can_have_null = source.Read<bool>();
161428
- 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>();
161429
161868
  unique_ptr<BaseStatistics> result;
161430
161869
  switch (type.InternalType()) {
161431
161870
  case PhysicalType::BIT:
161432
- return ValidityStatistics::Deserialize(source);
161871
+ return ValidityStatistics::Deserialize(reader);
161433
161872
  case PhysicalType::BOOL:
161434
161873
  case PhysicalType::INT8:
161435
161874
  case PhysicalType::INT16:
@@ -161442,16 +161881,16 @@ unique_ptr<BaseStatistics> BaseStatistics::Deserialize(Deserializer &source, Log
161442
161881
  case PhysicalType::INT128:
161443
161882
  case PhysicalType::FLOAT:
161444
161883
  case PhysicalType::DOUBLE:
161445
- result = NumericStatistics::Deserialize(source, move(type));
161884
+ result = NumericStatistics::Deserialize(reader, move(type));
161446
161885
  break;
161447
161886
  case PhysicalType::VARCHAR:
161448
- result = StringStatistics::Deserialize(source, move(type));
161887
+ result = StringStatistics::Deserialize(reader, move(type));
161449
161888
  break;
161450
161889
  case PhysicalType::STRUCT:
161451
- result = StructStatistics::Deserialize(source, move(type));
161890
+ result = StructStatistics::Deserialize(reader, move(type));
161452
161891
  break;
161453
161892
  case PhysicalType::LIST:
161454
- result = ListStatistics::Deserialize(source, move(type));
161893
+ result = ListStatistics::Deserialize(reader, move(type));
161455
161894
  break;
161456
161895
  case PhysicalType::INTERVAL:
161457
161896
  result = make_unique<BaseStatistics>(move(type));
@@ -161463,18 +161902,18 @@ unique_ptr<BaseStatistics> BaseStatistics::Deserialize(Deserializer &source, Log
161463
161902
  return result;
161464
161903
  }
161465
161904
 
161466
- string BaseStatistics::ToString() {
161905
+ string BaseStatistics::ToString() const {
161467
161906
  return StringUtil::Format("Base Statistics %s", validity_stats ? validity_stats->ToString() : "[]");
161468
161907
  }
161469
161908
 
161470
- void BaseStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) {
161909
+ void BaseStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) const {
161471
161910
  D_ASSERT(vector.GetType() == this->type);
161472
161911
  if (validity_stats) {
161473
161912
  validity_stats->Verify(vector, sel, count);
161474
161913
  }
161475
161914
  }
161476
161915
 
161477
- void BaseStatistics::Verify(Vector &vector, idx_t count) {
161916
+ void BaseStatistics::Verify(Vector &vector, idx_t count) const {
161478
161917
  SelectionVector owned_sel;
161479
161918
  auto sel = FlatVector::IncrementalSelectionVector(count, owned_sel);
161480
161919
  Verify(vector, *sel, count);
@@ -161484,6 +161923,7 @@ void BaseStatistics::Verify(Vector &vector, idx_t count) {
161484
161923
 
161485
161924
 
161486
161925
 
161926
+
161487
161927
  namespace duckdb {
161488
161928
 
161489
161929
  ListStatistics::ListStatistics(LogicalType type_p) : BaseStatistics(move(type_p)) {
@@ -161506,32 +161946,32 @@ void ListStatistics::Merge(const BaseStatistics &other_p) {
161506
161946
  }
161507
161947
 
161508
161948
  // LCOV_EXCL_START
161509
- FilterPropagateResult ListStatistics::CheckZonemap(ExpressionType comparison_type, const Value &constant) {
161949
+ FilterPropagateResult ListStatistics::CheckZonemap(ExpressionType comparison_type, const Value &constant) const {
161510
161950
  throw InternalException("List zonemaps are not supported yet");
161511
161951
  }
161512
161952
  // LCOV_EXCL_STOP
161513
161953
 
161514
- unique_ptr<BaseStatistics> ListStatistics::Copy() {
161954
+ unique_ptr<BaseStatistics> ListStatistics::Copy() const {
161515
161955
  auto copy = make_unique<ListStatistics>(type);
161516
161956
  copy->validity_stats = validity_stats ? validity_stats->Copy() : nullptr;
161517
161957
  copy->child_stats = child_stats ? child_stats->Copy() : nullptr;
161518
161958
  return move(copy);
161519
161959
  }
161520
161960
 
161521
- void ListStatistics::Serialize(Serializer &serializer) {
161522
- BaseStatistics::Serialize(serializer);
161523
- child_stats->Serialize(serializer);
161961
+ void ListStatistics::Serialize(FieldWriter &writer) const {
161962
+ writer.WriteSerializable(*child_stats);
161524
161963
  }
161525
161964
 
161526
- unique_ptr<BaseStatistics> ListStatistics::Deserialize(Deserializer &source, LogicalType type) {
161965
+ unique_ptr<BaseStatistics> ListStatistics::Deserialize(FieldReader &reader, LogicalType type) {
161527
161966
  D_ASSERT(type.InternalType() == PhysicalType::LIST);
161528
161967
  auto result = make_unique<ListStatistics>(move(type));
161529
161968
  auto &child_type = ListType::GetChildType(result->type);
161969
+ auto &source = reader.GetSource();
161530
161970
  result->child_stats = BaseStatistics::Deserialize(source, child_type);
161531
161971
  return move(result);
161532
161972
  }
161533
161973
 
161534
- string ListStatistics::ToString() {
161974
+ string ListStatistics::ToString() const {
161535
161975
  string result;
161536
161976
  result += " [";
161537
161977
  result += child_stats ? child_stats->ToString() : "No Stats";
@@ -161540,7 +161980,7 @@ string ListStatistics::ToString() {
161540
161980
  return result;
161541
161981
  }
161542
161982
 
161543
- void ListStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) {
161983
+ void ListStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) const {
161544
161984
  BaseStatistics::Verify(vector, sel, count);
161545
161985
 
161546
161986
  if (child_stats) {
@@ -161582,6 +162022,7 @@ void ListStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t co
161582
162022
 
161583
162023
 
161584
162024
 
162025
+
161585
162026
  namespace duckdb {
161586
162027
 
161587
162028
  template <>
@@ -161617,7 +162058,7 @@ void NumericStatistics::Merge(const BaseStatistics &other_p) {
161617
162058
  }
161618
162059
  }
161619
162060
 
161620
- FilterPropagateResult NumericStatistics::CheckZonemap(ExpressionType comparison_type, const Value &constant) {
162061
+ FilterPropagateResult NumericStatistics::CheckZonemap(ExpressionType comparison_type, const Value &constant) const {
161621
162062
  if (constant.IsNull()) {
161622
162063
  return FilterPropagateResult::FILTER_ALWAYS_FALSE;
161623
162064
  }
@@ -161690,7 +162131,7 @@ FilterPropagateResult NumericStatistics::CheckZonemap(ExpressionType comparison_
161690
162131
  }
161691
162132
  }
161692
162133
 
161693
- unique_ptr<BaseStatistics> NumericStatistics::Copy() {
162134
+ unique_ptr<BaseStatistics> NumericStatistics::Copy() const {
161694
162135
  auto stats = make_unique<NumericStatistics>(type, min, max);
161695
162136
  if (validity_stats) {
161696
162137
  stats->validity_stats = validity_stats->Copy();
@@ -161698,29 +162139,28 @@ unique_ptr<BaseStatistics> NumericStatistics::Copy() {
161698
162139
  return move(stats);
161699
162140
  }
161700
162141
 
161701
- bool NumericStatistics::IsConstant() {
162142
+ bool NumericStatistics::IsConstant() const {
161702
162143
  return max <= min;
161703
162144
  }
161704
162145
 
161705
- void NumericStatistics::Serialize(Serializer &serializer) {
161706
- BaseStatistics::Serialize(serializer);
161707
- min.Serialize(serializer);
161708
- max.Serialize(serializer);
162146
+ void NumericStatistics::Serialize(FieldWriter &writer) const {
162147
+ writer.WriteSerializable(min);
162148
+ writer.WriteSerializable(max);
161709
162149
  }
161710
162150
 
161711
- unique_ptr<BaseStatistics> NumericStatistics::Deserialize(Deserializer &source, LogicalType type) {
161712
- auto min = Value::Deserialize(source);
161713
- 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>();
161714
162154
  return make_unique_base<BaseStatistics, NumericStatistics>(move(type), min, max);
161715
162155
  }
161716
162156
 
161717
- string NumericStatistics::ToString() {
162157
+ string NumericStatistics::ToString() const {
161718
162158
  return StringUtil::Format("[Min: %s, Max: %s]%s", min.ToString(), max.ToString(),
161719
162159
  validity_stats ? validity_stats->ToString() : "");
161720
162160
  }
161721
162161
 
161722
162162
  template <class T>
161723
- void NumericStatistics::TemplatedVerify(Vector &vector, const SelectionVector &sel, idx_t count) {
162163
+ void NumericStatistics::TemplatedVerify(Vector &vector, const SelectionVector &sel, idx_t count) const {
161724
162164
  VectorData vdata;
161725
162165
  vector.Orrify(count, vdata);
161726
162166
 
@@ -161742,7 +162182,7 @@ void NumericStatistics::TemplatedVerify(Vector &vector, const SelectionVector &s
161742
162182
  }
161743
162183
  }
161744
162184
 
161745
- void NumericStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) {
162185
+ void NumericStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) const {
161746
162186
  BaseStatistics::Verify(vector, sel, count);
161747
162187
 
161748
162188
  switch (type.InternalType()) {
@@ -161831,7 +162271,7 @@ StringStatistics::StringStatistics(LogicalType type_p) : BaseStatistics(move(typ
161831
162271
  validity_stats = make_unique<ValidityStatistics>(false);
161832
162272
  }
161833
162273
 
161834
- unique_ptr<BaseStatistics> StringStatistics::Copy() {
162274
+ unique_ptr<BaseStatistics> StringStatistics::Copy() const {
161835
162275
  auto stats = make_unique<StringStatistics>(type);
161836
162276
  memcpy(stats->min, min, MAX_STRING_MINMAX_SIZE);
161837
162277
  memcpy(stats->max, max, MAX_STRING_MINMAX_SIZE);
@@ -161843,22 +162283,21 @@ unique_ptr<BaseStatistics> StringStatistics::Copy() {
161843
162283
  return move(stats);
161844
162284
  }
161845
162285
 
161846
- void StringStatistics::Serialize(Serializer &serializer) {
161847
- BaseStatistics::Serialize(serializer);
161848
- serializer.WriteData(min, MAX_STRING_MINMAX_SIZE);
161849
- serializer.WriteData(max, MAX_STRING_MINMAX_SIZE);
161850
- serializer.Write<bool>(has_unicode);
161851
- serializer.Write<uint32_t>(max_string_length);
161852
- 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);
161853
162292
  }
161854
162293
 
161855
- unique_ptr<BaseStatistics> StringStatistics::Deserialize(Deserializer &source, LogicalType type) {
162294
+ unique_ptr<BaseStatistics> StringStatistics::Deserialize(FieldReader &reader, LogicalType type) {
161856
162295
  auto stats = make_unique<StringStatistics>(move(type));
161857
- source.ReadData(stats->min, MAX_STRING_MINMAX_SIZE);
161858
- source.ReadData(stats->max, MAX_STRING_MINMAX_SIZE);
161859
- stats->has_unicode = source.Read<bool>();
161860
- stats->max_string_length = source.Read<uint32_t>();
161861
- 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>();
161862
162301
  return move(stats);
161863
162302
  }
161864
162303
 
@@ -161926,7 +162365,7 @@ void StringStatistics::Merge(const BaseStatistics &other_p) {
161926
162365
  has_overflow_strings = has_overflow_strings || other.has_overflow_strings;
161927
162366
  }
161928
162367
 
161929
- FilterPropagateResult StringStatistics::CheckZonemap(ExpressionType comparison_type, const string &constant) {
162368
+ FilterPropagateResult StringStatistics::CheckZonemap(ExpressionType comparison_type, const string &constant) const {
161930
162369
  auto data = (const_data_ptr_t)constant.c_str();
161931
162370
  auto size = constant.size();
161932
162371
 
@@ -161964,7 +162403,7 @@ FilterPropagateResult StringStatistics::CheckZonemap(ExpressionType comparison_t
161964
162403
  }
161965
162404
  }
161966
162405
 
161967
- static idx_t GetValidMinMaxSubstring(data_ptr_t data) {
162406
+ static idx_t GetValidMinMaxSubstring(const_data_ptr_t data) {
161968
162407
  for (idx_t i = 0; i < StringStatistics::MAX_STRING_MINMAX_SIZE; i++) {
161969
162408
  if (data[i] == '\0') {
161970
162409
  return i;
@@ -161976,7 +162415,7 @@ static idx_t GetValidMinMaxSubstring(data_ptr_t data) {
161976
162415
  return StringStatistics::MAX_STRING_MINMAX_SIZE;
161977
162416
  }
161978
162417
 
161979
- string StringStatistics::ToString() {
162418
+ string StringStatistics::ToString() const {
161980
162419
  idx_t min_len = GetValidMinMaxSubstring(min);
161981
162420
  idx_t max_len = GetValidMinMaxSubstring(max);
161982
162421
  return StringUtil::Format("[Min: %s, Max: %s, Has Unicode: %s, Max String Length: %lld]%s",
@@ -161985,7 +162424,7 @@ string StringStatistics::ToString() {
161985
162424
  validity_stats ? validity_stats->ToString() : "");
161986
162425
  }
161987
162426
 
161988
- void StringStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) {
162427
+ void StringStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) const {
161989
162428
  BaseStatistics::Verify(vector, sel, count);
161990
162429
 
161991
162430
  string_t min_string((const char *)min, MAX_STRING_MINMAX_SIZE);
@@ -162064,12 +162503,12 @@ void StructStatistics::Merge(const BaseStatistics &other_p) {
162064
162503
  }
162065
162504
 
162066
162505
  // LCOV_EXCL_START
162067
- FilterPropagateResult StructStatistics::CheckZonemap(ExpressionType comparison_type, const Value &constant) {
162506
+ FilterPropagateResult StructStatistics::CheckZonemap(ExpressionType comparison_type, const Value &constant) const {
162068
162507
  throw InternalException("Struct zonemaps are not supported yet");
162069
162508
  }
162070
162509
  // LCOV_EXCL_STOP
162071
162510
 
162072
- unique_ptr<BaseStatistics> StructStatistics::Copy() {
162511
+ unique_ptr<BaseStatistics> StructStatistics::Copy() const {
162073
162512
  auto copy = make_unique<StructStatistics>(type);
162074
162513
  if (validity_stats) {
162075
162514
  copy->validity_stats = validity_stats->Copy();
@@ -162080,8 +162519,9 @@ unique_ptr<BaseStatistics> StructStatistics::Copy() {
162080
162519
  return move(copy);
162081
162520
  }
162082
162521
 
162083
- void StructStatistics::Serialize(Serializer &serializer) {
162084
- BaseStatistics::Serialize(serializer);
162522
+ void StructStatistics::Serialize(FieldWriter &writer) const {
162523
+ writer.WriteField<uint32_t>(child_stats.size());
162524
+ auto &serializer = writer.GetSerializer();
162085
162525
  for (idx_t i = 0; i < child_stats.size(); i++) {
162086
162526
  serializer.Write<bool>(child_stats[i] ? true : false);
162087
162527
  if (child_stats[i]) {
@@ -162090,10 +162530,16 @@ void StructStatistics::Serialize(Serializer &serializer) {
162090
162530
  }
162091
162531
  }
162092
162532
 
162093
- unique_ptr<BaseStatistics> StructStatistics::Deserialize(Deserializer &source, LogicalType type) {
162533
+ unique_ptr<BaseStatistics> StructStatistics::Deserialize(FieldReader &reader, LogicalType type) {
162094
162534
  D_ASSERT(type.InternalType() == PhysicalType::STRUCT);
162095
162535
  auto result = make_unique<StructStatistics>(move(type));
162096
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();
162097
162543
  for (idx_t i = 0; i < child_types.size(); i++) {
162098
162544
  auto has_child = source.Read<bool>();
162099
162545
  if (has_child) {
@@ -162105,7 +162551,7 @@ unique_ptr<BaseStatistics> StructStatistics::Deserialize(Deserializer &source, L
162105
162551
  return move(result);
162106
162552
  }
162107
162553
 
162108
- string StructStatistics::ToString() {
162554
+ string StructStatistics::ToString() const {
162109
162555
  string result;
162110
162556
  result += " {";
162111
162557
  auto &child_types = StructType::GetChildTypes(type);
@@ -162120,7 +162566,7 @@ string StructStatistics::ToString() {
162120
162566
  return result;
162121
162567
  }
162122
162568
 
162123
- void StructStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) {
162569
+ void StructStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) const {
162124
162570
  BaseStatistics::Verify(vector, sel, count);
162125
162571
 
162126
162572
  auto &child_entries = StructVector::GetEntries(vector);
@@ -162158,7 +162604,7 @@ unique_ptr<BaseStatistics> ValidityStatistics::Combine(const unique_ptr<BaseStat
162158
162604
  }
162159
162605
  }
162160
162606
 
162161
- bool ValidityStatistics::IsConstant() {
162607
+ bool ValidityStatistics::IsConstant() const {
162162
162608
  if (!has_null) {
162163
162609
  return true;
162164
162610
  }
@@ -162174,23 +162620,22 @@ void ValidityStatistics::Merge(const BaseStatistics &other_p) {
162174
162620
  has_no_null = has_no_null || other.has_no_null;
162175
162621
  }
162176
162622
 
162177
- unique_ptr<BaseStatistics> ValidityStatistics::Copy() {
162623
+ unique_ptr<BaseStatistics> ValidityStatistics::Copy() const {
162178
162624
  return make_unique<ValidityStatistics>(has_null, has_no_null);
162179
162625
  }
162180
162626
 
162181
- void ValidityStatistics::Serialize(Serializer &serializer) {
162182
- BaseStatistics::Serialize(serializer);
162183
- serializer.Write<bool>(has_null);
162184
- 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);
162185
162630
  }
162186
162631
 
162187
- unique_ptr<BaseStatistics> ValidityStatistics::Deserialize(Deserializer &source) {
162188
- bool has_null = source.Read<bool>();
162189
- 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>();
162190
162635
  return make_unique<ValidityStatistics>(has_null, has_no_null);
162191
162636
  }
162192
162637
 
162193
- void ValidityStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) {
162638
+ void ValidityStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) const {
162194
162639
  if (has_null && has_no_null) {
162195
162640
  // nothing to verify
162196
162641
  return;
@@ -162214,7 +162659,7 @@ void ValidityStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_
162214
162659
  }
162215
162660
  }
162216
162661
 
162217
- string ValidityStatistics::ToString() {
162662
+ string ValidityStatistics::ToString() const {
162218
162663
  return has_null ? "[Has Null: true]" : "[Has Null: false]";
162219
162664
  }
162220
162665
 
@@ -164673,6 +165118,7 @@ PersistentTableData::~PersistentTableData() {
164673
165118
 
164674
165119
 
164675
165120
 
165121
+
164676
165122
  namespace duckdb {
164677
165123
 
164678
165124
  constexpr const idx_t RowGroup::ROW_GROUP_VECTOR_COUNT;
@@ -165390,9 +165836,11 @@ shared_ptr<VersionNode> RowGroup::DeserializeDeletes(Deserializer &source) {
165390
165836
  return version_info;
165391
165837
  }
165392
165838
 
165393
- void RowGroup::Serialize(RowGroupPointer &pointer, Serializer &serializer) {
165394
- serializer.Write<uint64_t>(pointer.row_start);
165395
- 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();
165396
165844
  for (auto &stats : pointer.statistics) {
165397
165845
  stats->Serialize(serializer);
165398
165846
  }
@@ -165401,16 +165849,20 @@ void RowGroup::Serialize(RowGroupPointer &pointer, Serializer &serializer) {
165401
165849
  serializer.Write<uint64_t>(data_pointer.offset);
165402
165850
  }
165403
165851
  CheckpointDeletes(pointer.versions.get(), serializer);
165852
+ writer.Finalize();
165404
165853
  }
165405
165854
 
165406
- RowGroupPointer RowGroup::Deserialize(Deserializer &source, const vector<ColumnDefinition> &columns) {
165855
+ RowGroupPointer RowGroup::Deserialize(Deserializer &main_source, const vector<ColumnDefinition> &columns) {
165407
165856
  RowGroupPointer result;
165408
- result.row_start = source.Read<uint64_t>();
165409
- 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>();
165410
165861
 
165411
165862
  result.data_pointers.reserve(columns.size());
165412
165863
  result.statistics.reserve(columns.size());
165413
165864
 
165865
+ auto &source = reader.GetSource();
165414
165866
  for (idx_t i = 0; i < columns.size(); i++) {
165415
165867
  auto stats = BaseStatistics::Deserialize(source, columns[i].type);
165416
165868
  result.statistics.push_back(move(stats));
@@ -165422,6 +165874,8 @@ RowGroupPointer RowGroup::Deserialize(Deserializer &source, const vector<ColumnD
165422
165874
  result.data_pointers.push_back(pointer);
165423
165875
  }
165424
165876
  result.versions = DeserializeDeletes(source);
165877
+
165878
+ reader.Finalize();
165425
165879
  return result;
165426
165880
  }
165427
165881
 
@@ -167384,8 +167838,11 @@ bool ValidityColumnData::CheckZonemap(ColumnScanState &state, TableFilter &filte
167384
167838
 
167385
167839
 
167386
167840
 
167841
+
167842
+
167387
167843
 
167388
167844
  namespace duckdb {
167845
+
167389
167846
  class ReplayState {
167390
167847
  public:
167391
167848
  ReplayState(DatabaseInstance &db, ClientContext &context, Deserializer &source)
@@ -167681,18 +168138,13 @@ void ReplayState::ReplayDropSchema() {
167681
168138
  // Replay Custom Type
167682
168139
  //===--------------------------------------------------------------------===//
167683
168140
  void ReplayState::ReplayCreateType() {
167684
- CreateTypeInfo info;
167685
-
167686
- info.schema = source.Read<string>();
167687
- info.name = source.Read<string>();
167688
- info.type = make_unique<LogicalType>(LogicalType::Deserialize(source));
167689
-
168141
+ auto info = TypeCatalogEntry::Deserialize(source);
167690
168142
  if (deserialize_only) {
167691
168143
  return;
167692
168144
  }
167693
168145
 
167694
168146
  auto &catalog = Catalog::GetCatalog(context);
167695
- catalog.CreateType(context, &info);
168147
+ catalog.CreateType(context, info.get());
167696
168148
  }
167697
168149
 
167698
168150
  void ReplayState::ReplayDropType() {