diff --git a/arangod/V8Server/v8-vocbase.cpp b/arangod/V8Server/v8-vocbase.cpp index 1c934acc62..48f379611c 100644 --- a/arangod/V8Server/v8-vocbase.cpp +++ b/arangod/V8Server/v8-vocbase.cpp @@ -1315,144 +1315,6 @@ static v8::Handle JS_RunAhuacatl (v8::Arguments const& argv) { return scope.Close(result); } -//////////////////////////////////////////////////////////////////////////////// -/// @brief explains an AQL query -//////////////////////////////////////////////////////////////////////////////// - -static v8::Handle 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(, , )"); - } - - TRI_vocbase_t* vocbase = GetContextVocBase(); - - if (vocbase == nullptr) { - TRI_V8_EXCEPTION(scope, TRI_ERROR_ARANGO_DATABASE_NOT_FOUND); - } - - // get the query string - v8::Handle queryArg = argv[0]; - if (! queryArg->IsString()) { - TRI_V8_TYPE_ERROR(scope, "expecting string for "); - } - - 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 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> 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 errorObject = CreateErrorObjectAhuacatl(&context->_error); - return scope.Close(v8::ThrowException(errorObject)); - } - - trx.finish(TRI_ERROR_NO_ERROR); - - TRI_ASSERT(explain); - - v8::Handle 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::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 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(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 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); diff --git a/js/actions/api-explain.js b/js/actions/api-explain.js index 32b2046a74..d8d9752ace 100644 --- a/js/actions/api-explain.js +++ b/js/actions/api-explain.js @@ -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); diff --git a/js/server/bootstrap/module-internal.js b/js/server/bootstrap/module-internal.js index 560845fbac..7552da748e 100644 --- a/js/server/bootstrap/module-internal.js +++ b/js/server/bootstrap/module-internal.js @@ -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 //////////////////////////////////////////////////////////////////////////////// diff --git a/js/server/modules/org/arangodb/aql-helper.js b/js/server/modules/org/arangodb/aql-helper.js index cab03cfa3f..6a94adcacb 100644 --- a/js/server/modules/org/arangodb/aql-helper.js +++ b/js/server/modules/org/arangodb/aql-helper.js @@ -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); } //////////////////////////////////////////////////////////////////////////////// diff --git a/js/server/modules/org/arangodb/arango-statement.js b/js/server/modules/org/arangodb/arango-statement.js index f7e36832eb..7b8646280b 100644 --- a/js/server/modules/org/arangodb/arango-statement.js +++ b/js/server/modules/org/arangodb/arango-statement.js @@ -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); }; //////////////////////////////////////////////////////////////////////////////// diff --git a/js/server/tests/ahuacatl-edges.js b/js/server/tests/ahuacatl-edges.js index b200251010..e91148ad56 100644 --- a/js/server/tests/ahuacatl-edges.js +++ b/js/server/tests/ahuacatl-edges.js @@ -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 //////////////////////////////////////////////////////////////////////////////// diff --git a/js/server/tests/ahuacatl-hash.js b/js/server/tests/ahuacatl-hash.js index babc8b13e8..0e10af4bb8 100644 --- a/js/server/tests/ahuacatl-hash.js +++ b/js/server/tests/ahuacatl-hash.js @@ -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); - }, + } }; } diff --git a/js/server/tests/ahuacatl-queries-optimiser-in.js b/js/server/tests/ahuacatl-queries-optimiser-in.js index 806983f188..11e47c6ef0 100644 --- a/js/server/tests/ahuacatl-queries-optimiser-in.js +++ b/js/server/tests/ahuacatl-queries-optimiser-in.js @@ -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); }, diff --git a/js/server/tests/ahuacatl-queries-optimiser-limit.js b/js/server/tests/ahuacatl-queries-optimiser-limit.js index 00642643bc..ccfcafb0b8 100644 --- a/js/server/tests/ahuacatl-queries-optimiser-limit.js +++ b/js/server/tests/ahuacatl-queries-optimiser-limit.js @@ -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); }, //////////////////////////////////////////////////////////////////////////////// diff --git a/js/server/tests/ahuacatl-queries-optimiser-ref.js b/js/server/tests/ahuacatl-queries-optimiser-ref.js index bb6c4d2227..827e71e782 100644 --- a/js/server/tests/ahuacatl-queries-optimiser-ref.js +++ b/js/server/tests/ahuacatl-queries-optimiser-ref.js @@ -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); } }; diff --git a/js/server/tests/ahuacatl-queries-optimiser-sort.js b/js/server/tests/ahuacatl-queries-optimiser-sort.js index 26b4ab01cf..9ca2879129 100644 --- a/js/server/tests/ahuacatl-queries-optimiser-sort.js +++ b/js/server/tests/ahuacatl-queries-optimiser-sort.js @@ -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); } } diff --git a/js/server/tests/ahuacatl-skiplist.js b/js/server/tests/ahuacatl-skiplist.js index 3176765c48..72299fb8a8 100644 --- a/js/server/tests/ahuacatl-skiplist.js +++ b/js/server/tests/ahuacatl-skiplist.js @@ -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); } };