Add a GetComparator() function to the ColumnFamilyHandle base class so that the user's comparator can be retrieved.
Summary: MyRocks is adding support for the user of the SstFileWriter which needs a comparator. It would be more convenient to get the comparator from the column family (which already has to have it) than to have caller keep track of it. Test Plan: Standard tests (adding one for the new method) Reviewers: IslamAbdelRahman, sdong Reviewed By: sdong Subscribers: andrewkr, dhruba Differential Revision: https://reviews.facebook.net/D61155
This commit is contained in:
parent
712dd27e67
commit
cdc4eb6892
@ -81,7 +81,7 @@ Status ColumnFamilyHandleImpl::GetDescriptor(ColumnFamilyDescriptor* desc) {
|
||||
#endif // !ROCKSDB_LITE
|
||||
}
|
||||
|
||||
const Comparator* ColumnFamilyHandleImpl::user_comparator() const {
|
||||
const Comparator* ColumnFamilyHandleImpl::GetComparator() const {
|
||||
return cfd()->user_comparator();
|
||||
}
|
||||
|
||||
@ -1007,8 +1007,7 @@ uint32_t GetColumnFamilyID(ColumnFamilyHandle* column_family) {
|
||||
const Comparator* GetColumnFamilyUserComparator(
|
||||
ColumnFamilyHandle* column_family) {
|
||||
if (column_family != nullptr) {
|
||||
auto cfh = reinterpret_cast<ColumnFamilyHandleImpl*>(column_family);
|
||||
return cfh->user_comparator();
|
||||
return column_family->GetComparator();
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -55,11 +55,11 @@ class ColumnFamilyHandleImpl : public ColumnFamilyHandle {
|
||||
// destroy without mutex
|
||||
virtual ~ColumnFamilyHandleImpl();
|
||||
virtual ColumnFamilyData* cfd() const { return cfd_; }
|
||||
virtual const Comparator* user_comparator() const;
|
||||
|
||||
virtual uint32_t GetID() const override;
|
||||
virtual const std::string& GetName() const override;
|
||||
virtual Status GetDescriptor(ColumnFamilyDescriptor* desc) override;
|
||||
virtual const Comparator* GetComparator() const override;
|
||||
|
||||
private:
|
||||
ColumnFamilyData* cfd_;
|
||||
|
@ -1072,6 +1072,39 @@ TEST_F(ColumnFamilyTest, MemtableNotSupportSnapshot) {
|
||||
}
|
||||
#endif // !ROCKSDB_LITE
|
||||
|
||||
class TestComparator : public Comparator {
|
||||
int Compare(const rocksdb::Slice& a, const rocksdb::Slice& b) const override {
|
||||
return 0;
|
||||
}
|
||||
const char* Name() const override { return "Test"; }
|
||||
void FindShortestSeparator(std::string* start,
|
||||
const rocksdb::Slice& limit) const override {}
|
||||
void FindShortSuccessor(std::string* key) const override {}
|
||||
};
|
||||
|
||||
static TestComparator third_comparator;
|
||||
static TestComparator fourth_comparator;
|
||||
|
||||
// Test that we can retrieve the comparator from a created CF
|
||||
TEST_F(ColumnFamilyTest, GetComparator) {
|
||||
Open();
|
||||
// Add a column family with no comparator specified
|
||||
CreateColumnFamilies({"first"});
|
||||
const Comparator* comp = handles_[0]->GetComparator();
|
||||
ASSERT_EQ(comp, BytewiseComparator());
|
||||
|
||||
// Add three column families - one with no comparator and two
|
||||
// with comparators specified
|
||||
ColumnFamilyOptions second, third, fourth;
|
||||
second.comparator = &third_comparator;
|
||||
third.comparator = &fourth_comparator;
|
||||
CreateColumnFamilies({"second", "third", "fourth"}, {second, third, fourth});
|
||||
ASSERT_EQ(handles_[1]->GetComparator(), BytewiseComparator());
|
||||
ASSERT_EQ(handles_[2]->GetComparator(), &third_comparator);
|
||||
ASSERT_EQ(handles_[3]->GetComparator(), &fourth_comparator);
|
||||
Close();
|
||||
}
|
||||
|
||||
TEST_F(ColumnFamilyTest, DifferentMergeOperators) {
|
||||
Open();
|
||||
CreateColumnFamilies({"first", "second"});
|
||||
|
@ -546,7 +546,7 @@ class ColumnFamilyHandleImplDummy : public ColumnFamilyHandleImpl {
|
||||
explicit ColumnFamilyHandleImplDummy(int id)
|
||||
: ColumnFamilyHandleImpl(nullptr, nullptr, nullptr), id_(id) {}
|
||||
uint32_t GetID() const override { return id_; }
|
||||
const Comparator* user_comparator() const override {
|
||||
const Comparator* GetComparator() const override {
|
||||
return BytewiseComparator();
|
||||
}
|
||||
|
||||
|
@ -77,6 +77,9 @@ class ColumnFamilyHandle {
|
||||
//
|
||||
// Note that this function is not supported in RocksDBLite.
|
||||
virtual Status GetDescriptor(ColumnFamilyDescriptor* desc) = 0;
|
||||
// Returns the comparator of the column family associated with the
|
||||
// current handle.
|
||||
virtual const Comparator* GetComparator() const = 0;
|
||||
};
|
||||
|
||||
static const int kMajorVersion = __ROCKSDB_MAJOR__;
|
||||
|
@ -29,7 +29,7 @@ class ColumnFamilyHandleImplDummy : public ColumnFamilyHandleImpl {
|
||||
id_(id),
|
||||
comparator_(comparator) {}
|
||||
uint32_t GetID() const override { return id_; }
|
||||
const Comparator* user_comparator() const override { return comparator_; }
|
||||
const Comparator* GetComparator() const override { return comparator_; }
|
||||
|
||||
private:
|
||||
uint32_t id_;
|
||||
|
Loading…
x
Reference in New Issue
Block a user