Skip to content
This repository was archived by the owner on May 9, 2024. It is now read-only.

Commit 391008c

Browse files
committed
Avoid negative generation in dictionary proxy.
Signed-off-by: ienkovich <[email protected]>
1 parent c9676c0 commit 391008c

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

omniscidb/StringDictionary/StringDictionaryProxy.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,13 @@ constexpr int32_t transient_id_ceil{-2};
4242

4343
StringDictionaryProxy::StringDictionaryProxy(std::shared_ptr<StringDictionary> sd,
4444
const int64_t generation)
45-
: string_dict_(sd), generation_(generation) {}
45+
: string_dict_(sd), generation_(generation) {
46+
if (generation_ < 0) {
47+
generation_ = static_cast<int64_t>(sd->storageEntryCount());
48+
} else {
49+
CHECK_LE(generation_, static_cast<int64_t>(sd->storageEntryCount()));
50+
}
51+
}
4652

4753
int32_t truncate_to_generation(const int32_t id, const size_t generation) {
4854
if (id == StringDictionary::INVALID_STR_ID) {
@@ -453,8 +459,8 @@ std::pair<const char*, size_t> StringDictionaryProxy::getStringBytes(
453459
}
454460

455461
size_t StringDictionaryProxy::storageEntryCount() const {
456-
const size_t num_storage_entries{generation_ == -1 ? string_dict_->storageEntryCount()
457-
: generation_};
462+
CHECK_GE(generation_, 0);
463+
const size_t num_storage_entries = generation_;
458464
CHECK_LE(num_storage_entries, static_cast<size_t>(std::numeric_limits<int32_t>::max()));
459465
return num_storage_entries;
460466
}
@@ -527,11 +533,7 @@ void StringDictionaryProxy::updateGeneration(const int64_t generation) noexcept
527533
if (generation == -1) {
528534
return;
529535
}
530-
if (generation_ != -1) {
531-
CHECK_EQ(generation_, generation);
532-
return;
533-
}
534-
generation_ = generation;
536+
CHECK_EQ(generation_, generation);
535537
}
536538

537539
size_t StringDictionaryProxy::getTransientBulkImpl(

omniscidb/StringDictionary/StringDictionaryProxy.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ class StringDictionaryProxy {
3939
public:
4040
StringDictionaryProxy(StringDictionaryProxy const&) = delete;
4141
StringDictionaryProxy const& operator=(StringDictionaryProxy const&) = delete;
42-
StringDictionaryProxy(std::shared_ptr<StringDictionary> sd, const int64_t generation);
42+
StringDictionaryProxy(std::shared_ptr<StringDictionary> sd,
43+
const int64_t generation = -1);
4344

4445
bool operator==(StringDictionaryProxy const&) const;
4546
bool operator!=(StringDictionaryProxy const&) const;

0 commit comments

Comments
 (0)