mirror of https://gitee.com/bigwinds/arangodb
Fix lastRevision in collection to use revision.
This commit is contained in:
parent
f441fceed8
commit
1a04b0112f
|
@ -1115,7 +1115,7 @@ int TRI_AddOperationTransaction(TRI_transaction_t* trx,
|
|||
copy->handle();
|
||||
}
|
||||
|
||||
document->setLastRevision(static_cast<TRI_voc_tick_t>(operation.tick), false);
|
||||
document->setLastRevision(operation.rid, false);
|
||||
|
||||
TRI_IF_FAILURE("TransactionOperationAtEnd") { return TRI_ERROR_DEBUG; }
|
||||
|
||||
|
|
|
@ -119,12 +119,24 @@ std::string TRI_RidToString(TRI_voc_rid_t rid);
|
|||
|
||||
TRI_voc_rid_t TRI_StringToRid(std::string const& ridStr);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Convert a string into a revision ID, no check variant
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
TRI_voc_rid_t TRI_StringToRid(char const* p, size_t len);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Convert a string into a revision ID, returns 0 if format invalid
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
TRI_voc_rid_t TRI_StringToRidWithCheck(std::string const& ridStr);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Convert a string into a revision ID, returns 0 if format invalid
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
TRI_voc_rid_t TRI_StringToRidWithCheck(char const* p, size_t len);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief enum for write operations
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -2371,6 +2371,14 @@ TRI_voc_rid_t TRI_StringToRid(std::string const& ridStr) {
|
|||
return HybridLogicalClock::decodeTimeStamp(ridStr);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Convert a string into a revision ID, no check variant
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
TRI_voc_rid_t TRI_StringToRid(char const* p, size_t len) {
|
||||
return HybridLogicalClock::decodeTimeStamp(p, len);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Convert a string into a revision ID, returns 0 if format invalid
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -2379,3 +2387,11 @@ TRI_voc_rid_t TRI_StringToRidWithCheck(std::string const& ridStr) {
|
|||
return HybridLogicalClock::decodeTimeStampWithCheck(ridStr);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Convert a string into a revision ID, returns 0 if format invalid
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
TRI_voc_rid_t TRI_StringToRidWithCheck(char const* p, size_t len) {
|
||||
return HybridLogicalClock::decodeTimeStampWithCheck(p, len);
|
||||
}
|
||||
|
||||
|
|
|
@ -31,9 +31,12 @@ struct DocumentOperation {
|
|||
document(document),
|
||||
header(nullptr),
|
||||
tick(0),
|
||||
rid(0),
|
||||
type(type),
|
||||
status(StatusType::CREATED) {
|
||||
TRI_ASSERT(marker != nullptr);
|
||||
VPackSlice s(static_cast<uint8_t*>(marker->vpack()));
|
||||
rid = TRI_StringToRid(s.get(StaticStrings::RevString).copyString());
|
||||
}
|
||||
|
||||
~DocumentOperation() {
|
||||
|
@ -50,6 +53,7 @@ struct DocumentOperation {
|
|||
DocumentOperation* copy =
|
||||
new DocumentOperation(trx, marker, document, type);
|
||||
copy->tick = tick;
|
||||
copy->rid = rid;
|
||||
copy->header = header;
|
||||
copy->oldHeader = oldHeader;
|
||||
copy->status = status;
|
||||
|
@ -109,6 +113,7 @@ struct DocumentOperation {
|
|||
TRI_doc_mptr_t* header;
|
||||
TRI_doc_mptr_t oldHeader;
|
||||
TRI_voc_tick_t tick;
|
||||
TRI_voc_rid_t rid;
|
||||
TRI_voc_document_operation_e type;
|
||||
StatusType status;
|
||||
};
|
||||
|
|
|
@ -103,22 +103,30 @@ class HybridLogicalClock {
|
|||
}
|
||||
|
||||
static uint64_t decodeTimeStamp(std::string const& s) {
|
||||
return decodeTimeStamp(s.c_str(), s.size());
|
||||
}
|
||||
|
||||
static uint64_t decodeTimeStamp(char const* p, size_t len) {
|
||||
uint64_t r = 0;
|
||||
for (size_t i = 0; i < s.size(); i++) {
|
||||
for (size_t i = 0; i < len; i++) {
|
||||
r = (r << 6) |
|
||||
static_cast<uint8_t>(decodeTable[static_cast<uint8_t>(s[i])]);
|
||||
static_cast<uint8_t>(decodeTable[static_cast<uint8_t>(p[i])]);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
static uint64_t decodeTimeStampWithCheck(std::string const& s) {
|
||||
return decodeTimeStampWithCheck(s.c_str(), s.size());
|
||||
}
|
||||
|
||||
static uint64_t decodeTimeStampWithCheck(char const* p, size_t len) {
|
||||
// Returns 0 if format is not valid
|
||||
if (s.size() > 11) {
|
||||
if (len > 11) {
|
||||
return 0;
|
||||
}
|
||||
uint64_t r = 0;
|
||||
for (size_t i = 0; i < s.size(); i++) {
|
||||
char c = decodeTable[static_cast<uint8_t>(s[i])];
|
||||
for (size_t i = 0; i < len; i++) {
|
||||
char c = decodeTable[static_cast<uint8_t>(p[i])];
|
||||
if (c < 0) {
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue