| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- // Copyright (c) Meta Platforms, Inc. and affiliates.
- // This source code is licensed under both the GPLv2 (found in the
- // COPYING file in the root directory) and Apache 2.0 License
- // (found in the LICENSE.Apache file in the root directory).
- #pragma once
- #include <cstdint>
- #include <string>
- #include "rocksdb/rocksdb_namespace.h"
- #include "rocksdb/status.h"
- #include "rocksdb/wide_columns.h"
- namespace ROCKSDB_NAMESPACE {
- class Slice;
- // Wide-column serialization/deserialization primitives.
- //
- // The two main parts of the layout are 1) a sorted index containing the column
- // names and column value sizes and 2) the column values themselves. Keeping the
- // index and the values separate will enable selectively reading column values
- // down the line. Note that currently the index has to be fully parsed in order
- // to find out the offset of each column value.
- //
- // Legend: cn = column name, cv = column value, cns = column name size, cvs =
- // column value size.
- //
- // +----------+--------------+----------+-------+----------+---...
- // | version | # of columns | cns 1 | cn 1 | cvs 1 |
- // +----------+--------------+------------------+--------- +---...
- // | varint32 | varint32 | varint32 | bytes | varint32 |
- // +----------+--------------+----------+-------+----------+---...
- //
- // ... continued ...
- //
- // ...---+----------+-------+----------+-------+---...---+-------+
- // | cns N | cn N | cvs N | cv 1 | | cv N |
- // ...---+----------+-------+----------+-------+---...---+-------+
- // | varint32 | bytes | varint32 | bytes | | bytes |
- // ...---+----------+-------+----------+-------+---...---+-------+
- class WideColumnSerialization {
- public:
- static Status Serialize(const WideColumns& columns, std::string& output);
- static Status Deserialize(Slice& input, WideColumns& columns);
- static Status GetValueOfDefaultColumn(Slice& input, Slice& value);
- static constexpr uint32_t kCurrentVersion = 1;
- };
- } // namespace ROCKSDB_NAMESPACE
|