diff --git a/arangod/RestHandler/RestCursorHandler.cpp b/arangod/RestHandler/RestCursorHandler.cpp index 181d3d8940..c11b5796e6 100644 --- a/arangod/RestHandler/RestCursorHandler.cpp +++ b/arangod/RestHandler/RestCursorHandler.cpp @@ -325,14 +325,15 @@ arangodb::basics::Json RestCursorHandler::buildExtra( arangodb::aql::QueryResult& queryResult) const { // build "extra" attribute arangodb::basics::Json extra(arangodb::basics::Json::Object); - VPackSlice stats = queryResult.stats->slice(); - - if (!stats.isNone()) { - extra.set("stats", - arangodb::basics::Json( - TRI_UNKNOWN_MEM_ZONE, - arangodb::basics::VelocyPackHelper::velocyPackToJson(stats), - arangodb::basics::Json::AUTOFREE)); + if (queryResult.stats != nullptr) { + VPackSlice stats = queryResult.stats->slice(); + if (!stats.isNone()) { + extra.set("stats", + arangodb::basics::Json( + TRI_UNKNOWN_MEM_ZONE, + arangodb::basics::VelocyPackHelper::velocyPackToJson(stats), + arangodb::basics::Json::AUTOFREE)); + } } if (queryResult.profile != nullptr) { extra.set("profile", diff --git a/arangod/RestHandler/RestSimpleHandler.cpp b/arangod/RestHandler/RestSimpleHandler.cpp index de35f36d10..a385e54bb5 100644 --- a/arangod/RestHandler/RestSimpleHandler.cpp +++ b/arangod/RestHandler/RestSimpleHandler.cpp @@ -234,18 +234,20 @@ void RestSimpleHandler::removeByKeys(VPackSlice const& slice) { size_t ignored = 0; size_t removed = 0; - VPackSlice stats = queryResult.stats->slice(); + if (queryResult.stats != nullptr) { + VPackSlice stats = queryResult.stats->slice(); - if (!stats.isNone()) { - TRI_ASSERT(stats.isObject()); - VPackSlice found = stats.get("writesIgnored"); - if (found.isNumber()) { - ignored = found.getNumericValue(); - } + if (!stats.isNone()) { + TRI_ASSERT(stats.isObject()); + VPackSlice found = stats.get("writesIgnored"); + if (found.isNumber()) { + ignored = found.getNumericValue(); + } - found = stats.get("writesExecuted"); - if (found.isNumber()) { - removed = found.getNumericValue(); + found = stats.get("writesExecuted"); + if (found.isNumber()) { + removed = found.getNumericValue(); + } } } diff --git a/arangod/V8Server/v8-query.cpp b/arangod/V8Server/v8-query.cpp index a9a5634c85..75ad0e00c6 100644 --- a/arangod/V8Server/v8-query.cpp +++ b/arangod/V8Server/v8-query.cpp @@ -2149,18 +2149,20 @@ static void JS_RemoveByKeys(v8::FunctionCallbackInfo const& args) { size_t ignored = 0; size_t removed = 0; - VPackSlice stats = queryResult.stats->slice(); + if (queryResult.stats != nullptr) { + VPackSlice stats = queryResult.stats->slice(); - if (!stats.isNone()) { - TRI_ASSERT(stats.isObject()); - VPackSlice found = stats.get("writesIgnored"); - if (found.isNumber()) { - ignored = found.getNumericValue(); - } + if (!stats.isNone()) { + TRI_ASSERT(stats.isObject()); + VPackSlice found = stats.get("writesIgnored"); + if (found.isNumber()) { + ignored = found.getNumericValue(); + } - found = stats.get("writesExecuted"); - if (found.isNumber()) { - removed = found.getNumericValue(); + found = stats.get("writesExecuted"); + if (found.isNumber()) { + removed = found.getNumericValue(); + } } } diff --git a/arangod/V8Server/v8-vocbase.cpp b/arangod/V8Server/v8-vocbase.cpp index 39dd898171..cdbe504827 100644 --- a/arangod/V8Server/v8-vocbase.cpp +++ b/arangod/V8Server/v8-vocbase.cpp @@ -1163,11 +1163,15 @@ static void JS_ExplainAql(v8::FunctionCallbackInfo const& args) { result->Set(TRI_V8_ASCII_STRING("warnings"), TRI_ObjectJson(isolate, queryResult.warnings)); } - VPackSlice stats = queryResult.stats->slice(); - if (stats.isNone()) { - result->Set(TRI_V8_STRING("stats"), v8::Object::New(isolate)); + if (queryResult.stats != nullptr) { + VPackSlice stats = queryResult.stats->slice(); + if (stats.isNone()) { + result->Set(TRI_V8_STRING("stats"), v8::Object::New(isolate)); + } else { + result->Set(TRI_V8_STRING("stats"), TRI_VPackToV8(isolate, stats)); + } } else { - result->Set(TRI_V8_STRING("stats"), TRI_VPackToV8(isolate, stats)); + result->Set(TRI_V8_STRING("stats"), v8::Object::New(isolate)); } } @@ -1229,10 +1233,12 @@ static void JS_ExecuteAqlJson(v8::FunctionCallbackInfo const& args) { result->ForceSet(TRI_V8_ASCII_STRING("json"), TRI_ObjectJson(isolate, queryResult.json)); } - VPackSlice stats = queryResult.stats->slice(); - if (!stats.isNone()) { - result->ForceSet(TRI_V8_ASCII_STRING("stats"), - TRI_VPackToV8(isolate, stats)); + if (queryResult.stats != nullptr) { + VPackSlice stats = queryResult.stats->slice(); + if (!stats.isNone()) { + result->ForceSet(TRI_V8_ASCII_STRING("stats"), + TRI_VPackToV8(isolate, stats)); + } } if (queryResult.profile != nullptr) { result->ForceSet(TRI_V8_ASCII_STRING("profile"),