duckdb 0.3.2-dev1156.0 → 0.3.2-dev1199.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/duckdb.cpp +1388 -858
- package/src/duckdb.hpp +618 -628
- package/src/parquet-amalgamation.cpp +32382 -32379
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 &
|
|
1122
|
+
void MacroCatalogEntry::Serialize(Serializer &main_serializer) {
|
|
867
1123
|
D_ASSERT(!internal);
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
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 &
|
|
1138
|
+
unique_ptr<CreateMacroInfo> MacroCatalogEntry::Deserialize(Deserializer &main_source) {
|
|
883
1139
|
auto info = make_unique<CreateMacroInfo>();
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
info->
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
auto default_param_count =
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
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
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
info->
|
|
1323
|
-
info->
|
|
1324
|
-
info->
|
|
1325
|
-
info->
|
|
1326
|
-
info->
|
|
1327
|
-
info->
|
|
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
|
-
|
|
1381
|
-
DUCKDB_API
|
|
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(
|
|
1690
|
+
DUCKDB_API void Serialize(FieldWriter &writer) const override;
|
|
1424
1691
|
//! Deserializes a ParsedConstraint
|
|
1425
|
-
DUCKDB_API static unique_ptr<Constraint> Deserialize(
|
|
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
|
-
|
|
2764
|
-
serializer
|
|
2765
|
-
|
|
2766
|
-
|
|
2767
|
-
|
|
2768
|
-
|
|
2769
|
-
|
|
2770
|
-
|
|
2771
|
-
|
|
2772
|
-
|
|
2773
|
-
|
|
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
|
|
2968
|
-
|
|
2969
|
-
|
|
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
|
-
|
|
2975
|
-
|
|
2976
|
-
info->
|
|
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
|
|
3243
|
+
switch (user_type.id()) {
|
|
2983
3244
|
case (LogicalTypeId::ENUM): {
|
|
2984
|
-
Vector values_insert_order(EnumType::GetValuesInsertOrder(
|
|
2985
|
-
idx_t size = EnumType::GetSize(
|
|
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
|
|
3055
|
-
|
|
3056
|
-
|
|
3057
|
-
|
|
3058
|
-
|
|
3059
|
-
|
|
3060
|
-
|
|
3061
|
-
|
|
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
|
-
|
|
3072
|
-
|
|
3073
|
-
info->
|
|
3074
|
-
info->
|
|
3075
|
-
|
|
3076
|
-
|
|
3077
|
-
|
|
3078
|
-
|
|
3079
|
-
|
|
3080
|
-
|
|
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 ==
|
|
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 &
|
|
35507
|
-
|
|
35508
|
-
|
|
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 &
|
|
35563
|
-
|
|
35564
|
-
auto
|
|
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
|
-
|
|
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(
|
|
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,
|
|
38536
|
+
static void Serialize(ExtraTypeInfo *info, FieldWriter &writer);
|
|
38189
38537
|
//! Deserializes a blob back into an ExtraTypeInfo
|
|
38190
|
-
static shared_ptr<ExtraTypeInfo> Deserialize(
|
|
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(
|
|
38217
|
-
|
|
38218
|
-
|
|
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(
|
|
38222
|
-
auto width =
|
|
38223
|
-
auto scale =
|
|
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(
|
|
38264
|
-
|
|
38611
|
+
void Serialize(FieldWriter &writer) const override {
|
|
38612
|
+
writer.WriteString(collation);
|
|
38265
38613
|
}
|
|
38266
38614
|
|
|
38267
|
-
static shared_ptr<ExtraTypeInfo> Deserialize(
|
|
38268
|
-
auto collation =
|
|
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(
|
|
38312
|
-
|
|
38659
|
+
void Serialize(FieldWriter &writer) const override {
|
|
38660
|
+
writer.WriteSerializable(child_type);
|
|
38313
38661
|
}
|
|
38314
38662
|
|
|
38315
|
-
static shared_ptr<ExtraTypeInfo> Deserialize(
|
|
38316
|
-
auto child_type = LogicalType
|
|
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(
|
|
38356
|
-
|
|
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(
|
|
38712
|
+
static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
|
|
38364
38713
|
child_list_t<LogicalType> child_list;
|
|
38365
|
-
auto child_types_size =
|
|
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(
|
|
38451
|
-
|
|
38800
|
+
void Serialize(FieldWriter &writer) const override {
|
|
38801
|
+
writer.WriteString(user_type_name);
|
|
38452
38802
|
}
|
|
38453
38803
|
|
|
38454
|
-
static shared_ptr<ExtraTypeInfo> Deserialize(
|
|
38455
|
-
auto enum_name =
|
|
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
|
-
|
|
38512
|
-
|
|
38513
|
-
|
|
38514
|
-
|
|
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
|
-
|
|
38527
|
-
|
|
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,
|
|
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,
|
|
38985
|
+
void ExtraTypeInfo::Serialize(ExtraTypeInfo *info, FieldWriter &writer) {
|
|
38634
38986
|
if (!info) {
|
|
38635
|
-
|
|
38987
|
+
writer.WriteField<ExtraTypeInfoType>(ExtraTypeInfoType::INVALID_TYPE_INFO);
|
|
38636
38988
|
} else {
|
|
38637
|
-
|
|
38638
|
-
info->Serialize(
|
|
38989
|
+
writer.WriteField<ExtraTypeInfoType>(info->type);
|
|
38990
|
+
info->Serialize(writer);
|
|
38639
38991
|
}
|
|
38640
38992
|
}
|
|
38641
|
-
shared_ptr<ExtraTypeInfo> ExtraTypeInfo::Deserialize(
|
|
38642
|
-
auto type =
|
|
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(
|
|
38999
|
+
return DecimalTypeInfo::Deserialize(reader);
|
|
38648
39000
|
case ExtraTypeInfoType::STRING_TYPE_INFO:
|
|
38649
|
-
return StringTypeInfo::Deserialize(
|
|
39001
|
+
return StringTypeInfo::Deserialize(reader);
|
|
38650
39002
|
case ExtraTypeInfoType::LIST_TYPE_INFO:
|
|
38651
|
-
return ListTypeInfo::Deserialize(
|
|
39003
|
+
return ListTypeInfo::Deserialize(reader);
|
|
38652
39004
|
case ExtraTypeInfoType::STRUCT_TYPE_INFO:
|
|
38653
|
-
return StructTypeInfo::Deserialize(
|
|
39005
|
+
return StructTypeInfo::Deserialize(reader);
|
|
38654
39006
|
case ExtraTypeInfoType::USER_TYPE_INFO:
|
|
38655
|
-
return UserTypeInfo::Deserialize(
|
|
39007
|
+
return UserTypeInfo::Deserialize(reader);
|
|
38656
39008
|
case ExtraTypeInfoType::ENUM_TYPE_INFO: {
|
|
38657
|
-
auto enum_size =
|
|
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(
|
|
39013
|
+
return EnumTypeInfoTemplated<uint8_t>::Deserialize(reader, enum_size);
|
|
38662
39014
|
case PhysicalType::UINT16:
|
|
38663
|
-
return EnumTypeInfoTemplated<uint16_t>::Deserialize(
|
|
39015
|
+
return EnumTypeInfoTemplated<uint16_t>::Deserialize(reader, enum_size);
|
|
38664
39016
|
case PhysicalType::UINT32:
|
|
38665
|
-
return EnumTypeInfoTemplated<uint32_t>::Deserialize(
|
|
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
|
|
38685
|
-
|
|
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
|
-
|
|
38690
|
-
auto
|
|
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(
|
|
80331
|
-
static unique_ptr<BaseStatistics> Deserialize(
|
|
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(
|
|
89149
|
-
static unique_ptr<BaseStatistics> Deserialize(
|
|
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
|
-
|
|
95687
|
-
|
|
95688
|
-
|
|
95689
|
-
|
|
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
|
|
99430
|
+
string error;
|
|
99431
|
+
try {
|
|
99432
|
+
error = VerifyQuery(lock, query, move(statement));
|
|
99433
|
+
} catch (std::exception &ex) {
|
|
99434
|
+
error = ex.what();
|
|
99435
|
+
}
|
|
99072
99436
|
if (!error.empty()) {
|
|
99073
99437
|
// error in verifying query
|
|
99074
99438
|
return make_unique<PendingQueryResult>(error);
|
|
@@ -110209,6 +110573,79 @@ string CreateViewRelation::ToString(idx_t depth) {
|
|
|
110209
110573
|
return str + child->ToString(depth + 1);
|
|
110210
110574
|
}
|
|
110211
110575
|
|
|
110576
|
+
} // namespace duckdb
|
|
110577
|
+
//===----------------------------------------------------------------------===//
|
|
110578
|
+
// DuckDB
|
|
110579
|
+
//
|
|
110580
|
+
// duckdb/main/relation/cross_product_relation.hpp
|
|
110581
|
+
//
|
|
110582
|
+
//
|
|
110583
|
+
//===----------------------------------------------------------------------===//
|
|
110584
|
+
|
|
110585
|
+
|
|
110586
|
+
|
|
110587
|
+
|
|
110588
|
+
|
|
110589
|
+
namespace duckdb {
|
|
110590
|
+
|
|
110591
|
+
class CrossProductRelation : public Relation {
|
|
110592
|
+
public:
|
|
110593
|
+
CrossProductRelation(shared_ptr<Relation> left, shared_ptr<Relation> right);
|
|
110594
|
+
|
|
110595
|
+
shared_ptr<Relation> left;
|
|
110596
|
+
shared_ptr<Relation> right;
|
|
110597
|
+
vector<ColumnDefinition> columns;
|
|
110598
|
+
|
|
110599
|
+
public:
|
|
110600
|
+
unique_ptr<QueryNode> GetQueryNode() override;
|
|
110601
|
+
|
|
110602
|
+
const vector<ColumnDefinition> &Columns() override;
|
|
110603
|
+
string ToString(idx_t depth) override;
|
|
110604
|
+
|
|
110605
|
+
unique_ptr<TableRef> GetTableRef() override;
|
|
110606
|
+
};
|
|
110607
|
+
|
|
110608
|
+
} // namespace duckdb
|
|
110609
|
+
|
|
110610
|
+
|
|
110611
|
+
|
|
110612
|
+
|
|
110613
|
+
|
|
110614
|
+
|
|
110615
|
+
namespace duckdb {
|
|
110616
|
+
|
|
110617
|
+
CrossProductRelation::CrossProductRelation(shared_ptr<Relation> left_p, shared_ptr<Relation> right_p)
|
|
110618
|
+
: Relation(left_p->context, RelationType::CROSS_PRODUCT_RELATION), left(move(left_p)), right(move(right_p)) {
|
|
110619
|
+
if (&left->context != &right->context) {
|
|
110620
|
+
throw Exception("Cannot combine LEFT and RIGHT relations of different connections!");
|
|
110621
|
+
}
|
|
110622
|
+
context.TryBindRelation(*this, this->columns);
|
|
110623
|
+
}
|
|
110624
|
+
|
|
110625
|
+
unique_ptr<QueryNode> CrossProductRelation::GetQueryNode() {
|
|
110626
|
+
auto result = make_unique<SelectNode>();
|
|
110627
|
+
result->select_list.push_back(make_unique<StarExpression>());
|
|
110628
|
+
result->from_table = GetTableRef();
|
|
110629
|
+
return move(result);
|
|
110630
|
+
}
|
|
110631
|
+
|
|
110632
|
+
unique_ptr<TableRef> CrossProductRelation::GetTableRef() {
|
|
110633
|
+
auto cross_product_ref = make_unique<CrossProductRef>();
|
|
110634
|
+
cross_product_ref->left = left->GetTableRef();
|
|
110635
|
+
cross_product_ref->right = right->GetTableRef();
|
|
110636
|
+
return move(cross_product_ref);
|
|
110637
|
+
}
|
|
110638
|
+
|
|
110639
|
+
const vector<ColumnDefinition> &CrossProductRelation::Columns() {
|
|
110640
|
+
return this->columns;
|
|
110641
|
+
}
|
|
110642
|
+
|
|
110643
|
+
string CrossProductRelation::ToString(idx_t depth) {
|
|
110644
|
+
string str = RenderWhitespace(depth);
|
|
110645
|
+
str = "Cross Product";
|
|
110646
|
+
return str + "\n" + left->ToString(depth + 1) + right->ToString(depth + 1);
|
|
110647
|
+
}
|
|
110648
|
+
|
|
110212
110649
|
} // namespace duckdb
|
|
110213
110650
|
//===----------------------------------------------------------------------===//
|
|
110214
110651
|
// DuckDB
|
|
@@ -110539,12 +110976,12 @@ public:
|
|
|
110539
110976
|
public:
|
|
110540
110977
|
bool Equals(const QueryNode *other) const override;
|
|
110541
110978
|
//! Create a copy of this SelectNode
|
|
110542
|
-
unique_ptr<QueryNode> Copy() override;
|
|
110979
|
+
unique_ptr<QueryNode> Copy() const override;
|
|
110543
110980
|
|
|
110544
|
-
//! Serializes a
|
|
110545
|
-
void Serialize(
|
|
110546
|
-
//! Deserializes a blob back into a
|
|
110547
|
-
static unique_ptr<QueryNode> Deserialize(
|
|
110981
|
+
//! Serializes a QueryNode to a stand-alone binary blob
|
|
110982
|
+
void Serialize(FieldWriter &writer) const override;
|
|
110983
|
+
//! Deserializes a blob back into a QueryNode
|
|
110984
|
+
static unique_ptr<QueryNode> Deserialize(FieldReader &reader);
|
|
110548
110985
|
};
|
|
110549
110986
|
|
|
110550
110987
|
} // namespace duckdb
|
|
@@ -110793,8 +111230,8 @@ const vector<ColumnDefinition> &JoinRelation::Columns() {
|
|
|
110793
111230
|
|
|
110794
111231
|
string JoinRelation::ToString(idx_t depth) {
|
|
110795
111232
|
string str = RenderWhitespace(depth);
|
|
110796
|
-
str = "Join";
|
|
110797
|
-
return str + "\n" + left->ToString(depth + 1) + right->ToString(depth + 1);
|
|
111233
|
+
str = "Join " + JoinTypeToString(join_type);
|
|
111234
|
+
return str + "\n" + left->ToString(depth + 1) + "\n" + right->ToString(depth + 1);
|
|
110798
111235
|
}
|
|
110799
111236
|
|
|
110800
111237
|
} // namespace duckdb
|
|
@@ -111855,6 +112292,7 @@ string WriteCSVRelation::ToString(idx_t depth) {
|
|
|
111855
112292
|
|
|
111856
112293
|
|
|
111857
112294
|
|
|
112295
|
+
|
|
111858
112296
|
|
|
111859
112297
|
|
|
111860
112298
|
namespace duckdb {
|
|
@@ -111967,6 +112405,10 @@ shared_ptr<Relation> Relation::Join(const shared_ptr<Relation> &other, const str
|
|
|
111967
112405
|
}
|
|
111968
112406
|
}
|
|
111969
112407
|
|
|
112408
|
+
shared_ptr<Relation> Relation::CrossProduct(const shared_ptr<Relation> &other) {
|
|
112409
|
+
return make_shared<CrossProductRelation>(shared_from_this(), other);
|
|
112410
|
+
}
|
|
112411
|
+
|
|
111970
112412
|
shared_ptr<Relation> Relation::Union(const shared_ptr<Relation> &other) {
|
|
111971
112413
|
return make_shared<SetOpRelation>(shared_from_this(), other, SetOperationType::UNION);
|
|
111972
112414
|
}
|
|
@@ -127557,15 +127999,20 @@ ColumnDefinition ColumnDefinition::Copy() const {
|
|
|
127557
127999
|
}
|
|
127558
128000
|
|
|
127559
128001
|
void ColumnDefinition::Serialize(Serializer &serializer) const {
|
|
127560
|
-
serializer
|
|
127561
|
-
|
|
127562
|
-
|
|
128002
|
+
FieldWriter writer(serializer);
|
|
128003
|
+
writer.WriteString(name);
|
|
128004
|
+
writer.WriteSerializable(type);
|
|
128005
|
+
writer.WriteOptional(default_value);
|
|
128006
|
+
writer.Finalize();
|
|
127563
128007
|
}
|
|
127564
128008
|
|
|
127565
128009
|
ColumnDefinition ColumnDefinition::Deserialize(Deserializer &source) {
|
|
127566
|
-
|
|
127567
|
-
auto
|
|
127568
|
-
auto
|
|
128010
|
+
FieldReader reader(source);
|
|
128011
|
+
auto column_name = reader.ReadRequired<string>();
|
|
128012
|
+
auto column_type = reader.ReadRequiredSerializable<LogicalType, LogicalType>();
|
|
128013
|
+
auto default_value = reader.ReadOptional<ParsedExpression>(nullptr);
|
|
128014
|
+
reader.Finalize();
|
|
128015
|
+
|
|
127569
128016
|
return ColumnDefinition(column_name, column_type, move(default_value));
|
|
127570
128017
|
}
|
|
127571
128018
|
|
|
@@ -127576,6 +128023,7 @@ ColumnDefinition ColumnDefinition::Deserialize(Deserializer &source) {
|
|
|
127576
128023
|
|
|
127577
128024
|
|
|
127578
128025
|
|
|
128026
|
+
|
|
127579
128027
|
namespace duckdb {
|
|
127580
128028
|
|
|
127581
128029
|
Constraint::Constraint(ConstraintType type) : type(type) {
|
|
@@ -127584,25 +128032,35 @@ Constraint::Constraint(ConstraintType type) : type(type) {
|
|
|
127584
128032
|
Constraint::~Constraint() {
|
|
127585
128033
|
}
|
|
127586
128034
|
|
|
127587
|
-
void Constraint::Serialize(Serializer &serializer) {
|
|
127588
|
-
serializer
|
|
128035
|
+
void Constraint::Serialize(Serializer &serializer) const {
|
|
128036
|
+
FieldWriter writer(serializer);
|
|
128037
|
+
writer.WriteField<ConstraintType>(type);
|
|
128038
|
+
Serialize(writer);
|
|
128039
|
+
writer.Finalize();
|
|
127589
128040
|
}
|
|
127590
128041
|
|
|
127591
128042
|
unique_ptr<Constraint> Constraint::Deserialize(Deserializer &source) {
|
|
127592
|
-
|
|
128043
|
+
FieldReader reader(source);
|
|
128044
|
+
auto type = reader.ReadRequired<ConstraintType>();
|
|
128045
|
+
unique_ptr<Constraint> result;
|
|
127593
128046
|
switch (type) {
|
|
127594
128047
|
case ConstraintType::NOT_NULL:
|
|
127595
|
-
|
|
128048
|
+
result = NotNullConstraint::Deserialize(reader);
|
|
128049
|
+
break;
|
|
127596
128050
|
case ConstraintType::CHECK:
|
|
127597
|
-
|
|
128051
|
+
result = CheckConstraint::Deserialize(reader);
|
|
128052
|
+
break;
|
|
127598
128053
|
case ConstraintType::UNIQUE:
|
|
127599
|
-
|
|
128054
|
+
result = UniqueConstraint::Deserialize(reader);
|
|
128055
|
+
break;
|
|
127600
128056
|
default:
|
|
127601
128057
|
throw InternalException("Unrecognized constraint type for serialization");
|
|
127602
128058
|
}
|
|
128059
|
+
reader.Finalize();
|
|
128060
|
+
return result;
|
|
127603
128061
|
}
|
|
127604
128062
|
|
|
127605
|
-
void Constraint::Print() {
|
|
128063
|
+
void Constraint::Print() const {
|
|
127606
128064
|
Printer::Print(ToString());
|
|
127607
128065
|
}
|
|
127608
128066
|
|
|
@@ -127621,17 +128079,16 @@ string CheckConstraint::ToString() const {
|
|
|
127621
128079
|
return "CHECK(" + expression->ToString() + ")";
|
|
127622
128080
|
}
|
|
127623
128081
|
|
|
127624
|
-
unique_ptr<Constraint> CheckConstraint::Copy() {
|
|
128082
|
+
unique_ptr<Constraint> CheckConstraint::Copy() const {
|
|
127625
128083
|
return make_unique<CheckConstraint>(expression->Copy());
|
|
127626
128084
|
}
|
|
127627
128085
|
|
|
127628
|
-
void CheckConstraint::Serialize(
|
|
127629
|
-
|
|
127630
|
-
expression->Serialize(serializer);
|
|
128086
|
+
void CheckConstraint::Serialize(FieldWriter &writer) const {
|
|
128087
|
+
writer.WriteSerializable(*expression);
|
|
127631
128088
|
}
|
|
127632
128089
|
|
|
127633
|
-
unique_ptr<Constraint> CheckConstraint::Deserialize(
|
|
127634
|
-
auto expression = ParsedExpression
|
|
128090
|
+
unique_ptr<Constraint> CheckConstraint::Deserialize(FieldReader &source) {
|
|
128091
|
+
auto expression = source.ReadRequiredSerializable<ParsedExpression>();
|
|
127635
128092
|
return make_unique<CheckConstraint>(move(expression));
|
|
127636
128093
|
}
|
|
127637
128094
|
|
|
@@ -127652,17 +128109,16 @@ string NotNullConstraint::ToString() const {
|
|
|
127652
128109
|
return "NOT NULL";
|
|
127653
128110
|
}
|
|
127654
128111
|
|
|
127655
|
-
unique_ptr<Constraint> NotNullConstraint::Copy() {
|
|
128112
|
+
unique_ptr<Constraint> NotNullConstraint::Copy() const {
|
|
127656
128113
|
return make_unique<NotNullConstraint>(index);
|
|
127657
128114
|
}
|
|
127658
128115
|
|
|
127659
|
-
void NotNullConstraint::Serialize(
|
|
127660
|
-
|
|
127661
|
-
serializer.Write<idx_t>(index);
|
|
128116
|
+
void NotNullConstraint::Serialize(FieldWriter &writer) const {
|
|
128117
|
+
writer.WriteField<idx_t>(index);
|
|
127662
128118
|
}
|
|
127663
128119
|
|
|
127664
|
-
unique_ptr<Constraint> NotNullConstraint::Deserialize(
|
|
127665
|
-
auto index = source.
|
|
128120
|
+
unique_ptr<Constraint> NotNullConstraint::Deserialize(FieldReader &source) {
|
|
128121
|
+
auto index = source.ReadRequired<idx_t>();
|
|
127666
128122
|
return make_unique_base<Constraint, NotNullConstraint>(index);
|
|
127667
128123
|
}
|
|
127668
128124
|
|
|
@@ -127694,7 +128150,7 @@ string UniqueConstraint::ToString() const {
|
|
|
127694
128150
|
return base + ")";
|
|
127695
128151
|
}
|
|
127696
128152
|
|
|
127697
|
-
unique_ptr<Constraint> UniqueConstraint::Copy() {
|
|
128153
|
+
unique_ptr<Constraint> UniqueConstraint::Copy() const {
|
|
127698
128154
|
if (index == DConstants::INVALID_INDEX) {
|
|
127699
128155
|
return make_unique<UniqueConstraint>(columns, is_primary_key);
|
|
127700
128156
|
} else {
|
|
@@ -127704,26 +128160,17 @@ unique_ptr<Constraint> UniqueConstraint::Copy() {
|
|
|
127704
128160
|
}
|
|
127705
128161
|
}
|
|
127706
128162
|
|
|
127707
|
-
void UniqueConstraint::Serialize(
|
|
127708
|
-
|
|
127709
|
-
|
|
127710
|
-
serializer.Write<uint64_t>(index);
|
|
128163
|
+
void UniqueConstraint::Serialize(FieldWriter &writer) const {
|
|
128164
|
+
writer.WriteField<bool>(is_primary_key);
|
|
128165
|
+
writer.WriteField<uint64_t>(index);
|
|
127711
128166
|
D_ASSERT(columns.size() <= NumericLimits<uint32_t>::Maximum());
|
|
127712
|
-
|
|
127713
|
-
for (auto &column : columns) {
|
|
127714
|
-
serializer.WriteString(column);
|
|
127715
|
-
}
|
|
128167
|
+
writer.WriteList<string>(columns);
|
|
127716
128168
|
}
|
|
127717
128169
|
|
|
127718
|
-
unique_ptr<Constraint> UniqueConstraint::Deserialize(
|
|
127719
|
-
auto is_primary_key = source.
|
|
127720
|
-
auto index = source.
|
|
127721
|
-
auto
|
|
127722
|
-
vector<string> columns;
|
|
127723
|
-
for (uint32_t i = 0; i < column_count; i++) {
|
|
127724
|
-
auto column_name = source.Read<string>();
|
|
127725
|
-
columns.push_back(column_name);
|
|
127726
|
-
}
|
|
128170
|
+
unique_ptr<Constraint> UniqueConstraint::Deserialize(FieldReader &source) {
|
|
128171
|
+
auto is_primary_key = source.ReadRequired<bool>();
|
|
128172
|
+
auto index = source.ReadRequired<uint64_t>();
|
|
128173
|
+
auto columns = source.ReadRequiredList<string>();
|
|
127727
128174
|
|
|
127728
128175
|
if (index != DConstants::INVALID_INDEX) {
|
|
127729
128176
|
// single column parsed constraint
|
|
@@ -127739,6 +128186,7 @@ unique_ptr<Constraint> UniqueConstraint::Deserialize(Deserializer &source) {
|
|
|
127739
128186
|
} // namespace duckdb
|
|
127740
128187
|
|
|
127741
128188
|
|
|
128189
|
+
|
|
127742
128190
|
namespace duckdb {
|
|
127743
128191
|
|
|
127744
128192
|
BetweenExpression::BetweenExpression(unique_ptr<ParsedExpression> input_p, unique_ptr<ParsedExpression> lower_p,
|
|
@@ -127770,17 +128218,16 @@ unique_ptr<ParsedExpression> BetweenExpression::Copy() const {
|
|
|
127770
128218
|
return move(copy);
|
|
127771
128219
|
}
|
|
127772
128220
|
|
|
127773
|
-
void BetweenExpression::Serialize(
|
|
127774
|
-
|
|
127775
|
-
|
|
127776
|
-
|
|
127777
|
-
upper->Serialize(serializer);
|
|
128221
|
+
void BetweenExpression::Serialize(FieldWriter &writer) const {
|
|
128222
|
+
writer.WriteSerializable(*input);
|
|
128223
|
+
writer.WriteSerializable(*lower);
|
|
128224
|
+
writer.WriteSerializable(*upper);
|
|
127778
128225
|
}
|
|
127779
128226
|
|
|
127780
|
-
unique_ptr<ParsedExpression> BetweenExpression::Deserialize(ExpressionType type,
|
|
127781
|
-
auto input = ParsedExpression
|
|
127782
|
-
auto lower = ParsedExpression
|
|
127783
|
-
auto upper = ParsedExpression
|
|
128227
|
+
unique_ptr<ParsedExpression> BetweenExpression::Deserialize(ExpressionType type, FieldReader &source) {
|
|
128228
|
+
auto input = source.ReadRequiredSerializable<ParsedExpression>();
|
|
128229
|
+
auto lower = source.ReadRequiredSerializable<ParsedExpression>();
|
|
128230
|
+
auto upper = source.ReadRequiredSerializable<ParsedExpression>();
|
|
127784
128231
|
return make_unique<BetweenExpression>(move(input), move(lower), move(upper));
|
|
127785
128232
|
}
|
|
127786
128233
|
|
|
@@ -127835,26 +128282,29 @@ unique_ptr<ParsedExpression> CaseExpression::Copy() const {
|
|
|
127835
128282
|
return move(copy);
|
|
127836
128283
|
}
|
|
127837
128284
|
|
|
127838
|
-
void CaseExpression::Serialize(
|
|
127839
|
-
|
|
127840
|
-
|
|
128285
|
+
void CaseExpression::Serialize(FieldWriter &writer) const {
|
|
128286
|
+
auto &serializer = writer.GetSerializer();
|
|
128287
|
+
// we write a list of multiple expressions here
|
|
128288
|
+
// in order to write this as a single field we directly use the field writers' internal serializer
|
|
128289
|
+
writer.WriteField<uint32_t>(case_checks.size());
|
|
127841
128290
|
for (auto &check : case_checks) {
|
|
127842
128291
|
check.when_expr->Serialize(serializer);
|
|
127843
128292
|
check.then_expr->Serialize(serializer);
|
|
127844
128293
|
}
|
|
127845
|
-
else_expr
|
|
128294
|
+
writer.WriteSerializable<ParsedExpression>(*else_expr);
|
|
127846
128295
|
}
|
|
127847
128296
|
|
|
127848
|
-
unique_ptr<ParsedExpression> CaseExpression::Deserialize(ExpressionType type,
|
|
128297
|
+
unique_ptr<ParsedExpression> CaseExpression::Deserialize(ExpressionType type, FieldReader &reader) {
|
|
127849
128298
|
auto result = make_unique<CaseExpression>();
|
|
127850
|
-
auto
|
|
128299
|
+
auto &source = reader.GetSource();
|
|
128300
|
+
auto count = reader.ReadRequired<uint32_t>();
|
|
127851
128301
|
for (idx_t i = 0; i < count; i++) {
|
|
127852
128302
|
CaseCheck new_check;
|
|
127853
128303
|
new_check.when_expr = ParsedExpression::Deserialize(source);
|
|
127854
128304
|
new_check.then_expr = ParsedExpression::Deserialize(source);
|
|
127855
128305
|
result->case_checks.push_back(move(new_check));
|
|
127856
128306
|
}
|
|
127857
|
-
result->else_expr = ParsedExpression
|
|
128307
|
+
result->else_expr = reader.ReadRequiredSerializable<ParsedExpression>();
|
|
127858
128308
|
return move(result);
|
|
127859
128309
|
}
|
|
127860
128310
|
|
|
@@ -127896,17 +128346,16 @@ unique_ptr<ParsedExpression> CastExpression::Copy() const {
|
|
|
127896
128346
|
return move(copy);
|
|
127897
128347
|
}
|
|
127898
128348
|
|
|
127899
|
-
void CastExpression::Serialize(
|
|
127900
|
-
|
|
127901
|
-
|
|
127902
|
-
|
|
127903
|
-
serializer.Write<bool>(try_cast);
|
|
128349
|
+
void CastExpression::Serialize(FieldWriter &writer) const {
|
|
128350
|
+
writer.WriteSerializable(*child);
|
|
128351
|
+
writer.WriteSerializable(cast_type);
|
|
128352
|
+
writer.WriteField<bool>(try_cast);
|
|
127904
128353
|
}
|
|
127905
128354
|
|
|
127906
|
-
unique_ptr<ParsedExpression> CastExpression::Deserialize(ExpressionType type,
|
|
127907
|
-
auto child = ParsedExpression
|
|
127908
|
-
auto cast_type = LogicalType
|
|
127909
|
-
auto try_cast =
|
|
128355
|
+
unique_ptr<ParsedExpression> CastExpression::Deserialize(ExpressionType type, FieldReader &reader) {
|
|
128356
|
+
auto child = reader.ReadRequiredSerializable<ParsedExpression>();
|
|
128357
|
+
auto cast_type = reader.ReadRequiredSerializable<LogicalType, LogicalType>();
|
|
128358
|
+
auto try_cast = reader.ReadRequired<bool>();
|
|
127910
128359
|
return make_unique_base<ParsedExpression, CastExpression>(cast_type, move(child), try_cast);
|
|
127911
128360
|
}
|
|
127912
128361
|
|
|
@@ -127944,15 +128393,14 @@ unique_ptr<ParsedExpression> CollateExpression::Copy() const {
|
|
|
127944
128393
|
return move(copy);
|
|
127945
128394
|
}
|
|
127946
128395
|
|
|
127947
|
-
void CollateExpression::Serialize(
|
|
127948
|
-
|
|
127949
|
-
|
|
127950
|
-
serializer.WriteString(collation);
|
|
128396
|
+
void CollateExpression::Serialize(FieldWriter &writer) const {
|
|
128397
|
+
writer.WriteSerializable(*child);
|
|
128398
|
+
writer.WriteString(collation);
|
|
127951
128399
|
}
|
|
127952
128400
|
|
|
127953
|
-
unique_ptr<ParsedExpression> CollateExpression::Deserialize(ExpressionType type,
|
|
127954
|
-
auto child = ParsedExpression
|
|
127955
|
-
auto collation =
|
|
128401
|
+
unique_ptr<ParsedExpression> CollateExpression::Deserialize(ExpressionType type, FieldReader &reader) {
|
|
128402
|
+
auto child = reader.ReadRequiredSerializable<ParsedExpression>();
|
|
128403
|
+
auto collation = reader.ReadRequired<string>();
|
|
127956
128404
|
return make_unique_base<ParsedExpression, CollateExpression>(collation, move(child));
|
|
127957
128405
|
}
|
|
127958
128406
|
|
|
@@ -127963,7 +128411,6 @@ unique_ptr<ParsedExpression> CollateExpression::Deserialize(ExpressionType type,
|
|
|
127963
128411
|
|
|
127964
128412
|
|
|
127965
128413
|
|
|
127966
|
-
|
|
127967
128414
|
namespace duckdb {
|
|
127968
128415
|
|
|
127969
128416
|
ColumnRefExpression::ColumnRefExpression(string column_name, string table_name)
|
|
@@ -128041,20 +128488,12 @@ unique_ptr<ParsedExpression> ColumnRefExpression::Copy() const {
|
|
|
128041
128488
|
return move(copy);
|
|
128042
128489
|
}
|
|
128043
128490
|
|
|
128044
|
-
void ColumnRefExpression::Serialize(
|
|
128045
|
-
|
|
128046
|
-
serializer.Write<idx_t>(column_names.size());
|
|
128047
|
-
for (auto &column_name : column_names) {
|
|
128048
|
-
serializer.WriteString(column_name);
|
|
128049
|
-
}
|
|
128491
|
+
void ColumnRefExpression::Serialize(FieldWriter &writer) const {
|
|
128492
|
+
writer.WriteList<string>(column_names);
|
|
128050
128493
|
}
|
|
128051
128494
|
|
|
128052
|
-
unique_ptr<ParsedExpression> ColumnRefExpression::Deserialize(ExpressionType type,
|
|
128053
|
-
auto
|
|
128054
|
-
vector<string> column_names;
|
|
128055
|
-
for (idx_t i = 0; i < column_count; i++) {
|
|
128056
|
-
column_names.push_back(source.Read<string>());
|
|
128057
|
-
}
|
|
128495
|
+
unique_ptr<ParsedExpression> ColumnRefExpression::Deserialize(ExpressionType type, FieldReader &reader) {
|
|
128496
|
+
auto column_names = reader.ReadRequiredList<string>();
|
|
128058
128497
|
auto expression = make_unique<ColumnRefExpression>(move(column_names));
|
|
128059
128498
|
return move(expression);
|
|
128060
128499
|
}
|
|
@@ -128095,15 +128534,14 @@ unique_ptr<ParsedExpression> ComparisonExpression::Copy() const {
|
|
|
128095
128534
|
return move(copy);
|
|
128096
128535
|
}
|
|
128097
128536
|
|
|
128098
|
-
void ComparisonExpression::Serialize(
|
|
128099
|
-
|
|
128100
|
-
|
|
128101
|
-
right->Serialize(serializer);
|
|
128537
|
+
void ComparisonExpression::Serialize(FieldWriter &writer) const {
|
|
128538
|
+
writer.WriteSerializable(*left);
|
|
128539
|
+
writer.WriteSerializable(*right);
|
|
128102
128540
|
}
|
|
128103
128541
|
|
|
128104
|
-
unique_ptr<ParsedExpression> ComparisonExpression::Deserialize(ExpressionType type,
|
|
128105
|
-
auto left_child = ParsedExpression
|
|
128106
|
-
auto right_child = ParsedExpression
|
|
128542
|
+
unique_ptr<ParsedExpression> ComparisonExpression::Deserialize(ExpressionType type, FieldReader &reader) {
|
|
128543
|
+
auto left_child = reader.ReadRequiredSerializable<ParsedExpression>();
|
|
128544
|
+
auto right_child = reader.ReadRequiredSerializable<ParsedExpression>();
|
|
128107
128545
|
return make_unique<ComparisonExpression>(type, move(left_child), move(right_child));
|
|
128108
128546
|
}
|
|
128109
128547
|
|
|
@@ -128202,14 +128640,13 @@ unique_ptr<ParsedExpression> ConjunctionExpression::Copy() const {
|
|
|
128202
128640
|
return move(copy);
|
|
128203
128641
|
}
|
|
128204
128642
|
|
|
128205
|
-
void ConjunctionExpression::Serialize(
|
|
128206
|
-
|
|
128207
|
-
serializer.WriteList<ParsedExpression>(children);
|
|
128643
|
+
void ConjunctionExpression::Serialize(FieldWriter &writer) const {
|
|
128644
|
+
writer.WriteSerializableList(children);
|
|
128208
128645
|
}
|
|
128209
128646
|
|
|
128210
|
-
unique_ptr<ParsedExpression> ConjunctionExpression::Deserialize(ExpressionType type,
|
|
128647
|
+
unique_ptr<ParsedExpression> ConjunctionExpression::Deserialize(ExpressionType type, FieldReader &reader) {
|
|
128211
128648
|
auto result = make_unique<ConjunctionExpression>(type);
|
|
128212
|
-
|
|
128649
|
+
result->children = reader.ReadRequiredSerializableList<ParsedExpression>();
|
|
128213
128650
|
return move(result);
|
|
128214
128651
|
}
|
|
128215
128652
|
|
|
@@ -128220,6 +128657,7 @@ unique_ptr<ParsedExpression> ConjunctionExpression::Deserialize(ExpressionType t
|
|
|
128220
128657
|
|
|
128221
128658
|
|
|
128222
128659
|
|
|
128660
|
+
|
|
128223
128661
|
namespace duckdb {
|
|
128224
128662
|
|
|
128225
128663
|
ConstantExpression::ConstantExpression(Value val)
|
|
@@ -128244,13 +128682,12 @@ unique_ptr<ParsedExpression> ConstantExpression::Copy() const {
|
|
|
128244
128682
|
return move(copy);
|
|
128245
128683
|
}
|
|
128246
128684
|
|
|
128247
|
-
void ConstantExpression::Serialize(
|
|
128248
|
-
|
|
128249
|
-
value.Serialize(serializer);
|
|
128685
|
+
void ConstantExpression::Serialize(FieldWriter &writer) const {
|
|
128686
|
+
writer.WriteSerializable(value);
|
|
128250
128687
|
}
|
|
128251
128688
|
|
|
128252
|
-
unique_ptr<ParsedExpression> ConstantExpression::Deserialize(ExpressionType type,
|
|
128253
|
-
Value value = Value
|
|
128689
|
+
unique_ptr<ParsedExpression> ConstantExpression::Deserialize(ExpressionType type, FieldReader &reader) {
|
|
128690
|
+
Value value = reader.ReadRequiredSerializable<Value, Value>();
|
|
128254
128691
|
return make_unique<ConstantExpression>(move(value));
|
|
128255
128692
|
}
|
|
128256
128693
|
|
|
@@ -128274,7 +128711,10 @@ unique_ptr<ParsedExpression> DefaultExpression::Copy() const {
|
|
|
128274
128711
|
return move(copy);
|
|
128275
128712
|
}
|
|
128276
128713
|
|
|
128277
|
-
|
|
128714
|
+
void DefaultExpression::Serialize(FieldWriter &writer) const {
|
|
128715
|
+
}
|
|
128716
|
+
|
|
128717
|
+
unique_ptr<ParsedExpression> DefaultExpression::Deserialize(ExpressionType type, FieldReader &source) {
|
|
128278
128718
|
return make_unique<DefaultExpression>();
|
|
128279
128719
|
}
|
|
128280
128720
|
|
|
@@ -128388,26 +128828,24 @@ unique_ptr<ParsedExpression> FunctionExpression::Copy() const {
|
|
|
128388
128828
|
return move(copy);
|
|
128389
128829
|
}
|
|
128390
128830
|
|
|
128391
|
-
void FunctionExpression::Serialize(
|
|
128392
|
-
|
|
128393
|
-
|
|
128394
|
-
|
|
128395
|
-
|
|
128396
|
-
|
|
128397
|
-
|
|
128398
|
-
|
|
128399
|
-
|
|
128400
|
-
|
|
128401
|
-
|
|
128402
|
-
|
|
128403
|
-
|
|
128404
|
-
auto
|
|
128405
|
-
auto
|
|
128406
|
-
|
|
128407
|
-
auto
|
|
128408
|
-
|
|
128409
|
-
auto distinct = source.Read<bool>();
|
|
128410
|
-
auto is_operator = source.Read<bool>();
|
|
128831
|
+
void FunctionExpression::Serialize(FieldWriter &writer) const {
|
|
128832
|
+
writer.WriteString(function_name);
|
|
128833
|
+
writer.WriteString(schema);
|
|
128834
|
+
writer.WriteSerializableList(children);
|
|
128835
|
+
writer.WriteOptional(filter);
|
|
128836
|
+
writer.WriteSerializable((ResultModifier &)*order_bys);
|
|
128837
|
+
writer.WriteField<bool>(distinct);
|
|
128838
|
+
writer.WriteField<bool>(is_operator);
|
|
128839
|
+
}
|
|
128840
|
+
|
|
128841
|
+
unique_ptr<ParsedExpression> FunctionExpression::Deserialize(ExpressionType type, FieldReader &reader) {
|
|
128842
|
+
auto function_name = reader.ReadRequired<string>();
|
|
128843
|
+
auto schema = reader.ReadRequired<string>();
|
|
128844
|
+
auto children = reader.ReadRequiredSerializableList<ParsedExpression>();
|
|
128845
|
+
auto filter = reader.ReadOptional<ParsedExpression>(nullptr);
|
|
128846
|
+
auto order_bys = unique_ptr_cast<ResultModifier, OrderModifier>(reader.ReadRequiredSerializable<ResultModifier>());
|
|
128847
|
+
auto distinct = reader.ReadRequired<bool>();
|
|
128848
|
+
auto is_operator = reader.ReadRequired<bool>();
|
|
128411
128849
|
unique_ptr<FunctionExpression> function;
|
|
128412
128850
|
function = make_unique<FunctionExpression>(function_name, move(children), move(filter), move(order_bys), distinct,
|
|
128413
128851
|
is_operator);
|
|
@@ -128420,7 +128858,6 @@ unique_ptr<ParsedExpression> FunctionExpression::Deserialize(ExpressionType type
|
|
|
128420
128858
|
|
|
128421
128859
|
|
|
128422
128860
|
|
|
128423
|
-
|
|
128424
128861
|
namespace duckdb {
|
|
128425
128862
|
|
|
128426
128863
|
LambdaExpression::LambdaExpression(vector<string> parameters, unique_ptr<ParsedExpression> expression)
|
|
@@ -128467,24 +128904,14 @@ unique_ptr<ParsedExpression> LambdaExpression::Copy() const {
|
|
|
128467
128904
|
return make_unique<LambdaExpression>(parameters, expression->Copy());
|
|
128468
128905
|
}
|
|
128469
128906
|
|
|
128470
|
-
void LambdaExpression::Serialize(
|
|
128471
|
-
|
|
128472
|
-
|
|
128473
|
-
for (auto ¶meter : parameters) {
|
|
128474
|
-
serializer.WriteString(parameter);
|
|
128475
|
-
}
|
|
128476
|
-
expression->Serialize(serializer);
|
|
128907
|
+
void LambdaExpression::Serialize(FieldWriter &writer) const {
|
|
128908
|
+
writer.WriteList<string>(parameters);
|
|
128909
|
+
writer.WriteSerializable(*expression);
|
|
128477
128910
|
}
|
|
128478
128911
|
|
|
128479
|
-
unique_ptr<ParsedExpression> LambdaExpression::Deserialize(ExpressionType type,
|
|
128480
|
-
auto
|
|
128481
|
-
|
|
128482
|
-
parameters.reserve(parameter_count);
|
|
128483
|
-
for (size_t i = 0; i < parameter_count; i++) {
|
|
128484
|
-
parameters.push_back(source.Read<string>());
|
|
128485
|
-
}
|
|
128486
|
-
auto expression = ParsedExpression::Deserialize(source);
|
|
128487
|
-
|
|
128912
|
+
unique_ptr<ParsedExpression> LambdaExpression::Deserialize(ExpressionType type, FieldReader &reader) {
|
|
128913
|
+
auto parameters = reader.ReadRequiredList<string>();
|
|
128914
|
+
auto expression = reader.ReadRequiredSerializable<ParsedExpression>();
|
|
128488
128915
|
return make_unique<LambdaExpression>(move(parameters), move(expression));
|
|
128489
128916
|
}
|
|
128490
128917
|
|
|
@@ -128551,14 +128978,13 @@ unique_ptr<ParsedExpression> OperatorExpression::Copy() const {
|
|
|
128551
128978
|
return move(copy);
|
|
128552
128979
|
}
|
|
128553
128980
|
|
|
128554
|
-
void OperatorExpression::Serialize(
|
|
128555
|
-
|
|
128556
|
-
serializer.WriteList(children);
|
|
128981
|
+
void OperatorExpression::Serialize(FieldWriter &writer) const {
|
|
128982
|
+
writer.WriteSerializableList(children);
|
|
128557
128983
|
}
|
|
128558
128984
|
|
|
128559
|
-
unique_ptr<ParsedExpression> OperatorExpression::Deserialize(ExpressionType type,
|
|
128985
|
+
unique_ptr<ParsedExpression> OperatorExpression::Deserialize(ExpressionType type, FieldReader &reader) {
|
|
128560
128986
|
auto expression = make_unique<OperatorExpression>(type);
|
|
128561
|
-
|
|
128987
|
+
expression->children = reader.ReadRequiredSerializableList<ParsedExpression>();
|
|
128562
128988
|
return move(expression);
|
|
128563
128989
|
}
|
|
128564
128990
|
|
|
@@ -128592,14 +129018,13 @@ hash_t ParameterExpression::Hash() const {
|
|
|
128592
129018
|
return CombineHash(duckdb::Hash(parameter_nr), result);
|
|
128593
129019
|
}
|
|
128594
129020
|
|
|
128595
|
-
void ParameterExpression::Serialize(
|
|
128596
|
-
|
|
128597
|
-
serializer.Write<idx_t>(parameter_nr);
|
|
129021
|
+
void ParameterExpression::Serialize(FieldWriter &writer) const {
|
|
129022
|
+
writer.WriteField<idx_t>(parameter_nr);
|
|
128598
129023
|
}
|
|
128599
129024
|
|
|
128600
|
-
unique_ptr<ParsedExpression> ParameterExpression::Deserialize(ExpressionType type,
|
|
129025
|
+
unique_ptr<ParsedExpression> ParameterExpression::Deserialize(ExpressionType type, FieldReader &reader) {
|
|
128601
129026
|
auto expression = make_unique<ParameterExpression>();
|
|
128602
|
-
expression->parameter_nr =
|
|
129027
|
+
expression->parameter_nr = reader.ReadRequired<idx_t>();
|
|
128603
129028
|
return move(expression);
|
|
128604
129029
|
}
|
|
128605
129030
|
|
|
@@ -128637,13 +129062,12 @@ hash_t PositionalReferenceExpression::Hash() const {
|
|
|
128637
129062
|
return CombineHash(duckdb::Hash(index), result);
|
|
128638
129063
|
}
|
|
128639
129064
|
|
|
128640
|
-
void PositionalReferenceExpression::Serialize(
|
|
128641
|
-
|
|
128642
|
-
serializer.Write<idx_t>(index);
|
|
129065
|
+
void PositionalReferenceExpression::Serialize(FieldWriter &writer) const {
|
|
129066
|
+
writer.WriteField<idx_t>(index);
|
|
128643
129067
|
}
|
|
128644
129068
|
|
|
128645
|
-
unique_ptr<ParsedExpression> PositionalReferenceExpression::Deserialize(ExpressionType type,
|
|
128646
|
-
auto expression = make_unique<PositionalReferenceExpression>(
|
|
129069
|
+
unique_ptr<ParsedExpression> PositionalReferenceExpression::Deserialize(ExpressionType type, FieldReader &reader) {
|
|
129070
|
+
auto expression = make_unique<PositionalReferenceExpression>(reader.ReadRequired<idx_t>());
|
|
128647
129071
|
return move(expression);
|
|
128648
129072
|
}
|
|
128649
129073
|
|
|
@@ -128709,28 +129133,34 @@ bool StarExpression::Equals(const StarExpression *a, const StarExpression *b) {
|
|
|
128709
129133
|
return true;
|
|
128710
129134
|
}
|
|
128711
129135
|
|
|
128712
|
-
void StarExpression::Serialize(
|
|
128713
|
-
|
|
128714
|
-
|
|
128715
|
-
|
|
129136
|
+
void StarExpression::Serialize(FieldWriter &writer) const {
|
|
129137
|
+
auto &serializer = writer.GetSerializer();
|
|
129138
|
+
|
|
129139
|
+
writer.WriteString(relation_name);
|
|
129140
|
+
|
|
129141
|
+
// in order to write the exclude_list/replace_list as single fields we directly use the field writers' internal
|
|
129142
|
+
// serializer
|
|
129143
|
+
writer.WriteField<uint32_t>(exclude_list.size());
|
|
128716
129144
|
for (auto &exclusion : exclude_list) {
|
|
128717
129145
|
serializer.WriteString(exclusion);
|
|
128718
129146
|
}
|
|
128719
|
-
|
|
129147
|
+
writer.WriteField<uint32_t>(replace_list.size());
|
|
128720
129148
|
for (auto &entry : replace_list) {
|
|
128721
129149
|
serializer.WriteString(entry.first);
|
|
128722
129150
|
entry.second->Serialize(serializer);
|
|
128723
129151
|
}
|
|
128724
129152
|
}
|
|
128725
129153
|
|
|
128726
|
-
unique_ptr<ParsedExpression> StarExpression::Deserialize(ExpressionType type,
|
|
129154
|
+
unique_ptr<ParsedExpression> StarExpression::Deserialize(ExpressionType type, FieldReader &reader) {
|
|
129155
|
+
auto &source = reader.GetSource();
|
|
129156
|
+
|
|
128727
129157
|
auto result = make_unique<StarExpression>();
|
|
128728
|
-
result->relation_name =
|
|
128729
|
-
auto exclusion_count =
|
|
129158
|
+
result->relation_name = reader.ReadRequired<string>();
|
|
129159
|
+
auto exclusion_count = reader.ReadRequired<uint32_t>();
|
|
128730
129160
|
for (idx_t i = 0; i < exclusion_count; i++) {
|
|
128731
129161
|
result->exclude_list.insert(source.Read<string>());
|
|
128732
129162
|
}
|
|
128733
|
-
auto replace_count =
|
|
129163
|
+
auto replace_count = reader.ReadRequired<uint32_t>();
|
|
128734
129164
|
for (idx_t i = 0; i < replace_count; i++) {
|
|
128735
129165
|
auto name = source.Read<string>();
|
|
128736
129166
|
auto expr = ParsedExpression::Deserialize(source);
|
|
@@ -128787,23 +129217,28 @@ unique_ptr<ParsedExpression> SubqueryExpression::Copy() const {
|
|
|
128787
129217
|
return move(copy);
|
|
128788
129218
|
}
|
|
128789
129219
|
|
|
128790
|
-
void SubqueryExpression::Serialize(
|
|
128791
|
-
|
|
128792
|
-
|
|
129220
|
+
void SubqueryExpression::Serialize(FieldWriter &writer) const {
|
|
129221
|
+
auto &serializer = writer.GetSerializer();
|
|
129222
|
+
|
|
129223
|
+
writer.WriteField<SubqueryType>(subquery_type);
|
|
129224
|
+
// FIXME: this shouldn't use a serializer (probably)?
|
|
128793
129225
|
subquery->Serialize(serializer);
|
|
128794
|
-
|
|
128795
|
-
|
|
129226
|
+
writer.WriteOptional(child);
|
|
129227
|
+
writer.WriteField<ExpressionType>(comparison_type);
|
|
128796
129228
|
}
|
|
128797
129229
|
|
|
128798
|
-
unique_ptr<ParsedExpression> SubqueryExpression::Deserialize(ExpressionType type,
|
|
128799
|
-
|
|
129230
|
+
unique_ptr<ParsedExpression> SubqueryExpression::Deserialize(ExpressionType type, FieldReader &reader) {
|
|
129231
|
+
// FIXME: this shouldn't use a source
|
|
129232
|
+
auto &source = reader.GetSource();
|
|
129233
|
+
|
|
129234
|
+
auto subquery_type = reader.ReadRequired<SubqueryType>();
|
|
128800
129235
|
auto subquery = SelectStatement::Deserialize(source);
|
|
128801
129236
|
|
|
128802
129237
|
auto expression = make_unique<SubqueryExpression>();
|
|
128803
129238
|
expression->subquery_type = subquery_type;
|
|
128804
129239
|
expression->subquery = move(subquery);
|
|
128805
|
-
expression->child =
|
|
128806
|
-
expression->comparison_type =
|
|
129240
|
+
expression->child = reader.ReadOptional<ParsedExpression>(nullptr);
|
|
129241
|
+
expression->comparison_type = reader.ReadRequired<ExpressionType>();
|
|
128807
129242
|
return move(expression);
|
|
128808
129243
|
}
|
|
128809
129244
|
|
|
@@ -129034,46 +129469,49 @@ unique_ptr<ParsedExpression> WindowExpression::Copy() const {
|
|
|
129034
129469
|
return move(new_window);
|
|
129035
129470
|
}
|
|
129036
129471
|
|
|
129037
|
-
void WindowExpression::Serialize(
|
|
129038
|
-
|
|
129039
|
-
|
|
129040
|
-
|
|
129041
|
-
|
|
129042
|
-
|
|
129472
|
+
void WindowExpression::Serialize(FieldWriter &writer) const {
|
|
129473
|
+
auto &serializer = writer.GetSerializer();
|
|
129474
|
+
|
|
129475
|
+
writer.WriteString(function_name);
|
|
129476
|
+
writer.WriteString(schema);
|
|
129477
|
+
writer.WriteSerializableList(children);
|
|
129478
|
+
writer.WriteSerializableList(partitions);
|
|
129479
|
+
// FIXME: should not use serializer here (probably)?
|
|
129043
129480
|
D_ASSERT(orders.size() <= NumericLimits<uint32_t>::Maximum());
|
|
129044
|
-
|
|
129481
|
+
writer.WriteField<uint32_t>((uint32_t)orders.size());
|
|
129045
129482
|
for (auto &order : orders) {
|
|
129046
129483
|
order.Serialize(serializer);
|
|
129047
129484
|
}
|
|
129048
|
-
|
|
129049
|
-
|
|
129485
|
+
writer.WriteField<WindowBoundary>(start);
|
|
129486
|
+
writer.WriteField<WindowBoundary>(end);
|
|
129050
129487
|
|
|
129051
|
-
|
|
129052
|
-
|
|
129053
|
-
|
|
129054
|
-
|
|
129055
|
-
|
|
129488
|
+
writer.WriteOptional(start_expr);
|
|
129489
|
+
writer.WriteOptional(end_expr);
|
|
129490
|
+
writer.WriteOptional(offset_expr);
|
|
129491
|
+
writer.WriteOptional(default_expr);
|
|
129492
|
+
writer.WriteField<bool>(ignore_nulls);
|
|
129056
129493
|
}
|
|
129057
129494
|
|
|
129058
|
-
unique_ptr<ParsedExpression> WindowExpression::Deserialize(ExpressionType type,
|
|
129059
|
-
auto function_name =
|
|
129060
|
-
auto schema =
|
|
129495
|
+
unique_ptr<ParsedExpression> WindowExpression::Deserialize(ExpressionType type, FieldReader &reader) {
|
|
129496
|
+
auto function_name = reader.ReadRequired<string>();
|
|
129497
|
+
auto schema = reader.ReadRequired<string>();
|
|
129061
129498
|
auto expr = make_unique<WindowExpression>(type, schema, function_name);
|
|
129062
|
-
|
|
129063
|
-
|
|
129499
|
+
expr->children = reader.ReadRequiredSerializableList<ParsedExpression>();
|
|
129500
|
+
expr->partitions = reader.ReadRequiredSerializableList<ParsedExpression>();
|
|
129064
129501
|
|
|
129065
|
-
auto order_count =
|
|
129502
|
+
auto order_count = reader.ReadRequired<uint32_t>();
|
|
129503
|
+
auto &source = reader.GetSource();
|
|
129066
129504
|
for (idx_t i = 0; i < order_count; i++) {
|
|
129067
129505
|
expr->orders.push_back(OrderByNode::Deserialize((source)));
|
|
129068
129506
|
}
|
|
129069
|
-
expr->start =
|
|
129070
|
-
expr->end =
|
|
129507
|
+
expr->start = reader.ReadRequired<WindowBoundary>();
|
|
129508
|
+
expr->end = reader.ReadRequired<WindowBoundary>();
|
|
129071
129509
|
|
|
129072
|
-
expr->start_expr =
|
|
129073
|
-
expr->end_expr =
|
|
129074
|
-
expr->offset_expr =
|
|
129075
|
-
expr->default_expr =
|
|
129076
|
-
expr->ignore_nulls =
|
|
129510
|
+
expr->start_expr = reader.ReadOptional<ParsedExpression>(nullptr);
|
|
129511
|
+
expr->end_expr = reader.ReadOptional<ParsedExpression>(nullptr);
|
|
129512
|
+
expr->offset_expr = reader.ReadOptional<ParsedExpression>(nullptr);
|
|
129513
|
+
expr->default_expr = reader.ReadOptional<ParsedExpression>(nullptr);
|
|
129514
|
+
expr->ignore_nulls = reader.ReadRequired<bool>();
|
|
129077
129515
|
return move(expr);
|
|
129078
129516
|
}
|
|
129079
129517
|
|
|
@@ -129188,27 +129626,50 @@ string KeywordHelper::WriteOptionallyQuoted(const string &text) {
|
|
|
129188
129626
|
|
|
129189
129627
|
namespace duckdb {
|
|
129190
129628
|
|
|
129191
|
-
|
|
129192
|
-
|
|
129629
|
+
AlterInfo::AlterInfo(AlterType type, string schema_p, string name_p)
|
|
129630
|
+
: type(type), schema(move(schema_p)), name(move(name_p)) {
|
|
129631
|
+
}
|
|
129632
|
+
|
|
129633
|
+
AlterInfo::~AlterInfo() {
|
|
129634
|
+
}
|
|
129635
|
+
|
|
129636
|
+
void AlterInfo::Serialize(Serializer &serializer) const {
|
|
129637
|
+
FieldWriter writer(serializer);
|
|
129638
|
+
writer.WriteField<AlterType>(type);
|
|
129639
|
+
Serialize(writer);
|
|
129640
|
+
writer.Finalize();
|
|
129193
129641
|
}
|
|
129194
129642
|
|
|
129195
129643
|
unique_ptr<AlterInfo> AlterInfo::Deserialize(Deserializer &source) {
|
|
129196
|
-
|
|
129644
|
+
FieldReader reader(source);
|
|
129645
|
+
auto type = reader.ReadRequired<AlterType>();
|
|
129646
|
+
|
|
129647
|
+
unique_ptr<AlterInfo> result;
|
|
129197
129648
|
switch (type) {
|
|
129198
129649
|
case AlterType::ALTER_TABLE:
|
|
129199
|
-
|
|
129650
|
+
result = AlterTableInfo::Deserialize(reader);
|
|
129651
|
+
break;
|
|
129200
129652
|
case AlterType::ALTER_VIEW:
|
|
129201
|
-
|
|
129653
|
+
result = AlterViewInfo::Deserialize(reader);
|
|
129654
|
+
break;
|
|
129202
129655
|
default:
|
|
129203
129656
|
throw SerializationException("Unknown alter type for deserialization!");
|
|
129204
129657
|
}
|
|
129658
|
+
reader.Finalize();
|
|
129659
|
+
|
|
129660
|
+
return result;
|
|
129205
129661
|
}
|
|
129206
129662
|
|
|
129207
129663
|
//===--------------------------------------------------------------------===//
|
|
129208
129664
|
// ChangeOwnershipInfo
|
|
129209
129665
|
//===--------------------------------------------------------------------===//
|
|
129666
|
+
ChangeOwnershipInfo::ChangeOwnershipInfo(CatalogType entry_catalog_type, string entry_schema_p, string entry_name_p,
|
|
129667
|
+
string owner_schema_p, string owner_name_p)
|
|
129668
|
+
: AlterInfo(AlterType::CHANGE_OWNERSHIP, move(entry_schema_p), move(entry_name_p)),
|
|
129669
|
+
entry_catalog_type(entry_catalog_type), owner_schema(move(owner_schema_p)), owner_name(move(owner_name_p)) {
|
|
129670
|
+
}
|
|
129210
129671
|
|
|
129211
|
-
CatalogType ChangeOwnershipInfo::GetCatalogType() {
|
|
129672
|
+
CatalogType ChangeOwnershipInfo::GetCatalogType() const {
|
|
129212
129673
|
return entry_catalog_type;
|
|
129213
129674
|
}
|
|
129214
129675
|
|
|
@@ -129216,35 +129677,48 @@ unique_ptr<AlterInfo> ChangeOwnershipInfo::Copy() const {
|
|
|
129216
129677
|
return make_unique_base<AlterInfo, ChangeOwnershipInfo>(entry_catalog_type, schema, name, owner_schema, owner_name);
|
|
129217
129678
|
}
|
|
129218
129679
|
|
|
129680
|
+
void ChangeOwnershipInfo::Serialize(FieldWriter &writer) const {
|
|
129681
|
+
throw InternalException("ChangeOwnershipInfo cannot be serialized");
|
|
129682
|
+
}
|
|
129683
|
+
|
|
129219
129684
|
//===--------------------------------------------------------------------===//
|
|
129220
129685
|
// AlterTableInfo
|
|
129221
129686
|
//===--------------------------------------------------------------------===//
|
|
129687
|
+
AlterTableInfo::AlterTableInfo(AlterTableType type, string schema_p, string table_p)
|
|
129688
|
+
: AlterInfo(AlterType::ALTER_TABLE, move(move(schema_p)), move(table_p)), alter_table_type(type) {
|
|
129689
|
+
}
|
|
129690
|
+
AlterTableInfo::~AlterTableInfo() {
|
|
129691
|
+
}
|
|
129222
129692
|
|
|
129223
|
-
|
|
129224
|
-
|
|
129225
|
-
serializer.Write<AlterTableType>(alter_table_type);
|
|
129226
|
-
serializer.WriteString(schema);
|
|
129227
|
-
serializer.WriteString(name);
|
|
129693
|
+
CatalogType AlterTableInfo::GetCatalogType() const {
|
|
129694
|
+
return CatalogType::TABLE_ENTRY;
|
|
129228
129695
|
}
|
|
129229
129696
|
|
|
129230
|
-
|
|
129231
|
-
|
|
129232
|
-
|
|
129233
|
-
|
|
129697
|
+
void AlterTableInfo::Serialize(FieldWriter &writer) const {
|
|
129698
|
+
writer.WriteField<AlterTableType>(alter_table_type);
|
|
129699
|
+
writer.WriteString(schema);
|
|
129700
|
+
writer.WriteString(name);
|
|
129701
|
+
SerializeAlterTable(writer);
|
|
129702
|
+
}
|
|
129703
|
+
|
|
129704
|
+
unique_ptr<AlterInfo> AlterTableInfo::Deserialize(FieldReader &reader) {
|
|
129705
|
+
auto type = reader.ReadRequired<AlterTableType>();
|
|
129706
|
+
auto schema = reader.ReadRequired<string>();
|
|
129707
|
+
auto table = reader.ReadRequired<string>();
|
|
129234
129708
|
unique_ptr<AlterTableInfo> info;
|
|
129235
129709
|
switch (type) {
|
|
129236
129710
|
case AlterTableType::RENAME_COLUMN:
|
|
129237
|
-
return RenameColumnInfo::Deserialize(
|
|
129711
|
+
return RenameColumnInfo::Deserialize(reader, schema, table);
|
|
129238
129712
|
case AlterTableType::RENAME_TABLE:
|
|
129239
|
-
return RenameTableInfo::Deserialize(
|
|
129713
|
+
return RenameTableInfo::Deserialize(reader, schema, table);
|
|
129240
129714
|
case AlterTableType::ADD_COLUMN:
|
|
129241
|
-
return AddColumnInfo::Deserialize(
|
|
129715
|
+
return AddColumnInfo::Deserialize(reader, schema, table);
|
|
129242
129716
|
case AlterTableType::REMOVE_COLUMN:
|
|
129243
|
-
return RemoveColumnInfo::Deserialize(
|
|
129717
|
+
return RemoveColumnInfo::Deserialize(reader, schema, table);
|
|
129244
129718
|
case AlterTableType::ALTER_COLUMN_TYPE:
|
|
129245
|
-
return ChangeColumnTypeInfo::Deserialize(
|
|
129719
|
+
return ChangeColumnTypeInfo::Deserialize(reader, schema, table);
|
|
129246
129720
|
case AlterTableType::SET_DEFAULT:
|
|
129247
|
-
return SetDefaultInfo::Deserialize(
|
|
129721
|
+
return SetDefaultInfo::Deserialize(reader, schema, table);
|
|
129248
129722
|
default:
|
|
129249
129723
|
throw SerializationException("Unknown alter table type for deserialization!");
|
|
129250
129724
|
}
|
|
@@ -129253,94 +129727,123 @@ unique_ptr<AlterInfo> AlterTableInfo::Deserialize(Deserializer &source) {
|
|
|
129253
129727
|
//===--------------------------------------------------------------------===//
|
|
129254
129728
|
// RenameColumnInfo
|
|
129255
129729
|
//===--------------------------------------------------------------------===//
|
|
129730
|
+
RenameColumnInfo::RenameColumnInfo(string schema_p, string table_p, string old_name_p, string new_name_p)
|
|
129731
|
+
: AlterTableInfo(AlterTableType::RENAME_COLUMN, move(schema_p), move(table_p)), old_name(move(old_name_p)),
|
|
129732
|
+
new_name(move(new_name_p)) {
|
|
129733
|
+
}
|
|
129734
|
+
RenameColumnInfo::~RenameColumnInfo() {
|
|
129735
|
+
}
|
|
129736
|
+
|
|
129256
129737
|
unique_ptr<AlterInfo> RenameColumnInfo::Copy() const {
|
|
129257
129738
|
return make_unique_base<AlterInfo, RenameColumnInfo>(schema, name, old_name, new_name);
|
|
129258
129739
|
}
|
|
129259
129740
|
|
|
129260
|
-
void RenameColumnInfo::
|
|
129261
|
-
|
|
129262
|
-
|
|
129263
|
-
serializer.WriteString(new_name);
|
|
129741
|
+
void RenameColumnInfo::SerializeAlterTable(FieldWriter &writer) const {
|
|
129742
|
+
writer.WriteString(old_name);
|
|
129743
|
+
writer.WriteString(new_name);
|
|
129264
129744
|
}
|
|
129265
129745
|
|
|
129266
|
-
unique_ptr<AlterInfo> RenameColumnInfo::Deserialize(
|
|
129267
|
-
auto old_name =
|
|
129268
|
-
auto new_name =
|
|
129746
|
+
unique_ptr<AlterInfo> RenameColumnInfo::Deserialize(FieldReader &reader, string schema, string table) {
|
|
129747
|
+
auto old_name = reader.ReadRequired<string>();
|
|
129748
|
+
auto new_name = reader.ReadRequired<string>();
|
|
129269
129749
|
return make_unique<RenameColumnInfo>(move(schema), move(table), old_name, new_name);
|
|
129270
129750
|
}
|
|
129271
129751
|
|
|
129272
129752
|
//===--------------------------------------------------------------------===//
|
|
129273
129753
|
// RenameTableInfo
|
|
129274
129754
|
//===--------------------------------------------------------------------===//
|
|
129755
|
+
RenameTableInfo::RenameTableInfo(string schema_p, string table_p, string new_name_p)
|
|
129756
|
+
: AlterTableInfo(AlterTableType::RENAME_TABLE, move(schema_p), move(table_p)), new_table_name(move(new_name_p)) {
|
|
129757
|
+
}
|
|
129758
|
+
RenameTableInfo::~RenameTableInfo() {
|
|
129759
|
+
}
|
|
129760
|
+
|
|
129275
129761
|
unique_ptr<AlterInfo> RenameTableInfo::Copy() const {
|
|
129276
129762
|
return make_unique_base<AlterInfo, RenameTableInfo>(schema, name, new_table_name);
|
|
129277
129763
|
}
|
|
129278
129764
|
|
|
129279
|
-
void RenameTableInfo::
|
|
129280
|
-
|
|
129281
|
-
serializer.WriteString(new_table_name);
|
|
129765
|
+
void RenameTableInfo::SerializeAlterTable(FieldWriter &writer) const {
|
|
129766
|
+
writer.WriteString(new_table_name);
|
|
129282
129767
|
}
|
|
129283
129768
|
|
|
129284
|
-
unique_ptr<AlterInfo> RenameTableInfo::Deserialize(
|
|
129285
|
-
auto new_name =
|
|
129769
|
+
unique_ptr<AlterInfo> RenameTableInfo::Deserialize(FieldReader &reader, string schema, string table) {
|
|
129770
|
+
auto new_name = reader.ReadRequired<string>();
|
|
129286
129771
|
return make_unique<RenameTableInfo>(move(schema), move(table), new_name);
|
|
129287
129772
|
}
|
|
129288
129773
|
|
|
129289
129774
|
//===--------------------------------------------------------------------===//
|
|
129290
129775
|
// AddColumnInfo
|
|
129291
129776
|
//===--------------------------------------------------------------------===//
|
|
129777
|
+
AddColumnInfo::AddColumnInfo(string schema_p, string table_p, ColumnDefinition new_column)
|
|
129778
|
+
: AlterTableInfo(AlterTableType::ADD_COLUMN, move(schema_p), move(table_p)), new_column(move(new_column)) {
|
|
129779
|
+
}
|
|
129780
|
+
AddColumnInfo::~AddColumnInfo() {
|
|
129781
|
+
}
|
|
129782
|
+
|
|
129292
129783
|
unique_ptr<AlterInfo> AddColumnInfo::Copy() const {
|
|
129293
129784
|
return make_unique_base<AlterInfo, AddColumnInfo>(schema, name, new_column.Copy());
|
|
129294
129785
|
}
|
|
129295
129786
|
|
|
129296
|
-
void AddColumnInfo::
|
|
129297
|
-
|
|
129298
|
-
new_column.Serialize(serializer);
|
|
129787
|
+
void AddColumnInfo::SerializeAlterTable(FieldWriter &writer) const {
|
|
129788
|
+
writer.WriteSerializable(new_column);
|
|
129299
129789
|
}
|
|
129300
129790
|
|
|
129301
|
-
unique_ptr<AlterInfo> AddColumnInfo::Deserialize(
|
|
129302
|
-
auto new_column = ColumnDefinition
|
|
129791
|
+
unique_ptr<AlterInfo> AddColumnInfo::Deserialize(FieldReader &reader, string schema, string table) {
|
|
129792
|
+
auto new_column = reader.ReadRequiredSerializable<ColumnDefinition, ColumnDefinition>();
|
|
129303
129793
|
return make_unique<AddColumnInfo>(move(schema), move(table), move(new_column));
|
|
129304
129794
|
}
|
|
129305
129795
|
|
|
129306
129796
|
//===--------------------------------------------------------------------===//
|
|
129307
129797
|
// RemoveColumnInfo
|
|
129308
129798
|
//===--------------------------------------------------------------------===//
|
|
129799
|
+
RemoveColumnInfo::RemoveColumnInfo(string schema_p, string table_p, string removed_column, bool if_exists)
|
|
129800
|
+
: AlterTableInfo(AlterTableType::REMOVE_COLUMN, move(schema_p), move(table_p)),
|
|
129801
|
+
removed_column(move(removed_column)), if_exists(if_exists) {
|
|
129802
|
+
}
|
|
129803
|
+
RemoveColumnInfo::~RemoveColumnInfo() {
|
|
129804
|
+
}
|
|
129805
|
+
|
|
129309
129806
|
unique_ptr<AlterInfo> RemoveColumnInfo::Copy() const {
|
|
129310
129807
|
return make_unique_base<AlterInfo, RemoveColumnInfo>(schema, name, removed_column, if_exists);
|
|
129311
129808
|
}
|
|
129312
129809
|
|
|
129313
|
-
void RemoveColumnInfo::
|
|
129314
|
-
|
|
129315
|
-
|
|
129316
|
-
serializer.Write<bool>(if_exists);
|
|
129810
|
+
void RemoveColumnInfo::SerializeAlterTable(FieldWriter &writer) const {
|
|
129811
|
+
writer.WriteString(removed_column);
|
|
129812
|
+
writer.WriteField<bool>(if_exists);
|
|
129317
129813
|
}
|
|
129318
129814
|
|
|
129319
|
-
unique_ptr<AlterInfo> RemoveColumnInfo::Deserialize(
|
|
129320
|
-
auto new_name =
|
|
129321
|
-
auto if_exists =
|
|
129815
|
+
unique_ptr<AlterInfo> RemoveColumnInfo::Deserialize(FieldReader &reader, string schema, string table) {
|
|
129816
|
+
auto new_name = reader.ReadRequired<string>();
|
|
129817
|
+
auto if_exists = reader.ReadRequired<bool>();
|
|
129322
129818
|
return make_unique<RemoveColumnInfo>(move(schema), move(table), new_name, if_exists);
|
|
129323
129819
|
}
|
|
129324
129820
|
|
|
129325
129821
|
//===--------------------------------------------------------------------===//
|
|
129326
129822
|
// ChangeColumnTypeInfo
|
|
129327
129823
|
//===--------------------------------------------------------------------===//
|
|
129824
|
+
ChangeColumnTypeInfo::ChangeColumnTypeInfo(string schema_p, string table_p, string column_name, LogicalType target_type,
|
|
129825
|
+
unique_ptr<ParsedExpression> expression)
|
|
129826
|
+
: AlterTableInfo(AlterTableType::ALTER_COLUMN_TYPE, move(schema_p), move(table_p)), column_name(move(column_name)),
|
|
129827
|
+
target_type(move(target_type)), expression(move(expression)) {
|
|
129828
|
+
}
|
|
129829
|
+
ChangeColumnTypeInfo::~ChangeColumnTypeInfo() {
|
|
129830
|
+
}
|
|
129831
|
+
|
|
129328
129832
|
unique_ptr<AlterInfo> ChangeColumnTypeInfo::Copy() const {
|
|
129329
129833
|
return make_unique_base<AlterInfo, ChangeColumnTypeInfo>(schema, name, column_name, target_type,
|
|
129330
129834
|
expression->Copy());
|
|
129331
129835
|
}
|
|
129332
129836
|
|
|
129333
|
-
void ChangeColumnTypeInfo::
|
|
129334
|
-
|
|
129335
|
-
|
|
129336
|
-
|
|
129337
|
-
serializer.WriteOptional(expression);
|
|
129837
|
+
void ChangeColumnTypeInfo::SerializeAlterTable(FieldWriter &writer) const {
|
|
129838
|
+
writer.WriteString(column_name);
|
|
129839
|
+
writer.WriteSerializable(target_type);
|
|
129840
|
+
writer.WriteOptional(expression);
|
|
129338
129841
|
}
|
|
129339
129842
|
|
|
129340
|
-
unique_ptr<AlterInfo> ChangeColumnTypeInfo::Deserialize(
|
|
129341
|
-
auto column_name =
|
|
129342
|
-
auto target_type = LogicalType
|
|
129343
|
-
auto expression =
|
|
129843
|
+
unique_ptr<AlterInfo> ChangeColumnTypeInfo::Deserialize(FieldReader &reader, string schema, string table) {
|
|
129844
|
+
auto column_name = reader.ReadRequired<string>();
|
|
129845
|
+
auto target_type = reader.ReadRequiredSerializable<LogicalType, LogicalType>();
|
|
129846
|
+
auto expression = reader.ReadOptional<ParsedExpression>(nullptr);
|
|
129344
129847
|
return make_unique<ChangeColumnTypeInfo>(move(schema), move(table), move(column_name), move(target_type),
|
|
129345
129848
|
move(expression));
|
|
129346
129849
|
}
|
|
@@ -129348,41 +129851,58 @@ unique_ptr<AlterInfo> ChangeColumnTypeInfo::Deserialize(Deserializer &source, st
|
|
|
129348
129851
|
//===--------------------------------------------------------------------===//
|
|
129349
129852
|
// SetDefaultInfo
|
|
129350
129853
|
//===--------------------------------------------------------------------===//
|
|
129854
|
+
SetDefaultInfo::SetDefaultInfo(string schema_p, string table_p, string column_name_p,
|
|
129855
|
+
unique_ptr<ParsedExpression> new_default)
|
|
129856
|
+
: AlterTableInfo(AlterTableType::SET_DEFAULT, move(schema_p), move(table_p)), column_name(move(column_name_p)),
|
|
129857
|
+
expression(move(new_default)) {
|
|
129858
|
+
}
|
|
129859
|
+
SetDefaultInfo::~SetDefaultInfo() {
|
|
129860
|
+
}
|
|
129861
|
+
|
|
129351
129862
|
unique_ptr<AlterInfo> SetDefaultInfo::Copy() const {
|
|
129352
129863
|
return make_unique_base<AlterInfo, SetDefaultInfo>(schema, name, column_name,
|
|
129353
129864
|
expression ? expression->Copy() : nullptr);
|
|
129354
129865
|
}
|
|
129355
129866
|
|
|
129356
|
-
void SetDefaultInfo::
|
|
129357
|
-
|
|
129358
|
-
|
|
129359
|
-
serializer.WriteOptional(expression);
|
|
129867
|
+
void SetDefaultInfo::SerializeAlterTable(FieldWriter &writer) const {
|
|
129868
|
+
writer.WriteString(column_name);
|
|
129869
|
+
writer.WriteOptional(expression);
|
|
129360
129870
|
}
|
|
129361
129871
|
|
|
129362
|
-
unique_ptr<AlterInfo> SetDefaultInfo::Deserialize(
|
|
129363
|
-
auto column_name =
|
|
129364
|
-
auto new_default =
|
|
129872
|
+
unique_ptr<AlterInfo> SetDefaultInfo::Deserialize(FieldReader &reader, string schema, string table) {
|
|
129873
|
+
auto column_name = reader.ReadRequired<string>();
|
|
129874
|
+
auto new_default = reader.ReadOptional<ParsedExpression>(nullptr);
|
|
129365
129875
|
return make_unique<SetDefaultInfo>(move(schema), move(table), move(column_name), move(new_default));
|
|
129366
129876
|
}
|
|
129367
129877
|
|
|
129368
129878
|
//===--------------------------------------------------------------------===//
|
|
129369
129879
|
// Alter View
|
|
129370
129880
|
//===--------------------------------------------------------------------===//
|
|
129371
|
-
|
|
129372
|
-
|
|
129373
|
-
|
|
129374
|
-
|
|
129375
|
-
serializer.WriteString(name);
|
|
129881
|
+
AlterViewInfo::AlterViewInfo(AlterViewType type, string schema_p, string view_p)
|
|
129882
|
+
: AlterInfo(AlterType::ALTER_VIEW, move(schema_p), move(view_p)), alter_view_type(type) {
|
|
129883
|
+
}
|
|
129884
|
+
AlterViewInfo::~AlterViewInfo() {
|
|
129376
129885
|
}
|
|
129377
129886
|
|
|
129378
|
-
|
|
129379
|
-
|
|
129380
|
-
|
|
129381
|
-
|
|
129887
|
+
CatalogType AlterViewInfo::GetCatalogType() const {
|
|
129888
|
+
return CatalogType::VIEW_ENTRY;
|
|
129889
|
+
}
|
|
129890
|
+
|
|
129891
|
+
void AlterViewInfo::Serialize(FieldWriter &writer) const {
|
|
129892
|
+
writer.WriteField<AlterViewType>(alter_view_type);
|
|
129893
|
+
writer.WriteString(schema);
|
|
129894
|
+
writer.WriteString(name);
|
|
129895
|
+
SerializeAlterView(writer);
|
|
129896
|
+
}
|
|
129897
|
+
|
|
129898
|
+
unique_ptr<AlterInfo> AlterViewInfo::Deserialize(FieldReader &reader) {
|
|
129899
|
+
auto type = reader.ReadRequired<AlterViewType>();
|
|
129900
|
+
auto schema = reader.ReadRequired<string>();
|
|
129901
|
+
auto view = reader.ReadRequired<string>();
|
|
129382
129902
|
unique_ptr<AlterViewInfo> info;
|
|
129383
129903
|
switch (type) {
|
|
129384
129904
|
case AlterViewType::RENAME_VIEW:
|
|
129385
|
-
return RenameViewInfo::Deserialize(
|
|
129905
|
+
return RenameViewInfo::Deserialize(reader, schema, view);
|
|
129386
129906
|
default:
|
|
129387
129907
|
throw SerializationException("Unknown alter view type for deserialization!");
|
|
129388
129908
|
}
|
|
@@ -129391,17 +129911,22 @@ unique_ptr<AlterInfo> AlterViewInfo::Deserialize(Deserializer &source) {
|
|
|
129391
129911
|
//===--------------------------------------------------------------------===//
|
|
129392
129912
|
// RenameViewInfo
|
|
129393
129913
|
//===--------------------------------------------------------------------===//
|
|
129914
|
+
RenameViewInfo::RenameViewInfo(string schema_p, string view_p, string new_name_p)
|
|
129915
|
+
: AlterViewInfo(AlterViewType::RENAME_VIEW, move(schema_p), move(view_p)), new_view_name(move(new_name_p)) {
|
|
129916
|
+
}
|
|
129917
|
+
RenameViewInfo::~RenameViewInfo() {
|
|
129918
|
+
}
|
|
129919
|
+
|
|
129394
129920
|
unique_ptr<AlterInfo> RenameViewInfo::Copy() const {
|
|
129395
129921
|
return make_unique_base<AlterInfo, RenameViewInfo>(schema, name, new_view_name);
|
|
129396
129922
|
}
|
|
129397
129923
|
|
|
129398
|
-
void RenameViewInfo::
|
|
129399
|
-
|
|
129400
|
-
serializer.WriteString(new_view_name);
|
|
129924
|
+
void RenameViewInfo::SerializeAlterView(FieldWriter &writer) const {
|
|
129925
|
+
writer.WriteString(new_view_name);
|
|
129401
129926
|
}
|
|
129402
129927
|
|
|
129403
|
-
unique_ptr<AlterInfo> RenameViewInfo::Deserialize(
|
|
129404
|
-
auto new_name =
|
|
129928
|
+
unique_ptr<AlterInfo> RenameViewInfo::Deserialize(FieldReader &reader, string schema, string view) {
|
|
129929
|
+
auto new_name = reader.ReadRequired<string>();
|
|
129405
129930
|
return make_unique<RenameViewInfo>(move(schema), move(view), new_name);
|
|
129406
129931
|
}
|
|
129407
129932
|
} // namespace duckdb
|
|
@@ -129424,18 +129949,24 @@ string SampleMethodToString(SampleMethod method) {
|
|
|
129424
129949
|
}
|
|
129425
129950
|
|
|
129426
129951
|
void SampleOptions::Serialize(Serializer &serializer) {
|
|
129427
|
-
|
|
129428
|
-
|
|
129429
|
-
|
|
129430
|
-
|
|
129952
|
+
FieldWriter writer(serializer);
|
|
129953
|
+
writer.WriteSerializable(sample_size);
|
|
129954
|
+
writer.WriteField<bool>(is_percentage);
|
|
129955
|
+
writer.WriteField<SampleMethod>(method);
|
|
129956
|
+
writer.WriteField<int64_t>(seed);
|
|
129957
|
+
writer.Finalize();
|
|
129431
129958
|
}
|
|
129432
129959
|
|
|
129433
129960
|
unique_ptr<SampleOptions> SampleOptions::Deserialize(Deserializer &source) {
|
|
129434
129961
|
auto result = make_unique<SampleOptions>();
|
|
129435
|
-
|
|
129436
|
-
|
|
129437
|
-
result->
|
|
129438
|
-
result->
|
|
129962
|
+
|
|
129963
|
+
FieldReader reader(source);
|
|
129964
|
+
result->sample_size = reader.ReadRequiredSerializable<Value, Value>();
|
|
129965
|
+
result->is_percentage = reader.ReadRequired<bool>();
|
|
129966
|
+
result->method = reader.ReadRequired<SampleMethod>();
|
|
129967
|
+
result->seed = reader.ReadRequired<int64_t>();
|
|
129968
|
+
reader.Finalize();
|
|
129969
|
+
|
|
129439
129970
|
return result;
|
|
129440
129971
|
}
|
|
129441
129972
|
|
|
@@ -129562,73 +130093,78 @@ hash_t ParsedExpression::Hash() const {
|
|
|
129562
130093
|
return hash;
|
|
129563
130094
|
}
|
|
129564
130095
|
|
|
129565
|
-
void ParsedExpression::Serialize(Serializer &serializer) {
|
|
129566
|
-
serializer
|
|
129567
|
-
|
|
129568
|
-
|
|
130096
|
+
void ParsedExpression::Serialize(Serializer &serializer) const {
|
|
130097
|
+
FieldWriter writer(serializer);
|
|
130098
|
+
writer.WriteField<ExpressionClass>(GetExpressionClass());
|
|
130099
|
+
writer.WriteField<ExpressionType>(type);
|
|
130100
|
+
writer.WriteString(alias);
|
|
130101
|
+
Serialize(writer);
|
|
130102
|
+
writer.Finalize();
|
|
129569
130103
|
}
|
|
129570
130104
|
|
|
129571
130105
|
unique_ptr<ParsedExpression> ParsedExpression::Deserialize(Deserializer &source) {
|
|
129572
|
-
|
|
129573
|
-
auto
|
|
129574
|
-
auto
|
|
130106
|
+
FieldReader reader(source);
|
|
130107
|
+
auto expression_class = reader.ReadRequired<ExpressionClass>();
|
|
130108
|
+
auto type = reader.ReadRequired<ExpressionType>();
|
|
130109
|
+
auto alias = reader.ReadRequired<string>();
|
|
129575
130110
|
unique_ptr<ParsedExpression> result;
|
|
129576
130111
|
switch (expression_class) {
|
|
129577
130112
|
case ExpressionClass::BETWEEN:
|
|
129578
|
-
result = BetweenExpression::Deserialize(type,
|
|
130113
|
+
result = BetweenExpression::Deserialize(type, reader);
|
|
129579
130114
|
break;
|
|
129580
130115
|
case ExpressionClass::CASE:
|
|
129581
|
-
result = CaseExpression::Deserialize(type,
|
|
130116
|
+
result = CaseExpression::Deserialize(type, reader);
|
|
129582
130117
|
break;
|
|
129583
130118
|
case ExpressionClass::CAST:
|
|
129584
|
-
result = CastExpression::Deserialize(type,
|
|
130119
|
+
result = CastExpression::Deserialize(type, reader);
|
|
129585
130120
|
break;
|
|
129586
130121
|
case ExpressionClass::COLLATE:
|
|
129587
|
-
result = CollateExpression::Deserialize(type,
|
|
130122
|
+
result = CollateExpression::Deserialize(type, reader);
|
|
129588
130123
|
break;
|
|
129589
130124
|
case ExpressionClass::COLUMN_REF:
|
|
129590
|
-
result = ColumnRefExpression::Deserialize(type,
|
|
130125
|
+
result = ColumnRefExpression::Deserialize(type, reader);
|
|
129591
130126
|
break;
|
|
129592
130127
|
case ExpressionClass::COMPARISON:
|
|
129593
|
-
result = ComparisonExpression::Deserialize(type,
|
|
130128
|
+
result = ComparisonExpression::Deserialize(type, reader);
|
|
129594
130129
|
break;
|
|
129595
130130
|
case ExpressionClass::CONJUNCTION:
|
|
129596
|
-
result = ConjunctionExpression::Deserialize(type,
|
|
130131
|
+
result = ConjunctionExpression::Deserialize(type, reader);
|
|
129597
130132
|
break;
|
|
129598
130133
|
case ExpressionClass::CONSTANT:
|
|
129599
|
-
result = ConstantExpression::Deserialize(type,
|
|
130134
|
+
result = ConstantExpression::Deserialize(type, reader);
|
|
129600
130135
|
break;
|
|
129601
130136
|
case ExpressionClass::DEFAULT:
|
|
129602
|
-
result = DefaultExpression::Deserialize(type,
|
|
130137
|
+
result = DefaultExpression::Deserialize(type, reader);
|
|
129603
130138
|
break;
|
|
129604
130139
|
case ExpressionClass::FUNCTION:
|
|
129605
|
-
result = FunctionExpression::Deserialize(type,
|
|
130140
|
+
result = FunctionExpression::Deserialize(type, reader);
|
|
129606
130141
|
break;
|
|
129607
130142
|
case ExpressionClass::LAMBDA:
|
|
129608
|
-
result = LambdaExpression::Deserialize(type,
|
|
130143
|
+
result = LambdaExpression::Deserialize(type, reader);
|
|
129609
130144
|
break;
|
|
129610
130145
|
case ExpressionClass::OPERATOR:
|
|
129611
|
-
result = OperatorExpression::Deserialize(type,
|
|
130146
|
+
result = OperatorExpression::Deserialize(type, reader);
|
|
129612
130147
|
break;
|
|
129613
130148
|
case ExpressionClass::PARAMETER:
|
|
129614
|
-
result = ParameterExpression::Deserialize(type,
|
|
130149
|
+
result = ParameterExpression::Deserialize(type, reader);
|
|
129615
130150
|
break;
|
|
129616
130151
|
case ExpressionClass::POSITIONAL_REFERENCE:
|
|
129617
|
-
result = PositionalReferenceExpression::Deserialize(type,
|
|
130152
|
+
result = PositionalReferenceExpression::Deserialize(type, reader);
|
|
129618
130153
|
break;
|
|
129619
130154
|
case ExpressionClass::STAR:
|
|
129620
|
-
result = StarExpression::Deserialize(type,
|
|
130155
|
+
result = StarExpression::Deserialize(type, reader);
|
|
129621
130156
|
break;
|
|
129622
130157
|
case ExpressionClass::SUBQUERY:
|
|
129623
|
-
result = SubqueryExpression::Deserialize(type,
|
|
130158
|
+
result = SubqueryExpression::Deserialize(type, reader);
|
|
129624
130159
|
break;
|
|
129625
130160
|
case ExpressionClass::WINDOW:
|
|
129626
|
-
result = WindowExpression::Deserialize(type,
|
|
130161
|
+
result = WindowExpression::Deserialize(type, reader);
|
|
129627
130162
|
break;
|
|
129628
130163
|
default:
|
|
129629
130164
|
throw SerializationException("Unsupported type for expression deserialization!");
|
|
129630
130165
|
}
|
|
129631
130166
|
result->alias = alias;
|
|
130167
|
+
reader.Finalize();
|
|
129632
130168
|
return result;
|
|
129633
130169
|
}
|
|
129634
130170
|
|
|
@@ -129674,12 +130210,12 @@ public:
|
|
|
129674
130210
|
public:
|
|
129675
130211
|
bool Equals(const QueryNode *other) const override;
|
|
129676
130212
|
//! Create a copy of this SelectNode
|
|
129677
|
-
unique_ptr<QueryNode> Copy() override;
|
|
130213
|
+
unique_ptr<QueryNode> Copy() const override;
|
|
129678
130214
|
|
|
129679
|
-
//! Serializes a
|
|
129680
|
-
void Serialize(
|
|
129681
|
-
//! Deserializes a blob back into a
|
|
129682
|
-
static unique_ptr<QueryNode> Deserialize(
|
|
130215
|
+
//! Serializes a QueryNode to a stand-alone binary blob
|
|
130216
|
+
void Serialize(FieldWriter &writer) const override;
|
|
130217
|
+
//! Deserializes a blob back into a QueryNode
|
|
130218
|
+
static unique_ptr<QueryNode> Deserialize(FieldReader &reader);
|
|
129683
130219
|
};
|
|
129684
130220
|
|
|
129685
130221
|
} // namespace duckdb
|
|
@@ -135637,6 +136173,7 @@ string QueryErrorContext::FormatErrorRecursive(const string &msg, vector<Excepti
|
|
|
135637
136173
|
} // namespace duckdb
|
|
135638
136174
|
|
|
135639
136175
|
|
|
136176
|
+
|
|
135640
136177
|
namespace duckdb {
|
|
135641
136178
|
|
|
135642
136179
|
bool RecursiveCTENode::Equals(const QueryNode *other_p) const {
|
|
@@ -135660,7 +136197,7 @@ bool RecursiveCTENode::Equals(const QueryNode *other_p) const {
|
|
|
135660
136197
|
return true;
|
|
135661
136198
|
}
|
|
135662
136199
|
|
|
135663
|
-
unique_ptr<QueryNode> RecursiveCTENode::Copy() {
|
|
136200
|
+
unique_ptr<QueryNode> RecursiveCTENode::Copy() const {
|
|
135664
136201
|
auto result = make_unique<RecursiveCTENode>();
|
|
135665
136202
|
result->ctename = ctename;
|
|
135666
136203
|
result->union_all = union_all;
|
|
@@ -135671,22 +136208,21 @@ unique_ptr<QueryNode> RecursiveCTENode::Copy() {
|
|
|
135671
136208
|
return move(result);
|
|
135672
136209
|
}
|
|
135673
136210
|
|
|
135674
|
-
void RecursiveCTENode::Serialize(
|
|
135675
|
-
|
|
135676
|
-
|
|
135677
|
-
|
|
135678
|
-
|
|
135679
|
-
|
|
135680
|
-
serializer.WriteStringVector(aliases);
|
|
136211
|
+
void RecursiveCTENode::Serialize(FieldWriter &writer) const {
|
|
136212
|
+
writer.WriteString(ctename);
|
|
136213
|
+
writer.WriteField<bool>(union_all);
|
|
136214
|
+
writer.WriteSerializable(*left);
|
|
136215
|
+
writer.WriteSerializable(*right);
|
|
136216
|
+
writer.WriteList<string>(aliases);
|
|
135681
136217
|
}
|
|
135682
136218
|
|
|
135683
|
-
unique_ptr<QueryNode> RecursiveCTENode::Deserialize(
|
|
136219
|
+
unique_ptr<QueryNode> RecursiveCTENode::Deserialize(FieldReader &reader) {
|
|
135684
136220
|
auto result = make_unique<RecursiveCTENode>();
|
|
135685
|
-
result->ctename =
|
|
135686
|
-
result->union_all =
|
|
135687
|
-
result->left = QueryNode
|
|
135688
|
-
result->right = QueryNode
|
|
135689
|
-
|
|
136221
|
+
result->ctename = reader.ReadRequired<string>();
|
|
136222
|
+
result->union_all = reader.ReadRequired<bool>();
|
|
136223
|
+
result->left = reader.ReadRequiredSerializable<QueryNode>();
|
|
136224
|
+
result->right = reader.ReadRequiredSerializable<QueryNode>();
|
|
136225
|
+
result->aliases = reader.ReadRequiredList<string>();
|
|
135690
136226
|
return move(result);
|
|
135691
136227
|
}
|
|
135692
136228
|
|
|
@@ -135694,6 +136230,7 @@ unique_ptr<QueryNode> RecursiveCTENode::Deserialize(Deserializer &source) {
|
|
|
135694
136230
|
|
|
135695
136231
|
|
|
135696
136232
|
|
|
136233
|
+
|
|
135697
136234
|
namespace duckdb {
|
|
135698
136235
|
|
|
135699
136236
|
SelectNode::SelectNode()
|
|
@@ -135749,7 +136286,7 @@ bool SelectNode::Equals(const QueryNode *other_p) const {
|
|
|
135749
136286
|
return true;
|
|
135750
136287
|
}
|
|
135751
136288
|
|
|
135752
|
-
unique_ptr<QueryNode> SelectNode::Copy() {
|
|
136289
|
+
unique_ptr<QueryNode> SelectNode::Copy() const {
|
|
135753
136290
|
auto result = make_unique<SelectNode>();
|
|
135754
136291
|
for (auto &child : select_list) {
|
|
135755
136292
|
result->select_list.push_back(child->Copy());
|
|
@@ -135769,42 +136306,34 @@ unique_ptr<QueryNode> SelectNode::Copy() {
|
|
|
135769
136306
|
return move(result);
|
|
135770
136307
|
}
|
|
135771
136308
|
|
|
135772
|
-
void SelectNode::Serialize(
|
|
135773
|
-
|
|
135774
|
-
|
|
135775
|
-
|
|
135776
|
-
|
|
135777
|
-
|
|
135778
|
-
|
|
135779
|
-
serializer.WriteOptional(where_clause);
|
|
135780
|
-
// group by
|
|
135781
|
-
serializer.WriteList(groups.group_expressions);
|
|
135782
|
-
serializer.Write<idx_t>(groups.grouping_sets.size());
|
|
136309
|
+
void SelectNode::Serialize(FieldWriter &writer) const {
|
|
136310
|
+
writer.WriteSerializableList(select_list);
|
|
136311
|
+
writer.WriteOptional(from_table);
|
|
136312
|
+
writer.WriteOptional(where_clause);
|
|
136313
|
+
writer.WriteSerializableList(groups.group_expressions);
|
|
136314
|
+
writer.WriteField<uint32_t>(groups.grouping_sets.size());
|
|
136315
|
+
auto &serializer = writer.GetSerializer();
|
|
135783
136316
|
for (auto &grouping_set : groups.grouping_sets) {
|
|
135784
136317
|
serializer.Write<idx_t>(grouping_set.size());
|
|
135785
136318
|
for (auto &idx : grouping_set) {
|
|
135786
136319
|
serializer.Write<idx_t>(idx);
|
|
135787
136320
|
}
|
|
135788
136321
|
}
|
|
135789
|
-
|
|
135790
|
-
|
|
135791
|
-
|
|
135792
|
-
|
|
135793
|
-
// qualify
|
|
135794
|
-
serializer.WriteOptional(qualify);
|
|
136322
|
+
writer.WriteField<AggregateHandling>(aggregate_handling);
|
|
136323
|
+
writer.WriteOptional(having);
|
|
136324
|
+
writer.WriteOptional(sample);
|
|
136325
|
+
writer.WriteOptional(qualify);
|
|
135795
136326
|
}
|
|
135796
136327
|
|
|
135797
|
-
unique_ptr<QueryNode> SelectNode::Deserialize(
|
|
136328
|
+
unique_ptr<QueryNode> SelectNode::Deserialize(FieldReader &reader) {
|
|
135798
136329
|
auto result = make_unique<SelectNode>();
|
|
135799
|
-
|
|
135800
|
-
|
|
135801
|
-
|
|
135802
|
-
result->
|
|
135803
|
-
|
|
135804
|
-
|
|
135805
|
-
|
|
135806
|
-
source.ReadList<ParsedExpression>(result->groups.group_expressions);
|
|
135807
|
-
auto grouping_set_count = source.Read<idx_t>();
|
|
136330
|
+
result->select_list = reader.ReadRequiredSerializableList<ParsedExpression>();
|
|
136331
|
+
result->from_table = reader.ReadOptional<TableRef>(nullptr);
|
|
136332
|
+
result->where_clause = reader.ReadOptional<ParsedExpression>(nullptr);
|
|
136333
|
+
result->groups.group_expressions = reader.ReadRequiredSerializableList<ParsedExpression>();
|
|
136334
|
+
|
|
136335
|
+
auto grouping_set_count = reader.ReadRequired<uint32_t>();
|
|
136336
|
+
auto &source = reader.GetSource();
|
|
135808
136337
|
for (idx_t set_idx = 0; set_idx < grouping_set_count; set_idx++) {
|
|
135809
136338
|
auto set_entries = source.Read<idx_t>();
|
|
135810
136339
|
GroupingSet grouping_set;
|
|
@@ -135813,19 +136342,17 @@ unique_ptr<QueryNode> SelectNode::Deserialize(Deserializer &source) {
|
|
|
135813
136342
|
}
|
|
135814
136343
|
result->groups.grouping_sets.push_back(grouping_set);
|
|
135815
136344
|
}
|
|
135816
|
-
result->aggregate_handling =
|
|
135817
|
-
|
|
135818
|
-
|
|
135819
|
-
result->
|
|
135820
|
-
result->sample = source.ReadOptional<SampleOptions>();
|
|
135821
|
-
// qualify
|
|
135822
|
-
result->qualify = source.ReadOptional<ParsedExpression>();
|
|
136345
|
+
result->aggregate_handling = reader.ReadRequired<AggregateHandling>();
|
|
136346
|
+
result->having = reader.ReadOptional<ParsedExpression>(nullptr);
|
|
136347
|
+
result->sample = reader.ReadOptional<SampleOptions>(nullptr);
|
|
136348
|
+
result->qualify = reader.ReadOptional<ParsedExpression>(nullptr);
|
|
135823
136349
|
return move(result);
|
|
135824
136350
|
}
|
|
135825
136351
|
|
|
135826
136352
|
} // namespace duckdb
|
|
135827
136353
|
|
|
135828
136354
|
|
|
136355
|
+
|
|
135829
136356
|
namespace duckdb {
|
|
135830
136357
|
|
|
135831
136358
|
bool SetOperationNode::Equals(const QueryNode *other_p) const {
|
|
@@ -135848,7 +136375,7 @@ bool SetOperationNode::Equals(const QueryNode *other_p) const {
|
|
|
135848
136375
|
return true;
|
|
135849
136376
|
}
|
|
135850
136377
|
|
|
135851
|
-
unique_ptr<QueryNode> SetOperationNode::Copy() {
|
|
136378
|
+
unique_ptr<QueryNode> SetOperationNode::Copy() const {
|
|
135852
136379
|
auto result = make_unique<SetOperationNode>();
|
|
135853
136380
|
result->setop_type = setop_type;
|
|
135854
136381
|
result->left = left->Copy();
|
|
@@ -135857,18 +136384,17 @@ unique_ptr<QueryNode> SetOperationNode::Copy() {
|
|
|
135857
136384
|
return move(result);
|
|
135858
136385
|
}
|
|
135859
136386
|
|
|
135860
|
-
void SetOperationNode::Serialize(
|
|
135861
|
-
|
|
135862
|
-
|
|
135863
|
-
|
|
135864
|
-
right->Serialize(serializer);
|
|
136387
|
+
void SetOperationNode::Serialize(FieldWriter &writer) const {
|
|
136388
|
+
writer.WriteField<SetOperationType>(setop_type);
|
|
136389
|
+
writer.WriteSerializable(*left);
|
|
136390
|
+
writer.WriteSerializable(*right);
|
|
135865
136391
|
}
|
|
135866
136392
|
|
|
135867
|
-
unique_ptr<QueryNode> SetOperationNode::Deserialize(
|
|
136393
|
+
unique_ptr<QueryNode> SetOperationNode::Deserialize(FieldReader &reader) {
|
|
135868
136394
|
auto result = make_unique<SetOperationNode>();
|
|
135869
|
-
result->setop_type =
|
|
135870
|
-
result->left = QueryNode
|
|
135871
|
-
result->right = QueryNode
|
|
136395
|
+
result->setop_type = reader.ReadRequired<SetOperationType>();
|
|
136396
|
+
result->left = reader.ReadRequiredSerializable<QueryNode>();
|
|
136397
|
+
result->right = reader.ReadRequiredSerializable<QueryNode>();
|
|
135872
136398
|
return move(result);
|
|
135873
136399
|
}
|
|
135874
136400
|
|
|
@@ -135880,6 +136406,7 @@ unique_ptr<QueryNode> SetOperationNode::Deserialize(Deserializer &source) {
|
|
|
135880
136406
|
|
|
135881
136407
|
|
|
135882
136408
|
|
|
136409
|
+
|
|
135883
136410
|
namespace duckdb {
|
|
135884
136411
|
|
|
135885
136412
|
bool QueryNode::Equals(const QueryNode *other) const {
|
|
@@ -135933,32 +136460,30 @@ void QueryNode::CopyProperties(QueryNode &other) const {
|
|
|
135933
136460
|
}
|
|
135934
136461
|
}
|
|
135935
136462
|
|
|
135936
|
-
void QueryNode::Serialize(Serializer &
|
|
135937
|
-
|
|
135938
|
-
|
|
135939
|
-
|
|
135940
|
-
modifiers[i]->Serialize(serializer);
|
|
135941
|
-
}
|
|
136463
|
+
void QueryNode::Serialize(Serializer &main_serializer) const {
|
|
136464
|
+
FieldWriter writer(main_serializer);
|
|
136465
|
+
writer.WriteField<QueryNodeType>(type);
|
|
136466
|
+
writer.WriteSerializableList(modifiers);
|
|
135942
136467
|
// cte_map
|
|
135943
|
-
|
|
135944
|
-
serializer.
|
|
136468
|
+
writer.WriteField<uint32_t>((uint32_t)cte_map.size());
|
|
136469
|
+
auto &serializer = writer.GetSerializer();
|
|
135945
136470
|
for (auto &cte : cte_map) {
|
|
135946
136471
|
serializer.WriteString(cte.first);
|
|
135947
136472
|
serializer.WriteStringVector(cte.second->aliases);
|
|
135948
136473
|
cte.second->query->Serialize(serializer);
|
|
135949
136474
|
}
|
|
136475
|
+
Serialize(writer);
|
|
136476
|
+
writer.Finalize();
|
|
135950
136477
|
}
|
|
135951
136478
|
|
|
135952
|
-
unique_ptr<QueryNode> QueryNode::Deserialize(Deserializer &
|
|
135953
|
-
|
|
135954
|
-
|
|
135955
|
-
auto
|
|
135956
|
-
|
|
135957
|
-
for (idx_t i = 0; i < modifier_count; i++) {
|
|
135958
|
-
modifiers.push_back(ResultModifier::Deserialize(source));
|
|
135959
|
-
}
|
|
136479
|
+
unique_ptr<QueryNode> QueryNode::Deserialize(Deserializer &main_source) {
|
|
136480
|
+
FieldReader reader(main_source);
|
|
136481
|
+
|
|
136482
|
+
auto type = reader.ReadRequired<QueryNodeType>();
|
|
136483
|
+
auto modifiers = reader.ReadRequiredSerializableList<ResultModifier>();
|
|
135960
136484
|
// cte_map
|
|
135961
|
-
auto cte_count =
|
|
136485
|
+
auto cte_count = reader.ReadRequired<uint32_t>();
|
|
136486
|
+
auto &source = reader.GetSource();
|
|
135962
136487
|
unordered_map<string, unique_ptr<CommonTableExpressionInfo>> cte_map;
|
|
135963
136488
|
for (idx_t i = 0; i < cte_count; i++) {
|
|
135964
136489
|
auto name = source.Read<string>();
|
|
@@ -135967,15 +136492,17 @@ unique_ptr<QueryNode> QueryNode::Deserialize(Deserializer &source) {
|
|
|
135967
136492
|
info->query = SelectStatement::Deserialize(source);
|
|
135968
136493
|
cte_map[name] = move(info);
|
|
135969
136494
|
}
|
|
136495
|
+
|
|
136496
|
+
unique_ptr<QueryNode> result;
|
|
135970
136497
|
switch (type) {
|
|
135971
136498
|
case QueryNodeType::SELECT_NODE:
|
|
135972
|
-
result = SelectNode::Deserialize(
|
|
136499
|
+
result = SelectNode::Deserialize(reader);
|
|
135973
136500
|
break;
|
|
135974
136501
|
case QueryNodeType::SET_OPERATION_NODE:
|
|
135975
|
-
result = SetOperationNode::Deserialize(
|
|
136502
|
+
result = SetOperationNode::Deserialize(reader);
|
|
135976
136503
|
break;
|
|
135977
136504
|
case QueryNodeType::RECURSIVE_CTE_NODE:
|
|
135978
|
-
result = RecursiveCTENode::Deserialize(
|
|
136505
|
+
result = RecursiveCTENode::Deserialize(reader);
|
|
135979
136506
|
break;
|
|
135980
136507
|
default:
|
|
135981
136508
|
throw SerializationException("Could not deserialize Query Node: unknown type!");
|
|
@@ -135999,24 +136526,35 @@ bool ResultModifier::Equals(const ResultModifier *other) const {
|
|
|
135999
136526
|
return type == other->type;
|
|
136000
136527
|
}
|
|
136001
136528
|
|
|
136002
|
-
void ResultModifier::Serialize(Serializer &serializer) {
|
|
136003
|
-
serializer
|
|
136529
|
+
void ResultModifier::Serialize(Serializer &serializer) const {
|
|
136530
|
+
FieldWriter writer(serializer);
|
|
136531
|
+
writer.WriteField<ResultModifierType>(type);
|
|
136532
|
+
Serialize(writer);
|
|
136533
|
+
writer.Finalize();
|
|
136004
136534
|
}
|
|
136005
136535
|
|
|
136006
136536
|
unique_ptr<ResultModifier> ResultModifier::Deserialize(Deserializer &source) {
|
|
136007
|
-
|
|
136537
|
+
FieldReader reader(source);
|
|
136538
|
+
auto type = reader.ReadRequired<ResultModifierType>();
|
|
136539
|
+
|
|
136540
|
+
unique_ptr<ResultModifier> result;
|
|
136008
136541
|
switch (type) {
|
|
136009
136542
|
case ResultModifierType::LIMIT_MODIFIER:
|
|
136010
|
-
|
|
136543
|
+
result = LimitModifier::Deserialize(reader);
|
|
136544
|
+
break;
|
|
136011
136545
|
case ResultModifierType::ORDER_MODIFIER:
|
|
136012
|
-
|
|
136546
|
+
result = OrderModifier::Deserialize(reader);
|
|
136547
|
+
break;
|
|
136013
136548
|
case ResultModifierType::DISTINCT_MODIFIER:
|
|
136014
|
-
|
|
136549
|
+
result = DistinctModifier::Deserialize(reader);
|
|
136550
|
+
break;
|
|
136015
136551
|
case ResultModifierType::LIMIT_PERCENT_MODIFIER:
|
|
136016
|
-
|
|
136552
|
+
result = LimitPercentModifier::Deserialize(reader);
|
|
136553
|
+
break;
|
|
136017
136554
|
default:
|
|
136018
136555
|
throw InternalException("Unrecognized ResultModifierType for Deserialization");
|
|
136019
136556
|
}
|
|
136557
|
+
return result;
|
|
136020
136558
|
}
|
|
136021
136559
|
|
|
136022
136560
|
bool LimitModifier::Equals(const ResultModifier *other_p) const {
|
|
@@ -136033,7 +136571,7 @@ bool LimitModifier::Equals(const ResultModifier *other_p) const {
|
|
|
136033
136571
|
return true;
|
|
136034
136572
|
}
|
|
136035
136573
|
|
|
136036
|
-
unique_ptr<ResultModifier> LimitModifier::Copy() {
|
|
136574
|
+
unique_ptr<ResultModifier> LimitModifier::Copy() const {
|
|
136037
136575
|
auto copy = make_unique<LimitModifier>();
|
|
136038
136576
|
if (limit) {
|
|
136039
136577
|
copy->limit = limit->Copy();
|
|
@@ -136044,16 +136582,15 @@ unique_ptr<ResultModifier> LimitModifier::Copy() {
|
|
|
136044
136582
|
return move(copy);
|
|
136045
136583
|
}
|
|
136046
136584
|
|
|
136047
|
-
void LimitModifier::Serialize(
|
|
136048
|
-
|
|
136049
|
-
|
|
136050
|
-
serializer.WriteOptional(offset);
|
|
136585
|
+
void LimitModifier::Serialize(FieldWriter &writer) const {
|
|
136586
|
+
writer.WriteOptional(limit);
|
|
136587
|
+
writer.WriteOptional(offset);
|
|
136051
136588
|
}
|
|
136052
136589
|
|
|
136053
|
-
unique_ptr<ResultModifier> LimitModifier::Deserialize(
|
|
136590
|
+
unique_ptr<ResultModifier> LimitModifier::Deserialize(FieldReader &reader) {
|
|
136054
136591
|
auto mod = make_unique<LimitModifier>();
|
|
136055
|
-
mod->limit =
|
|
136056
|
-
mod->offset =
|
|
136592
|
+
mod->limit = reader.ReadOptional<ParsedExpression>(nullptr);
|
|
136593
|
+
mod->offset = reader.ReadOptional<ParsedExpression>(nullptr);
|
|
136057
136594
|
return move(mod);
|
|
136058
136595
|
}
|
|
136059
136596
|
|
|
@@ -136068,7 +136605,7 @@ bool DistinctModifier::Equals(const ResultModifier *other_p) const {
|
|
|
136068
136605
|
return true;
|
|
136069
136606
|
}
|
|
136070
136607
|
|
|
136071
|
-
unique_ptr<ResultModifier> DistinctModifier::Copy() {
|
|
136608
|
+
unique_ptr<ResultModifier> DistinctModifier::Copy() const {
|
|
136072
136609
|
auto copy = make_unique<DistinctModifier>();
|
|
136073
136610
|
for (auto &expr : distinct_on_targets) {
|
|
136074
136611
|
copy->distinct_on_targets.push_back(expr->Copy());
|
|
@@ -136076,14 +136613,13 @@ unique_ptr<ResultModifier> DistinctModifier::Copy() {
|
|
|
136076
136613
|
return move(copy);
|
|
136077
136614
|
}
|
|
136078
136615
|
|
|
136079
|
-
void DistinctModifier::Serialize(
|
|
136080
|
-
|
|
136081
|
-
serializer.WriteList(distinct_on_targets);
|
|
136616
|
+
void DistinctModifier::Serialize(FieldWriter &writer) const {
|
|
136617
|
+
writer.WriteSerializableList(distinct_on_targets);
|
|
136082
136618
|
}
|
|
136083
136619
|
|
|
136084
|
-
unique_ptr<ResultModifier> DistinctModifier::Deserialize(
|
|
136620
|
+
unique_ptr<ResultModifier> DistinctModifier::Deserialize(FieldReader &reader) {
|
|
136085
136621
|
auto mod = make_unique<DistinctModifier>();
|
|
136086
|
-
|
|
136622
|
+
mod->distinct_on_targets = reader.ReadRequiredSerializableList<ParsedExpression>();
|
|
136087
136623
|
return move(mod);
|
|
136088
136624
|
}
|
|
136089
136625
|
|
|
@@ -136106,7 +136642,7 @@ bool OrderModifier::Equals(const ResultModifier *other_p) const {
|
|
|
136106
136642
|
return true;
|
|
136107
136643
|
}
|
|
136108
136644
|
|
|
136109
|
-
unique_ptr<ResultModifier> OrderModifier::Copy() {
|
|
136645
|
+
unique_ptr<ResultModifier> OrderModifier::Copy() const {
|
|
136110
136646
|
auto copy = make_unique<OrderModifier>();
|
|
136111
136647
|
for (auto &order : orders) {
|
|
136112
136648
|
copy->orders.emplace_back(order.type, order.null_order, order.expression->Copy());
|
|
@@ -136140,33 +136676,29 @@ string OrderByNode::ToString() const {
|
|
|
136140
136676
|
return str;
|
|
136141
136677
|
}
|
|
136142
136678
|
|
|
136143
|
-
void OrderByNode::Serialize(Serializer &serializer) {
|
|
136144
|
-
serializer
|
|
136145
|
-
|
|
136146
|
-
|
|
136679
|
+
void OrderByNode::Serialize(Serializer &serializer) const {
|
|
136680
|
+
FieldWriter writer(serializer);
|
|
136681
|
+
writer.WriteField<OrderType>(type);
|
|
136682
|
+
writer.WriteField<OrderByNullType>(null_order);
|
|
136683
|
+
writer.WriteSerializable(*expression);
|
|
136684
|
+
writer.Finalize();
|
|
136147
136685
|
}
|
|
136148
136686
|
|
|
136149
136687
|
OrderByNode OrderByNode::Deserialize(Deserializer &source) {
|
|
136150
|
-
|
|
136151
|
-
auto
|
|
136152
|
-
auto
|
|
136688
|
+
FieldReader reader(source);
|
|
136689
|
+
auto type = reader.ReadRequired<OrderType>();
|
|
136690
|
+
auto null_order = reader.ReadRequired<OrderByNullType>();
|
|
136691
|
+
auto expression = reader.ReadRequiredSerializable<ParsedExpression>();
|
|
136153
136692
|
return OrderByNode(type, null_order, move(expression));
|
|
136154
136693
|
}
|
|
136155
136694
|
|
|
136156
|
-
void OrderModifier::Serialize(
|
|
136157
|
-
|
|
136158
|
-
serializer.Write<int64_t>(orders.size());
|
|
136159
|
-
for (auto &order : orders) {
|
|
136160
|
-
order.Serialize(serializer);
|
|
136161
|
-
}
|
|
136695
|
+
void OrderModifier::Serialize(FieldWriter &writer) const {
|
|
136696
|
+
writer.WriteRegularSerializableList(orders);
|
|
136162
136697
|
}
|
|
136163
136698
|
|
|
136164
|
-
unique_ptr<ResultModifier> OrderModifier::Deserialize(
|
|
136699
|
+
unique_ptr<ResultModifier> OrderModifier::Deserialize(FieldReader &reader) {
|
|
136165
136700
|
auto mod = make_unique<OrderModifier>();
|
|
136166
|
-
|
|
136167
|
-
for (int64_t i = 0; i < order_count; i++) {
|
|
136168
|
-
mod->orders.push_back(OrderByNode::Deserialize((source)));
|
|
136169
|
-
}
|
|
136701
|
+
mod->orders = reader.ReadRequiredSerializableList<OrderByNode, OrderByNode>();
|
|
136170
136702
|
return move(mod);
|
|
136171
136703
|
}
|
|
136172
136704
|
|
|
@@ -136184,7 +136716,7 @@ bool LimitPercentModifier::Equals(const ResultModifier *other_p) const {
|
|
|
136184
136716
|
return true;
|
|
136185
136717
|
}
|
|
136186
136718
|
|
|
136187
|
-
unique_ptr<ResultModifier> LimitPercentModifier::Copy() {
|
|
136719
|
+
unique_ptr<ResultModifier> LimitPercentModifier::Copy() const {
|
|
136188
136720
|
auto copy = make_unique<LimitPercentModifier>();
|
|
136189
136721
|
if (limit) {
|
|
136190
136722
|
copy->limit = limit->Copy();
|
|
@@ -136195,16 +136727,15 @@ unique_ptr<ResultModifier> LimitPercentModifier::Copy() {
|
|
|
136195
136727
|
return move(copy);
|
|
136196
136728
|
}
|
|
136197
136729
|
|
|
136198
|
-
void LimitPercentModifier::Serialize(
|
|
136199
|
-
|
|
136200
|
-
|
|
136201
|
-
serializer.WriteOptional(offset);
|
|
136730
|
+
void LimitPercentModifier::Serialize(FieldWriter &writer) const {
|
|
136731
|
+
writer.WriteOptional(limit);
|
|
136732
|
+
writer.WriteOptional(offset);
|
|
136202
136733
|
}
|
|
136203
136734
|
|
|
136204
|
-
unique_ptr<ResultModifier> LimitPercentModifier::Deserialize(
|
|
136735
|
+
unique_ptr<ResultModifier> LimitPercentModifier::Deserialize(FieldReader &reader) {
|
|
136205
136736
|
auto mod = make_unique<LimitPercentModifier>();
|
|
136206
|
-
mod->limit =
|
|
136207
|
-
mod->offset =
|
|
136737
|
+
mod->limit = reader.ReadOptional<ParsedExpression>(nullptr);
|
|
136738
|
+
mod->offset = reader.ReadOptional<ParsedExpression>(nullptr);
|
|
136208
136739
|
return move(mod);
|
|
136209
136740
|
}
|
|
136210
136741
|
|
|
@@ -136540,7 +137071,7 @@ unique_ptr<SQLStatement> SelectStatement::Copy() const {
|
|
|
136540
137071
|
return move(result);
|
|
136541
137072
|
}
|
|
136542
137073
|
|
|
136543
|
-
void SelectStatement::Serialize(Serializer &serializer) {
|
|
137074
|
+
void SelectStatement::Serialize(Serializer &serializer) const {
|
|
136544
137075
|
node->Serialize(serializer);
|
|
136545
137076
|
}
|
|
136546
137077
|
|
|
@@ -136760,20 +137291,18 @@ bool BaseTableRef::Equals(const TableRef *other_p) const {
|
|
|
136760
137291
|
column_name_alias == other->column_name_alias;
|
|
136761
137292
|
}
|
|
136762
137293
|
|
|
136763
|
-
void BaseTableRef::Serialize(
|
|
136764
|
-
|
|
136765
|
-
|
|
136766
|
-
|
|
136767
|
-
serializer.WriteString(table_name);
|
|
136768
|
-
serializer.WriteStringVector(column_name_alias);
|
|
137294
|
+
void BaseTableRef::Serialize(FieldWriter &writer) const {
|
|
137295
|
+
writer.WriteString(schema_name);
|
|
137296
|
+
writer.WriteString(table_name);
|
|
137297
|
+
writer.WriteList<string>(column_name_alias);
|
|
136769
137298
|
}
|
|
136770
137299
|
|
|
136771
|
-
unique_ptr<TableRef> BaseTableRef::Deserialize(
|
|
137300
|
+
unique_ptr<TableRef> BaseTableRef::Deserialize(FieldReader &reader) {
|
|
136772
137301
|
auto result = make_unique<BaseTableRef>();
|
|
136773
137302
|
|
|
136774
|
-
result->schema_name =
|
|
136775
|
-
result->table_name =
|
|
136776
|
-
|
|
137303
|
+
result->schema_name = reader.ReadRequired<string>();
|
|
137304
|
+
result->table_name = reader.ReadRequired<string>();
|
|
137305
|
+
result->column_name_alias = reader.ReadRequiredList<string>();
|
|
136777
137306
|
|
|
136778
137307
|
return move(result);
|
|
136779
137308
|
}
|
|
@@ -136811,22 +137340,18 @@ unique_ptr<TableRef> CrossProductRef::Copy() {
|
|
|
136811
137340
|
return move(copy);
|
|
136812
137341
|
}
|
|
136813
137342
|
|
|
136814
|
-
void CrossProductRef::Serialize(
|
|
136815
|
-
|
|
136816
|
-
|
|
136817
|
-
left->Serialize(serializer);
|
|
136818
|
-
right->Serialize(serializer);
|
|
137343
|
+
void CrossProductRef::Serialize(FieldWriter &writer) const {
|
|
137344
|
+
writer.WriteSerializable(*left);
|
|
137345
|
+
writer.WriteSerializable(*right);
|
|
136819
137346
|
}
|
|
136820
137347
|
|
|
136821
|
-
unique_ptr<TableRef> CrossProductRef::Deserialize(
|
|
137348
|
+
unique_ptr<TableRef> CrossProductRef::Deserialize(FieldReader &reader) {
|
|
136822
137349
|
auto result = make_unique<CrossProductRef>();
|
|
136823
137350
|
|
|
136824
|
-
result->left = TableRef
|
|
136825
|
-
result->right = TableRef
|
|
136826
|
-
|
|
136827
|
-
|
|
136828
|
-
return nullptr;
|
|
136829
|
-
}
|
|
137351
|
+
result->left = reader.ReadRequiredSerializable<TableRef>();
|
|
137352
|
+
result->right = reader.ReadRequiredSerializable<TableRef>();
|
|
137353
|
+
D_ASSERT(result->left);
|
|
137354
|
+
D_ASSERT(result->right);
|
|
136830
137355
|
|
|
136831
137356
|
return move(result);
|
|
136832
137357
|
}
|
|
@@ -136846,11 +137371,10 @@ unique_ptr<TableRef> EmptyTableRef::Copy() {
|
|
|
136846
137371
|
return make_unique<EmptyTableRef>();
|
|
136847
137372
|
}
|
|
136848
137373
|
|
|
136849
|
-
void EmptyTableRef::Serialize(
|
|
136850
|
-
TableRef::Serialize(serializer);
|
|
137374
|
+
void EmptyTableRef::Serialize(FieldWriter &writer) const {
|
|
136851
137375
|
}
|
|
136852
137376
|
|
|
136853
|
-
unique_ptr<TableRef> EmptyTableRef::Deserialize(
|
|
137377
|
+
unique_ptr<TableRef> EmptyTableRef::Deserialize(FieldReader &reader) {
|
|
136854
137378
|
return make_unique<EmptyTableRef>();
|
|
136855
137379
|
}
|
|
136856
137380
|
|
|
@@ -136899,34 +137423,23 @@ unique_ptr<TableRef> ExpressionListRef::Copy() {
|
|
|
136899
137423
|
return move(result);
|
|
136900
137424
|
}
|
|
136901
137425
|
|
|
136902
|
-
void ExpressionListRef::Serialize(
|
|
136903
|
-
|
|
136904
|
-
|
|
136905
|
-
|
|
136906
|
-
|
|
136907
|
-
}
|
|
136908
|
-
serializer.Write<idx_t>(expected_types.size());
|
|
136909
|
-
for (idx_t i = 0; i < expected_types.size(); i++) {
|
|
136910
|
-
expected_types[i].Serialize(serializer);
|
|
136911
|
-
}
|
|
136912
|
-
serializer.Write<idx_t>(values.size());
|
|
137426
|
+
void ExpressionListRef::Serialize(FieldWriter &writer) const {
|
|
137427
|
+
writer.WriteList<string>(expected_names);
|
|
137428
|
+
writer.WriteRegularSerializableList<LogicalType>(expected_types);
|
|
137429
|
+
auto &serializer = writer.GetSerializer();
|
|
137430
|
+
writer.WriteField<uint32_t>(values.size());
|
|
136913
137431
|
for (idx_t i = 0; i < values.size(); i++) {
|
|
136914
137432
|
serializer.WriteList(values[i]);
|
|
136915
137433
|
}
|
|
136916
137434
|
}
|
|
136917
137435
|
|
|
136918
|
-
unique_ptr<TableRef> ExpressionListRef::Deserialize(
|
|
137436
|
+
unique_ptr<TableRef> ExpressionListRef::Deserialize(FieldReader &reader) {
|
|
136919
137437
|
auto result = make_unique<ExpressionListRef>();
|
|
136920
137438
|
// value list
|
|
136921
|
-
|
|
136922
|
-
|
|
136923
|
-
|
|
136924
|
-
|
|
136925
|
-
auto type_count = source.Read<idx_t>();
|
|
136926
|
-
for (idx_t i = 0; i < type_count; i++) {
|
|
136927
|
-
result->expected_types.push_back(LogicalType::Deserialize(source));
|
|
136928
|
-
}
|
|
136929
|
-
idx_t value_list_size = source.Read<idx_t>();
|
|
137439
|
+
result->expected_names = reader.ReadRequiredList<string>();
|
|
137440
|
+
result->expected_types = reader.ReadRequiredSerializableList<LogicalType, LogicalType>();
|
|
137441
|
+
idx_t value_list_size = reader.ReadRequired<uint32_t>();
|
|
137442
|
+
auto &source = reader.GetSource();
|
|
136930
137443
|
for (idx_t i = 0; i < value_list_size; i++) {
|
|
136931
137444
|
vector<unique_ptr<ParsedExpression>> value_list;
|
|
136932
137445
|
source.ReadList<ParsedExpression>(value_list);
|
|
@@ -136974,33 +137487,23 @@ unique_ptr<TableRef> JoinRef::Copy() {
|
|
|
136974
137487
|
return move(copy);
|
|
136975
137488
|
}
|
|
136976
137489
|
|
|
136977
|
-
void JoinRef::Serialize(
|
|
136978
|
-
|
|
136979
|
-
|
|
136980
|
-
|
|
136981
|
-
|
|
136982
|
-
|
|
136983
|
-
|
|
136984
|
-
serializer.Write<bool>(is_natural);
|
|
136985
|
-
D_ASSERT(using_columns.size() <= NumericLimits<uint32_t>::Maximum());
|
|
136986
|
-
serializer.Write<uint32_t>((uint32_t)using_columns.size());
|
|
136987
|
-
for (auto &using_column : using_columns) {
|
|
136988
|
-
serializer.WriteString(using_column);
|
|
136989
|
-
}
|
|
137490
|
+
void JoinRef::Serialize(FieldWriter &writer) const {
|
|
137491
|
+
writer.WriteSerializable(*left);
|
|
137492
|
+
writer.WriteSerializable(*right);
|
|
137493
|
+
writer.WriteOptional(condition);
|
|
137494
|
+
writer.WriteField<JoinType>(type);
|
|
137495
|
+
writer.WriteField<bool>(is_natural);
|
|
137496
|
+
writer.WriteList<string>(using_columns);
|
|
136990
137497
|
}
|
|
136991
137498
|
|
|
136992
|
-
unique_ptr<TableRef> JoinRef::Deserialize(
|
|
137499
|
+
unique_ptr<TableRef> JoinRef::Deserialize(FieldReader &reader) {
|
|
136993
137500
|
auto result = make_unique<JoinRef>();
|
|
136994
|
-
|
|
136995
|
-
result->
|
|
136996
|
-
result->
|
|
136997
|
-
result->
|
|
136998
|
-
result->
|
|
136999
|
-
result->
|
|
137000
|
-
auto count = source.Read<uint32_t>();
|
|
137001
|
-
for (idx_t i = 0; i < count; i++) {
|
|
137002
|
-
result->using_columns.push_back(source.Read<string>());
|
|
137003
|
-
}
|
|
137501
|
+
result->left = reader.ReadRequiredSerializable<TableRef>();
|
|
137502
|
+
result->right = reader.ReadRequiredSerializable<TableRef>();
|
|
137503
|
+
result->condition = reader.ReadOptional<ParsedExpression>(nullptr);
|
|
137504
|
+
result->type = reader.ReadRequired<JoinType>();
|
|
137505
|
+
result->is_natural = reader.ReadRequired<bool>();
|
|
137506
|
+
result->using_columns = reader.ReadRequiredList<string>();
|
|
137004
137507
|
return move(result);
|
|
137005
137508
|
}
|
|
137006
137509
|
|
|
@@ -137032,19 +137535,15 @@ unique_ptr<TableRef> SubqueryRef::Copy() {
|
|
|
137032
137535
|
return move(copy);
|
|
137033
137536
|
}
|
|
137034
137537
|
|
|
137035
|
-
void SubqueryRef::Serialize(
|
|
137036
|
-
|
|
137037
|
-
|
|
137038
|
-
serializer.WriteStringVector(column_name_alias);
|
|
137538
|
+
void SubqueryRef::Serialize(FieldWriter &writer) const {
|
|
137539
|
+
writer.WriteSerializable(*subquery);
|
|
137540
|
+
writer.WriteList<string>(column_name_alias);
|
|
137039
137541
|
}
|
|
137040
137542
|
|
|
137041
|
-
unique_ptr<TableRef> SubqueryRef::Deserialize(
|
|
137042
|
-
auto subquery = SelectStatement
|
|
137043
|
-
if (!subquery) {
|
|
137044
|
-
return nullptr;
|
|
137045
|
-
}
|
|
137543
|
+
unique_ptr<TableRef> SubqueryRef::Deserialize(FieldReader &reader) {
|
|
137544
|
+
auto subquery = reader.ReadRequiredSerializable<SelectStatement>();
|
|
137046
137545
|
auto result = make_unique<SubqueryRef>(move(subquery));
|
|
137047
|
-
|
|
137546
|
+
result->column_name_alias = reader.ReadRequiredList<string>();
|
|
137048
137547
|
return move(result);
|
|
137049
137548
|
}
|
|
137050
137549
|
|
|
@@ -137067,20 +137566,17 @@ bool TableFunctionRef::Equals(const TableRef *other_p) const {
|
|
|
137067
137566
|
return function->Equals(other->function.get());
|
|
137068
137567
|
}
|
|
137069
137568
|
|
|
137070
|
-
void TableFunctionRef::Serialize(
|
|
137071
|
-
|
|
137072
|
-
|
|
137073
|
-
|
|
137074
|
-
serializer.WriteStringVector(column_name_alias);
|
|
137569
|
+
void TableFunctionRef::Serialize(FieldWriter &writer) const {
|
|
137570
|
+
writer.WriteSerializable(*function);
|
|
137571
|
+
writer.WriteString(alias);
|
|
137572
|
+
writer.WriteList<string>(column_name_alias);
|
|
137075
137573
|
}
|
|
137076
137574
|
|
|
137077
|
-
unique_ptr<TableRef> TableFunctionRef::Deserialize(
|
|
137575
|
+
unique_ptr<TableRef> TableFunctionRef::Deserialize(FieldReader &reader) {
|
|
137078
137576
|
auto result = make_unique<TableFunctionRef>();
|
|
137079
|
-
|
|
137080
|
-
result->
|
|
137081
|
-
result->
|
|
137082
|
-
source.ReadStringVector(result->column_name_alias);
|
|
137083
|
-
|
|
137577
|
+
result->function = reader.ReadRequiredSerializable<ParsedExpression>();
|
|
137578
|
+
result->alias = reader.ReadRequired<string>();
|
|
137579
|
+
result->column_name_alias = reader.ReadRequiredList<string>();
|
|
137084
137580
|
return move(result);
|
|
137085
137581
|
}
|
|
137086
137582
|
|
|
@@ -137112,44 +137608,50 @@ bool TableRef::Equals(const TableRef *other) const {
|
|
|
137112
137608
|
SampleOptions::Equals(sample.get(), other->sample.get());
|
|
137113
137609
|
}
|
|
137114
137610
|
|
|
137115
|
-
void TableRef::Serialize(Serializer &serializer) {
|
|
137116
|
-
serializer
|
|
137117
|
-
|
|
137118
|
-
|
|
137611
|
+
void TableRef::Serialize(Serializer &serializer) const {
|
|
137612
|
+
FieldWriter writer(serializer);
|
|
137613
|
+
writer.WriteField<TableReferenceType>(type);
|
|
137614
|
+
writer.WriteString(alias);
|
|
137615
|
+
writer.WriteOptional(sample);
|
|
137616
|
+
Serialize(writer);
|
|
137617
|
+
writer.Finalize();
|
|
137119
137618
|
}
|
|
137120
137619
|
|
|
137121
|
-
//! Deserializes a blob back into an TableRef
|
|
137122
137620
|
unique_ptr<TableRef> TableRef::Deserialize(Deserializer &source) {
|
|
137123
|
-
|
|
137124
|
-
|
|
137125
|
-
auto
|
|
137621
|
+
FieldReader reader(source);
|
|
137622
|
+
|
|
137623
|
+
auto type = reader.ReadRequired<TableReferenceType>();
|
|
137624
|
+
auto alias = reader.ReadRequired<string>();
|
|
137625
|
+
auto sample = reader.ReadOptional<SampleOptions>(nullptr);
|
|
137126
137626
|
unique_ptr<TableRef> result;
|
|
137127
137627
|
switch (type) {
|
|
137128
137628
|
case TableReferenceType::BASE_TABLE:
|
|
137129
|
-
result = BaseTableRef::Deserialize(
|
|
137629
|
+
result = BaseTableRef::Deserialize(reader);
|
|
137130
137630
|
break;
|
|
137131
137631
|
case TableReferenceType::CROSS_PRODUCT:
|
|
137132
|
-
result = CrossProductRef::Deserialize(
|
|
137632
|
+
result = CrossProductRef::Deserialize(reader);
|
|
137133
137633
|
break;
|
|
137134
137634
|
case TableReferenceType::JOIN:
|
|
137135
|
-
result = JoinRef::Deserialize(
|
|
137635
|
+
result = JoinRef::Deserialize(reader);
|
|
137136
137636
|
break;
|
|
137137
137637
|
case TableReferenceType::SUBQUERY:
|
|
137138
|
-
result = SubqueryRef::Deserialize(
|
|
137638
|
+
result = SubqueryRef::Deserialize(reader);
|
|
137139
137639
|
break;
|
|
137140
137640
|
case TableReferenceType::TABLE_FUNCTION:
|
|
137141
|
-
result = TableFunctionRef::Deserialize(
|
|
137641
|
+
result = TableFunctionRef::Deserialize(reader);
|
|
137142
137642
|
break;
|
|
137143
137643
|
case TableReferenceType::EMPTY:
|
|
137144
|
-
result = EmptyTableRef::Deserialize(
|
|
137644
|
+
result = EmptyTableRef::Deserialize(reader);
|
|
137145
137645
|
break;
|
|
137146
137646
|
case TableReferenceType::EXPRESSION_LIST:
|
|
137147
|
-
result = ExpressionListRef::Deserialize(
|
|
137647
|
+
result = ExpressionListRef::Deserialize(reader);
|
|
137148
137648
|
break;
|
|
137149
137649
|
case TableReferenceType::CTE:
|
|
137150
137650
|
case TableReferenceType::INVALID:
|
|
137151
137651
|
throw InternalException("Unsupported type for TableRef::Deserialize");
|
|
137152
137652
|
}
|
|
137653
|
+
reader.Finalize();
|
|
137654
|
+
|
|
137153
137655
|
result->alias = alias;
|
|
137154
137656
|
result->sample = move(sample);
|
|
137155
137657
|
return result;
|
|
@@ -140200,7 +140702,7 @@ unique_ptr<CreateStatement> Transformer::TransformCreateEnum(duckdb_libpgquery::
|
|
|
140200
140702
|
info->name = ReadPgListToString(stmt->typeName)[0];
|
|
140201
140703
|
idx_t size = 0;
|
|
140202
140704
|
auto ordered_array = ReadPgListToVector(stmt->vals, size);
|
|
140203
|
-
info->type =
|
|
140705
|
+
info->type = LogicalType::ENUM(info->name, ordered_array, size);
|
|
140204
140706
|
result->info = move(info);
|
|
140205
140707
|
return result;
|
|
140206
140708
|
}
|
|
@@ -143642,11 +144144,14 @@ public:
|
|
|
143642
144144
|
unique_ptr<SelectStatement> subquery;
|
|
143643
144145
|
|
|
143644
144146
|
const vector<unique_ptr<ParsedExpression>> &GetSelectList() const override {
|
|
143645
|
-
throw
|
|
144147
|
+
throw InternalException("Cannot get select list of bound subquery node");
|
|
143646
144148
|
}
|
|
143647
144149
|
|
|
143648
|
-
unique_ptr<QueryNode> Copy() override {
|
|
143649
|
-
throw
|
|
144150
|
+
unique_ptr<QueryNode> Copy() const override {
|
|
144151
|
+
throw InternalException("Cannot copy bound subquery node");
|
|
144152
|
+
}
|
|
144153
|
+
void Serialize(FieldWriter &writer) const override {
|
|
144154
|
+
throw InternalException("Cannot copy bound subquery node");
|
|
143650
144155
|
}
|
|
143651
144156
|
};
|
|
143652
144157
|
|
|
@@ -146099,7 +146604,7 @@ void Binder::BindLogicalType(ClientContext &context, LogicalType &type, const st
|
|
|
146099
146604
|
if (!user_type_catalog) {
|
|
146100
146605
|
throw NotImplementedException("DataType %s not supported yet...\n", user_type_name);
|
|
146101
146606
|
}
|
|
146102
|
-
type =
|
|
146607
|
+
type = user_type_catalog->user_type;
|
|
146103
146608
|
EnumType::SetCatalog(type, user_type_catalog);
|
|
146104
146609
|
} else if (type.id() == LogicalTypeId::ENUM) {
|
|
146105
146610
|
auto &enum_type_name = EnumType::GetTypeName(type);
|
|
@@ -160868,6 +161373,7 @@ private:
|
|
|
160868
161373
|
|
|
160869
161374
|
|
|
160870
161375
|
|
|
161376
|
+
|
|
160871
161377
|
#include <algorithm>
|
|
160872
161378
|
#include <cstring>
|
|
160873
161379
|
|
|
@@ -160878,9 +161384,11 @@ const char MainHeader::MAGIC_BYTES[] = "DUCK";
|
|
|
160878
161384
|
void MainHeader::Serialize(Serializer &ser) {
|
|
160879
161385
|
ser.WriteData((data_ptr_t)MAGIC_BYTES, MAGIC_BYTE_SIZE);
|
|
160880
161386
|
ser.Write<uint64_t>(version_number);
|
|
161387
|
+
FieldWriter writer(ser);
|
|
160881
161388
|
for (idx_t i = 0; i < FLAG_COUNT; i++) {
|
|
160882
|
-
|
|
161389
|
+
writer.WriteField<uint64_t>(flags[i]);
|
|
160883
161390
|
}
|
|
161391
|
+
writer.Finalize();
|
|
160884
161392
|
}
|
|
160885
161393
|
|
|
160886
161394
|
void MainHeader::CheckMagicBytes(FileHandle &handle) {
|
|
@@ -160903,9 +161411,11 @@ MainHeader MainHeader::Deserialize(Deserializer &source) {
|
|
|
160903
161411
|
}
|
|
160904
161412
|
header.version_number = source.Read<uint64_t>();
|
|
160905
161413
|
// read the flags
|
|
161414
|
+
FieldReader reader(source);
|
|
160906
161415
|
for (idx_t i = 0; i < FLAG_COUNT; i++) {
|
|
160907
|
-
header.flags[i] =
|
|
161416
|
+
header.flags[i] = reader.ReadRequired<uint64_t>();
|
|
160908
161417
|
}
|
|
161418
|
+
reader.Finalize();
|
|
160909
161419
|
return header;
|
|
160910
161420
|
}
|
|
160911
161421
|
|
|
@@ -161272,7 +161782,7 @@ BaseStatistics::BaseStatistics(LogicalType type) : type(move(type)) {
|
|
|
161272
161782
|
BaseStatistics::~BaseStatistics() {
|
|
161273
161783
|
}
|
|
161274
161784
|
|
|
161275
|
-
bool BaseStatistics::CanHaveNull() {
|
|
161785
|
+
bool BaseStatistics::CanHaveNull() const {
|
|
161276
161786
|
if (!validity_stats) {
|
|
161277
161787
|
// we don't know
|
|
161278
161788
|
// solid maybe
|
|
@@ -161281,7 +161791,7 @@ bool BaseStatistics::CanHaveNull() {
|
|
|
161281
161791
|
return ((ValidityStatistics &)*validity_stats).has_null;
|
|
161282
161792
|
}
|
|
161283
161793
|
|
|
161284
|
-
bool BaseStatistics::CanHaveNoNull() {
|
|
161794
|
+
bool BaseStatistics::CanHaveNoNull() const {
|
|
161285
161795
|
if (!validity_stats) {
|
|
161286
161796
|
// we don't know
|
|
161287
161797
|
// solid maybe
|
|
@@ -161290,14 +161800,6 @@ bool BaseStatistics::CanHaveNoNull() {
|
|
|
161290
161800
|
return ((ValidityStatistics &)*validity_stats).has_no_null;
|
|
161291
161801
|
}
|
|
161292
161802
|
|
|
161293
|
-
unique_ptr<BaseStatistics> BaseStatistics::Copy() {
|
|
161294
|
-
auto statistics = make_unique<BaseStatistics>(type);
|
|
161295
|
-
if (validity_stats) {
|
|
161296
|
-
statistics->validity_stats = validity_stats->Copy();
|
|
161297
|
-
}
|
|
161298
|
-
return statistics;
|
|
161299
|
-
}
|
|
161300
|
-
|
|
161301
161803
|
void BaseStatistics::Merge(const BaseStatistics &other) {
|
|
161302
161804
|
D_ASSERT(type == other.type);
|
|
161303
161805
|
if (other.validity_stats) {
|
|
@@ -161340,18 +161842,33 @@ unique_ptr<BaseStatistics> BaseStatistics::CreateEmpty(LogicalType type) {
|
|
|
161340
161842
|
}
|
|
161341
161843
|
}
|
|
161342
161844
|
|
|
161343
|
-
|
|
161344
|
-
|
|
161345
|
-
|
|
161845
|
+
unique_ptr<BaseStatistics> BaseStatistics::Copy() const {
|
|
161846
|
+
auto statistics = make_unique<BaseStatistics>(type);
|
|
161847
|
+
if (validity_stats) {
|
|
161848
|
+
statistics->validity_stats = validity_stats->Copy();
|
|
161849
|
+
}
|
|
161850
|
+
return statistics;
|
|
161851
|
+
}
|
|
161852
|
+
|
|
161853
|
+
void BaseStatistics::Serialize(Serializer &serializer) const {
|
|
161854
|
+
FieldWriter writer(serializer);
|
|
161855
|
+
writer.WriteField<bool>(CanHaveNull());
|
|
161856
|
+
writer.WriteField<bool>(CanHaveNoNull());
|
|
161857
|
+
Serialize(writer);
|
|
161858
|
+
writer.Finalize();
|
|
161859
|
+
}
|
|
161860
|
+
|
|
161861
|
+
void BaseStatistics::Serialize(FieldWriter &writer) const {
|
|
161346
161862
|
}
|
|
161347
161863
|
|
|
161348
161864
|
unique_ptr<BaseStatistics> BaseStatistics::Deserialize(Deserializer &source, LogicalType type) {
|
|
161349
|
-
|
|
161350
|
-
bool
|
|
161865
|
+
FieldReader reader(source);
|
|
161866
|
+
bool can_have_null = reader.ReadRequired<bool>();
|
|
161867
|
+
bool can_have_no_null = reader.ReadRequired<bool>();
|
|
161351
161868
|
unique_ptr<BaseStatistics> result;
|
|
161352
161869
|
switch (type.InternalType()) {
|
|
161353
161870
|
case PhysicalType::BIT:
|
|
161354
|
-
return ValidityStatistics::Deserialize(
|
|
161871
|
+
return ValidityStatistics::Deserialize(reader);
|
|
161355
161872
|
case PhysicalType::BOOL:
|
|
161356
161873
|
case PhysicalType::INT8:
|
|
161357
161874
|
case PhysicalType::INT16:
|
|
@@ -161364,16 +161881,16 @@ unique_ptr<BaseStatistics> BaseStatistics::Deserialize(Deserializer &source, Log
|
|
|
161364
161881
|
case PhysicalType::INT128:
|
|
161365
161882
|
case PhysicalType::FLOAT:
|
|
161366
161883
|
case PhysicalType::DOUBLE:
|
|
161367
|
-
result = NumericStatistics::Deserialize(
|
|
161884
|
+
result = NumericStatistics::Deserialize(reader, move(type));
|
|
161368
161885
|
break;
|
|
161369
161886
|
case PhysicalType::VARCHAR:
|
|
161370
|
-
result = StringStatistics::Deserialize(
|
|
161887
|
+
result = StringStatistics::Deserialize(reader, move(type));
|
|
161371
161888
|
break;
|
|
161372
161889
|
case PhysicalType::STRUCT:
|
|
161373
|
-
result = StructStatistics::Deserialize(
|
|
161890
|
+
result = StructStatistics::Deserialize(reader, move(type));
|
|
161374
161891
|
break;
|
|
161375
161892
|
case PhysicalType::LIST:
|
|
161376
|
-
result = ListStatistics::Deserialize(
|
|
161893
|
+
result = ListStatistics::Deserialize(reader, move(type));
|
|
161377
161894
|
break;
|
|
161378
161895
|
case PhysicalType::INTERVAL:
|
|
161379
161896
|
result = make_unique<BaseStatistics>(move(type));
|
|
@@ -161385,18 +161902,18 @@ unique_ptr<BaseStatistics> BaseStatistics::Deserialize(Deserializer &source, Log
|
|
|
161385
161902
|
return result;
|
|
161386
161903
|
}
|
|
161387
161904
|
|
|
161388
|
-
string BaseStatistics::ToString() {
|
|
161905
|
+
string BaseStatistics::ToString() const {
|
|
161389
161906
|
return StringUtil::Format("Base Statistics %s", validity_stats ? validity_stats->ToString() : "[]");
|
|
161390
161907
|
}
|
|
161391
161908
|
|
|
161392
|
-
void BaseStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) {
|
|
161909
|
+
void BaseStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) const {
|
|
161393
161910
|
D_ASSERT(vector.GetType() == this->type);
|
|
161394
161911
|
if (validity_stats) {
|
|
161395
161912
|
validity_stats->Verify(vector, sel, count);
|
|
161396
161913
|
}
|
|
161397
161914
|
}
|
|
161398
161915
|
|
|
161399
|
-
void BaseStatistics::Verify(Vector &vector, idx_t count) {
|
|
161916
|
+
void BaseStatistics::Verify(Vector &vector, idx_t count) const {
|
|
161400
161917
|
SelectionVector owned_sel;
|
|
161401
161918
|
auto sel = FlatVector::IncrementalSelectionVector(count, owned_sel);
|
|
161402
161919
|
Verify(vector, *sel, count);
|
|
@@ -161406,6 +161923,7 @@ void BaseStatistics::Verify(Vector &vector, idx_t count) {
|
|
|
161406
161923
|
|
|
161407
161924
|
|
|
161408
161925
|
|
|
161926
|
+
|
|
161409
161927
|
namespace duckdb {
|
|
161410
161928
|
|
|
161411
161929
|
ListStatistics::ListStatistics(LogicalType type_p) : BaseStatistics(move(type_p)) {
|
|
@@ -161428,32 +161946,32 @@ void ListStatistics::Merge(const BaseStatistics &other_p) {
|
|
|
161428
161946
|
}
|
|
161429
161947
|
|
|
161430
161948
|
// LCOV_EXCL_START
|
|
161431
|
-
FilterPropagateResult ListStatistics::CheckZonemap(ExpressionType comparison_type, const Value &constant) {
|
|
161949
|
+
FilterPropagateResult ListStatistics::CheckZonemap(ExpressionType comparison_type, const Value &constant) const {
|
|
161432
161950
|
throw InternalException("List zonemaps are not supported yet");
|
|
161433
161951
|
}
|
|
161434
161952
|
// LCOV_EXCL_STOP
|
|
161435
161953
|
|
|
161436
|
-
unique_ptr<BaseStatistics> ListStatistics::Copy() {
|
|
161954
|
+
unique_ptr<BaseStatistics> ListStatistics::Copy() const {
|
|
161437
161955
|
auto copy = make_unique<ListStatistics>(type);
|
|
161438
161956
|
copy->validity_stats = validity_stats ? validity_stats->Copy() : nullptr;
|
|
161439
161957
|
copy->child_stats = child_stats ? child_stats->Copy() : nullptr;
|
|
161440
161958
|
return move(copy);
|
|
161441
161959
|
}
|
|
161442
161960
|
|
|
161443
|
-
void ListStatistics::Serialize(
|
|
161444
|
-
|
|
161445
|
-
child_stats->Serialize(serializer);
|
|
161961
|
+
void ListStatistics::Serialize(FieldWriter &writer) const {
|
|
161962
|
+
writer.WriteSerializable(*child_stats);
|
|
161446
161963
|
}
|
|
161447
161964
|
|
|
161448
|
-
unique_ptr<BaseStatistics> ListStatistics::Deserialize(
|
|
161965
|
+
unique_ptr<BaseStatistics> ListStatistics::Deserialize(FieldReader &reader, LogicalType type) {
|
|
161449
161966
|
D_ASSERT(type.InternalType() == PhysicalType::LIST);
|
|
161450
161967
|
auto result = make_unique<ListStatistics>(move(type));
|
|
161451
161968
|
auto &child_type = ListType::GetChildType(result->type);
|
|
161969
|
+
auto &source = reader.GetSource();
|
|
161452
161970
|
result->child_stats = BaseStatistics::Deserialize(source, child_type);
|
|
161453
161971
|
return move(result);
|
|
161454
161972
|
}
|
|
161455
161973
|
|
|
161456
|
-
string ListStatistics::ToString() {
|
|
161974
|
+
string ListStatistics::ToString() const {
|
|
161457
161975
|
string result;
|
|
161458
161976
|
result += " [";
|
|
161459
161977
|
result += child_stats ? child_stats->ToString() : "No Stats";
|
|
@@ -161462,7 +161980,7 @@ string ListStatistics::ToString() {
|
|
|
161462
161980
|
return result;
|
|
161463
161981
|
}
|
|
161464
161982
|
|
|
161465
|
-
void ListStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) {
|
|
161983
|
+
void ListStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) const {
|
|
161466
161984
|
BaseStatistics::Verify(vector, sel, count);
|
|
161467
161985
|
|
|
161468
161986
|
if (child_stats) {
|
|
@@ -161504,6 +162022,7 @@ void ListStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t co
|
|
|
161504
162022
|
|
|
161505
162023
|
|
|
161506
162024
|
|
|
162025
|
+
|
|
161507
162026
|
namespace duckdb {
|
|
161508
162027
|
|
|
161509
162028
|
template <>
|
|
@@ -161539,7 +162058,7 @@ void NumericStatistics::Merge(const BaseStatistics &other_p) {
|
|
|
161539
162058
|
}
|
|
161540
162059
|
}
|
|
161541
162060
|
|
|
161542
|
-
FilterPropagateResult NumericStatistics::CheckZonemap(ExpressionType comparison_type, const Value &constant) {
|
|
162061
|
+
FilterPropagateResult NumericStatistics::CheckZonemap(ExpressionType comparison_type, const Value &constant) const {
|
|
161543
162062
|
if (constant.IsNull()) {
|
|
161544
162063
|
return FilterPropagateResult::FILTER_ALWAYS_FALSE;
|
|
161545
162064
|
}
|
|
@@ -161612,7 +162131,7 @@ FilterPropagateResult NumericStatistics::CheckZonemap(ExpressionType comparison_
|
|
|
161612
162131
|
}
|
|
161613
162132
|
}
|
|
161614
162133
|
|
|
161615
|
-
unique_ptr<BaseStatistics> NumericStatistics::Copy() {
|
|
162134
|
+
unique_ptr<BaseStatistics> NumericStatistics::Copy() const {
|
|
161616
162135
|
auto stats = make_unique<NumericStatistics>(type, min, max);
|
|
161617
162136
|
if (validity_stats) {
|
|
161618
162137
|
stats->validity_stats = validity_stats->Copy();
|
|
@@ -161620,29 +162139,28 @@ unique_ptr<BaseStatistics> NumericStatistics::Copy() {
|
|
|
161620
162139
|
return move(stats);
|
|
161621
162140
|
}
|
|
161622
162141
|
|
|
161623
|
-
bool NumericStatistics::IsConstant() {
|
|
162142
|
+
bool NumericStatistics::IsConstant() const {
|
|
161624
162143
|
return max <= min;
|
|
161625
162144
|
}
|
|
161626
162145
|
|
|
161627
|
-
void NumericStatistics::Serialize(
|
|
161628
|
-
|
|
161629
|
-
|
|
161630
|
-
max.Serialize(serializer);
|
|
162146
|
+
void NumericStatistics::Serialize(FieldWriter &writer) const {
|
|
162147
|
+
writer.WriteSerializable(min);
|
|
162148
|
+
writer.WriteSerializable(max);
|
|
161631
162149
|
}
|
|
161632
162150
|
|
|
161633
|
-
unique_ptr<BaseStatistics> NumericStatistics::Deserialize(
|
|
161634
|
-
auto min = Value
|
|
161635
|
-
auto max = Value
|
|
162151
|
+
unique_ptr<BaseStatistics> NumericStatistics::Deserialize(FieldReader &reader, LogicalType type) {
|
|
162152
|
+
auto min = reader.ReadRequiredSerializable<Value, Value>();
|
|
162153
|
+
auto max = reader.ReadRequiredSerializable<Value, Value>();
|
|
161636
162154
|
return make_unique_base<BaseStatistics, NumericStatistics>(move(type), min, max);
|
|
161637
162155
|
}
|
|
161638
162156
|
|
|
161639
|
-
string NumericStatistics::ToString() {
|
|
162157
|
+
string NumericStatistics::ToString() const {
|
|
161640
162158
|
return StringUtil::Format("[Min: %s, Max: %s]%s", min.ToString(), max.ToString(),
|
|
161641
162159
|
validity_stats ? validity_stats->ToString() : "");
|
|
161642
162160
|
}
|
|
161643
162161
|
|
|
161644
162162
|
template <class T>
|
|
161645
|
-
void NumericStatistics::TemplatedVerify(Vector &vector, const SelectionVector &sel, idx_t count) {
|
|
162163
|
+
void NumericStatistics::TemplatedVerify(Vector &vector, const SelectionVector &sel, idx_t count) const {
|
|
161646
162164
|
VectorData vdata;
|
|
161647
162165
|
vector.Orrify(count, vdata);
|
|
161648
162166
|
|
|
@@ -161664,7 +162182,7 @@ void NumericStatistics::TemplatedVerify(Vector &vector, const SelectionVector &s
|
|
|
161664
162182
|
}
|
|
161665
162183
|
}
|
|
161666
162184
|
|
|
161667
|
-
void NumericStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) {
|
|
162185
|
+
void NumericStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) const {
|
|
161668
162186
|
BaseStatistics::Verify(vector, sel, count);
|
|
161669
162187
|
|
|
161670
162188
|
switch (type.InternalType()) {
|
|
@@ -161753,7 +162271,7 @@ StringStatistics::StringStatistics(LogicalType type_p) : BaseStatistics(move(typ
|
|
|
161753
162271
|
validity_stats = make_unique<ValidityStatistics>(false);
|
|
161754
162272
|
}
|
|
161755
162273
|
|
|
161756
|
-
unique_ptr<BaseStatistics> StringStatistics::Copy() {
|
|
162274
|
+
unique_ptr<BaseStatistics> StringStatistics::Copy() const {
|
|
161757
162275
|
auto stats = make_unique<StringStatistics>(type);
|
|
161758
162276
|
memcpy(stats->min, min, MAX_STRING_MINMAX_SIZE);
|
|
161759
162277
|
memcpy(stats->max, max, MAX_STRING_MINMAX_SIZE);
|
|
@@ -161765,22 +162283,21 @@ unique_ptr<BaseStatistics> StringStatistics::Copy() {
|
|
|
161765
162283
|
return move(stats);
|
|
161766
162284
|
}
|
|
161767
162285
|
|
|
161768
|
-
void StringStatistics::Serialize(
|
|
161769
|
-
|
|
161770
|
-
|
|
161771
|
-
|
|
161772
|
-
|
|
161773
|
-
|
|
161774
|
-
serializer.Write<bool>(has_overflow_strings);
|
|
162286
|
+
void StringStatistics::Serialize(FieldWriter &writer) const {
|
|
162287
|
+
writer.WriteBlob(min, MAX_STRING_MINMAX_SIZE);
|
|
162288
|
+
writer.WriteBlob(max, MAX_STRING_MINMAX_SIZE);
|
|
162289
|
+
writer.WriteField<bool>(has_unicode);
|
|
162290
|
+
writer.WriteField<uint32_t>(max_string_length);
|
|
162291
|
+
writer.WriteField<bool>(has_overflow_strings);
|
|
161775
162292
|
}
|
|
161776
162293
|
|
|
161777
|
-
unique_ptr<BaseStatistics> StringStatistics::Deserialize(
|
|
162294
|
+
unique_ptr<BaseStatistics> StringStatistics::Deserialize(FieldReader &reader, LogicalType type) {
|
|
161778
162295
|
auto stats = make_unique<StringStatistics>(move(type));
|
|
161779
|
-
|
|
161780
|
-
|
|
161781
|
-
stats->has_unicode =
|
|
161782
|
-
stats->max_string_length =
|
|
161783
|
-
stats->has_overflow_strings =
|
|
162296
|
+
reader.ReadBlob(stats->min, MAX_STRING_MINMAX_SIZE);
|
|
162297
|
+
reader.ReadBlob(stats->max, MAX_STRING_MINMAX_SIZE);
|
|
162298
|
+
stats->has_unicode = reader.ReadRequired<bool>();
|
|
162299
|
+
stats->max_string_length = reader.ReadRequired<uint32_t>();
|
|
162300
|
+
stats->has_overflow_strings = reader.ReadRequired<bool>();
|
|
161784
162301
|
return move(stats);
|
|
161785
162302
|
}
|
|
161786
162303
|
|
|
@@ -161848,7 +162365,7 @@ void StringStatistics::Merge(const BaseStatistics &other_p) {
|
|
|
161848
162365
|
has_overflow_strings = has_overflow_strings || other.has_overflow_strings;
|
|
161849
162366
|
}
|
|
161850
162367
|
|
|
161851
|
-
FilterPropagateResult StringStatistics::CheckZonemap(ExpressionType comparison_type, const string &constant) {
|
|
162368
|
+
FilterPropagateResult StringStatistics::CheckZonemap(ExpressionType comparison_type, const string &constant) const {
|
|
161852
162369
|
auto data = (const_data_ptr_t)constant.c_str();
|
|
161853
162370
|
auto size = constant.size();
|
|
161854
162371
|
|
|
@@ -161886,7 +162403,7 @@ FilterPropagateResult StringStatistics::CheckZonemap(ExpressionType comparison_t
|
|
|
161886
162403
|
}
|
|
161887
162404
|
}
|
|
161888
162405
|
|
|
161889
|
-
static idx_t GetValidMinMaxSubstring(
|
|
162406
|
+
static idx_t GetValidMinMaxSubstring(const_data_ptr_t data) {
|
|
161890
162407
|
for (idx_t i = 0; i < StringStatistics::MAX_STRING_MINMAX_SIZE; i++) {
|
|
161891
162408
|
if (data[i] == '\0') {
|
|
161892
162409
|
return i;
|
|
@@ -161898,7 +162415,7 @@ static idx_t GetValidMinMaxSubstring(data_ptr_t data) {
|
|
|
161898
162415
|
return StringStatistics::MAX_STRING_MINMAX_SIZE;
|
|
161899
162416
|
}
|
|
161900
162417
|
|
|
161901
|
-
string StringStatistics::ToString() {
|
|
162418
|
+
string StringStatistics::ToString() const {
|
|
161902
162419
|
idx_t min_len = GetValidMinMaxSubstring(min);
|
|
161903
162420
|
idx_t max_len = GetValidMinMaxSubstring(max);
|
|
161904
162421
|
return StringUtil::Format("[Min: %s, Max: %s, Has Unicode: %s, Max String Length: %lld]%s",
|
|
@@ -161907,7 +162424,7 @@ string StringStatistics::ToString() {
|
|
|
161907
162424
|
validity_stats ? validity_stats->ToString() : "");
|
|
161908
162425
|
}
|
|
161909
162426
|
|
|
161910
|
-
void StringStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) {
|
|
162427
|
+
void StringStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) const {
|
|
161911
162428
|
BaseStatistics::Verify(vector, sel, count);
|
|
161912
162429
|
|
|
161913
162430
|
string_t min_string((const char *)min, MAX_STRING_MINMAX_SIZE);
|
|
@@ -161986,12 +162503,12 @@ void StructStatistics::Merge(const BaseStatistics &other_p) {
|
|
|
161986
162503
|
}
|
|
161987
162504
|
|
|
161988
162505
|
// LCOV_EXCL_START
|
|
161989
|
-
FilterPropagateResult StructStatistics::CheckZonemap(ExpressionType comparison_type, const Value &constant) {
|
|
162506
|
+
FilterPropagateResult StructStatistics::CheckZonemap(ExpressionType comparison_type, const Value &constant) const {
|
|
161990
162507
|
throw InternalException("Struct zonemaps are not supported yet");
|
|
161991
162508
|
}
|
|
161992
162509
|
// LCOV_EXCL_STOP
|
|
161993
162510
|
|
|
161994
|
-
unique_ptr<BaseStatistics> StructStatistics::Copy() {
|
|
162511
|
+
unique_ptr<BaseStatistics> StructStatistics::Copy() const {
|
|
161995
162512
|
auto copy = make_unique<StructStatistics>(type);
|
|
161996
162513
|
if (validity_stats) {
|
|
161997
162514
|
copy->validity_stats = validity_stats->Copy();
|
|
@@ -162002,8 +162519,9 @@ unique_ptr<BaseStatistics> StructStatistics::Copy() {
|
|
|
162002
162519
|
return move(copy);
|
|
162003
162520
|
}
|
|
162004
162521
|
|
|
162005
|
-
void StructStatistics::Serialize(
|
|
162006
|
-
|
|
162522
|
+
void StructStatistics::Serialize(FieldWriter &writer) const {
|
|
162523
|
+
writer.WriteField<uint32_t>(child_stats.size());
|
|
162524
|
+
auto &serializer = writer.GetSerializer();
|
|
162007
162525
|
for (idx_t i = 0; i < child_stats.size(); i++) {
|
|
162008
162526
|
serializer.Write<bool>(child_stats[i] ? true : false);
|
|
162009
162527
|
if (child_stats[i]) {
|
|
@@ -162012,10 +162530,16 @@ void StructStatistics::Serialize(Serializer &serializer) {
|
|
|
162012
162530
|
}
|
|
162013
162531
|
}
|
|
162014
162532
|
|
|
162015
|
-
unique_ptr<BaseStatistics> StructStatistics::Deserialize(
|
|
162533
|
+
unique_ptr<BaseStatistics> StructStatistics::Deserialize(FieldReader &reader, LogicalType type) {
|
|
162016
162534
|
D_ASSERT(type.InternalType() == PhysicalType::STRUCT);
|
|
162017
162535
|
auto result = make_unique<StructStatistics>(move(type));
|
|
162018
162536
|
auto &child_types = StructType::GetChildTypes(result->type);
|
|
162537
|
+
|
|
162538
|
+
auto child_type_count = reader.ReadRequired<uint32_t>();
|
|
162539
|
+
if (child_types.size() != child_type_count) {
|
|
162540
|
+
throw InternalException("Struct stats deserialization failure: child count does not match type count!");
|
|
162541
|
+
}
|
|
162542
|
+
auto &source = reader.GetSource();
|
|
162019
162543
|
for (idx_t i = 0; i < child_types.size(); i++) {
|
|
162020
162544
|
auto has_child = source.Read<bool>();
|
|
162021
162545
|
if (has_child) {
|
|
@@ -162027,7 +162551,7 @@ unique_ptr<BaseStatistics> StructStatistics::Deserialize(Deserializer &source, L
|
|
|
162027
162551
|
return move(result);
|
|
162028
162552
|
}
|
|
162029
162553
|
|
|
162030
|
-
string StructStatistics::ToString() {
|
|
162554
|
+
string StructStatistics::ToString() const {
|
|
162031
162555
|
string result;
|
|
162032
162556
|
result += " {";
|
|
162033
162557
|
auto &child_types = StructType::GetChildTypes(type);
|
|
@@ -162042,7 +162566,7 @@ string StructStatistics::ToString() {
|
|
|
162042
162566
|
return result;
|
|
162043
162567
|
}
|
|
162044
162568
|
|
|
162045
|
-
void StructStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) {
|
|
162569
|
+
void StructStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) const {
|
|
162046
162570
|
BaseStatistics::Verify(vector, sel, count);
|
|
162047
162571
|
|
|
162048
162572
|
auto &child_entries = StructVector::GetEntries(vector);
|
|
@@ -162080,7 +162604,7 @@ unique_ptr<BaseStatistics> ValidityStatistics::Combine(const unique_ptr<BaseStat
|
|
|
162080
162604
|
}
|
|
162081
162605
|
}
|
|
162082
162606
|
|
|
162083
|
-
bool ValidityStatistics::IsConstant() {
|
|
162607
|
+
bool ValidityStatistics::IsConstant() const {
|
|
162084
162608
|
if (!has_null) {
|
|
162085
162609
|
return true;
|
|
162086
162610
|
}
|
|
@@ -162096,23 +162620,22 @@ void ValidityStatistics::Merge(const BaseStatistics &other_p) {
|
|
|
162096
162620
|
has_no_null = has_no_null || other.has_no_null;
|
|
162097
162621
|
}
|
|
162098
162622
|
|
|
162099
|
-
unique_ptr<BaseStatistics> ValidityStatistics::Copy() {
|
|
162623
|
+
unique_ptr<BaseStatistics> ValidityStatistics::Copy() const {
|
|
162100
162624
|
return make_unique<ValidityStatistics>(has_null, has_no_null);
|
|
162101
162625
|
}
|
|
162102
162626
|
|
|
162103
|
-
void ValidityStatistics::Serialize(
|
|
162104
|
-
|
|
162105
|
-
|
|
162106
|
-
serializer.Write<bool>(has_no_null);
|
|
162627
|
+
void ValidityStatistics::Serialize(FieldWriter &writer) const {
|
|
162628
|
+
writer.WriteField<bool>(has_null);
|
|
162629
|
+
writer.WriteField<bool>(has_no_null);
|
|
162107
162630
|
}
|
|
162108
162631
|
|
|
162109
|
-
unique_ptr<BaseStatistics> ValidityStatistics::Deserialize(
|
|
162110
|
-
bool has_null =
|
|
162111
|
-
bool has_no_null =
|
|
162632
|
+
unique_ptr<BaseStatistics> ValidityStatistics::Deserialize(FieldReader &reader) {
|
|
162633
|
+
bool has_null = reader.ReadRequired<bool>();
|
|
162634
|
+
bool has_no_null = reader.ReadRequired<bool>();
|
|
162112
162635
|
return make_unique<ValidityStatistics>(has_null, has_no_null);
|
|
162113
162636
|
}
|
|
162114
162637
|
|
|
162115
|
-
void ValidityStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) {
|
|
162638
|
+
void ValidityStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_t count) const {
|
|
162116
162639
|
if (has_null && has_no_null) {
|
|
162117
162640
|
// nothing to verify
|
|
162118
162641
|
return;
|
|
@@ -162136,7 +162659,7 @@ void ValidityStatistics::Verify(Vector &vector, const SelectionVector &sel, idx_
|
|
|
162136
162659
|
}
|
|
162137
162660
|
}
|
|
162138
162661
|
|
|
162139
|
-
string ValidityStatistics::ToString() {
|
|
162662
|
+
string ValidityStatistics::ToString() const {
|
|
162140
162663
|
return has_null ? "[Has Null: true]" : "[Has Null: false]";
|
|
162141
162664
|
}
|
|
162142
162665
|
|
|
@@ -164595,6 +165118,7 @@ PersistentTableData::~PersistentTableData() {
|
|
|
164595
165118
|
|
|
164596
165119
|
|
|
164597
165120
|
|
|
165121
|
+
|
|
164598
165122
|
namespace duckdb {
|
|
164599
165123
|
|
|
164600
165124
|
constexpr const idx_t RowGroup::ROW_GROUP_VECTOR_COUNT;
|
|
@@ -165312,9 +165836,11 @@ shared_ptr<VersionNode> RowGroup::DeserializeDeletes(Deserializer &source) {
|
|
|
165312
165836
|
return version_info;
|
|
165313
165837
|
}
|
|
165314
165838
|
|
|
165315
|
-
void RowGroup::Serialize(RowGroupPointer &pointer, Serializer &
|
|
165316
|
-
|
|
165317
|
-
|
|
165839
|
+
void RowGroup::Serialize(RowGroupPointer &pointer, Serializer &main_serializer) {
|
|
165840
|
+
FieldWriter writer(main_serializer);
|
|
165841
|
+
writer.WriteField<uint64_t>(pointer.row_start);
|
|
165842
|
+
writer.WriteField<uint64_t>(pointer.tuple_count);
|
|
165843
|
+
auto &serializer = writer.GetSerializer();
|
|
165318
165844
|
for (auto &stats : pointer.statistics) {
|
|
165319
165845
|
stats->Serialize(serializer);
|
|
165320
165846
|
}
|
|
@@ -165323,16 +165849,20 @@ void RowGroup::Serialize(RowGroupPointer &pointer, Serializer &serializer) {
|
|
|
165323
165849
|
serializer.Write<uint64_t>(data_pointer.offset);
|
|
165324
165850
|
}
|
|
165325
165851
|
CheckpointDeletes(pointer.versions.get(), serializer);
|
|
165852
|
+
writer.Finalize();
|
|
165326
165853
|
}
|
|
165327
165854
|
|
|
165328
|
-
RowGroupPointer RowGroup::Deserialize(Deserializer &
|
|
165855
|
+
RowGroupPointer RowGroup::Deserialize(Deserializer &main_source, const vector<ColumnDefinition> &columns) {
|
|
165329
165856
|
RowGroupPointer result;
|
|
165330
|
-
|
|
165331
|
-
|
|
165857
|
+
|
|
165858
|
+
FieldReader reader(main_source);
|
|
165859
|
+
result.row_start = reader.ReadRequired<uint64_t>();
|
|
165860
|
+
result.tuple_count = reader.ReadRequired<uint64_t>();
|
|
165332
165861
|
|
|
165333
165862
|
result.data_pointers.reserve(columns.size());
|
|
165334
165863
|
result.statistics.reserve(columns.size());
|
|
165335
165864
|
|
|
165865
|
+
auto &source = reader.GetSource();
|
|
165336
165866
|
for (idx_t i = 0; i < columns.size(); i++) {
|
|
165337
165867
|
auto stats = BaseStatistics::Deserialize(source, columns[i].type);
|
|
165338
165868
|
result.statistics.push_back(move(stats));
|
|
@@ -165344,6 +165874,8 @@ RowGroupPointer RowGroup::Deserialize(Deserializer &source, const vector<ColumnD
|
|
|
165344
165874
|
result.data_pointers.push_back(pointer);
|
|
165345
165875
|
}
|
|
165346
165876
|
result.versions = DeserializeDeletes(source);
|
|
165877
|
+
|
|
165878
|
+
reader.Finalize();
|
|
165347
165879
|
return result;
|
|
165348
165880
|
}
|
|
165349
165881
|
|
|
@@ -167306,8 +167838,11 @@ bool ValidityColumnData::CheckZonemap(ColumnScanState &state, TableFilter &filte
|
|
|
167306
167838
|
|
|
167307
167839
|
|
|
167308
167840
|
|
|
167841
|
+
|
|
167842
|
+
|
|
167309
167843
|
|
|
167310
167844
|
namespace duckdb {
|
|
167845
|
+
|
|
167311
167846
|
class ReplayState {
|
|
167312
167847
|
public:
|
|
167313
167848
|
ReplayState(DatabaseInstance &db, ClientContext &context, Deserializer &source)
|
|
@@ -167603,18 +168138,13 @@ void ReplayState::ReplayDropSchema() {
|
|
|
167603
168138
|
// Replay Custom Type
|
|
167604
168139
|
//===--------------------------------------------------------------------===//
|
|
167605
168140
|
void ReplayState::ReplayCreateType() {
|
|
167606
|
-
|
|
167607
|
-
|
|
167608
|
-
info.schema = source.Read<string>();
|
|
167609
|
-
info.name = source.Read<string>();
|
|
167610
|
-
info.type = make_unique<LogicalType>(LogicalType::Deserialize(source));
|
|
167611
|
-
|
|
168141
|
+
auto info = TypeCatalogEntry::Deserialize(source);
|
|
167612
168142
|
if (deserialize_only) {
|
|
167613
168143
|
return;
|
|
167614
168144
|
}
|
|
167615
168145
|
|
|
167616
168146
|
auto &catalog = Catalog::GetCatalog(context);
|
|
167617
|
-
catalog.CreateType(context,
|
|
168147
|
+
catalog.CreateType(context, info.get());
|
|
167618
168148
|
}
|
|
167619
168149
|
|
|
167620
168150
|
void ReplayState::ReplayDropType() {
|