From 86989711ce8d306f3b146ffe98e24aa7f2268648 Mon Sep 17 00:00:00 2001 From: James Date: Tue, 5 Aug 2014 15:36:15 +0200 Subject: [PATCH 1/2] adding a method for toJson to AqlValue. --- arangod/Aql/Query.cpp | 7 ++++--- arangod/Aql/Types.h | 48 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/arangod/Aql/Query.cpp b/arangod/Aql/Query.cpp index c97decf8ab..8afa81b950 100644 --- a/arangod/Aql/Query.cpp +++ b/arangod/Aql/Query.cpp @@ -201,13 +201,14 @@ QueryResult Query::execute () { root->execute(); AqlItemBlock* value; - + while (nullptr != (value = root->getOne())) { AqlValue val = value->getValue(0, 0); TRI_ASSERT(! val.isEmpty()); - + auto doc = value->getDocumentCollection(0); + json.add(val.toJson(doc)); // TODO: remove debug output - std::cout << val.toString(value->getDocumentCollections()[0]) << std::endl; + //std::cout << val.toString(value->getDocumentCollections()[0]) << std::endl; delete value; } diff --git a/arangod/Aql/Types.h b/arangod/Aql/Types.h index ce325dc249..512e77d318 100644 --- a/arangod/Aql/Types.h +++ b/arangod/Aql/Types.h @@ -177,7 +177,8 @@ namespace triagens { id.push_back('/'); id += std::string(key); json("_id", triagens::basics::Json(id)); - json("_rev", triagens::basics::Json(std::to_string( 17 ))); // TRI_EXTRACT_MARKER_RID))); + json("_rev", triagens::basics::Json(std::to_string( + TRI_EXTRACT_MARKER_RID(_marker) ))); json("_key", triagens::basics::Json(key)); return json.toString(); @@ -199,6 +200,51 @@ namespace triagens { return std::string(""); } } + +//////////////////////////////////////////////////////////////////////////////// +/// @brief toJson method +//////////////////////////////////////////////////////////////////////////////// + + triagens::basics::Json toJson (TRI_document_collection_t const* document) { + switch (_type) { + case JSON: { + return *_json; + } + + case SHAPED: { + TRI_shaper_t* shaper = document->getShaper(); + TRI_shaped_json_t shaped; + TRI_EXTRACT_SHAPED_JSON_MARKER(shaped, _marker); + triagens::basics::Json json(shaper->_memoryZone, + TRI_JsonShapedJson(shaper, &shaped)); + + char const* key = TRI_EXTRACT_MARKER_KEY(_marker); + std::string id(document->_info._name); + id.push_back('/'); + id += std::string(key); + json("_id", triagens::basics::Json(id)); + json("_rev", triagens::basics::Json(std::to_string( + TRI_EXTRACT_MARKER_RID(_marker) ))); + json("_key", triagens::basics::Json(key)); + + return json; + } + + case DOCVEC: { + THROW_ARANGO_EXCEPTION(TRI_ERROR_NOT_IMPLEMENTED); + } + + case RANGE: { + THROW_ARANGO_EXCEPTION(TRI_ERROR_NOT_IMPLEMENTED); + } + + case EMPTY: { + return triagens::basics::Json(); + } + } + + THROW_ARANGO_EXCEPTION(TRI_ERROR_INTERNAL); + } //////////////////////////////////////////////////////////////////////////////// /// @brief a quick method to decide whether a value is empty From 5b044a3092d29f2f2db9488bd382c01fdc94bf7d Mon Sep 17 00:00:00 2001 From: James Date: Tue, 5 Aug 2014 15:46:51 +0200 Subject: [PATCH 2/2] removing old code. --- arangod/Aql/Query.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/arangod/Aql/Query.cpp b/arangod/Aql/Query.cpp index 8afa81b950..cd102e88f0 100644 --- a/arangod/Aql/Query.cpp +++ b/arangod/Aql/Query.cpp @@ -207,8 +207,6 @@ QueryResult Query::execute () { TRI_ASSERT(! val.isEmpty()); auto doc = value->getDocumentCollection(0); json.add(val.toJson(doc)); - // TODO: remove debug output - //std::cout << val.toString(value->getDocumentCollections()[0]) << std::endl; delete value; } @@ -235,8 +233,8 @@ QueryResult Query::execute () { trx.commit(); QueryResult result(TRI_ERROR_NO_ERROR); - result.json = parser.ast()->toJson(TRI_UNKNOWN_MEM_ZONE); - + //result.json = parser.ast()->toJson(TRI_UNKNOWN_MEM_ZONE); + result.json = json; return result; } catch (triagens::arango::Exception const& ex) {