aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsnaury <snaury@ydb.tech>2023-05-22 17:00:56 +0300
committersnaury <snaury@ydb.tech>2023-05-22 17:00:56 +0300
commit73a8d0a1a16e7bf73b80621cf3351b9ac75bdd9b (patch)
tree59d811a0d7e4213744b4d1908850f7d11659cd5e
parent89cffac5fd65d1295275730239774451701c7ec0 (diff)
downloadydb-73a8d0a1a16e7bf73b80621cf3351b9ac75bdd9b.tar.gz
Add SelectRowVersion by cells
-rw-r--r--ydb/core/tablet_flat/flat_database.cpp8
-rw-r--r--ydb/core/tablet_flat/flat_database.h4
-rw-r--r--ydb/core/tablet_flat/flat_row_celled.h33
-rw-r--r--ydb/core/tablet_flat/flat_table.cpp20
-rw-r--r--ydb/core/tablet_flat/flat_table.h8
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,