Ver código fonte

fix some bugs

main
GUJIEJASON 8 meses atrás
pai
commit
805eaff781
4 arquivos alterados com 28 adições e 9 exclusões
  1. +2
    -2
      db/db_impl.h
  2. +16
    -1
      db/fields.cpp
  3. +4
    -0
      include/leveldb/db.h
  4. +6
    -6
      test/value_field_test.cc

+ 2
- 2
db/db_impl.h Ver arquivo

@ -37,8 +37,8 @@ class DBImpl : public DB {
~DBImpl() override;
// Implementations of the DB interface
Status PutFields(const WriteOptions&, const Slice& key, const Fields& fields);
Status GetFields(const ReadOptions& options, const Slice& key, Fields& fields);
Status PutFields(const WriteOptions&, const Slice& key, const Fields& fields) override;
Status GetFields(const ReadOptions& options, const Slice& key, Fields& fields) override;
Status Put(const WriteOptions&, const Slice& key,
const Slice& value) override;

+ 16
- 1
db/fields.cpp Ver arquivo

@ -224,6 +224,10 @@ std::vector Fields::FindKeysByFields(leveldb::DB* db, const FieldAr
}
std::string iter_key = iter_key_for_parse.ToString();
std::cout << "iter_key_str: " + iter_key << std::endl;
if (std::find(deleted_keys.begin(), deleted_keys.end(), iter_key) != deleted_keys.end()
|| std::find(find_keys.begin(), find_keys.end(), iter_key) != find_keys.end()) {
continue;
@ -235,7 +239,18 @@ std::vector Fields::FindKeysByFields(leveldb::DB* db, const FieldAr
continue;
}
FieldArray iter_fields_ = Fields::ParseValue(it->value().ToString()).fields_;
std::cout << "iter_tag_str: " + tag << std::endl;
Slice iter_value_slice = it->value();
Slice iter_value_for_parse;
if (!GetLengthPrefixedSlice(&iter_value_slice, &iter_value_for_parse)) {
continue;
}
std::cout << "iter_value_str: " + iter_value_for_parse.ToString() << std::endl;
FieldArray iter_fields_ = Fields::ParseValue(iter_value_for_parse.ToString()).fields_;
// FieldArray iter_fields_ = Fields::ParseValue(it->value().ToString()).fields_;
if (iter_fields_ == search_fields_ ||
std::includes(iter_fields_.begin(), iter_fields_.end(),
search_fields_.begin(), search_fields_.end())) {

+ 4
- 0
include/leveldb/db.h Ver arquivo

@ -22,6 +22,7 @@ struct Options;
struct ReadOptions;
struct WriteOptions;
class WriteBatch;
// class Fields;
// Abstract handle to particular state of a DB.
// A Snapshot is an immutable object and can therefore be safely
@ -60,6 +61,9 @@ class LEVELDB_EXPORT DB {
virtual ~DB();
virtual Status PutFields(const WriteOptions&, const Slice& key, const Fields& fields);
virtual Status GetFields(const ReadOptions& options, const Slice& key, Fields& fields);
// Set the database entry for "key" to "value". Returns OK on success,
// and a non-OK status on error.
// Note: consider setting options.sync = true.

+ 6
- 6
test/value_field_test.cc Ver arquivo

@ -1,6 +1,7 @@
#include "gtest/gtest.h"
#include "leveldb/db.h"
#include "db/fields.h"
#include "db/db_impl.h"
#include "leveldb/write_batch.h"
using namespace leveldb;
@ -238,19 +239,18 @@ TEST_F(FieldsTest, TestBulkInsertSortSerializeAndFindKeys) {
FieldArray fields = {{"field1", "value1_" + std::to_string(i)}, {"field2", "value2_" + std::to_string(i)}};
data_to_insert[key] = Fields(fields);
Fields ffields = Fields(fields);
// 将序列化后的字段添加到 WriteBatch 中
batch.Put(key, data_to_insert[key].SerializeValue());
Status status = db_->PutFields(WriteOptions(), Slice(key), ffields);
EXPECT_TRUE(status.ok()) << "Failed to put fields for key: " << key << ", error: " << status.ToString();
}
// 提交批量写入操作
Status status = db_->Write(WriteOptions(), &batch);
EXPECT_TRUE(status.ok()) << "Failed to write batch: " << status.ToString();
// 验证插入的数据是否正确
for (size_t i = 1; i <= num_entries; ++i) {
std::string key = "key_" + std::to_string(i);
std::string value;
status = db_->Get(ReadOptions(), key, &value);
Status status = db_->Get(ReadOptions(), key, &value);
EXPECT_TRUE(status.ok()) << "Failed to read key: " << key << ", error: " << status.ToString();
// 反序列化并验证字段值

Carregando…
Cancelar
Salvar