duckdb 0.8.2-dev3458.0 → 0.8.2-dev3949.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.gyp +2 -0
- package/package.json +1 -1
- package/src/duckdb/extension/icu/icu_extension.cpp +5 -5
- package/src/duckdb/extension/json/include/json_deserializer.hpp +7 -16
- package/src/duckdb/extension/json/include/json_serializer.hpp +9 -15
- package/src/duckdb/extension/json/json_deserializer.cpp +29 -67
- package/src/duckdb/extension/json/json_scan.cpp +1 -1
- package/src/duckdb/extension/json/json_serializer.cpp +26 -69
- package/src/duckdb/src/common/enum_util.cpp +119 -7
- package/src/duckdb/src/common/extra_type_info.cpp +7 -3
- package/src/duckdb/src/common/radix_partitioning.cpp +8 -31
- package/src/duckdb/src/common/row_operations/row_aggregate.cpp +18 -3
- package/src/duckdb/src/common/serializer/binary_deserializer.cpp +62 -77
- package/src/duckdb/src/common/serializer/binary_serializer.cpp +84 -84
- package/src/duckdb/src/common/serializer/format_serializer.cpp +1 -1
- package/src/duckdb/src/common/sort/partition_state.cpp +41 -33
- package/src/duckdb/src/common/types/data_chunk.cpp +44 -8
- package/src/duckdb/src/common/types/hyperloglog.cpp +21 -0
- package/src/duckdb/src/common/types/interval.cpp +3 -0
- package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +252 -126
- package/src/duckdb/src/common/types/row/row_layout.cpp +3 -31
- package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +40 -32
- package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +39 -26
- package/src/duckdb/src/common/types/row/tuple_data_layout.cpp +11 -1
- package/src/duckdb/src/common/types/row/tuple_data_segment.cpp +21 -16
- package/src/duckdb/src/common/types/value.cpp +63 -42
- package/src/duckdb/src/common/types/vector.cpp +33 -67
- package/src/duckdb/src/core_functions/scalar/list/list_lambdas.cpp +3 -2
- package/src/duckdb/src/execution/aggregate_hashtable.cpp +222 -364
- package/src/duckdb/src/execution/join_hashtable.cpp +5 -6
- package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +240 -310
- package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +202 -173
- package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +36 -2
- package/src/duckdb/src/execution/operator/{persistent → csv_scanner}/base_csv_reader.cpp +58 -162
- package/src/duckdb/src/execution/operator/csv_scanner/buffered_csv_reader.cpp +434 -0
- package/src/duckdb/src/execution/operator/csv_scanner/csv_buffer.cpp +80 -0
- package/src/duckdb/src/execution/operator/csv_scanner/csv_buffer_manager.cpp +90 -0
- package/src/duckdb/src/execution/operator/csv_scanner/csv_file_handle.cpp +95 -0
- package/src/duckdb/src/execution/operator/{persistent → csv_scanner}/csv_reader_options.cpp +47 -28
- package/src/duckdb/src/execution/operator/csv_scanner/csv_state_machine.cpp +35 -0
- package/src/duckdb/src/execution/operator/csv_scanner/csv_state_machine_cache.cpp +107 -0
- package/src/duckdb/src/execution/operator/{persistent → csv_scanner}/parallel_csv_reader.cpp +44 -44
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp +52 -0
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp +336 -0
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/header_detection.cpp +165 -0
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_detection.cpp +398 -0
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_refinement.cpp +175 -0
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_replacement.cpp +39 -0
- package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +1 -1
- package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +1 -2
- package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +614 -574
- package/src/duckdb/src/execution/window_executor.cpp +6 -5
- package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -0
- package/src/duckdb/src/function/scalar/strftime_format.cpp +4 -4
- package/src/duckdb/src/function/table/copy_csv.cpp +94 -96
- package/src/duckdb/src/function/table/read_csv.cpp +150 -136
- package/src/duckdb/src/function/table/table_scan.cpp +0 -2
- package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
- package/src/duckdb/src/include/duckdb/common/enum_util.hpp +24 -0
- package/src/duckdb/src/include/duckdb/common/file_opener.hpp +9 -0
- package/src/duckdb/src/include/duckdb/common/fixed_size_map.hpp +208 -0
- package/src/duckdb/src/include/duckdb/common/optional_idx.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/perfect_map_set.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/printer.hpp +11 -0
- package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +43 -30
- package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +36 -35
- package/src/duckdb/src/include/duckdb/common/serializer/deserialization_data.hpp +18 -0
- package/src/duckdb/src/include/duckdb/common/serializer/encoding_util.hpp +132 -0
- package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +125 -150
- package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +119 -107
- package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/shared_ptr.hpp +8 -0
- package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +13 -7
- package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +5 -0
- package/src/duckdb/src/include/duckdb/common/types/hyperloglog.hpp +7 -1
- package/src/duckdb/src/include/duckdb/common/types/interval.hpp +7 -0
- package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +41 -9
- package/src/duckdb/src/include/duckdb/common/types/row/row_data_collection_scanner.hpp +5 -0
- package/src/duckdb/src/include/duckdb/common/types/row/row_layout.hpp +1 -23
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_allocator.hpp +14 -8
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +6 -3
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_layout.hpp +7 -0
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_segment.hpp +13 -8
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_states.hpp +3 -2
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/vector.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +125 -146
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_hash_aggregate.hpp +5 -4
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_window.hpp +4 -3
- package/src/duckdb/src/include/duckdb/execution/operator/{persistent → scan/csv}/base_csv_reader.hpp +17 -17
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/buffered_csv_reader.hpp +72 -0
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_buffer.hpp +110 -0
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_buffer_manager.hpp +103 -0
- package/src/duckdb/src/include/duckdb/execution/operator/{persistent → scan/csv}/csv_file_handle.hpp +8 -15
- package/src/duckdb/src/include/duckdb/execution/operator/{persistent → scan/csv}/csv_line_info.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/{persistent → scan/csv}/csv_reader_options.hpp +52 -28
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_sniffer.hpp +127 -0
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_state_machine.hpp +75 -0
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_state_machine_cache.hpp +51 -0
- package/src/duckdb/src/include/duckdb/execution/operator/{persistent → scan/csv}/parallel_csv_reader.hpp +21 -27
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/quote_rules.hpp +21 -0
- package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +18 -27
- package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +5 -6
- package/src/duckdb/src/include/duckdb/function/scalar/strftime_format.hpp +4 -4
- package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +17 -12
- package/src/duckdb/src/include/duckdb/main/client_context_file_opener.hpp +1 -0
- package/src/duckdb/src/include/duckdb/main/client_data.hpp +2 -1
- package/src/duckdb/src/include/duckdb/main/config.hpp +1 -0
- package/src/duckdb/src/include/duckdb/main/connection.hpp +2 -2
- package/src/duckdb/src/include/duckdb/main/relation/read_csv_relation.hpp +6 -6
- package/src/duckdb/src/include/duckdb/parallel/event.hpp +12 -1
- package/src/duckdb/src/include/duckdb/storage/block.hpp +6 -0
- package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +3 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +7 -3
- package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +4 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +5 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +3 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +3 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +3 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +3 -0
- package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +15 -3
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +4 -0
- package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
- package/src/duckdb/src/include/duckdb/verification/deserialized_statement_verifier_v2.hpp +6 -0
- package/src/duckdb/src/include/duckdb/verification/statement_verifier.hpp +1 -0
- package/src/duckdb/src/include/duckdb.h +12 -0
- package/src/duckdb/src/main/capi/logical_types-c.cpp +22 -0
- package/src/duckdb/src/main/client_context_file_opener.cpp +17 -0
- package/src/duckdb/src/main/client_verify.cpp +1 -0
- package/src/duckdb/src/main/config.cpp +2 -2
- package/src/duckdb/src/main/connection.cpp +3 -3
- package/src/duckdb/src/main/relation/read_csv_relation.cpp +19 -13
- package/src/duckdb/src/parallel/pipeline_finish_event.cpp +1 -1
- package/src/duckdb/src/parser/tableref/pivotref.cpp +0 -16
- package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +1 -1
- package/src/duckdb/src/planner/binder/statement/bind_export.cpp +41 -25
- package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +4 -4
- package/src/duckdb/src/planner/expression/bound_window_expression.cpp +10 -10
- package/src/duckdb/src/planner/logical_operator.cpp +1 -1
- package/src/duckdb/src/planner/planner.cpp +1 -1
- package/src/duckdb/src/storage/checkpoint_manager.cpp +4 -3
- package/src/duckdb/src/storage/serialization/serialize_constraint.cpp +1 -1
- package/src/duckdb/src/storage/serialization/serialize_create_info.cpp +5 -5
- package/src/duckdb/src/storage/serialization/serialize_expression.cpp +10 -10
- package/src/duckdb/src/storage/serialization/serialize_logical_operator.cpp +20 -20
- package/src/duckdb/src/storage/serialization/serialize_macro_function.cpp +2 -2
- package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +118 -89
- package/src/duckdb/src/storage/serialization/serialize_parse_info.cpp +3 -3
- package/src/duckdb/src/storage/serialization/serialize_parsed_expression.cpp +27 -27
- package/src/duckdb/src/storage/serialization/serialize_query_node.cpp +16 -16
- package/src/duckdb/src/storage/serialization/serialize_result_modifier.cpp +8 -8
- package/src/duckdb/src/storage/serialization/serialize_statement.cpp +1 -1
- package/src/duckdb/src/storage/serialization/serialize_storage.cpp +39 -0
- package/src/duckdb/src/storage/serialization/serialize_tableref.cpp +9 -9
- package/src/duckdb/src/storage/statistics/base_statistics.cpp +67 -4
- package/src/duckdb/src/storage/statistics/column_statistics.cpp +16 -0
- package/src/duckdb/src/storage/statistics/list_stats.cpp +21 -0
- package/src/duckdb/src/storage/statistics/numeric_stats.cpp +126 -1
- package/src/duckdb/src/storage/statistics/string_stats.cpp +23 -0
- package/src/duckdb/src/storage/statistics/struct_stats.cpp +27 -0
- package/src/duckdb/src/storage/storage_info.cpp +1 -1
- package/src/duckdb/src/storage/table/chunk_info.cpp +82 -3
- package/src/duckdb/src/storage/table/row_group.cpp +68 -1
- package/src/duckdb/src/storage/table/table_statistics.cpp +21 -0
- package/src/duckdb/src/storage/wal_replay.cpp +2 -2
- package/src/duckdb/src/verification/deserialized_statement_verifier_v2.cpp +15 -1
- package/src/duckdb/src/verification/statement_verifier.cpp +2 -0
- package/src/duckdb/third_party/utf8proc/include/utf8proc_wrapper.hpp +8 -0
- package/src/duckdb/ub_src_execution.cpp +0 -2
- package/src/duckdb/ub_src_execution_operator_csv_scanner.cpp +18 -0
- package/src/duckdb/ub_src_execution_operator_csv_scanner_sniffer.cpp +12 -0
- package/src/duckdb/ub_src_execution_operator_persistent.cpp +0 -12
- package/src/duckdb/ub_src_storage_serialization.cpp +2 -0
- package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +0 -1487
- package/src/duckdb/src/execution/operator/persistent/csv_buffer.cpp +0 -72
- package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +0 -158
- package/src/duckdb/src/execution/partitionable_hashtable.cpp +0 -207
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/buffered_csv_reader.hpp +0 -133
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_buffer.hpp +0 -74
- package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +0 -73
@@ -13,7 +13,6 @@
|
|
13
13
|
#include "duckdb/common/enum_util.hpp"
|
14
14
|
#include "duckdb/common/serializer/serialization_traits.hpp"
|
15
15
|
#include "duckdb/common/serializer/deserialization_data.hpp"
|
16
|
-
#include "duckdb/common/types/interval.hpp"
|
17
16
|
#include "duckdb/common/types/string_type.hpp"
|
18
17
|
#include "duckdb/common/unordered_map.hpp"
|
19
18
|
#include "duckdb/common/unordered_set.hpp"
|
@@ -21,92 +20,78 @@
|
|
21
20
|
namespace duckdb {
|
22
21
|
|
23
22
|
class FormatDeserializer {
|
24
|
-
friend Vector;
|
25
|
-
|
26
23
|
protected:
|
27
24
|
bool deserialize_enum_from_string = false;
|
28
25
|
DeserializationData data;
|
29
26
|
|
27
|
+
public:
|
28
|
+
class List {
|
29
|
+
friend FormatDeserializer;
|
30
|
+
|
31
|
+
private:
|
32
|
+
FormatDeserializer &deserializer;
|
33
|
+
explicit List(FormatDeserializer &deserializer) : deserializer(deserializer) {
|
34
|
+
}
|
35
|
+
|
36
|
+
public:
|
37
|
+
// Deserialize an element
|
38
|
+
template <class T>
|
39
|
+
T ReadElement();
|
40
|
+
|
41
|
+
// Deserialize an object
|
42
|
+
template <class FUNC>
|
43
|
+
void ReadObject(FUNC f);
|
44
|
+
};
|
45
|
+
|
30
46
|
public:
|
31
47
|
// Read into an existing value
|
32
48
|
template <typename T>
|
33
49
|
inline void ReadProperty(const field_id_t field_id, const char *tag, T &ret) {
|
34
|
-
|
50
|
+
OnPropertyBegin(field_id, tag);
|
35
51
|
ret = Read<T>();
|
52
|
+
OnPropertyEnd();
|
36
53
|
}
|
37
54
|
|
38
55
|
// Read and return a value
|
39
56
|
template <typename T>
|
40
57
|
inline T ReadProperty(const field_id_t field_id, const char *tag) {
|
41
|
-
|
42
|
-
|
58
|
+
OnPropertyBegin(field_id, tag);
|
59
|
+
auto ret = Read<T>();
|
60
|
+
OnPropertyEnd();
|
61
|
+
;
|
62
|
+
return ret;
|
43
63
|
}
|
44
64
|
|
45
|
-
//
|
65
|
+
// Default Value return
|
46
66
|
template <typename T>
|
47
|
-
inline T
|
48
|
-
|
49
|
-
|
50
|
-
if (present) {
|
51
|
-
auto item = Read<T>();
|
52
|
-
OnOptionalEnd();
|
53
|
-
return item;
|
54
|
-
} else {
|
55
|
-
OnOptionalEnd();
|
67
|
+
inline T ReadPropertyWithDefault(const field_id_t field_id, const char *tag, T &&default_value) {
|
68
|
+
if (!OnOptionalPropertyBegin(field_id, tag)) {
|
69
|
+
OnOptionalPropertyEnd(false);
|
56
70
|
return std::forward<T>(default_value);
|
57
71
|
}
|
72
|
+
auto ret = Read<T>();
|
73
|
+
OnOptionalPropertyEnd(true);
|
74
|
+
return ret;
|
58
75
|
}
|
59
76
|
|
60
|
-
//
|
77
|
+
// Default value in place
|
61
78
|
template <typename T>
|
62
|
-
inline void
|
63
|
-
|
64
|
-
auto present = OnOptionalBegin();
|
65
|
-
if (present) {
|
66
|
-
ret = Read<T>();
|
67
|
-
OnOptionalEnd();
|
68
|
-
} else {
|
79
|
+
inline void ReadPropertyWithDefault(const field_id_t field_id, const char *tag, T &ret, T &&default_value) {
|
80
|
+
if (!OnOptionalPropertyBegin(field_id, tag)) {
|
69
81
|
ret = std::forward<T>(default_value);
|
70
|
-
|
71
|
-
|
72
|
-
}
|
73
|
-
|
74
|
-
// Read optional property and return a value, or default construct it
|
75
|
-
template <typename T>
|
76
|
-
inline typename std::enable_if<std::is_default_constructible<T>::value, T>::type
|
77
|
-
ReadOptionalProperty(const field_id_t field_id, const char *tag) {
|
78
|
-
SetTag(field_id, tag);
|
79
|
-
auto present = OnOptionalBegin();
|
80
|
-
if (present) {
|
81
|
-
auto item = Read<T>();
|
82
|
-
OnOptionalEnd();
|
83
|
-
return item;
|
84
|
-
} else {
|
85
|
-
OnOptionalEnd();
|
86
|
-
return T();
|
87
|
-
}
|
88
|
-
}
|
89
|
-
|
90
|
-
// Read optional property into an existing value, or default construct it
|
91
|
-
template <typename T>
|
92
|
-
inline typename std::enable_if<std::is_default_constructible<T>::value, void>::type
|
93
|
-
ReadOptionalProperty(const field_id_t field_id, const char *tag, T &ret) {
|
94
|
-
SetTag(field_id, tag);
|
95
|
-
auto present = OnOptionalBegin();
|
96
|
-
if (present) {
|
97
|
-
ret = Read<T>();
|
98
|
-
OnOptionalEnd();
|
99
|
-
} else {
|
100
|
-
ret = T();
|
101
|
-
OnOptionalEnd();
|
82
|
+
OnOptionalPropertyEnd(false);
|
83
|
+
return;
|
102
84
|
}
|
85
|
+
ret = Read<T>();
|
86
|
+
OnOptionalPropertyEnd(true);
|
103
87
|
}
|
104
88
|
|
105
89
|
// Special case:
|
106
90
|
// Read into an existing data_ptr_t
|
107
91
|
inline void ReadProperty(const field_id_t field_id, const char *tag, data_ptr_t ret, idx_t count) {
|
108
|
-
|
92
|
+
OnPropertyBegin(field_id, tag);
|
109
93
|
ReadDataPtr(ret, count);
|
94
|
+
OnPropertyEnd();
|
110
95
|
}
|
111
96
|
|
112
97
|
//! Set a serialization property
|
@@ -127,14 +112,25 @@ public:
|
|
127
112
|
return data.Unset<T>();
|
128
113
|
}
|
129
114
|
|
130
|
-
|
131
|
-
void
|
132
|
-
|
133
|
-
|
115
|
+
template <class FUNC>
|
116
|
+
void ReadList(const field_id_t field_id, const char *tag, FUNC func) {
|
117
|
+
OnPropertyBegin(field_id, tag);
|
118
|
+
auto size = OnListBegin();
|
119
|
+
List list {*this};
|
120
|
+
for (idx_t i = 0; i < size; i++) {
|
121
|
+
func(list, i);
|
122
|
+
}
|
123
|
+
OnListEnd();
|
124
|
+
OnPropertyEnd();
|
134
125
|
}
|
135
126
|
|
136
|
-
|
127
|
+
template <class FUNC>
|
128
|
+
void ReadObject(const field_id_t field_id, const char *tag, FUNC func) {
|
129
|
+
OnPropertyBegin(field_id, tag);
|
130
|
+
OnObjectBegin();
|
131
|
+
func(*this);
|
137
132
|
OnObjectEnd();
|
133
|
+
OnPropertyEnd();
|
138
134
|
}
|
139
135
|
|
140
136
|
private:
|
@@ -147,25 +143,33 @@ private:
|
|
147
143
|
return val;
|
148
144
|
}
|
149
145
|
|
150
|
-
// Structural Types
|
151
|
-
// Deserialize a unique_ptr
|
152
146
|
template <class T = void>
|
153
147
|
inline typename std::enable_if<is_unique_ptr<T>::value, T>::type Read() {
|
154
148
|
using ELEMENT_TYPE = typename is_unique_ptr<T>::ELEMENT_TYPE;
|
155
|
-
|
156
|
-
auto
|
157
|
-
|
158
|
-
|
149
|
+
unique_ptr<ELEMENT_TYPE> ptr = nullptr;
|
150
|
+
auto is_present = OnNullableBegin();
|
151
|
+
if (is_present) {
|
152
|
+
OnObjectBegin();
|
153
|
+
ptr = ELEMENT_TYPE::FormatDeserialize(*this);
|
154
|
+
OnObjectEnd();
|
155
|
+
}
|
156
|
+
OnNullableEnd();
|
157
|
+
return ptr;
|
159
158
|
}
|
160
159
|
|
161
160
|
// Deserialize shared_ptr
|
162
161
|
template <typename T = void>
|
163
162
|
inline typename std::enable_if<is_shared_ptr<T>::value, T>::type Read() {
|
164
163
|
using ELEMENT_TYPE = typename is_shared_ptr<T>::ELEMENT_TYPE;
|
165
|
-
|
166
|
-
auto
|
167
|
-
|
168
|
-
|
164
|
+
shared_ptr<ELEMENT_TYPE> ptr = nullptr;
|
165
|
+
auto is_present = OnNullableBegin();
|
166
|
+
if (is_present) {
|
167
|
+
OnObjectBegin();
|
168
|
+
ptr = ELEMENT_TYPE::FormatDeserialize(*this);
|
169
|
+
OnObjectEnd();
|
170
|
+
}
|
171
|
+
OnNullableEnd();
|
172
|
+
return ptr;
|
169
173
|
}
|
170
174
|
|
171
175
|
// Deserialize a vector
|
@@ -178,7 +182,6 @@ private:
|
|
178
182
|
vec.push_back(Read<ELEMENT_TYPE>());
|
179
183
|
}
|
180
184
|
OnListEnd();
|
181
|
-
|
182
185
|
return vec;
|
183
186
|
}
|
184
187
|
|
@@ -202,19 +205,15 @@ private:
|
|
202
205
|
using VALUE_TYPE = typename is_unordered_map<T>::VALUE_TYPE;
|
203
206
|
|
204
207
|
T map;
|
205
|
-
auto size =
|
208
|
+
auto size = OnListBegin();
|
206
209
|
for (idx_t i = 0; i < size; i++) {
|
207
|
-
|
208
|
-
|
209
|
-
auto
|
210
|
-
|
211
|
-
OnMapValueBegin();
|
212
|
-
auto value = Read<VALUE_TYPE>();
|
213
|
-
OnMapValueEnd();
|
214
|
-
OnMapEntryEnd();
|
210
|
+
OnObjectBegin();
|
211
|
+
auto key = ReadProperty<KEY_TYPE>(0, "key");
|
212
|
+
auto value = ReadProperty<VALUE_TYPE>(1, "value");
|
213
|
+
OnObjectEnd();
|
215
214
|
map[std::move(key)] = std::move(value);
|
216
215
|
}
|
217
|
-
|
216
|
+
OnListEnd();
|
218
217
|
return map;
|
219
218
|
}
|
220
219
|
|
@@ -224,19 +223,15 @@ private:
|
|
224
223
|
using VALUE_TYPE = typename is_map<T>::VALUE_TYPE;
|
225
224
|
|
226
225
|
T map;
|
227
|
-
auto size =
|
226
|
+
auto size = OnListBegin();
|
228
227
|
for (idx_t i = 0; i < size; i++) {
|
229
|
-
|
230
|
-
|
231
|
-
auto
|
232
|
-
|
233
|
-
OnMapValueBegin();
|
234
|
-
auto value = Read<VALUE_TYPE>();
|
235
|
-
OnMapValueEnd();
|
236
|
-
OnMapEntryEnd();
|
228
|
+
OnObjectBegin();
|
229
|
+
auto key = ReadProperty<KEY_TYPE>(0, "key");
|
230
|
+
auto value = ReadProperty<VALUE_TYPE>(1, "value");
|
231
|
+
OnObjectEnd();
|
237
232
|
map[std::move(key)] = std::move(value);
|
238
233
|
}
|
239
|
-
|
234
|
+
OnListEnd();
|
240
235
|
return map;
|
241
236
|
}
|
242
237
|
|
@@ -271,15 +266,10 @@ private:
|
|
271
266
|
inline typename std::enable_if<is_pair<T>::value, T>::type Read() {
|
272
267
|
using FIRST_TYPE = typename is_pair<T>::FIRST_TYPE;
|
273
268
|
using SECOND_TYPE = typename is_pair<T>::SECOND_TYPE;
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
OnPairKeyEnd();
|
279
|
-
OnPairValueBegin();
|
280
|
-
SECOND_TYPE second = Read<SECOND_TYPE>();
|
281
|
-
OnPairValueEnd();
|
282
|
-
OnPairEnd();
|
269
|
+
OnObjectBegin();
|
270
|
+
auto first = ReadProperty<FIRST_TYPE>(0, "first");
|
271
|
+
auto second = ReadProperty<SECOND_TYPE>(1, "second");
|
272
|
+
OnObjectEnd();
|
283
273
|
return std::make_pair(first, second);
|
284
274
|
}
|
285
275
|
|
@@ -290,6 +280,12 @@ private:
|
|
290
280
|
return ReadBool();
|
291
281
|
}
|
292
282
|
|
283
|
+
// Deserialize a char
|
284
|
+
template <typename T = void>
|
285
|
+
inline typename std::enable_if<std::is_same<T, char>::value, T>::type Read() {
|
286
|
+
return ReadChar();
|
287
|
+
}
|
288
|
+
|
293
289
|
// Deserialize a int8_t
|
294
290
|
template <typename T = void>
|
295
291
|
inline typename std::enable_if<std::is_same<T, int8_t>::value, T>::type Read() {
|
@@ -367,12 +363,6 @@ private:
|
|
367
363
|
}
|
368
364
|
}
|
369
365
|
|
370
|
-
// Deserialize a interval_t
|
371
|
-
template <typename T = void>
|
372
|
-
inline typename std::enable_if<std::is_same<T, interval_t>::value, T>::type Read() {
|
373
|
-
return ReadInterval();
|
374
|
-
}
|
375
|
-
|
376
366
|
// Deserialize a hugeint_t
|
377
367
|
template <typename T = void>
|
378
368
|
inline typename std::enable_if<std::is_same<T, hugeint_t>::value, T>::type Read() {
|
@@ -392,50 +382,24 @@ private:
|
|
392
382
|
}
|
393
383
|
|
394
384
|
protected:
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
385
|
+
// Hooks for subclasses to override to implement custom behavior
|
386
|
+
virtual void OnPropertyBegin(const field_id_t field_id, const char *tag) = 0;
|
387
|
+
virtual void OnPropertyEnd() = 0;
|
388
|
+
virtual bool OnOptionalPropertyBegin(const field_id_t field_id, const char *tag) = 0;
|
389
|
+
virtual void OnOptionalPropertyEnd(bool present) = 0;
|
390
|
+
|
391
|
+
virtual void OnObjectBegin() = 0;
|
392
|
+
virtual void OnObjectEnd() = 0;
|
400
393
|
virtual idx_t OnListBegin() = 0;
|
401
|
-
virtual void OnListEnd()
|
402
|
-
|
403
|
-
virtual
|
404
|
-
virtual void OnMapEnd() {
|
405
|
-
}
|
406
|
-
virtual void OnMapEntryBegin() {
|
407
|
-
}
|
408
|
-
virtual void OnMapEntryEnd() {
|
409
|
-
}
|
410
|
-
virtual void OnMapKeyBegin() {
|
411
|
-
}
|
412
|
-
virtual void OnMapKeyEnd() {
|
413
|
-
}
|
414
|
-
virtual void OnMapValueBegin() {
|
415
|
-
}
|
416
|
-
virtual void OnMapValueEnd() {
|
417
|
-
}
|
418
|
-
virtual bool OnOptionalBegin() = 0;
|
419
|
-
virtual void OnOptionalEnd() {
|
420
|
-
}
|
421
|
-
virtual void OnObjectBegin() {
|
422
|
-
}
|
423
|
-
virtual void OnObjectEnd() {
|
424
|
-
}
|
425
|
-
virtual void OnPairBegin() {
|
426
|
-
}
|
427
|
-
virtual void OnPairKeyBegin() {
|
428
|
-
}
|
429
|
-
virtual void OnPairKeyEnd() {
|
430
|
-
}
|
431
|
-
virtual void OnPairValueBegin() {
|
432
|
-
}
|
433
|
-
virtual void OnPairValueEnd() {
|
434
|
-
}
|
435
|
-
virtual void OnPairEnd() {
|
436
|
-
}
|
394
|
+
virtual void OnListEnd() = 0;
|
395
|
+
virtual bool OnNullableBegin() = 0;
|
396
|
+
virtual void OnNullableEnd() = 0;
|
437
397
|
|
398
|
+
// Handle primitive types, a serializer needs to implement these.
|
438
399
|
virtual bool ReadBool() = 0;
|
400
|
+
virtual char ReadChar() {
|
401
|
+
throw NotImplementedException("ReadChar not implemented");
|
402
|
+
}
|
439
403
|
virtual int8_t ReadSignedInt8() = 0;
|
440
404
|
virtual uint8_t ReadUnsignedInt8() = 0;
|
441
405
|
virtual int16_t ReadSignedInt16() = 0;
|
@@ -448,8 +412,19 @@ protected:
|
|
448
412
|
virtual float ReadFloat() = 0;
|
449
413
|
virtual double ReadDouble() = 0;
|
450
414
|
virtual string ReadString() = 0;
|
451
|
-
virtual interval_t ReadInterval() = 0;
|
452
415
|
virtual void ReadDataPtr(data_ptr_t &ptr, idx_t count) = 0;
|
453
416
|
};
|
454
417
|
|
418
|
+
template <class FUNC>
|
419
|
+
void FormatDeserializer::List::ReadObject(FUNC f) {
|
420
|
+
deserializer.OnObjectBegin();
|
421
|
+
f(deserializer);
|
422
|
+
deserializer.OnObjectEnd();
|
423
|
+
}
|
424
|
+
|
425
|
+
template <class T>
|
426
|
+
T FormatDeserializer::List::ReadElement() {
|
427
|
+
return deserializer.Read<T>();
|
428
|
+
}
|
429
|
+
|
455
430
|
} // namespace duckdb
|