diff --git a/arangod/Aql/Query.cpp b/arangod/Aql/Query.cpp index c97decf8ab..cd102e88f0 100644 --- a/arangod/Aql/Query.cpp +++ b/arangod/Aql/Query.cpp @@ -201,13 +201,12 @@ QueryResult Query::execute () { root->execute(); AqlItemBlock* value; - + while (nullptr != (value = root->getOne())) { AqlValue val = value->getValue(0, 0); TRI_ASSERT(! val.isEmpty()); - - // TODO: remove debug output - std::cout << val.toString(value->getDocumentCollections()[0]) << std::endl; + auto doc = value->getDocumentCollection(0); + json.add(val.toJson(doc)); delete value; } @@ -234,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) { diff --git a/arangod/Aql/Types.h b/arangod/Aql/Types.h index 7e9b274790..7a6c01074b 100644 --- a/arangod/Aql/Types.h +++ b/arangod/Aql/Types.h @@ -190,7 +190,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(); @@ -212,6 +213,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