1
0
Fork 0

The cursor now returns VPackSlices instead of TRI_json_t

This commit is contained in:
Michael Hackstein 2016-01-27 14:26:36 +01:00
parent 19cfa3429c
commit 7360cba43a
3 changed files with 19 additions and 17 deletions

View File

@ -97,13 +97,11 @@ bool JsonCursor::hasNext() {
/// @brief return the next element /// @brief return the next element
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
TRI_json_t* JsonCursor::next() { VPackSlice JsonCursor::next() {
TRI_ASSERT_EXPENSIVE(_json != nullptr); TRI_ASSERT_EXPENSIVE(_json != nullptr);
TRI_ASSERT_EXPENSIVE(_position < _size); TRI_ASSERT_EXPENSIVE(_position < _size);
VPackSlice slice = _json->slice(); VPackSlice slice = _json->slice();
// TODO FIX THIS by returning the slice. return slice.at(_position++);
return arangodb::basics::VelocyPackHelper::velocyPackToJson(
slice.at(_position++));
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -143,14 +141,18 @@ void JsonCursor::dump(arangodb::basics::StringBuffer& buffer) {
} }
auto row = next(); auto row = next();
if (row == nullptr) { if (row.isNone()) {
THROW_ARANGO_EXCEPTION(TRI_ERROR_OUT_OF_MEMORY); THROW_ARANGO_EXCEPTION(TRI_ERROR_OUT_OF_MEMORY);
} }
int res = TRI_StringifyJson(buffer.stringBuffer(), row); arangodb::basics::VPackStringBufferAdapter bufferAdapter(
buffer.stringBuffer());
if (res != TRI_ERROR_NO_ERROR) { VPackDumper dumper(&bufferAdapter);
THROW_ARANGO_EXCEPTION(res); try {
dumper.dump(row);
} catch (...) {
/// TODO correct error Handling!
THROW_ARANGO_EXCEPTION(TRI_ERROR_INTERNAL);
} }
} }
@ -233,9 +235,10 @@ bool ExportCursor::hasNext() {
/// @brief return the next element (not implemented) /// @brief return the next element (not implemented)
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
TRI_json_t* ExportCursor::next() { VPackSlice ExportCursor::next() {
// should not be called directly // should not be called directly
return nullptr; VPackSlice slice;
return slice;
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////

View File

@ -28,7 +28,6 @@
#include "Basics/StringBuffer.h" #include "Basics/StringBuffer.h"
#include "VocBase/voc-types.h" #include "VocBase/voc-types.h"
struct TRI_json_t;
struct TRI_vocbase_t; struct TRI_vocbase_t;
namespace arangodb { namespace arangodb {
@ -91,7 +90,7 @@ class Cursor {
virtual bool hasNext() = 0; virtual bool hasNext() = 0;
virtual struct TRI_json_t* next() = 0; virtual arangodb::velocypack::Slice next() = 0;
virtual size_t count() const = 0; virtual size_t count() const = 0;
@ -124,7 +123,7 @@ class JsonCursor : public Cursor {
public: public:
bool hasNext() override final; bool hasNext() override final;
struct TRI_json_t* next() override final; arangodb::velocypack::Slice next() override final;
size_t count() const override final; size_t count() const override final;
@ -154,7 +153,7 @@ class ExportCursor : public Cursor {
public: public:
bool hasNext() override final; bool hasNext() override final;
struct TRI_json_t* next() override final; arangodb::velocypack::Slice next() override final;
size_t count() const override final; size_t count() const override final;

View File

@ -156,11 +156,11 @@ static void JS_JsonCursor(v8::FunctionCallbackInfo<v8::Value> const& args) {
auto row = cursor->next(); auto row = cursor->next();
if (row == nullptr) { if (row.isNone()) {
TRI_V8_THROW_EXCEPTION(TRI_ERROR_OUT_OF_MEMORY); TRI_V8_THROW_EXCEPTION(TRI_ERROR_OUT_OF_MEMORY);
} }
docs->Set(static_cast<uint32_t>(i), TRI_ObjectJson(isolate, row)); docs->Set(static_cast<uint32_t>(i), TRI_VPackToV8(isolate, row));
} }
result->ForceSet(TRI_V8_ASCII_STRING("result"), docs); result->ForceSet(TRI_V8_ASCII_STRING("result"), docs);