diff options
author | snaury <snaury@ydb.tech> | 2023-05-22 17:00:56 +0300 |
---|---|---|
committer | snaury <snaury@ydb.tech> | 2023-05-22 17:00:56 +0300 |
commit | 73a8d0a1a16e7bf73b80621cf3351b9ac75bdd9b (patch) | |
tree | 59d811a0d7e4213744b4d1908850f7d11659cd5e | |
parent | 89cffac5fd65d1295275730239774451701c7ec0 (diff) | |
download | ydb-73a8d0a1a16e7bf73b80621cf3351b9ac75bdd9b.tar.gz |
Add SelectRowVersion by cells
-rw-r--r-- | ydb/core/tablet_flat/flat_database.cpp | 8 | ||||
-rw-r--r-- | ydb/core/tablet_flat/flat_database.h | 4 | ||||
-rw-r--r-- | ydb/core/tablet_flat/flat_row_celled.h | 33 | ||||
-rw-r--r-- | ydb/core/tablet_flat/flat_table.cpp | 20 | ||||
-rw-r--r-- | ydb/core/tablet_flat/flat_table.h | 8 |
5 files changed, 64 insertions, 9 deletions
diff --git a/ydb/core/tablet_flat/flat_database.cpp b/ydb/core/tablet_flat/flat_database.cpp index 7150ae5be3f..585b8617d19 100644 --- a/ydb/core/tablet_flat/flat_database.cpp +++ b/ydb/core/tablet_flat/flat_database.cpp @@ -241,6 +241,14 @@ TSelectRowVersionResult TDatabase::SelectRowVersion( return Require(table)->SelectRowVersion(key, Env, readFlags, visible, observer); } +TSelectRowVersionResult TDatabase::SelectRowVersion( + ui32 table, TArrayRef<const TCell> key, ui64 readFlags, + const ITransactionMapPtr& visible, + const ITransactionObserverPtr& observer) const noexcept +{ + return Require(table)->SelectRowVersion(key, Env, readFlags, visible, observer); +} + void TDatabase::CalculateReadSize(TSizeEnv& env, ui32 table, TRawVals minKey, TRawVals maxKey, TTagsRef tags, ui64 flg, ui64 items, ui64 bytes, EDirection direction, TRowVersion snapshot) diff --git a/ydb/core/tablet_flat/flat_database.h b/ydb/core/tablet_flat/flat_database.h index c2eaa3fb854..0435465d6c4 100644 --- a/ydb/core/tablet_flat/flat_database.h +++ b/ydb/core/tablet_flat/flat_database.h @@ -103,6 +103,10 @@ public: ui32 table, TRawVals key, ui64 readFlags = 0, const ITransactionMapPtr& visible = nullptr, const ITransactionObserverPtr& observer = nullptr) const noexcept; + TSelectRowVersionResult SelectRowVersion( + ui32 table, TArrayRef<const TCell> key, ui64 readFlags = 0, + const ITransactionMapPtr& visible = nullptr, + const ITransactionObserverPtr& observer = nullptr) const noexcept; bool Precharge(ui32 table, TRawVals minKey, TRawVals maxKey, TTagsRef tags, ui64 readFlags, ui64 itemsLimit, ui64 bytesLimit, diff --git a/ydb/core/tablet_flat/flat_row_celled.h b/ydb/core/tablet_flat/flat_row_celled.h index e9ff85b4f22..4dafbc621cf 100644 --- a/ydb/core/tablet_flat/flat_row_celled.h +++ b/ydb/core/tablet_flat/flat_row_celled.h @@ -2,7 +2,7 @@ #include "flat_row_nulls.h" #include <util/generic/vector.h> -#include <array> +#include <library/cpp/containers/stack_vector/stack_vec.h> namespace NKikimr { namespace NTable { @@ -12,10 +12,10 @@ namespace NTable { TCelled(TRaw key, const TKeyCellDefaults &keyDefaults, bool extend) : Size(extend ? keyDefaults->size() : Min(keyDefaults->size(), key.size())) - , Large(Size > Small.size() ? Size : 0) - , Cells(Large ? Large.begin() : Small.begin()) + , Storage(Size) + , Cells(Storage.data()) { - Y_VERIFY(key.size() <= keyDefaults->size(), "Key is tool large"); + Y_VERIFY(key.size() <= keyDefaults->size(), "Key is too large"); for (ui32 it = 0; it < Size; it++) { if (it >= key.size()) { @@ -30,6 +30,24 @@ namespace NTable { } } + TCelled(TArrayRef<const TCell> key, const TKeyCellDefaults &keyDefaults, bool extend) + : Size(extend ? keyDefaults->size() : Min(keyDefaults->size(), key.size())) + , Storage(Size) + , Cells(Storage.data()) + { + Y_VERIFY(key.size() <= keyDefaults->size(), "Key is too large"); + + for (ui32 it = 0; it < Size; it++) { + if (it >= key.size()) { + Cells[it] = keyDefaults[it]; + } else { + Cells[it] = key[it]; + } + + Bytes += Cells[it].Size(); + } + } + const TCell& operator[](size_t on) const noexcept { return Cells[on]; @@ -40,11 +58,10 @@ namespace NTable { return { Cells, Size }; } - const size_t Size = 0; + const size_t Size; size_t Bytes = 0; - std::array<TCell, 16> Small; - TVector<TCell> Large; - TCell * const Cells = nullptr; + TStackVec<TCell, 16> Storage; + TCell* const Cells; }; } diff --git a/ydb/core/tablet_flat/flat_table.cpp b/ydb/core/tablet_flat/flat_table.cpp index 80d5bbe8ecd..c88b6fd2071 100644 --- a/ydb/core/tablet_flat/flat_table.cpp +++ b/ydb/core/tablet_flat/flat_table.cpp @@ -1183,10 +1183,28 @@ TSelectRowVersionResult TTable::SelectRowVersion( const ITransactionMapPtr& visible, const ITransactionObserverPtr& observer) const noexcept { - Y_VERIFY(ColdParts.empty(), "Cannot select with cold parts"); + const TCelled key(key_, *Scheme->Keys, true); + + return SelectRowVersion(key, env, readFlags, visible, observer); +} +TSelectRowVersionResult TTable::SelectRowVersion( + TArrayRef<const TCell> key_, IPages* env, ui64 readFlags, + const ITransactionMapPtr& visible, + const ITransactionObserverPtr& observer) const noexcept +{ const TCelled key(key_, *Scheme->Keys, true); + return SelectRowVersion(key, env, readFlags, visible, observer); +} + +TSelectRowVersionResult TTable::SelectRowVersion( + const TCelled& key, IPages* env, ui64 readFlags, + const ITransactionMapPtr& visible, + const ITransactionObserverPtr& observer) const noexcept +{ + Y_VERIFY(ColdParts.empty(), "Cannot select with cold parts"); + const TRemap remap(*Scheme, { }); const NBloom::TPrefix prefix(key); diff --git a/ydb/core/tablet_flat/flat_table.h b/ydb/core/tablet_flat/flat_table.h index 6200fa9087a..71fd8ffdb30 100644 --- a/ydb/core/tablet_flat/flat_table.h +++ b/ydb/core/tablet_flat/flat_table.h @@ -152,6 +152,14 @@ public: TRawVals key, IPages* env, ui64 readFlags, const ITransactionMapPtr& visible = nullptr, const ITransactionObserverPtr& observer = nullptr) const noexcept; + TSelectRowVersionResult SelectRowVersion( + TArrayRef<const TCell> key, IPages* env, ui64 readFlags, + const ITransactionMapPtr& visible = nullptr, + const ITransactionObserverPtr& observer = nullptr) const noexcept; + TSelectRowVersionResult SelectRowVersion( + const TCelled& key, IPages* env, ui64 readFlags, + const ITransactionMapPtr& visible = nullptr, + const ITransactionObserverPtr& observer = nullptr) const noexcept; EReady Precharge(TRawVals minKey, TRawVals maxKey, TTagsRef tags, IPages* env, ui64 flg, |