|
@ -1236,8 +1236,8 @@ void DBImpl::ReleaseSnapshot(const Snapshot* snapshot) { |
|
|
// Convenience methods
|
|
|
// Convenience methods
|
|
|
Status DBImpl::Put(const WriteOptions& o, const Slice& key, const Slice& val) { |
|
|
Status DBImpl::Put(const WriteOptions& o, const Slice& key, const Slice& val) { |
|
|
//ToDo
|
|
|
//ToDo
|
|
|
WriteBatch batch; // 主数据库的事务
|
|
|
|
|
|
WriteBatch indexBatch; // 二级索引数据库的事务
|
|
|
|
|
|
|
|
|
WriteBatch batch; |
|
|
|
|
|
WriteBatch indexBatch; |
|
|
Status s; |
|
|
Status s; |
|
|
|
|
|
|
|
|
// 如果当前是 indexDb_ 的 Put 操作,只提交主数据库的事务
|
|
|
// 如果当前是 indexDb_ 的 Put 操作,只提交主数据库的事务
|
|
@ -1273,7 +1273,7 @@ Status DBImpl::Put(const WriteOptions& o, const Slice& key, const Slice& val) { |
|
|
// 提交主数据库的 WriteBatch
|
|
|
// 提交主数据库的 WriteBatch
|
|
|
s = this->Write(o, &batch); |
|
|
s = this->Write(o, &batch); |
|
|
if (!s.ok()) { |
|
|
if (!s.ok()) { |
|
|
return s; // 如果主数据库写入失败,则直接返回错误
|
|
|
|
|
|
|
|
|
return s; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 提交二级索引数据库的 WriteBatch
|
|
|
// 提交二级索引数据库的 WriteBatch
|
|
@ -1288,10 +1288,10 @@ Status DBImpl::Put(const WriteOptions& o, const Slice& key, const Slice& val) { |
|
|
// 执行回滚:将主数据库的删除操作写入
|
|
|
// 执行回滚:将主数据库的删除操作写入
|
|
|
Status rollbackStatus = this->Write(o, &batch); |
|
|
Status rollbackStatus = this->Write(o, &batch); |
|
|
if (!rollbackStatus.ok()) { |
|
|
if (!rollbackStatus.ok()) { |
|
|
return rollbackStatus; // 如果回滚操作失败,返回回滚错误
|
|
|
|
|
|
|
|
|
return rollbackStatus; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return s; // 返回二级索引数据库写入失败的状态
|
|
|
|
|
|
|
|
|
return s; |
|
|
} |
|
|
} |
|
|
} else { |
|
|
} else { |
|
|
// 如果是 indexDb_ 调用 Put,则只提交主数据库的 WriteBatch
|
|
|
// 如果是 indexDb_ 调用 Put,则只提交主数据库的 WriteBatch
|
|
@ -1302,15 +1302,15 @@ Status DBImpl::Put(const WriteOptions& o, const Slice& key, const Slice& val) { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return Status::OK(); // 成功时返回 OK
|
|
|
|
|
|
|
|
|
return Status::OK(); |
|
|
//ToDo end
|
|
|
//ToDo end
|
|
|
//return DB::Put(o, key, val);
|
|
|
//return DB::Put(o, key, val);
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
Status DBImpl::Delete(const WriteOptions& options, const Slice& key) { |
|
|
Status DBImpl::Delete(const WriteOptions& options, const Slice& key) { |
|
|
//ToDo
|
|
|
//ToDo
|
|
|
WriteBatch batch; // 创建主数据库的事务
|
|
|
|
|
|
WriteBatch indexBatch; // 创建二级索引数据库的事务
|
|
|
|
|
|
|
|
|
WriteBatch batch; |
|
|
|
|
|
WriteBatch indexBatch; |
|
|
Status s; |
|
|
Status s; |
|
|
|
|
|
|
|
|
// 在主数据库删除数据
|
|
|
// 在主数据库删除数据
|
|
@ -1341,7 +1341,7 @@ Status DBImpl::Delete(const WriteOptions& options, const Slice& key) { |
|
|
// 提交主数据库的 WriteBatch
|
|
|
// 提交主数据库的 WriteBatch
|
|
|
s = this->Write(options, &batch); |
|
|
s = this->Write(options, &batch); |
|
|
if (!s.ok()) { |
|
|
if (!s.ok()) { |
|
|
return s; // 如果主数据库删除失败,则直接返回错误
|
|
|
|
|
|
|
|
|
return s; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 提交二级索引数据库的 WriteBatch
|
|
|
// 提交二级索引数据库的 WriteBatch
|
|
@ -1353,16 +1353,16 @@ Status DBImpl::Delete(const WriteOptions& options, const Slice& key) { |
|
|
rollbackBatch.Put(key, ""); // 将原始数据重新插入主数据库
|
|
|
rollbackBatch.Put(key, ""); // 将原始数据重新插入主数据库
|
|
|
Status rollbackStatus = this->Write(options, &rollbackBatch); |
|
|
Status rollbackStatus = this->Write(options, &rollbackBatch); |
|
|
if (!rollbackStatus.ok()) { |
|
|
if (!rollbackStatus.ok()) { |
|
|
return rollbackStatus; // 如果回滚操作失败,返回回滚错误
|
|
|
|
|
|
|
|
|
return rollbackStatus; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return s; // 返回二级索引数据库删除失败的状态
|
|
|
return s; // 返回二级索引数据库删除失败的状态
|
|
|
} |
|
|
} |
|
|
} else { |
|
|
} else { |
|
|
// 如果是 indexDb_ 调用,则仅提交该数据库的删除操作
|
|
|
// 如果是 indexDb_ 调用,则仅提交该数据库的删除操作
|
|
|
s = this->Write(options, &batch); // 删除操作直接提交给 indexDb_
|
|
|
|
|
|
|
|
|
s = this->Write(options, &batch); |
|
|
if (!s.ok()) { |
|
|
if (!s.ok()) { |
|
|
return s; // 如果操作失败,则返回错误状态
|
|
|
|
|
|
|
|
|
return s; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -1749,7 +1749,6 @@ std::vector DBImpl::QueryByIndex(const std::string& fieldName) { |
|
|
// 如果获取的值非空,则将其添加到结果列表
|
|
|
// 如果获取的值非空,则将其添加到结果列表
|
|
|
results.push_back(value); |
|
|
results.push_back(value); |
|
|
} else if (!s.ok()) { |
|
|
} else if (!s.ok()) { |
|
|
// 如果查询发生错误,则处理错误
|
|
|
|
|
|
std::cerr << "Error querying index for field: " << fieldName |
|
|
std::cerr << "Error querying index for field: " << fieldName |
|
|
<< ". Status: " << s.ToString() << std::endl; |
|
|
<< ". Status: " << s.ToString() << std::endl; |
|
|
} |
|
|
} |
|
|