1
0
Fork 0

removed "old" AQL function AQL_EXPLAIN

This commit is contained in:
Jan Steemann 2014-09-11 14:12:01 +02:00
parent 672eec350e
commit 611ef2b73c
12 changed files with 6 additions and 538 deletions

View File

@ -1315,144 +1315,6 @@ static v8::Handle<v8::Value> JS_RunAhuacatl (v8::Arguments const& argv) {
return scope.Close(result);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief explains an AQL query
////////////////////////////////////////////////////////////////////////////////
static v8::Handle<v8::Value> JS_ExplainAhuacatl (v8::Arguments const& argv) {
v8::HandleScope scope;
v8::TryCatch tryCatch;
const uint32_t argc = argv.Length();
if (argc < 1 || argc > 3) {
TRI_V8_EXCEPTION_USAGE(scope, "AHUACATL_EXPLAIN(<querystring>, <bindvalues>, <performoptimisations>)");
}
TRI_vocbase_t* vocbase = GetContextVocBase();
if (vocbase == nullptr) {
TRI_V8_EXCEPTION(scope, TRI_ERROR_ARANGO_DATABASE_NOT_FOUND);
}
// get the query string
v8::Handle<v8::Value> queryArg = argv[0];
if (! queryArg->IsString()) {
TRI_V8_TYPE_ERROR(scope, "expecting string for <querystring>");
}
const string queryString = TRI_ObjectToString(queryArg);
// bind parameters
TRI_json_t* parameters = nullptr;
if (argc > 1) {
// parameters may still be null afterwards!
parameters = TRI_ObjectToJson(argv[1]);
}
AhuacatlGuard guard(vocbase, queryString, 0);
if (! guard.valid()) {
if (parameters != nullptr) {
TRI_FreeJson(TRI_UNKNOWN_MEM_ZONE, parameters);
}
TRI_V8_EXCEPTION_MEMORY(scope);
}
TRI_aql_context_t* context = guard.ptr();
bool performOptimisations = true;
if (argc > 2) {
// turn off optimisations ?
performOptimisations = TRI_ObjectToBoolean(argv[2]);
}
TRI_json_t* explain = 0;
if (! TRI_ValidateQueryContextAql(context) ||
! TRI_BindQueryContextAql(context, parameters) ||
! TRI_SetupCollectionsContextAql(context)) {
if (parameters != nullptr) {
TRI_FreeJson(TRI_UNKNOWN_MEM_ZONE, parameters);
}
v8::Handle<v8::Object> errorObject = CreateErrorObjectAhuacatl(&context->_error);
return scope.Close(v8::ThrowException(errorObject));
}
if (parameters != nullptr) {
TRI_FreeJson(TRI_UNKNOWN_MEM_ZONE, parameters);
}
// note: a query is not necessarily collection-based.
// this means that the _collections array might contain 0 collections!
AhuacatlTransaction<V8TransactionContext<true>> trx(vocbase, context);
int res = trx.begin();
if (res != TRI_ERROR_NO_ERROR) {
// check if there is some error data registered in the transaction
const string errorData = trx.getErrorData();
if (errorData.empty()) {
// no error data. return a regular error message
TRI_V8_EXCEPTION_MESSAGE(scope, res, "cannot explain query");
}
else {
// there is specific error data. return a more tailored error message
const string errorMsg = "cannot explain query: " + string(TRI_errno_string(res)) + ": '" + errorData + "'";
return scope.Close(v8::ThrowException(TRI_CreateErrorObject(__FILE__,
__LINE__,
res,
errorMsg)));
}
}
if ((performOptimisations && ! TRI_OptimiseQueryContextAql(context)) ||
! (explain = TRI_ExplainAql(context))) {
v8::Handle<v8::Object> errorObject = CreateErrorObjectAhuacatl(&context->_error);
return scope.Close(v8::ThrowException(errorObject));
}
trx.finish(TRI_ERROR_NO_ERROR);
TRI_ASSERT(explain);
v8::Handle<v8::Value> result;
result = TRI_ObjectJson(explain);
TRI_FreeJson(TRI_UNKNOWN_MEM_ZONE, explain);
guard.free();
if (tryCatch.HasCaught()) {
if (tryCatch.CanContinue()) {
if (tryCatch.Exception()->IsObject() && v8::Handle<v8::Array>::Cast(tryCatch.Exception())->HasOwnProperty(v8::String::New("errorNum"))) {
// we already have an ArangoError object
return scope.Close(v8::ThrowException(tryCatch.Exception()));
}
// create a new error object
v8::Handle<v8::Object> errorObject = TRI_CreateErrorObject(
__FILE__,
__LINE__,
TRI_ERROR_QUERY_SCRIPT,
TRI_ObjectToString(tryCatch.Exception()).c_str());
return scope.Close(v8::ThrowException(errorObject));
}
else {
TRI_v8_global_t* v8g = static_cast<TRI_v8_global_t*>(v8::Isolate::GetCurrent()->GetData());
v8g->_canceled = true;
return scope.Close(result);
}
}
return scope.Close(result);
}
// -----------------------------------------------------------------------------
// --SECTION-- TRI_VOCBASE_COL_T FUNCTIONS
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// --SECTION-- TRI_VOCBASE_T FUNCTIONS
// -----------------------------------------------------------------------------
@ -2675,7 +2537,6 @@ void TRI_InitV8VocBridge (v8::Handle<v8::Context> context,
// AQL functions. not intended to be used by end users
TRI_AddGlobalFunctionVocbase(context, "AHUACATL_RUN", JS_RunAhuacatl, true);
TRI_AddGlobalFunctionVocbase(context, "AHUACATL_EXPLAIN", JS_ExplainAhuacatl, true);
// new AQL functions. not intended to be used directly by end users
TRI_AddGlobalFunctionVocbase(context, "AQL_EXECUTE", JS_ExecuteAql, true);

View File

@ -1,5 +1,5 @@
/*jshint strict: false */
/*global require */
/*global require, AQL_EXPLAIN */
////////////////////////////////////////////////////////////////////////////////
/// @brief query explain actions
@ -32,7 +32,6 @@
var actions = require("org/arangodb/actions");
var ERRORS = require("internal").errors;
var EXPLAIN = require("internal").AQL_EXPLAIN;
// -----------------------------------------------------------------------------
// --SECTION-- global variables
@ -185,7 +184,7 @@ function post_api_explain (req, res) {
return;
}
var result = EXPLAIN(json.query, json.bindVars);
var result = AQL_EXPLAIN(json.query, json.bindVars);
if (result instanceof Error) {
actions.resultException(req, res, result, undefined, false);

View File

@ -1,7 +1,7 @@
/*jshint -W051: true */
/*global require, db, ArangoCollection, ArangoDatabase, ArangoCursor, ShapedJson,
RELOAD_AUTH, SYS_DEFINE_ACTION, SYS_EXECUTE_GLOBAL_CONTEXT_FUNCTION,
AHUACATL_RUN, AHUACATL_EXPLAIN, WAL_FLUSH, WAL_PROPERTIES,
AHUACATL_RUN, WAL_FLUSH, WAL_PROPERTIES,
REPLICATION_LOGGER_STATE, REPLICATION_LOGGER_CONFIGURE, REPLICATION_SERVER_ID,
REPLICATION_APPLIER_CONFIGURE, REPLICATION_APPLIER_START, REPLICATION_APPLIER_SHUTDOWN,
REPLICATION_APPLIER_FORGET, REPLICATION_APPLIER_STATE, REPLICATION_SYNCHRONISE,
@ -108,13 +108,6 @@
internal.AQL_QUERY = AHUACATL_RUN;
delete AHUACATL_RUN;
////////////////////////////////////////////////////////////////////////////////
/// @brief explains an AQL query
////////////////////////////////////////////////////////////////////////////////
internal.AQL_EXPLAIN = AHUACATL_EXPLAIN;
delete AHUACATL_EXPLAIN;
////////////////////////////////////////////////////////////////////////////////
/// @brief resets engine in development mode
////////////////////////////////////////////////////////////////////////////////

View File

@ -95,9 +95,7 @@ function assertParseError (errorCode, query) {
////////////////////////////////////////////////////////////////////////////////
function getQueryExplanation (query, bindVars) {
var result = internal.AQL_EXPLAIN(query, bindVars);
return result;
return AQL_EXPLAIN(query, bindVars);
}
////////////////////////////////////////////////////////////////////////////////

View File

@ -65,7 +65,7 @@ ArangoStatement.prototype.parse = function () {
////////////////////////////////////////////////////////////////////////////////
ArangoStatement.prototype.explain = function () {
return internal.AQL_EXPLAIN(this._query, this._bindVars);
return AQL_EXPLAIN(this._query, this._bindVars);
};
////////////////////////////////////////////////////////////////////////////////

View File

@ -29,7 +29,6 @@ var jsunity = require("jsunity");
var internal = require("internal");
var helper = require("org/arangodb/aql-helper");
var getQueryResults = helper.getQueryResults;
var getQueryExplanation = helper.getQueryExplanation;
////////////////////////////////////////////////////////////////////////////////
/// @brief test suite
@ -80,46 +79,6 @@ function ahuacatlQueryEdgesTestSuite () {
internal.db._drop("UnitTestsAhuacatlUserRelations");
},
////////////////////////////////////////////////////////////////////////////////
/// @brief checks the explain output
////////////////////////////////////////////////////////////////////////////////
testFromQueryExplain : function () {
var actual = getQueryExplanation("FOR r IN UnitTestsAhuacatlUserRelations FILTER r._from == \"" + docs["John"]._id +"\" RETURN { \"from\" : r._from, \"to\" : r._to }");
assertEqual("index", actual[0].expression.extra.accessType);
assertEqual("edge", actual[0].expression.extra.index.type);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief checks the explain output
////////////////////////////////////////////////////////////////////////////////
testToQueryExplain : function () {
var actual = getQueryExplanation("FOR r IN UnitTestsAhuacatlUserRelations FILTER r._to == \"" + docs["Fred"]._id +"\" RETURN { \"from\" : r._from, \"to\" : r._to }");
assertEqual("index", actual[0].expression.extra.accessType);
assertEqual("edge", actual[0].expression.extra.index.type);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief checks the explain output
////////////////////////////////////////////////////////////////////////////////
testFromToQueryExplain : function () {
var actual = getQueryExplanation("FOR r IN UnitTestsAhuacatlUserRelations FILTER r._from == \"" + docs["John"]._id +"\" && r._to == \"" + docs["Fred"]._id + "\" RETURN { \"from\" : r._from, \"to\" : r._to }");
assertEqual("index", actual[0].expression.extra.accessType);
assertEqual("edge", actual[0].expression.extra.index.type);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief checks the explain output
////////////////////////////////////////////////////////////////////////////////
testFromToQuerySelfExplain : function () {
var actual = getQueryExplanation("FOR r IN UnitTestsAhuacatlUserRelations FILTER r._from == \"" + docs["Self"]._id +"\" && r._to == \"" + docs["Self"]._id + "\" RETURN { \"from\" : r._from, \"to\" : r._to }");
assertEqual("index", actual[0].expression.extra.accessType);
assertEqual("edge", actual[0].expression.extra.index.type);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief checks an edge index query using _from
////////////////////////////////////////////////////////////////////////////////

View File

@ -29,7 +29,6 @@ var internal = require("internal");
var jsunity = require("jsunity");
var helper = require("org/arangodb/aql-helper");
var getQueryResults = helper.getQueryResults;
var getQueryExplanation = helper.getQueryExplanation;
////////////////////////////////////////////////////////////////////////////////
/// @brief test suite
@ -78,10 +77,6 @@ function ahuacatlHashTestSuite () {
var actual = getQueryResults(query);
assertEqual(expected, actual);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("index", explain[0].expression.extra.accessType);
},
////////////////////////////////////////////////////////////////////////////////
@ -94,10 +89,6 @@ function ahuacatlHashTestSuite () {
var actual = getQueryResults(query);
assertEqual(expected, actual);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("index", explain[0].expression.extra.accessType);
},
////////////////////////////////////////////////////////////////////////////////
@ -134,10 +125,6 @@ function ahuacatlHashTestSuite () {
var actual = getQueryResults(query, { "a": i, "b": j });
assertEqual(expected, actual);
var explain = getQueryExplanation(query, { "a": i, "b": j });
assertEqual("for", explain[0].type);
assertEqual("index", explain[0].expression.extra.accessType);
}
}
},
@ -154,10 +141,6 @@ function ahuacatlHashTestSuite () {
var actual = getQueryResults(query, { "a": i, "b": j });
assertEqual(expected, actual);
var explain = getQueryExplanation(query, { "a": i, "b": j });
assertEqual("for", explain[0].type);
assertEqual("index", explain[0].expression.extra.accessType);
}
}
},
@ -172,11 +155,6 @@ function ahuacatlHashTestSuite () {
var actual = getQueryResults(query);
assertEqual(expected, actual);
var explain = getQueryExplanation(query);
assertEqual("let", explain[0].type);
assertEqual("for", explain[1].type);
assertEqual("index", explain[1].expression.extra.accessType);
},
////////////////////////////////////////////////////////////////////////////////
@ -265,10 +243,6 @@ function ahuacatlHashTestSuite () {
var actual = getQueryResults(query, { "a": 2, "b": 3 });
assertEqual(expected, actual);
var explain = getQueryExplanation(query, { "a": 2, "b": 3 });
assertEqual("for", explain[0].type);
assertEqual("index", explain[0].expression.extra.accessType);
},
////////////////////////////////////////////////////////////////////////////////
@ -281,10 +255,6 @@ function ahuacatlHashTestSuite () {
var actual = getQueryResults(query);
assertEqual(expected, actual);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("all", explain[0].expression.extra.accessType);
},
////////////////////////////////////////////////////////////////////////////////
@ -297,10 +267,6 @@ function ahuacatlHashTestSuite () {
var actual = getQueryResults(query);
assertEqual(expected, actual);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("all", explain[0].expression.extra.accessType);
},
////////////////////////////////////////////////////////////////////////////////
@ -313,10 +279,6 @@ function ahuacatlHashTestSuite () {
var actual = getQueryResults(query);
assertEqual(expected, actual);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("all", explain[0].expression.extra.accessType);
},
////////////////////////////////////////////////////////////////////////////////
@ -329,10 +291,6 @@ function ahuacatlHashTestSuite () {
var actual = getQueryResults(query);
assertEqual(expected, actual);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("all", explain[0].expression.extra.accessType);
},
////////////////////////////////////////////////////////////////////////////////
@ -345,11 +303,7 @@ function ahuacatlHashTestSuite () {
var actual = getQueryResults(query);
assertEqual(expected, actual);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("all", explain[0].expression.extra.accessType);
},
}
};
}

View File

@ -29,7 +29,6 @@ var jsunity = require("jsunity");
var internal = require("internal");
var helper = require("org/arangodb/aql-helper");
var getQueryResults = helper.getQueryResults;
var getQueryExplanation = helper.getQueryExplanation;
var assertQueryError = helper.assertQueryError;
var errors = internal.errors;
@ -103,10 +102,6 @@ function ahuacatlQueryOptimiserInTestSuite () {
var expected = [ 'test5', 'test7' ];
var actual = getQueryResults("LET parents = [ 'test5', 'test7' ] FOR c IN " + cn + " FILTER c._key IN parents SORT c._key RETURN c._key");
assertEqual(expected, actual);
var explain = getQueryExplanation("LET parents = [ 'test5', 'test7' ] FOR c IN " + cn + " FILTER c._key IN parents SORT c._key RETURN c._key");
assertEqual("index", explain[1].expression.extra.accessType);
assertEqual("primary", explain[1].expression.extra.index.type);
},
////////////////////////////////////////////////////////////////////////////////
@ -122,10 +117,6 @@ function ahuacatlQueryOptimiserInTestSuite () {
var expected = [ 'test5', 'test7' ];
var actual = getQueryResults("LET parents = (FOR c IN " + cn + " FILTER c._key IN [ 'test5', 'test7' ] RETURN c._key) FOR c IN " + cn + " FILTER c._key IN parents SORT c._key RETURN c._key");
assertEqual(expected, actual);
var explain = getQueryExplanation("LET parents = (FOR c IN " + cn + " FILTER c._key IN [ 'test5', 'test7' ] RETURN c._key) FOR c IN " + cn + " FILTER c._key IN parents SORT c._key RETURN c._key");
assertEqual("index", explain[5].expression.extra.accessType);
assertEqual("primary", explain[5].expression.extra.index.type);
},
////////////////////////////////////////////////////////////////////////////////
@ -172,10 +163,6 @@ function ahuacatlQueryOptimiserInTestSuite () {
var expected = [ 'test5', 'test7' ];
var actual = getQueryResults("LET parents = [ 'test5', 'test7' ] FOR c IN " + cn + " FILTER c.code IN parents SORT c.code RETURN c.code");
assertEqual(expected, actual);
var explain = getQueryExplanation("LET parents = [ 'test5', 'test7' ] FOR c IN " + cn + " FILTER c.code IN parents SORT c.code RETURN c.code");
assertEqual("index", explain[1].expression.extra.accessType);
assertEqual("hash", explain[1].expression.extra.index.type);
},
////////////////////////////////////////////////////////////////////////////////
@ -192,10 +179,6 @@ function ahuacatlQueryOptimiserInTestSuite () {
var expected = [ 'test5', 'test7' ];
var actual = getQueryResults("LET parents = (FOR c IN " + cn + " FILTER c.code IN [ 'test5', 'test7' ] RETURN c.code) FOR c IN " + cn + " FILTER c.code IN parents SORT c.code RETURN c.code");
assertEqual(expected, actual);
var explain = getQueryExplanation("LET parents = (FOR c IN " + cn + " FILTER c.code IN [ 'test5', 'test7' ] RETURN c.code) FOR c IN " + cn + " FILTER c.code IN parents SORT c.code RETURN c.code");
assertEqual("index", explain[5].expression.extra.accessType);
assertEqual("hash", explain[5].expression.extra.index.type);
},
////////////////////////////////////////////////////////////////////////////////
@ -244,10 +227,6 @@ function ahuacatlQueryOptimiserInTestSuite () {
var expected = [ 'test5', 'test7' ];
var actual = getQueryResults("LET parents = [ 'test5', 'test7' ] FOR c IN " + cn + " FILTER c.code IN parents SORT c.code RETURN c.code");
assertEqual(expected, actual);
var explain = getQueryExplanation("LET parents = [ 'test5', 'test7' ] FOR c IN " + cn + " FILTER c.code IN parents SORT c.code RETURN c.code");
assertEqual("index", explain[1].expression.extra.accessType);
assertEqual("skiplist", explain[1].expression.extra.index.type);
},
////////////////////////////////////////////////////////////////////////////////
@ -264,10 +243,6 @@ function ahuacatlQueryOptimiserInTestSuite () {
var expected = [ 'test5', 'test7' ];
var actual = getQueryResults("LET parents = (FOR c IN " + cn + " FILTER c.code IN [ 'test5', 'test7' ] RETURN c.code) FOR c IN " + cn + " FILTER c.code IN parents SORT c.code RETURN c.code");
assertEqual(expected, actual);
var explain = getQueryExplanation("LET parents = (FOR c IN " + cn + " FILTER c.code IN [ 'test5', 'test7' ] RETURN c.code) FOR c IN " + cn + " FILTER c.code IN parents SORT c.code RETURN c.code");
assertEqual("index", explain[5].expression.extra.accessType);
assertEqual("skiplist", explain[5].expression.extra.index.type);
},
////////////////////////////////////////////////////////////////////////////////
@ -324,10 +299,6 @@ function ahuacatlQueryOptimiserInTestSuite () {
var actual = getQueryResults("LET parents = [ '" + cn + "/test5', '" + cn + "/test7' ] FOR c IN " + en + " FILTER c._from IN parents SORT c._to RETURN c._to");
assertEqual(expected, actual);
var explain = getQueryExplanation("LET parents = [ '" + cn + "/test5', '" + cn + "/test7' ] FOR c IN " + en + " FILTER c._from IN parents SORT c._to RETURN c._to");
assertEqual("index", explain[1].expression.extra.accessType);
assertEqual("edge", explain[1].expression.extra.index.type);
internal.db._drop(en);
},
@ -353,10 +324,6 @@ function ahuacatlQueryOptimiserInTestSuite () {
var actual = getQueryResults("LET parents = (FOR c IN " + cn + " FILTER c._key IN [ 'test5', 'test7' ] RETURN c._id) FOR c IN " + en + " FILTER c._from IN parents SORT c._to RETURN c._to");
assertEqual(expected, actual);
var explain = getQueryExplanation("LET parents = (FOR c IN " + cn + " FILTER c._key IN [ 'test5', 'test7' ] RETURN c._id) FOR c IN " + en + " FILTER c._from IN parents SORT c._to RETURN c._to");
assertEqual("index", explain[5].expression.extra.accessType);
assertEqual("edge", explain[5].expression.extra.index.type);
internal.db._drop(en);
},

View File

@ -29,7 +29,6 @@ var jsunity = require("jsunity");
var internal = require("internal");
var helper = require("org/arangodb/aql-helper");
var getQueryResults = helper.getQueryResults;
var getQueryExplanation = helper.getQueryExplanation;
////////////////////////////////////////////////////////////////////////////////
/// @brief test suite
@ -96,10 +95,6 @@ function ahuacatlQueryOptimiserLimitTestSuite () {
var actual = getQueryResults(query);
assertEqual(test.expectedLength, actual.length);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual(true, explain[0].limit);
}
},
@ -132,10 +127,6 @@ function ahuacatlQueryOptimiserLimitTestSuite () {
var actual = getQueryResults(query);
assertEqual(test.expectedLength, actual.length);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual(test.offset + test.limit, explain[0]["expression"]["extra"]["limit"]);
}
},
@ -166,10 +157,6 @@ function ahuacatlQueryOptimiserLimitTestSuite () {
var actual = getQueryResults(query);
assertEqual(0, actual.length);
var explain = getQueryExplanation(query);
assertEqual("return (empty)", explain[0].type);
assertEqual("const list", explain[0].expression.type);
}
},
@ -195,10 +182,6 @@ function ahuacatlQueryOptimiserLimitTestSuite () {
var actual = getQueryResults(query);
assertEqual(0, actual.length);
var explain = getQueryExplanation(query);
assertEqual("return (empty)", explain[0].type);
assertEqual("const list", explain[0].expression.type);
}
},
@ -216,10 +199,6 @@ function ahuacatlQueryOptimiserLimitTestSuite () {
var actual = getQueryResults(query);
assertEqual(0, actual.length);
var explain = getQueryExplanation(query);
assertEqual("return (empty)", explain[0].type);
assertEqual("const list", explain[0].expression.type);
},
////////////////////////////////////////////////////////////////////////////////
@ -231,10 +210,6 @@ function ahuacatlQueryOptimiserLimitTestSuite () {
var actual = getQueryResults(query);
assertEqual(0, actual.length);
var explain = getQueryExplanation(query);
assertEqual("return (empty)", explain[0].type);
assertEqual("const list", explain[0].expression.type);
},
////////////////////////////////////////////////////////////////////////////////
@ -266,10 +241,6 @@ function ahuacatlQueryOptimiserLimitTestSuite () {
var actual = getQueryResults(query);
assertEqual(test.expectedLength, actual.length);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual(true, explain[0].limit);
}
},
@ -297,10 +268,6 @@ function ahuacatlQueryOptimiserLimitTestSuite () {
var actual = getQueryResults(query);
assertEqual(test.expectedLength, actual.length);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual(test.offset + test.limit, explain[0]["expression"]["extra"]["limit"]);
}
},
@ -350,10 +317,6 @@ function ahuacatlQueryOptimiserLimitTestSuite () {
var actual = getQueryResults(query);
assertEqual(test.expectedLength, actual.length);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual(true, explain[0].limit);
}
},
@ -398,10 +361,6 @@ function ahuacatlQueryOptimiserLimitTestSuite () {
var actual = getQueryResults(query);
assertEqual(test.expectedLength, actual.length);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual(true, explain[0].limit);
}
},
@ -446,10 +405,6 @@ function ahuacatlQueryOptimiserLimitTestSuite () {
var actual = getQueryResults(query);
assertEqual(test.expectedLength, actual.length);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual(undefined, explain[0].limit);
}
},
@ -466,10 +421,6 @@ function ahuacatlQueryOptimiserLimitTestSuite () {
assertEqual(2, actual.length);
assertEqual(23, actual[0].value);
assertEqual(24, actual[1].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual(true, explain[0].limit);
},
////////////////////////////////////////////////////////////////////////////////
@ -486,10 +437,6 @@ function ahuacatlQueryOptimiserLimitTestSuite () {
assertEqual(20, actual[0].value);
assertEqual(21, actual[1].value);
assertEqual(29, actual[9].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual(true, explain[0].limit);
},
////////////////////////////////////////////////////////////////////////////////
@ -506,10 +453,6 @@ function ahuacatlQueryOptimiserLimitTestSuite () {
assertEqual(20, actual[0].value);
assertEqual(21, actual[1].value);
assertEqual(29, actual[9].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual(undefined, explain[0].limit);
},
////////////////////////////////////////////////////////////////////////////////
@ -525,10 +468,6 @@ function ahuacatlQueryOptimiserLimitTestSuite () {
assertEqual(2, actual.length);
assertEqual(23, actual[0].value);
assertEqual(24, actual[1].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual(true, explain[0].limit);
},
////////////////////////////////////////////////////////////////////////////////
@ -545,10 +484,6 @@ function ahuacatlQueryOptimiserLimitTestSuite () {
assertEqual(20, actual[0].value);
assertEqual(21, actual[1].value);
assertEqual(29, actual[9].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual(true, explain[0].limit);
},
////////////////////////////////////////////////////////////////////////////////
@ -565,10 +500,6 @@ function ahuacatlQueryOptimiserLimitTestSuite () {
assertEqual(20, actual[0].value);
assertEqual(21, actual[1].value);
assertEqual(29, actual[9].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual(undefined, explain[0].limit);
},
////////////////////////////////////////////////////////////////////////////////
@ -583,10 +514,6 @@ function ahuacatlQueryOptimiserLimitTestSuite () {
assertEqual(20, actual[0].value);
assertEqual(21, actual[1].value);
assertEqual(29, actual[9].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual(true, explain[0].limit);
},
////////////////////////////////////////////////////////////////////////////////
@ -603,10 +530,6 @@ function ahuacatlQueryOptimiserLimitTestSuite () {
assertEqual(21, actual[1].value);
assertEqual(22, actual[2].value);
assertEqual(29, actual[9].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual(true, explain[0].limit);
},
////////////////////////////////////////////////////////////////////////////////
@ -618,10 +541,6 @@ function ahuacatlQueryOptimiserLimitTestSuite () {
var actual = getQueryResults(query);
assertEqual(0, actual.length);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual(undefined, explain[0].limit);
},
////////////////////////////////////////////////////////////////////////////////
@ -638,10 +557,6 @@ function ahuacatlQueryOptimiserLimitTestSuite () {
assertEqual(21, actual[1].value);
assertEqual(22, actual[2].value);
assertEqual(29, actual[9].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual(undefined, explain[0].limit);
},
////////////////////////////////////////////////////////////////////////////////

View File

@ -29,7 +29,6 @@ var jsunity = require("jsunity");
var internal = require("internal");
var helper = require("org/arangodb/aql-helper");
var getQueryResults = helper.getQueryResults;
var getQueryExplanation = helper.getQueryExplanation;
////////////////////////////////////////////////////////////////////////////////
/// @brief test suite
@ -176,10 +175,6 @@ function ahuacatlQueryOptimiserRefTestSuite () {
var actual = getQueryResults(query, { "att" : "name", "what" : "age" });
assertEqual(expected, actual);
var explain = getQueryExplanation(query, { "att": "name", "what": "age" });
assertEqual("for", explain[0].type);
assertEqual("index", explain[0].expression.extra.accessType);
},
////////////////////////////////////////////////////////////////////////////////
@ -192,10 +187,6 @@ function ahuacatlQueryOptimiserRefTestSuite () {
var actual = getQueryResults(query, { "att" : "age", "what" : "name" });
assertEqual(expected, actual);
var explain = getQueryExplanation(query, { "att": "age", "what": "name" });
assertEqual("for", explain[0].type);
assertEqual("all", explain[0].expression.extra.accessType);
}
};

View File

@ -29,7 +29,6 @@ var jsunity = require("jsunity");
var internal = require("internal");
var helper = require("org/arangodb/aql-helper");
var getQueryResults = helper.getQueryResults;
var getQueryExplanation = helper.getQueryExplanation;
////////////////////////////////////////////////////////////////////////////////
/// @brief test suite
@ -78,11 +77,6 @@ function ahuacatlQueryOptimiserSortTestSuite () {
assertEqual(50, actual[50].value);
assertEqual(98, actual[98].value);
assertEqual(99, actual[99].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("sort", explain[1].type); // no optimisation as there's no index
assertEqual("return", explain[2].type);
},
////////////////////////////////////////////////////////////////////////////////
@ -101,11 +95,6 @@ function ahuacatlQueryOptimiserSortTestSuite () {
assertEqual(49, actual[50].value);
assertEqual(1, actual[98].value);
assertEqual(0, actual[99].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("sort", explain[1].type); // no optimisation as there's no index
assertEqual("return", explain[2].type);
},
////////////////////////////////////////////////////////////////////////////////
@ -126,11 +115,6 @@ function ahuacatlQueryOptimiserSortTestSuite () {
assertEqual(50, actual[50].value);
assertEqual(98, actual[98].value);
assertEqual(99, actual[99].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("sort", explain[1].type); // no optimisation as there's no filter and thus no index involved
assertEqual("return", explain[2].type);
},
////////////////////////////////////////////////////////////////////////////////
@ -150,11 +134,6 @@ function ahuacatlQueryOptimiserSortTestSuite () {
assertEqual(18, actual[3].value);
assertEqual(98, actual[83].value);
assertEqual(99, actual[84].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("filter", explain[1].type); // sort optimised away
assertEqual("return", explain[2].type);
},
////////////////////////////////////////////////////////////////////////////////
@ -174,12 +153,6 @@ function ahuacatlQueryOptimiserSortTestSuite () {
assertEqual(96, actual[3].value);
assertEqual(16, actual[83].value);
assertEqual(15, actual[84].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("filter", explain[1].type);
assertEqual("sort", explain[2].type); // sort still there because sort order is DESC
assertEqual("return", explain[3].type);
},
////////////////////////////////////////////////////////////////////////////////
@ -200,11 +173,6 @@ function ahuacatlQueryOptimiserSortTestSuite () {
assertEqual(50, actual[50].value);
assertEqual(98, actual[98].value);
assertEqual(99, actual[99].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("filter", explain[1].type); // sort optimised away
assertEqual("return", explain[2].type);
},
////////////////////////////////////////////////////////////////////////////////
@ -225,12 +193,6 @@ function ahuacatlQueryOptimiserSortTestSuite () {
assertEqual(49, actual[50].value);
assertEqual(1, actual[98].value);
assertEqual(0, actual[99].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("filter", explain[1].type);
assertEqual("sort", explain[2].type); // sort still there
assertEqual("return", explain[3].type);
},
////////////////////////////////////////////////////////////////////////////////
@ -243,7 +205,6 @@ function ahuacatlQueryOptimiserSortTestSuite () {
var query = "FOR c IN " + cn + " FILTER c.value >= 0 SORT c.value DESC SORT c.value RETURN c";
var actual = getQueryResults(query);
var explain = getQueryExplanation(query);
assertEqual(100, actual.length);
assertEqual(0, actual[0].value);
assertEqual(1, actual[1].value);
@ -252,13 +213,6 @@ function ahuacatlQueryOptimiserSortTestSuite () {
assertEqual(50, actual[50].value);
assertEqual(98, actual[98].value);
assertEqual(99, actual[99].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("filter", explain[1].type);
assertEqual("sort", explain[2].type); // sort still there
assertEqual("sort", explain[3].type); // sort still there
assertEqual("return", explain[4].type);
},
////////////////////////////////////////////////////////////////////////////////
@ -280,22 +234,11 @@ function ahuacatlQueryOptimiserSortTestSuite () {
assertEqual(98, actual[98].value);
assertEqual(99, actual[99].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("filter", explain[1].type);
assertEqual("sort", explain[2].type); // sort still there
assertEqual("return", explain[3].type);
query = "FOR c IN " + cn + " FILTER c.value == 0 && c.value2 >= 0 SORT c.value RETURN c";
actual = getQueryResults(query);
assertEqual(1, actual.length);
assertEqual(0, actual[0].value);
explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("filter", explain[1].type); // sort optimised away
assertEqual("return", explain[2].type);
},
////////////////////////////////////////////////////////////////////////////////
@ -317,22 +260,11 @@ function ahuacatlQueryOptimiserSortTestSuite () {
assertEqual(98, actual[98].value);
assertEqual(99, actual[99].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("filter", explain[1].type);
assertEqual("sort", explain[2].type); // sort still there
assertEqual("return", explain[3].type);
query = "FOR c IN " + cn + " FILTER c.value == 0 && c.value2 <= 1 SORT c.value, c.value2 RETURN c";
actual = getQueryResults(query);
assertEqual(1, actual.length);
assertEqual(0, actual[0].value);
explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("filter", explain[1].type); // sort optimised away
assertEqual("return", explain[2].type);
},
////////////////////////////////////////////////////////////////////////////////
@ -353,12 +285,6 @@ function ahuacatlQueryOptimiserSortTestSuite () {
assertEqual(50, actual[50].value);
assertEqual(98, actual[98].value);
assertEqual(99, actual[99].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("filter", explain[1].type);
assertEqual("sort", explain[2].type); // cannot use index for sorting
assertEqual("return", explain[3].type);
},
////////////////////////////////////////////////////////////////////////////////
@ -379,12 +305,6 @@ function ahuacatlQueryOptimiserSortTestSuite () {
assertEqual(50, actual[50].value);
assertEqual(98, actual[98].value);
assertEqual(99, actual[99].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("filter", explain[1].type); // cannot use index for sorting
assertEqual("sort", explain[2].type); // cannot use index for sorting
assertEqual("return", explain[3].type);
},
////////////////////////////////////////////////////////////////////////////////
@ -405,12 +325,6 @@ function ahuacatlQueryOptimiserSortTestSuite () {
assertEqual(50, actual[50].value);
assertEqual(98, actual[98].value);
assertEqual(99, actual[99].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("filter", explain[1].type);
assertEqual("sort", explain[2].type); // cannot use index for sorting
assertEqual("return", explain[3].type);
},
////////////////////////////////////////////////////////////////////////////////
@ -431,12 +345,6 @@ function ahuacatlQueryOptimiserSortTestSuite () {
assertEqual(50, actual[50].value);
assertEqual(98, actual[98].value);
assertEqual(99, actual[99].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("filter", explain[1].type);
assertEqual("sort", explain[2].type); // sort still there
assertEqual("return", explain[3].type);
},
////////////////////////////////////////////////////////////////////////////////
@ -457,12 +365,6 @@ function ahuacatlQueryOptimiserSortTestSuite () {
assertEqual(50, actual[50].value);
assertEqual(98, actual[98].value);
assertEqual(99, actual[99].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("filter", explain[1].type);
assertEqual("sort", explain[2].type); // sort still there
assertEqual("return", explain[3].type);
},
////////////////////////////////////////////////////////////////////////////////
@ -483,12 +385,6 @@ function ahuacatlQueryOptimiserSortTestSuite () {
assertEqual(50, actual[50].value);
assertEqual(98, actual[98].value);
assertEqual(99, actual[99].value);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("filter", explain[1].type);
assertEqual("sort", explain[2].type); // sort still there
assertEqual("return", explain[3].type);
}
}

View File

@ -29,7 +29,6 @@ var internal = require("internal");
var jsunity = require("jsunity");
var helper = require("org/arangodb/aql-helper");
var getQueryResults = helper.getQueryResults;
var getQueryExplanation = helper.getQueryExplanation;
////////////////////////////////////////////////////////////////////////////////
/// @brief test suite
@ -76,10 +75,6 @@ function ahuacatlSkiplistTestSuite () {
var actual = getQueryResults(query);
assertEqual(expected, actual);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("all", explain[0].expression.extra.accessType);
},
////////////////////////////////////////////////////////////////////////////////
@ -92,10 +87,6 @@ function ahuacatlSkiplistTestSuite () {
var actual = getQueryResults(query);
assertEqual(expected, actual);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("all", explain[0].expression.extra.accessType);
},
////////////////////////////////////////////////////////////////////////////////
@ -108,10 +99,6 @@ function ahuacatlSkiplistTestSuite () {
var actual = getQueryResults(query);
assertEqual(expected, actual);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("all", explain[0].expression.extra.accessType);
},
////////////////////////////////////////////////////////////////////////////////
@ -124,10 +111,6 @@ function ahuacatlSkiplistTestSuite () {
var actual = getQueryResults(query);
assertEqual(expected, actual);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("all", explain[0].expression.extra.accessType);
},
////////////////////////////////////////////////////////////////////////////////
@ -184,10 +167,6 @@ function ahuacatlSkiplistTestSuite () {
var actual = getQueryResults(query);
assertEqual(expected, actual);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("index", explain[0].expression.extra.accessType);
},
////////////////////////////////////////////////////////////////////////////////
@ -343,10 +322,6 @@ function ahuacatlSkiplistTestSuite () {
var actual = getQueryResults(query);
assertEqual(expected, actual);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("index", explain[0].expression.extra.accessType);
},
////////////////////////////////////////////////////////////////////////////////
@ -359,10 +334,6 @@ function ahuacatlSkiplistTestSuite () {
var actual = getQueryResults(query);
assertEqual(expected, actual);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("index", explain[0].expression.extra.accessType);
},
////////////////////////////////////////////////////////////////////////////////
@ -399,10 +370,6 @@ function ahuacatlSkiplistTestSuite () {
var actual = getQueryResults(query, { "a": i, "b": j });
assertEqual(expected, actual);
var explain = getQueryExplanation(query, { "a": i, "b": j });
assertEqual("for", explain[0].type);
assertEqual("index", explain[0].expression.extra.accessType);
}
}
},
@ -1047,10 +1014,6 @@ function ahuacatlSkiplistTestSuite () {
var actual = getQueryResults(query);
assertEqual(expected, actual);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("all", explain[0].expression.extra.accessType);
},
////////////////////////////////////////////////////////////////////////////////
@ -1063,10 +1026,6 @@ function ahuacatlSkiplistTestSuite () {
var actual = getQueryResults(query);
assertEqual(expected, actual);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("all", explain[0].expression.extra.accessType);
},
////////////////////////////////////////////////////////////////////////////////
@ -1085,30 +1044,18 @@ function ahuacatlSkiplistTestSuite () {
var expected = [ [ 20, 1 ] ];
assertEqual(expected, actual);
var explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("all", explain[0].expression.extra.accessType);
query = "FOR a IN " + skiplist.name() + " FILTER a.a == 20 SORT a.a, a.c RETURN [ a.a, a.c ]";
actual = getQueryResults(query);
expected = [ [ 20, 1 ], [ 20, 2 ] ];
assertEqual(expected, actual);
explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("all", explain[0].expression.extra.accessType);
query = "FOR a IN " + skiplist.name() + " FILTER a.a >= 20 SORT a.a, a.c RETURN [ a.a, a.c ]";
actual = getQueryResults(query);
expected = [ [ 20, 1 ], [ 20, 2 ], [ 21, 1 ], [ 21, 2 ] ];
assertEqual(expected, actual);
explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("all", explain[0].expression.extra.accessType);
query = "FOR a IN " + skiplist.name() + " FILTER a.a >= 21 && a.a <= 21 SORT a.a, a.c RETURN [ a.a, a.c ]";
actual = getQueryResults(query);
@ -1116,29 +1063,17 @@ function ahuacatlSkiplistTestSuite () {
assertEqual(expected, actual);
explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("all", explain[0].expression.extra.accessType);
query = "FOR a IN " + skiplist.name() + " FILTER a.a >= 20 && a.a <= 21 && a.c <= 2 SORT a.a, a.c RETURN [ a.a, a.c ]";
actual = getQueryResults(query);
expected = [ [ 20, 1 ], [ 20, 2 ], [ 21, 1 ], [ 21, 2 ] ];
assertEqual(expected, actual);
explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("all", explain[0].expression.extra.accessType);
query = "FOR a IN " + skiplist.name() + " FILTER a.a == 20 && a.c >= 1 SORT a.a, a.c RETURN [ a.a, a.c ]";
actual = getQueryResults(query);
expected = [ [ 20, 1 ], [ 20, 2 ] ];
assertEqual(expected, actual);
explain = getQueryExplanation(query);
assertEqual("for", explain[0].type);
assertEqual("all", explain[0].expression.extra.accessType);
}
};