1
0
Fork 0
arangodb/js/apps/system/_admin/aardvark/APP/api-docs/explain.json

43 lines
28 KiB
JSON

{
"basePath": "/",
"swaggerVersion": "1.1",
"apiVersion": "0.1",
"apis": [
{
"operations": [
{
"errorResponses": [
{
"reason": "If the query is valid, the server will respond with <em>HTTP 200</em> and return the optimal execution plan in the <em>plan</em> attribute of the response. If option <em>allPlans</em> was set in the request, an array of plans will be returned in the <em>allPlans</em> attribute instead. <br><br>",
"code": "200"
},
{
"reason": "The server will respond with <em>HTTP 400</em> in case of a malformed request, or if the query contains a parse error. The body of the response will contain the error details embedded in a JSON object. Omitting bind variables if the query references any will also result in an <em>HTTP 400</em> error. <br><br>",
"code": "400"
},
{
"reason": "The server will respond with <em>HTTP 404</em> in case a non-existing collection is accessed in the query. <br><br>",
"code": "404"
}
],
"parameters": [
{
"dataType": "Json",
"paramType": "body",
"required": true,
"name": "body",
"description": "The query string needs to be passed in the attribute <em>query</em> of a JSON object as the body of the POST request. If the query references any bind variables, these must also be passed in the attribute <em>bindVars</em>. Additional options for the query can be passed in the <em>options</em> attribute. <br><br> The currently supported options are: <ul class=\"swagger-list\"><li><em>allPlans</em>: if set to <em>true</em>, all possible execution plans will be returned. The default is <em>false</em>, meaning only the optimal plan will be returned. <li><em>maxNumberOfPlans</em>: an optional maximum number of plans that the optimizer is allowed to generate. Setting this attribute to a low value allows to put a cap on the amount of work the optimizer does. <li><em>optimizer.rules</em>: an array of to-be-included or to-be-excluded optimizer rules can be put into this attribute, telling the optimizer to include or exclude specific rules. To disable a rule, prefix its name with a <em>-</em>, to enable a rule, prefix it with a <em>+</em>. There is also a pseudo-rule <em>all</em>, which will match all optimizer rules."
}
],
"notes": "<br><br> To explain how an AQL query would be executed on the server, the query string can be sent to the server via an HTTP POST request. The server will then validate the query and create an execution plan for it. The execution plan will be returned, but the query will not be executed. <br><br> The execution plan that is returned by the server can be used to estimate the probable performance of the query. Though the actual performance will depend on many different factors, the execution plan normally can provide some rough estimates on the amount of work the server needs to do in order to actually run the query. <br><br> By default, the explain operation will return the optimal plan as chosen by the query optimizer The optimal plan is the plan with the lowest total estimated cost. The plan will be returned in the attribute <em>plan</em> of the response object. If the option <em>allPlans</em> is specified in the request, the result will contain all plans created by the optimizer. The plans will then be returned in the attribute <em>plans</em>. <br><br> The result will also contain an attribute <em>warnings</em>, which is an array of warnings that occurred during optimization or execution plan creation. Additionally, a <em>stats</em> attribute is contained in the result with some optimizer statistics. <br><br> Each plan in the result is a JSON object with the following attributes: <ul class=\"swagger-list\"><li><em>nodes</em>: the array of execution nodes of the plan. The array of available node types can be found [here](../Aql/Optimizer.html) <li><em>estimatedCost</em>: the total estimated cost for the plan. If there are multiple plans, the optimizer will choose the plan with the lowest total cost. <li><em>collections</em>: an array of collections used in the query <li><em>rules</em>: an array of rules the optimizer applied. An overview of the available rules can be found [here](../Aql/Optimizer.html) <li><em>variables</em>: array of variables used in the query (note: this may contain internal variables created by the optimizer)",
"summary": " Explain an AQL query",
"httpMethod": "POST",
"examples": "<br><br> Valid query: <br><br><br><br><pre><code class=\"json\">shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/explain\n{\"query\":\"FOR p IN products RETURN p\"}\n\nHTTP/1.1 200 OK\ncontent-type: application/json; charset=utf-8\n\n{ \n \"plan\" : { \n \"nodes\" : [ \n { \n \"type\" : \"SingletonNode\", \n \"dependencies\" : [ ], \n \"id\" : 1, \n \"estimatedCost\" : 1, \n \"estimatedNrItems\" : 1 \n }, \n { \n \"type\" : \"EnumerateCollectionNode\", \n \"dependencies\" : [ \n 1 \n ], \n \"id\" : 2, \n \"estimatedCost\" : 11, \n \"estimatedNrItems\" : 10, \n \"database\" : \"_system\", \n \"collection\" : \"products\", \n \"outVariable\" : { \n \"id\" : 0, \n \"name\" : \"p\" \n }, \n \"random\" : false \n }, \n { \n \"type\" : \"ReturnNode\", \n \"dependencies\" : [ \n 2 \n ], \n \"id\" : 3, \n \"estimatedCost\" : 21, \n \"estimatedNrItems\" : 10, \n \"inVariable\" : { \n \"id\" : 0, \n \"name\" : \"p\" \n } \n } \n ], \n \"rules\" : [ ], \n \"collections\" : [ \n { \n \"name\" : \"products\", \n \"type\" : \"read\" \n } \n ], \n \"variables\" : [ \n { \n \"id\" : 0, \n \"name\" : \"p\" \n } \n ], \n \"estimatedCost\" : 21, \n \"estimatedNrItems\" : 10 \n }, \n \"warnings\" : [ ], \n \"stats\" : { \n \"rulesExecuted\" : 21, \n \"rulesSkipped\" : 0, \n \"plansCreated\" : 1 \n }, \n \"error\" : false, \n \"code\" : 200 \n}\n</code></pre><br><br><br> A plan with some optimizer rules applied: <br><br><br><br><pre><code class=\"json\">shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/explain\n{\"query\":\"FOR p IN products LET a = p.id FILTER a == 4 LET name = p.name SORT p.id LIMIT 1 RETURN name\"}\n\nHTTP/1.1 200 OK\ncontent-type: application/json; charset=utf-8\n\n{ \n \"plan\" : { \n \"nodes\" : [ \n { \n \"type\" : \"SingletonNode\", \n \"dependencies\" : [ ], \n \"id\" : 1, \n \"estimatedCost\" : 1, \n \"estimatedNrItems\" : 1 \n }, \n { \n \"type\" : \"IndexRangeNode\", \n \"dependencies\" : [ \n 1 \n ], \n \"id\" : 11, \n \"estimatedCost\" : 11, \n \"estimatedNrItems\" : 10, \n \"database\" : \"_system\", \n \"collection\" : \"products\", \n \"outVariable\" : { \n \"id\" : 0, \n \"name\" : \"p\" \n }, \n \"ranges\" : [ \n [ ] \n ], \n \"index\" : { \n \"type\" : \"skiplist\", \n \"id\" : \"1171138723\", \n \"unique\" : false, \n \"sparse\" : false, \n \"fields\" : [ \n \"id\" \n ] \n }, \n \"reverse\" : false \n }, \n { \n \"type\" : \"CalculationNode\", \n \"dependencies\" : [ \n 11 \n ], \n \"id\" : 3, \n \"estimatedCost\" : 21, \n \"estimatedNrItems\" : 10, \n \"expression\" : { \n \"type\" : \"attribute access\", \n \"name\" : \"id\", \n \"subNodes\" : [ \n { \n \"type\" : \"reference\", \n \"name\" : \"p\", \n \"id\" : 0 \n } \n ] \n }, \n \"outVariable\" : { \n \"id\" : 1, \n \"name\" : \"a\" \n }, \n \"canThrow\" : false \n }, \n { \n \"type\" : \"CalculationNode\", \n \"dependencies\" : [ \n 3 \n ], \n \"id\" : 4, \n \"estimatedCost\" : 31, \n \"estimatedNrItems\" : 10, \n \"expression\" : { \n \"type\" : \"compare ==\", \n \"subNodes\" : [ \n { \n \"type\" : \"reference\", \n \"name\" : \"a\", \n \"id\" : 1 \n }, \n { \n \"type\" : \"value\", \n \"value\" : 4 \n } \n ] \n }, \n \"outVariable\" : { \n \"id\" : 3, \n \"name\" : \"3\" \n }, \n \"canThrow\" : false \n }, \n { \n \"type\" : \"FilterNode\", \n \"dependencies\" : [ \n 4 \n ], \n \"id\" : 5, \n \"estimatedCost\" : 41, \n \"estimatedNrItems\" : 10, \n \"inVariable\" : { \n \"id\" : 3, \n \"name\" : \"3\" \n } \n }, \n { \n \"type\" : \"LimitNode\", \n \"dependencies\" : [ \n 5 \n ], \n \"id\" : 9, \n \"estimatedCost\" : 42, \n \"estimatedNrItems\" : 1, \n \"offset\" : 0, \n \"limit\" : 1, \n \"fullCount\" : false \n }, \n { \n \"type\" : \"CalculationNode\", \n \"dependencies\" : [ \n 9 \n ], \n \"id\" : 6, \n \"estimatedCost\" : 43, \n \"estimatedNrItems\" : 1, \n \"expression\" : { \n \"type\" : \"attribute access\", \n \"name\" : \"name\", \n \"subNodes\" : [ \n { \n \"type\" : \"reference\", \n \"name\" : \"p\", \n \"id\" : 0 \n } \n ] \n }, \n \"outVariable\" : { \n \"id\" : 2, \n \"name\" : \"name\" \n }, \n \"canThrow\" : false \n }, \n { \n \"type\" : \"ReturnNode\", \n \"dependencies\" : [ \n 6 \n ], \n \"id\" : 10, \n \"estimatedCost\" : 44, \n \"estimatedNrItems\" : 1, \n \"inVariable\" : { \n \"id\" : 2, \n \"name\" : \"name\" \n } \n } \n ], \n \"rules\" : [ \n \"move-calculations-up\", \n \"remove-redundant-calculations\", \n \"move-calculations-up-2\", \n \"use-index-for-sort\", \n \"remove-unnecessary-calculations-2\", \n \"move-calculations-down\" \n ], \n \"collections\" : [ \n { \n \"name\" : \"products\", \n \"type\" : \"read\" \n } \n ], \n \"variables\" : [ \n { \n \"id\" : 4, \n \"name\" : \"4\" \n }, \n { \n \"id\" : 3, \n \"name\" : \"3\" \n }, \n { \n \"id\" : 2, \n \"name\" : \"name\" \n }, \n { \n \"id\" : 1, \n \"name\" : \"a\" \n }, \n { \n \"id\" : 0, \n \"name\" : \"p\" \n } \n ], \n \"estimatedCost\" : 44, \n \"estimatedNrItems\" : 1 \n }, \n \"warnings\" : [ ], \n \"stats\" : { \n \"rulesExecuted\" : 32, \n \"rulesSkipped\" : 0, \n \"plansCreated\" : 1 \n }, \n \"error\" : false, \n \"code\" : 200 \n}\n</code></pre><br><br><br> Using some options: <br><br><br><br><pre><code class=\"json\">shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/explain\n{\"query\":\"FOR p IN products LET a = p.id FILTER a == 4 LET name = p.name SORT p.id LIMIT 1 RETURN name\",\"options\":{\"maxNumberOfPlans\":2,\"allPlans\":true,\"optimizer\":{\"rules\":[\"-all\",\"+use-index-for-sort\",\"+use-index-range\"]}}}\n\nHTTP/1.1 200 OK\ncontent-type: application/json; charset=utf-8\n\n{ \n \"plans\" : [ \n { \n \"nodes\" : [ \n { \n \"type\" : \"SingletonNode\", \n \"dependencies\" : [ ], \n \"id\" : 1, \n \"estimatedCost\" : 1, \n \"estimatedNrItems\" : 1 \n }, \n { \n \"type\" : \"IndexRangeNode\", \n \"dependencies\" : [ \n 1 \n ], \n \"id\" : 11, \n \"estimatedCost\" : 11, \n \"estimatedNrItems\" : 10, \n \"database\" : \"_system\", \n \"collection\" : \"products\", \n \"outVariable\" : { \n \"id\" : 0, \n \"name\" : \"p\" \n }, \n \"ranges\" : [ \n [ ] \n ], \n \"index\" : { \n \"type\" : \"skiplist\", \n \"id\" : \"1173694627\", \n \"unique\" : false, \n \"sparse\" : false, \n \"fields\" : [ \n \"id\" \n ] \n }, \n \"reverse\" : false \n }, \n { \n \"type\" : \"CalculationNode\", \n \"dependencies\" : [ \n 11 \n ], \n \"id\" : 3, \n \"estimatedCost\" : 21, \n \"estimatedNrItems\" : 10, \n \"expression\" : { \n \"type\" : \"attribute access\", \n \"name\" : \"id\", \n \"subNodes\" : [ \n { \n \"type\" : \"reference\", \n \"name\" : \"p\", \n \"id\" : 0 \n } \n ] \n }, \n \"outVariable\" : { \n \"id\" : 1, \n \"name\" : \"a\" \n }, \n \"canThrow\" : false \n }, \n { \n \"type\" : \"CalculationNode\", \n \"dependencies\" : [ \n 3 \n ], \n \"id\" : 4, \n \"estimatedCost\" : 31, \n \"estimatedNrItems\" : 10, \n \"expression\" : { \n \"type\" : \"compare ==\", \n \"subNodes\" : [ \n { \n \"type\" : \"reference\", \n \"name\" : \"a\", \n \"id\" : 1 \n }, \n { \n \"type\" : \"value\", \n \"value\" : 4 \n } \n ] \n }, \n \"outVariable\" : { \n \"id\" : 3, \n \"name\" : \"3\" \n }, \n \"canThrow\" : false \n }, \n { \n \"type\" : \"FilterNode\", \n \"dependencies\" : [ \n 4 \n ], \n \"id\" : 5, \n \"estimatedCost\" : 41, \n \"estimatedNrItems\" : 10, \n \"inVariable\" : { \n \"id\" : 3, \n \"name\" : \"3\" \n } \n }, \n { \n \"type\" : \"CalculationNode\", \n \"dependencies\" : [ \n 5 \n ], \n \"id\" : 6, \n \"estimatedCost\" : 51, \n \"estimatedNrItems\" : 10, \n \"expression\" : { \n \"type\" : \"attribute access\", \n \"name\" : \"name\", \n \"subNodes\" : [ \n { \n \"type\" : \"reference\", \n \"name\" : \"p\", \n \"id\" : 0 \n } \n ] \n }, \n \"outVariable\" : { \n \"id\" : 2, \n \"name\" : \"name\" \n }, \n \"canThrow\" : false \n }, \n { \n \"type\" : \"CalculationNode\", \n \"dependencies\" : [ \n 6 \n ], \n \"id\" : 7, \n \"estimatedCost\" : 61, \n \"estimatedNrItems\" : 10, \n \"expression\" : { \n \"type\" : \"attribute access\", \n \"name\" : \"id\", \n \"subNodes\" : [ \n { \n \"type\" : \"reference\", \n \"name\" : \"p\", \n \"id\" : 0 \n } \n ] \n }, \n \"outVariable\" : { \n \"id\" : 4, \n \"name\" : \"4\" \n }, \n \"canThrow\" : false \n }, \n { \n \"type\" : \"LimitNode\", \n \"dependencies\" : [ \n 7 \n ], \n \"id\" : 9, \n \"estimatedCost\" : 62, \n \"estimatedNrItems\" : 1, \n \"offset\" : 0, \n \"limit\" : 1, \n \"fullCount\" : false \n }, \n { \n \"type\" : \"ReturnNode\", \n \"dependencies\" : [ \n 9 \n ], \n \"id\" : 10, \n \"estimatedCost\" : 63, \n \"estimatedNrItems\" : 1, \n \"inVariable\" : { \n \"id\" : 2, \n \"name\" : \"name\" \n } \n } \n ], \n \"rules\" : [ \n \"use-index-for-sort\" \n ], \n \"collections\" : [ \n { \n \"name\" : \"products\", \n \"type\" : \"read\" \n } \n ], \n \"variables\" : [ \n { \n \"id\" : 4, \n \"name\" : \"4\" \n }, \n { \n \"id\" : 3, \n \"name\" : \"3\" \n }, \n { \n \"id\" : 2, \n \"name\" : \"name\" \n }, \n { \n \"id\" : 1, \n \"name\" : \"a\" \n }, \n { \n \"id\" : 0, \n \"name\" : \"p\" \n } \n ], \n \"estimatedCost\" : 63, \n \"estimatedNrItems\" : 1 \n } \n ], \n \"warnings\" : [ ], \n \"stats\" : { \n \"rulesExecuted\" : 4, \n \"rulesSkipped\" : 28, \n \"plansCreated\" : 1 \n }, \n \"error\" : false, \n \"code\" : 200 \n}\n</code></pre><br><br><br> Returning all plans: <br><br><br><br><pre><code class=\"json\">shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/explain\n{\"query\":\"FOR p IN products FILTER p.id == 25 RETURN p\",\"options\":{\"allPlans\":true}}\n\nHTTP/1.1 200 OK\ncontent-type: application/json; charset=utf-8\n\n{ \n \"plans\" : [ \n { \n \"nodes\" : [ \n { \n \"type\" : \"SingletonNode\", \n \"dependencies\" : [ ], \n \"id\" : 1, \n \"estimatedCost\" : 1, \n \"estimatedNrItems\" : 1 \n }, \n { \n \"type\" : \"IndexRangeNode\", \n \"dependencies\" : [ \n 1 \n ], \n \"id\" : 6, \n \"estimatedCost\" : 1.9899995050000001, \n \"estimatedNrItems\" : 1, \n \"database\" : \"_system\", \n \"collection\" : \"products\", \n \"outVariable\" : { \n \"id\" : 0, \n \"name\" : \"p\" \n }, \n \"ranges\" : [ \n [ \n { \n \"variable\" : \"p\", \n \"attr\" : \"id\", \n \"lowConst\" : { \n \"bound\" : 25, \n \"include\" : true, \n \"isConstant\" : true \n }, \n \"highConst\" : { \n \"bound\" : 25, \n \"include\" : true, \n \"isConstant\" : true \n }, \n \"lows\" : [ ], \n \"highs\" : [ ], \n \"valid\" : true, \n \"equality\" : true \n } \n ] \n ], \n \"index\" : { \n \"type\" : \"hash\", \n \"id\" : \"1176250531\", \n \"unique\" : false, \n \"sparse\" : false, \n \"selectivityEstimate\" : 1, \n \"fields\" : [ \n \"id\" \n ] \n }, \n \"reverse\" : false \n }, \n { \n \"type\" : \"ReturnNode\", \n \"dependencies\" : [ \n 6 \n ], \n \"id\" : 5, \n \"estimatedCost\" : 2.989999505, \n \"estimatedNrItems\" : 1, \n \"inVariable\" : { \n \"id\" : 0, \n \"name\" : \"p\" \n } \n } \n ], \n \"rules\" : [ \n \"use-index-range\", \n \"remove-filter-covered-by-index\" \n ], \n \"collections\" : [ \n { \n \"name\" : \"products\", \n \"type\" : \"read\" \n } \n ], \n \"variables\" : [ \n { \n \"id\" : 1, \n \"name\" : \"1\" \n }, \n { \n \"id\" : 0, \n \"name\" : \"p\" \n } \n ], \n \"estimatedCost\" : 2.989999505, \n \"estimatedNrItems\" : 1 \n } \n ], \n \"warnings\" : [ ], \n \"stats\" : { \n \"rulesExecuted\" : 21, \n \"rulesSkipped\" : 0, \n \"plansCreated\" : 1 \n }, \n \"error\" : false, \n \"code\" : 200 \n}\n</code></pre><br><br><br> A query that produces a warning: <br><br><br><br><pre><code class=\"json\">shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/explain\n{\"query\":\"FOR i IN 1..10 RETURN 1 / 0\"}\n\nHTTP/1.1 200 OK\ncontent-type: application/json; charset=utf-8\n\n{ \n \"plan\" : { \n \"nodes\" : [ \n { \n \"type\" : \"SingletonNode\", \n \"dependencies\" : [ ], \n \"id\" : 1, \n \"estimatedCost\" : 1, \n \"estimatedNrItems\" : 1 \n }, \n { \n \"type\" : \"CalculationNode\", \n \"dependencies\" : [ \n 1 \n ], \n \"id\" : 2, \n \"estimatedCost\" : 2, \n \"estimatedNrItems\" : 1, \n \"expression\" : { \n \"type\" : \"range\", \n \"subNodes\" : [ \n { \n \"type\" : \"value\", \n \"value\" : 1 \n }, \n { \n \"type\" : \"value\", \n \"value\" : 10 \n } \n ] \n }, \n \"outVariable\" : { \n \"id\" : 1, \n \"name\" : \"1\" \n }, \n \"canThrow\" : false \n }, \n { \n \"type\" : \"CalculationNode\", \n \"dependencies\" : [ \n 2 \n ], \n \"id\" : 4, \n \"estimatedCost\" : 3, \n \"estimatedNrItems\" : 1, \n \"expression\" : { \n \"type\" : \"value\", \n \"value\" : null \n }, \n \"outVariable\" : { \n \"id\" : 2, \n \"name\" : \"2\" \n }, \n \"canThrow\" : false \n }, \n { \n \"type\" : \"EnumerateListNode\", \n \"dependencies\" : [ \n 4 \n ], \n \"id\" : 3, \n \"estimatedCost\" : 13, \n \"estimatedNrItems\" : 10, \n \"inVariable\" : { \n \"id\" : 1, \n \"name\" : \"1\" \n }, \n \"outVariable\" : { \n \"id\" : 0, \n \"name\" : \"i\" \n } \n }, \n { \n \"type\" : \"ReturnNode\", \n \"dependencies\" : [ \n 3 \n ], \n \"id\" : 5, \n \"estimatedCost\" : 23, \n \"estimatedNrItems\" : 10, \n \"inVariable\" : { \n \"id\" : 2, \n \"name\" : \"2\" \n } \n } \n ], \n \"rules\" : [ \n \"move-calculations-up\", \n \"move-calculations-up-2\" \n ], \n \"collections\" : [ ], \n \"variables\" : [ \n { \n \"id\" : 2, \n \"name\" : \"2\" \n }, \n { \n \"id\" : 1, \n \"name\" : \"1\" \n }, \n { \n \"id\" : 0, \n \"name\" : \"i\" \n } \n ], \n \"estimatedCost\" : 23, \n \"estimatedNrItems\" : 10 \n }, \n \"warnings\" : [ \n { \n \"code\" : 1562, \n \"message\" : \"division by zero\" \n } \n ], \n \"stats\" : { \n \"rulesExecuted\" : 21, \n \"rulesSkipped\" : 0, \n \"plansCreated\" : 1 \n }, \n \"error\" : false, \n \"code\" : 200 \n}\n</code></pre><br><br><br> Invalid query (missing bind parameter): <br><br><br><br><pre><code class=\"json\">shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/explain\n{ \n \"query\" : \"FOR p IN products FILTER p.id == @id LIMIT 2 RETURN p.n\" \n}\n\nHTTP/1.1 400 Bad Request\ncontent-type: application/json; charset=utf-8\n\n{ \n \"error\" : true, \n \"code\" : 400, \n \"errorNum\" : 1551, \n \"errorMessage\" : \"no value specified for declared bind parameter 'id' (while parsing)\" \n}\n</code></pre><br><br><br> The data returned in the <em>plan</em> attribute of the result contains one element per AQL top-level statement (i.e. <em>FOR</em>, <em>RETURN</em>, <em>FILTER</em> etc.). If the query optimiser removed some unnecessary statements, the result might also contain less elements than there were top-level statements in the AQL query. The following example shows a query with a non-sensible filter condition that the optimiser has removed so that there are less top-level statements: <br><br><br><br><pre><code class=\"json\">shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/explain\n{ \"query\" : \"FOR i IN [ 1, 2, 3 ] FILTER 1 == 2 RETURN i\" }\n\nHTTP/1.1 200 OK\ncontent-type: application/json; charset=utf-8\n\n{ \n \"plan\" : { \n \"nodes\" : [ \n { \n \"type\" : \"SingletonNode\", \n \"dependencies\" : [ ], \n \"id\" : 1, \n \"estimatedCost\" : 1, \n \"estimatedNrItems\" : 1 \n }, \n { \n \"type\" : \"CalculationNode\", \n \"dependencies\" : [ \n 1 \n ], \n \"id\" : 2, \n \"estimatedCost\" : 2, \n \"estimatedNrItems\" : 1, \n \"expression\" : { \n \"type\" : \"array\", \n \"subNodes\" : [ \n { \n \"type\" : \"value\", \n \"value\" : 1 \n }, \n { \n \"type\" : \"value\", \n \"value\" : 2 \n }, \n { \n \"type\" : \"value\", \n \"value\" : 3 \n } \n ] \n }, \n \"outVariable\" : { \n \"id\" : 1, \n \"name\" : \"1\" \n }, \n \"canThrow\" : false \n }, \n { \n \"type\" : \"NoResultsNode\", \n \"dependencies\" : [ \n 2 \n ], \n \"id\" : 7, \n \"estimatedCost\" : 0.5, \n \"estimatedNrItems\" : 0 \n }, \n { \n \"type\" : \"EnumerateListNode\", \n \"dependencies\" : [ \n 7 \n ], \n \"id\" : 3, \n \"estimatedCost\" : 0.5, \n \"estimatedNrItems\" : 0, \n \"inVariable\" : { \n \"id\" : 1, \n \"name\" : \"1\" \n }, \n \"outVariable\" : { \n \"id\" : 0, \n \"name\" : \"i\" \n } \n }, \n { \n \"type\" : \"ReturnNode\", \n \"dependencies\" : [ \n 3 \n ], \n \"id\" : 6, \n \"estimatedCost\" : 0.5, \n \"estimatedNrItems\" : 0, \n \"inVariable\" : { \n \"id\" : 0, \n \"name\" : \"i\" \n } \n } \n ], \n \"rules\" : [ \n \"move-calculations-up\", \n \"move-filters-up\", \n \"remove-unnecessary-filters\", \n \"remove-unnecessary-calculations\" \n ], \n \"collections\" : [ ], \n \"variables\" : [ \n { \n \"id\" : 2, \n \"name\" : \"2\" \n }, \n { \n \"id\" : 1, \n \"name\" : \"1\" \n }, \n { \n \"id\" : 0, \n \"name\" : \"i\" \n } \n ], \n \"estimatedCost\" : 0.5, \n \"estimatedNrItems\" : 0 \n }, \n \"warnings\" : [ ], \n \"stats\" : { \n \"rulesExecuted\" : 21, \n \"rulesSkipped\" : 0, \n \"plansCreated\" : 1 \n }, \n \"error\" : false, \n \"code\" : 200 \n}\n</code></pre><br><br><br>",
"nickname": "ExplainAnAqlQuery"
}
],
"path": "/_api/explain"
}
]
}