mirror of https://gitee.com/bigwinds/arangodb
Added helper functions to create HTTP Results from internal VelocyPack
This commit is contained in:
parent
9b80a8a371
commit
b2eb4fdb23
|
@ -287,6 +287,48 @@ void RestVocbaseBaseHandler::generateForbidden() {
|
||||||
"operation forbidden");
|
"operation forbidden");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief generates precondition failed
|
||||||
|
/// DEPRECATED
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void RestVocbaseBaseHandler::generatePreconditionFailed(
|
||||||
|
VPackSlice const& slice) {
|
||||||
|
TRI_ASSERT(slice.isObject());
|
||||||
|
TRI_ASSERT(slice.hasKey(TRI_VOC_ATTRIBUTE_ID));
|
||||||
|
TRI_ASSERT(slice.hasKey(TRI_VOC_ATTRIBUTE_REV));
|
||||||
|
TRI_ASSERT(slice.hasKey(TRI_VOC_ATTRIBUTE_KEY));
|
||||||
|
|
||||||
|
createResponse(HttpResponse::PRECONDITION_FAILED);
|
||||||
|
_response->setContentType("application/json; charset=utf-8");
|
||||||
|
std::string rev = VelocyPackHelper::getStringValue(slice, TRI_VOC_ATTRIBUTE_REV, "");
|
||||||
|
_response->setHeader("etag", 4, "\"" + rev + "\"");
|
||||||
|
VPackBuilder builder;
|
||||||
|
{
|
||||||
|
VPackObjectBuilder guard(&builder);
|
||||||
|
// _id and _key are safe and do not need to be JSON-encoded
|
||||||
|
builder.add("error", VPackValue(true));
|
||||||
|
builder.add(
|
||||||
|
"code",
|
||||||
|
VPackValue(static_cast<int32_t>(HttpResponse::PRECONDITION_FAILED)));
|
||||||
|
builder.add("errorNum", VPackValue(TRI_ERROR_ARANGO_CONFLICT));
|
||||||
|
builder.add("errorMessage", VPackValue("precondition failed"));
|
||||||
|
builder.add(TRI_VOC_ATTRIBUTE_ID, slice.get(TRI_VOC_ATTRIBUTE_ID));
|
||||||
|
builder.add(TRI_VOC_ATTRIBUTE_KEY, slice.get(TRI_VOC_ATTRIBUTE_KEY));
|
||||||
|
builder.add(TRI_VOC_ATTRIBUTE_REV, slice.get(TRI_VOC_ATTRIBUTE_REV));
|
||||||
|
}
|
||||||
|
|
||||||
|
VPackStringBufferAdapter buffer(_response->body().stringBuffer());
|
||||||
|
VPackDumper dumper(&buffer);
|
||||||
|
|
||||||
|
try {
|
||||||
|
dumper.dump(builder.slice());
|
||||||
|
} catch (...) {
|
||||||
|
generateError(HttpResponse::SERVER_ERROR, TRI_ERROR_INTERNAL,
|
||||||
|
"cannot generate output");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief generates precondition failed
|
/// @brief generates precondition failed
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -315,6 +357,8 @@ void RestVocbaseBaseHandler::generatePreconditionFailed(
|
||||||
.appendText("\"}");
|
.appendText("\"}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief generates not modified
|
/// @brief generates not modified
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -328,6 +372,7 @@ void RestVocbaseBaseHandler::generateNotModified(TRI_voc_rid_t rid) {
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief generates next entry from a result set
|
/// @brief generates next entry from a result set
|
||||||
|
/// DEPRECATED
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void RestVocbaseBaseHandler::generateDocument(
|
void RestVocbaseBaseHandler::generateDocument(
|
||||||
|
@ -421,6 +466,52 @@ void RestVocbaseBaseHandler::generateDocument(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief generates next entry from a result set
|
||||||
|
/// DEPRECATED
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void RestVocbaseBaseHandler::generateDocument(VPackSlice const& document,
|
||||||
|
bool generateBody) {
|
||||||
|
TRI_ASSERT(document.isObject());
|
||||||
|
TRI_ASSERT(document.hasKey(TRI_VOC_ATTRIBUTE_REV));
|
||||||
|
|
||||||
|
std::string rev = VelocyPackHelper::getStringValue(document, TRI_VOC_ATTRIBUTE_REV, "");
|
||||||
|
|
||||||
|
// and generate a response
|
||||||
|
createResponse(HttpResponse::OK);
|
||||||
|
_response->setContentType("application/json; charset=utf-8");
|
||||||
|
_response->setHeader("etag", 4, "\"" + rev + "\"");
|
||||||
|
|
||||||
|
if (generateBody) {
|
||||||
|
VPackStringBufferAdapter buffer(_response->body().stringBuffer());
|
||||||
|
VPackDumper dumper(&buffer);
|
||||||
|
try {
|
||||||
|
dumper.dump(document);
|
||||||
|
} catch (...) {
|
||||||
|
generateError(HttpResponse::SERVER_ERROR, TRI_ERROR_INTERNAL,
|
||||||
|
"cannot generate output");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// TODO can we optimize this?
|
||||||
|
// Just dump some where else to find real length
|
||||||
|
TRI_string_buffer_t tmpBuffer;
|
||||||
|
// convert object to string
|
||||||
|
TRI_InitStringBuffer(&tmpBuffer, TRI_UNKNOWN_MEM_ZONE);
|
||||||
|
|
||||||
|
VPackStringBufferAdapter buffer(&tmpBuffer);
|
||||||
|
VPackDumper dumper(&buffer);
|
||||||
|
try {
|
||||||
|
dumper.dump(document);
|
||||||
|
} catch (...) {
|
||||||
|
generateError(HttpResponse::SERVER_ERROR, TRI_ERROR_INTERNAL,
|
||||||
|
"cannot generate output");
|
||||||
|
}
|
||||||
|
_response->headResponse(TRI_LengthStringBuffer(&tmpBuffer));
|
||||||
|
TRI_DestroyStringBuffer(&tmpBuffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief generate an error message for a transaction error
|
/// @brief generate an error message for a transaction error
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -282,11 +282,18 @@ class RestVocbaseBaseHandler : public RestBaseHandler {
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief generates precondition failed, without transaction info
|
/// @brief generates precondition failed, without transaction info
|
||||||
|
/// DEPRECATED
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void generatePreconditionFailed(std::string const&, TRI_voc_key_t key,
|
void generatePreconditionFailed(std::string const&, TRI_voc_key_t key,
|
||||||
TRI_voc_rid_t rid);
|
TRI_voc_rid_t rid);
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief generates precondition failed, without transaction info
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void generatePreconditionFailed(arangodb::velocypack::Slice const& slice);
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief generates not modified
|
/// @brief generates not modified
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -295,11 +302,18 @@ class RestVocbaseBaseHandler : public RestBaseHandler {
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief generates first entry from a result set
|
/// @brief generates first entry from a result set
|
||||||
|
/// DEPRECATED
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void generateDocument(SingleCollectionReadOnlyTransaction& trx, TRI_voc_cid_t,
|
void generateDocument(SingleCollectionReadOnlyTransaction& trx, TRI_voc_cid_t,
|
||||||
TRI_doc_mptr_copy_t const&, VocShaper*, bool);
|
TRI_doc_mptr_copy_t const&, VocShaper*, bool);
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief generates first entry from a result set
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void generateDocument(arangodb::velocypack::Slice const&, bool);
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief generate an error message for a transaction error
|
/// @brief generate an error message for a transaction error
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
Loading…
Reference in New Issue