mirror of https://gitee.com/bigwinds/arangodb
Merge branch 'devel' of ssh://github.com/triAGENS/ArangoDB into devel
This commit is contained in:
commit
40114ef954
|
@ -421,6 +421,16 @@ void Executor::generateCodeString (char const* value) {
|
||||||
_buffer->appendChar('"');
|
_buffer->appendChar('"');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief generates code for a string value
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void Executor::generateCodeString (std::string const& value) {
|
||||||
|
_buffer->appendChar('"');
|
||||||
|
_buffer->appendJsonEncoded(value.c_str());
|
||||||
|
_buffer->appendChar('"');
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief generate JavaScript code for a list
|
/// @brief generate JavaScript code for a list
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -27,8 +27,8 @@
|
||||||
/// @author Copyright 2012-2013, triAGENS GmbH, Cologne, Germany
|
/// @author Copyright 2012-2013, triAGENS GmbH, Cologne, Germany
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#ifndef ARANGODB_AQL_V8_EXECUTOR_H
|
#ifndef ARANGODB_AQL_EXECUTOR_H
|
||||||
#define ARANGODB_AQL_V8_EXECUTOR_H 1
|
#define ARANGODB_AQL_EXECUTOR_H 1
|
||||||
|
|
||||||
#include "Basics/Common.h"
|
#include "Basics/Common.h"
|
||||||
#include "Aql/Function.h"
|
#include "Aql/Function.h"
|
||||||
|
@ -121,6 +121,12 @@ namespace triagens {
|
||||||
|
|
||||||
void generateCodeString (char const*);
|
void generateCodeString (char const*);
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief generates code for a string value
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void generateCodeString (std::string const&);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief generate JavaScript code for a list
|
/// @brief generate JavaScript code for a list
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
#include "Basics/JsonHelper.h"
|
#include "Basics/JsonHelper.h"
|
||||||
#include "Basics/json.h"
|
#include "Basics/json.h"
|
||||||
#include "Basics/tri-strings.h"
|
#include "Basics/tri-strings.h"
|
||||||
|
#include "Cluster/ServerState.h"
|
||||||
#include "Utils/AqlTransaction.h"
|
#include "Utils/AqlTransaction.h"
|
||||||
#include "Utils/Exception.h"
|
#include "Utils/Exception.h"
|
||||||
#include "Utils/V8TransactionContext.h"
|
#include "Utils/V8TransactionContext.h"
|
||||||
|
@ -117,6 +118,7 @@ TRI_json_t* Profile::toJson (TRI_memory_zone_t*) {
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
Query::Query (triagens::arango::ApplicationV8* applicationV8,
|
Query::Query (triagens::arango::ApplicationV8* applicationV8,
|
||||||
|
bool contextOwnedByExterior,
|
||||||
TRI_vocbase_t* vocbase,
|
TRI_vocbase_t* vocbase,
|
||||||
char const* queryString,
|
char const* queryString,
|
||||||
size_t queryLength,
|
size_t queryLength,
|
||||||
|
@ -126,6 +128,7 @@ Query::Query (triagens::arango::ApplicationV8* applicationV8,
|
||||||
: _applicationV8(applicationV8),
|
: _applicationV8(applicationV8),
|
||||||
_vocbase(vocbase),
|
_vocbase(vocbase),
|
||||||
_executor(nullptr),
|
_executor(nullptr),
|
||||||
|
_context(nullptr),
|
||||||
_queryString(queryString),
|
_queryString(queryString),
|
||||||
_queryLength(queryLength),
|
_queryLength(queryLength),
|
||||||
_queryJson(),
|
_queryJson(),
|
||||||
|
@ -140,7 +143,9 @@ Query::Query (triagens::arango::ApplicationV8* applicationV8,
|
||||||
_parser(nullptr),
|
_parser(nullptr),
|
||||||
_trx(nullptr),
|
_trx(nullptr),
|
||||||
_engine(nullptr),
|
_engine(nullptr),
|
||||||
_part(part) {
|
_part(part),
|
||||||
|
_clusterStatus(-1),
|
||||||
|
_contextOwnedByExterior(contextOwnedByExterior) {
|
||||||
|
|
||||||
TRI_ASSERT(_vocbase != nullptr);
|
TRI_ASSERT(_vocbase != nullptr);
|
||||||
|
|
||||||
|
@ -160,6 +165,7 @@ Query::Query (triagens::arango::ApplicationV8* applicationV8,
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
Query::Query (triagens::arango::ApplicationV8* applicationV8,
|
Query::Query (triagens::arango::ApplicationV8* applicationV8,
|
||||||
|
bool contextOwnedByExterior,
|
||||||
TRI_vocbase_t* vocbase,
|
TRI_vocbase_t* vocbase,
|
||||||
triagens::basics::Json queryStruct,
|
triagens::basics::Json queryStruct,
|
||||||
TRI_json_t* options,
|
TRI_json_t* options,
|
||||||
|
@ -167,6 +173,7 @@ Query::Query (triagens::arango::ApplicationV8* applicationV8,
|
||||||
: _applicationV8(applicationV8),
|
: _applicationV8(applicationV8),
|
||||||
_vocbase(vocbase),
|
_vocbase(vocbase),
|
||||||
_executor(nullptr),
|
_executor(nullptr),
|
||||||
|
_context(nullptr),
|
||||||
_queryString(nullptr),
|
_queryString(nullptr),
|
||||||
_queryLength(0),
|
_queryLength(0),
|
||||||
_queryJson(queryStruct),
|
_queryJson(queryStruct),
|
||||||
|
@ -181,7 +188,9 @@ Query::Query (triagens::arango::ApplicationV8* applicationV8,
|
||||||
_parser(nullptr),
|
_parser(nullptr),
|
||||||
_trx(nullptr),
|
_trx(nullptr),
|
||||||
_engine(nullptr),
|
_engine(nullptr),
|
||||||
_part(part) {
|
_part(part),
|
||||||
|
_clusterStatus(-1),
|
||||||
|
_contextOwnedByExterior(contextOwnedByExterior) {
|
||||||
|
|
||||||
TRI_ASSERT(_vocbase != nullptr);
|
TRI_ASSERT(_vocbase != nullptr);
|
||||||
|
|
||||||
|
@ -218,6 +227,12 @@ Query::~Query () {
|
||||||
_executor = nullptr;
|
_executor = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_context != nullptr) {
|
||||||
|
TRI_ASSERT(! _contextOwnedByExterior);
|
||||||
|
_applicationV8->exitContext(_context);
|
||||||
|
_context = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
if (_ast != nullptr) {
|
if (_ast != nullptr) {
|
||||||
delete _ast;
|
delete _ast;
|
||||||
_ast = nullptr;
|
_ast = nullptr;
|
||||||
|
@ -248,6 +263,7 @@ Query* Query::clone (QueryPart part) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
clone.reset(new Query(_applicationV8,
|
clone.reset(new Query(_applicationV8,
|
||||||
|
false,
|
||||||
_vocbase,
|
_vocbase,
|
||||||
_queryString,
|
_queryString,
|
||||||
_queryLength,
|
_queryLength,
|
||||||
|
@ -765,6 +781,55 @@ char* Query::registerString (std::string const& p,
|
||||||
// --SECTION-- private methods
|
// --SECTION-- private methods
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief whether or not we are running in a cluster
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
bool Query::isRunningInCluster () {
|
||||||
|
if (_clusterStatus == -1) {
|
||||||
|
// not yet determined
|
||||||
|
_clusterStatus = 0;
|
||||||
|
if (triagens::arango::ServerState::instance()->isRunningInCluster()) {
|
||||||
|
_clusterStatus = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TRI_ASSERT(_clusterStatus == 0 || _clusterStatus == 1);
|
||||||
|
return (_clusterStatus == 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief enter a V8 context
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void Query::enterContext () {
|
||||||
|
if (! _contextOwnedByExterior) {
|
||||||
|
if (_context == nullptr) {
|
||||||
|
_context = _applicationV8->enterContext("STANDARD", _vocbase, false, false);
|
||||||
|
if (_context == nullptr) {
|
||||||
|
THROW_ARANGO_EXCEPTION_MESSAGE(TRI_ERROR_INTERNAL, "cannot enter V8 context");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TRI_ASSERT(_context != nullptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief return a V8 context
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void Query::exitContext () {
|
||||||
|
if (! _contextOwnedByExterior) {
|
||||||
|
if (_context != nullptr) {
|
||||||
|
if (isRunningInCluster()) {
|
||||||
|
_applicationV8->exitContext(_context);
|
||||||
|
_context = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TRI_ASSERT(_context == nullptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief fetch a boolean value from the options
|
/// @brief fetch a boolean value from the options
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -38,15 +38,12 @@
|
||||||
#include "Aql/types.h"
|
#include "Aql/types.h"
|
||||||
#include "Utils/AqlTransaction.h"
|
#include "Utils/AqlTransaction.h"
|
||||||
#include "Utils/V8TransactionContext.h"
|
#include "Utils/V8TransactionContext.h"
|
||||||
|
#include "V8Server/ApplicationV8.h"
|
||||||
|
|
||||||
struct TRI_json_t;
|
struct TRI_json_t;
|
||||||
struct TRI_vocbase_s;
|
struct TRI_vocbase_s;
|
||||||
|
|
||||||
namespace triagens {
|
namespace triagens {
|
||||||
namespace arango {
|
|
||||||
class ApplicationV8;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace aql {
|
namespace aql {
|
||||||
|
|
||||||
struct AstNode;
|
struct AstNode;
|
||||||
|
@ -132,6 +129,7 @@ namespace triagens {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Query (triagens::arango::ApplicationV8*,
|
Query (triagens::arango::ApplicationV8*,
|
||||||
|
bool,
|
||||||
struct TRI_vocbase_s*,
|
struct TRI_vocbase_s*,
|
||||||
char const*,
|
char const*,
|
||||||
size_t,
|
size_t,
|
||||||
|
@ -140,6 +138,7 @@ namespace triagens {
|
||||||
QueryPart);
|
QueryPart);
|
||||||
|
|
||||||
Query (triagens::arango::ApplicationV8*,
|
Query (triagens::arango::ApplicationV8*,
|
||||||
|
bool,
|
||||||
struct TRI_vocbase_s*,
|
struct TRI_vocbase_s*,
|
||||||
triagens::basics::Json queryStruct,
|
triagens::basics::Json queryStruct,
|
||||||
struct TRI_json_t*,
|
struct TRI_json_t*,
|
||||||
|
@ -368,10 +367,28 @@ namespace triagens {
|
||||||
|
|
||||||
void setPlan (ExecutionPlan *plan);
|
void setPlan (ExecutionPlan *plan);
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief enter a V8 context
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void enterContext ();
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief exits a V8 context
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void exitContext ();
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// --SECTION-- private methods
|
// --SECTION-- private methods
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief whether or not we are running in a cluster
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
bool isRunningInCluster ();
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief fetch a boolean value from the options
|
/// @brief fetch a boolean value from the options
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -446,6 +463,12 @@ namespace triagens {
|
||||||
|
|
||||||
Executor* _executor;
|
Executor* _executor;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief the currently used V8 context
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
triagens::arango::ApplicationV8::V8Context* _context;
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief the actual query string
|
/// @brief the actual query string
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -538,6 +561,18 @@ namespace triagens {
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
QueryPart const _part;
|
QueryPart const _part;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief internal variable we use to determine whether we are in a cluster
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
short int _clusterStatus;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief whether or not someone else has acquired a V8 context for us
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
bool const _contextOwnedByExterior;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,7 +127,7 @@ void RestAqlHandler::createQueryFromJson () {
|
||||||
|
|
||||||
std::string const part = JsonHelper::getStringValue(queryJson.json(), "part", "");
|
std::string const part = JsonHelper::getStringValue(queryJson.json(), "part", "");
|
||||||
|
|
||||||
auto query = new Query(_applicationV8, _vocbase, plan, options.steal(), (part == "main" ? PART_MAIN : PART_DEPENDENT));
|
auto query = new Query(_applicationV8, false, _vocbase, plan, options.steal(), (part == "main" ? PART_MAIN : PART_DEPENDENT));
|
||||||
QueryResult res = query->prepare(_queryRegistry);
|
QueryResult res = query->prepare(_queryRegistry);
|
||||||
if (res.code != TRI_ERROR_NO_ERROR) {
|
if (res.code != TRI_ERROR_NO_ERROR) {
|
||||||
generateError(HttpResponse::BAD, TRI_ERROR_QUERY_BAD_JSON_PLAN,
|
generateError(HttpResponse::BAD, TRI_ERROR_QUERY_BAD_JSON_PLAN,
|
||||||
|
@ -188,7 +188,7 @@ void RestAqlHandler::parseQuery () {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto query = new Query(_applicationV8, _vocbase, queryString.c_str(), queryString.size(),
|
auto query = new Query(_applicationV8, false, _vocbase, queryString.c_str(), queryString.size(),
|
||||||
nullptr, nullptr, PART_MAIN);
|
nullptr, nullptr, PART_MAIN);
|
||||||
QueryResult res = query->parse();
|
QueryResult res = query->parse();
|
||||||
if (res.code != TRI_ERROR_NO_ERROR) {
|
if (res.code != TRI_ERROR_NO_ERROR) {
|
||||||
|
@ -244,7 +244,7 @@ void RestAqlHandler::explainQuery () {
|
||||||
Json options;
|
Json options;
|
||||||
options = queryJson.get("options").copy(); // cannot throw
|
options = queryJson.get("options").copy(); // cannot throw
|
||||||
|
|
||||||
auto query = new Query(_applicationV8, _vocbase, queryString.c_str(), queryString.size(),
|
auto query = new Query(_applicationV8, false, _vocbase, queryString.c_str(), queryString.size(),
|
||||||
parameters.steal(), options.steal(), PART_MAIN);
|
parameters.steal(), options.steal(), PART_MAIN);
|
||||||
QueryResult res = query->explain();
|
QueryResult res = query->explain();
|
||||||
if (res.code != TRI_ERROR_NO_ERROR) {
|
if (res.code != TRI_ERROR_NO_ERROR) {
|
||||||
|
@ -304,7 +304,7 @@ void RestAqlHandler::createQueryFromString () {
|
||||||
Json options;
|
Json options;
|
||||||
options = queryJson.get("options").copy(); // cannot throw
|
options = queryJson.get("options").copy(); // cannot throw
|
||||||
|
|
||||||
auto query = new Query(_applicationV8, _vocbase, queryString.c_str(), queryString.size(),
|
auto query = new Query(_applicationV8, false, _vocbase, queryString.c_str(), queryString.size(),
|
||||||
parameters.steal(), options.steal(), (part == "main" ? PART_MAIN : PART_DEPENDENT));
|
parameters.steal(), options.steal(), (part == "main" ? PART_MAIN : PART_DEPENDENT));
|
||||||
QueryResult res = query->prepare(_queryRegistry);
|
QueryResult res = query->prepare(_queryRegistry);
|
||||||
if (res.code != TRI_ERROR_NO_ERROR) {
|
if (res.code != TRI_ERROR_NO_ERROR) {
|
||||||
|
|
|
@ -255,7 +255,6 @@ bool ServerState::isRunningInCluster () {
|
||||||
_role == ServerState::ROLE_COORDINATOR);
|
_role == ServerState::ROLE_COORDINATOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief get the server id
|
/// @brief get the server id
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -819,10 +819,10 @@ static v8::Handle<v8::Value> JS_ParseAql (v8::Arguments const& argv) {
|
||||||
TRI_V8_TYPE_ERROR(scope, "expecting string for <querystring>");
|
TRI_V8_TYPE_ERROR(scope, "expecting string for <querystring>");
|
||||||
}
|
}
|
||||||
|
|
||||||
TRI_v8_global_t* v8g = static_cast<TRI_v8_global_t*>(v8::Isolate::GetCurrent()->GetData());
|
|
||||||
string const&& queryString = TRI_ObjectToString(argv[0]);
|
string const&& queryString = TRI_ObjectToString(argv[0]);
|
||||||
|
|
||||||
triagens::aql::Query query(v8g->_applicationV8, vocbase, queryString.c_str(), queryString.size(), nullptr, nullptr, triagens::aql::PART_MAIN);
|
TRI_v8_global_t* v8g = static_cast<TRI_v8_global_t*>(v8::Isolate::GetCurrent()->GetData());
|
||||||
|
triagens::aql::Query query(v8g->_applicationV8, true, vocbase, queryString.c_str(), queryString.size(), nullptr, nullptr, triagens::aql::PART_MAIN);
|
||||||
|
|
||||||
auto parseResult = query.parse();
|
auto parseResult = query.parse();
|
||||||
|
|
||||||
|
@ -908,7 +908,7 @@ static v8::Handle<v8::Value> JS_ExplainAql (v8::Arguments const& argv) {
|
||||||
|
|
||||||
// bind parameters will be freed by the query later
|
// bind parameters will be freed by the query later
|
||||||
TRI_v8_global_t* v8g = static_cast<TRI_v8_global_t*>(v8::Isolate::GetCurrent()->GetData());
|
TRI_v8_global_t* v8g = static_cast<TRI_v8_global_t*>(v8::Isolate::GetCurrent()->GetData());
|
||||||
triagens::aql::Query query(v8g->_applicationV8, vocbase, queryString.c_str(), queryString.size(), parameters, options, triagens::aql::PART_MAIN);
|
triagens::aql::Query query(v8g->_applicationV8, true, vocbase, queryString.c_str(), queryString.size(), parameters, options, triagens::aql::PART_MAIN);
|
||||||
|
|
||||||
auto queryResult = query.explain();
|
auto queryResult = query.explain();
|
||||||
|
|
||||||
|
@ -1000,8 +1000,8 @@ static v8::Handle<v8::Value> JS_ExecuteAqlJson (v8::Arguments const& argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
TRI_v8_global_t* v8g = static_cast<TRI_v8_global_t*>(v8::Isolate::GetCurrent()->GetData());
|
TRI_v8_global_t* v8g = static_cast<TRI_v8_global_t*>(v8::Isolate::GetCurrent()->GetData());
|
||||||
|
triagens::aql::Query query(v8g->_applicationV8, true, vocbase, Json(TRI_UNKNOWN_MEM_ZONE, queryjson), options, triagens::aql::PART_MAIN);
|
||||||
|
|
||||||
triagens::aql::Query query(v8g->_applicationV8, vocbase, Json(TRI_UNKNOWN_MEM_ZONE, queryjson), options, triagens::aql::PART_MAIN);
|
|
||||||
auto queryResult = query.execute(static_cast<triagens::aql::QueryRegistry*>(v8g->_queryRegistry));
|
auto queryResult = query.execute(static_cast<triagens::aql::QueryRegistry*>(v8g->_queryRegistry));
|
||||||
|
|
||||||
if (queryResult.code != TRI_ERROR_NO_ERROR) {
|
if (queryResult.code != TRI_ERROR_NO_ERROR) {
|
||||||
|
@ -1135,10 +1135,10 @@ static v8::Handle<v8::Value> JS_ExecuteAql (v8::Arguments const& argv) {
|
||||||
options = TRI_ObjectToJson(argv[2]);
|
options = TRI_ObjectToJson(argv[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
TRI_v8_global_t* v8g = static_cast<TRI_v8_global_t*>(v8::Isolate::GetCurrent()->GetData());
|
|
||||||
|
|
||||||
// bind parameters will be freed by the query later
|
// bind parameters will be freed by the query later
|
||||||
triagens::aql::Query query(v8g->_applicationV8, vocbase, queryString.c_str(), queryString.size(), parameters, options, triagens::aql::PART_MAIN);
|
TRI_v8_global_t* v8g = static_cast<TRI_v8_global_t*>(v8::Isolate::GetCurrent()->GetData());
|
||||||
|
triagens::aql::Query query(v8g->_applicationV8, true, vocbase, queryString.c_str(), queryString.size(), parameters, options, triagens::aql::PART_MAIN);
|
||||||
|
|
||||||
auto queryResult = query.execute(static_cast<triagens::aql::QueryRegistry*>(v8g->_queryRegistry));
|
auto queryResult = query.execute(static_cast<triagens::aql::QueryRegistry*>(v8g->_queryRegistry));
|
||||||
|
|
||||||
if (queryResult.code != TRI_ERROR_NO_ERROR) {
|
if (queryResult.code != TRI_ERROR_NO_ERROR) {
|
||||||
|
|
|
@ -159,7 +159,7 @@
|
||||||
"count": this.getPageSize()
|
"count": this.getPageSize()
|
||||||
};
|
};
|
||||||
|
|
||||||
query = "FOR x in @@collection";
|
query = "FOR x in @@collection let att = slice(ATTRIBUTES(x), 0, 10)";
|
||||||
query += this.setFiltersForQuery(bindVars);
|
query += this.setFiltersForQuery(bindVars);
|
||||||
// Sort result, only useful for a small number of docs
|
// Sort result, only useful for a small number of docs
|
||||||
if (this.getTotal() < this.MAX_SORT) {
|
if (this.getTotal() < this.MAX_SORT) {
|
||||||
|
@ -173,14 +173,14 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bindVars.count !== 'all') {
|
if (bindVars.count !== 'all') {
|
||||||
query += " LIMIT @offset, @count RETURN x";
|
query += " LIMIT @offset, @count RETURN keep(x, att)";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
tmp = {
|
tmp = {
|
||||||
"@collection": this.collectionID
|
"@collection": this.collectionID
|
||||||
};
|
};
|
||||||
bindVars = tmp;
|
bindVars = tmp;
|
||||||
query += " RETURN x";
|
query += " RETURN keep(x, att)";
|
||||||
}
|
}
|
||||||
|
|
||||||
queryObj = {
|
queryObj = {
|
||||||
|
|
|
@ -106,7 +106,20 @@
|
||||||
visibility: [true, false],
|
visibility: [true, false],
|
||||||
labels: ["datetime", "Major Page", "Minor Page"],
|
labels: ["datetime", "Major Page", "Minor Page"],
|
||||||
div: "pageFaultsChart",
|
div: "pageFaultsChart",
|
||||||
labelsKMG2: false
|
labelsKMG2: false,
|
||||||
|
axes: {
|
||||||
|
y: {
|
||||||
|
valueFormatter: function (y) {
|
||||||
|
return parseFloat(y.toPrecision(3));
|
||||||
|
},
|
||||||
|
axisLabelFormatter: function (y) {
|
||||||
|
if (y === 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return parseFloat(y.toPrecision(3));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
systemUserTime: {
|
systemUserTime: {
|
||||||
|
|
Loading…
Reference in New Issue