| 1 | #include "duckdb/common/serializer/binary_deserializer.hpp" |
|---|---|
| 2 | |
| 3 | namespace duckdb { |
| 4 | |
| 5 | void BinaryDeserializer::SetTag(const char *tag) { |
| 6 | current_tag = tag; |
| 7 | stack.back().read_field_count++; |
| 8 | } |
| 9 | |
| 10 | //===--------------------------------------------------------------------===// |
| 11 | // Nested Types Hooks |
| 12 | //===--------------------------------------------------------------------===// |
| 13 | void BinaryDeserializer::OnObjectBegin() { |
| 14 | auto expected_field_count = ReadPrimitive<uint32_t>(); |
| 15 | auto expected_size = ReadPrimitive<uint64_t>(); |
| 16 | D_ASSERT(expected_field_count > 0); |
| 17 | D_ASSERT(expected_size > 0); |
| 18 | |
| 19 | stack.emplace_back(args&: expected_field_count, args&: expected_size); |
| 20 | } |
| 21 | |
| 22 | void BinaryDeserializer::OnObjectEnd() { |
| 23 | auto &frame = stack.back(); |
| 24 | if (frame.read_field_count < frame.expected_field_count) { |
| 25 | throw SerializationException("Not all fields were read. This file might have been written with a newer version " |
| 26 | "of DuckDB and is incompatible with this version of DuckDB."); |
| 27 | } |
| 28 | stack.pop_back(); |
| 29 | } |
| 30 | |
| 31 | idx_t BinaryDeserializer::OnListBegin() { |
| 32 | return ReadPrimitive<idx_t>(); |
| 33 | } |
| 34 | |
| 35 | void BinaryDeserializer::OnListEnd() { |
| 36 | } |
| 37 | |
| 38 | // Deserialize maps as [ { key: ..., value: ... } ] |
| 39 | idx_t BinaryDeserializer::OnMapBegin() { |
| 40 | return ReadPrimitive<idx_t>(); |
| 41 | } |
| 42 | |
| 43 | void BinaryDeserializer::OnMapEntryBegin() { |
| 44 | } |
| 45 | |
| 46 | void BinaryDeserializer::OnMapKeyBegin() { |
| 47 | } |
| 48 | |
| 49 | void BinaryDeserializer::OnMapValueBegin() { |
| 50 | } |
| 51 | |
| 52 | void BinaryDeserializer::OnMapEntryEnd() { |
| 53 | } |
| 54 | |
| 55 | void BinaryDeserializer::OnMapEnd() { |
| 56 | } |
| 57 | |
| 58 | void BinaryDeserializer::OnPairBegin() { |
| 59 | } |
| 60 | |
| 61 | void BinaryDeserializer::OnPairKeyBegin() { |
| 62 | } |
| 63 | |
| 64 | void BinaryDeserializer::OnPairValueBegin() { |
| 65 | } |
| 66 | |
| 67 | void BinaryDeserializer::OnPairEnd() { |
| 68 | } |
| 69 | |
| 70 | bool BinaryDeserializer::OnOptionalBegin() { |
| 71 | return ReadPrimitive<bool>(); |
| 72 | } |
| 73 | |
| 74 | //===--------------------------------------------------------------------===// |
| 75 | // Primitive Types |
| 76 | //===--------------------------------------------------------------------===// |
| 77 | bool BinaryDeserializer::ReadBool() { |
| 78 | return ReadPrimitive<bool>(); |
| 79 | } |
| 80 | |
| 81 | int8_t BinaryDeserializer::ReadSignedInt8() { |
| 82 | return ReadPrimitive<int8_t>(); |
| 83 | } |
| 84 | |
| 85 | uint8_t BinaryDeserializer::ReadUnsignedInt8() { |
| 86 | return ReadPrimitive<uint8_t>(); |
| 87 | } |
| 88 | |
| 89 | int16_t BinaryDeserializer::ReadSignedInt16() { |
| 90 | return ReadPrimitive<int16_t>(); |
| 91 | } |
| 92 | |
| 93 | uint16_t BinaryDeserializer::ReadUnsignedInt16() { |
| 94 | return ReadPrimitive<uint16_t>(); |
| 95 | } |
| 96 | |
| 97 | int32_t BinaryDeserializer::ReadSignedInt32() { |
| 98 | return ReadPrimitive<int32_t>(); |
| 99 | } |
| 100 | |
| 101 | uint32_t BinaryDeserializer::ReadUnsignedInt32() { |
| 102 | return ReadPrimitive<uint32_t>(); |
| 103 | } |
| 104 | |
| 105 | int64_t BinaryDeserializer::ReadSignedInt64() { |
| 106 | return ReadPrimitive<int64_t>(); |
| 107 | } |
| 108 | |
| 109 | uint64_t BinaryDeserializer::ReadUnsignedInt64() { |
| 110 | return ReadPrimitive<uint64_t>(); |
| 111 | } |
| 112 | |
| 113 | float BinaryDeserializer::ReadFloat() { |
| 114 | return ReadPrimitive<float>(); |
| 115 | } |
| 116 | |
| 117 | double BinaryDeserializer::ReadDouble() { |
| 118 | return ReadPrimitive<double>(); |
| 119 | } |
| 120 | |
| 121 | string BinaryDeserializer::ReadString() { |
| 122 | uint32_t size = ReadPrimitive<uint32_t>(); |
| 123 | if (size == 0) { |
| 124 | return string(); |
| 125 | } |
| 126 | auto buffer = make_unsafe_uniq_array<data_t>(n: size); |
| 127 | ReadData(buffer: buffer.get(), read_size: size); |
| 128 | return string(const_char_ptr_cast(src: buffer.get()), size); |
| 129 | } |
| 130 | |
| 131 | interval_t BinaryDeserializer::ReadInterval() { |
| 132 | return ReadPrimitive<interval_t>(); |
| 133 | } |
| 134 | |
| 135 | hugeint_t BinaryDeserializer::ReadHugeInt() { |
| 136 | return ReadPrimitive<hugeint_t>(); |
| 137 | } |
| 138 | |
| 139 | void BinaryDeserializer::ReadDataPtr(data_ptr_t &ptr, idx_t count) { |
| 140 | ReadData(buffer: ptr, read_size: count); |
| 141 | } |
| 142 | |
| 143 | } // namespace duckdb |
| 144 |