{
"basePath": "/",
"swaggerVersion": "1.1",
"apiVersion": "0.1",
"apis": [
{
"operations": [
{
"errorResponses": [
{
"reason": "If the query is valid, the server will respond with HTTP 200 and return the optimal execution plan in the plan attribute of the response. If option allPlans was set in the request, an array of plans will be returned in the allPlans attribute instead.
",
"code": "200"
},
{
"reason": "The server will respond with HTTP 400 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 HTTP 400 error.
",
"code": "400"
},
{
"reason": "The server will respond with HTTP 404 in case a non-existing collection is accessed in the query.
",
"code": "404"
}
],
"parameters": [
{
"dataType": "Json",
"paramType": "body",
"required": true,
"name": "body",
"description": "The query string needs to be passed in the attribute query 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 bindVars. Additional options for the query can be passed in the options attribute.
The currently supported options are:
shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/explain <<EOF\n{\"query\":\"FOR p IN products RETURN p\"}\nEOF\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\" : 22, \n \"rulesSkipped\" : 0, \n \"plansCreated\" : 1 \n }, \n \"error\" : false, \n \"code\" : 200 \n}\n
shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/explain <<EOF\n{\"query\":\"FOR p IN products LET a = p.id FILTER a == 4 LET name = p.name SORT p.id LIMIT 1 RETURN name\"}\nEOF\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\" : \"1323770933\", \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 \"expressionType\" : \"attribute\" \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\" : 4, \n \"name\" : \"3\" \n }, \n \"canThrow\" : false, \n \"expressionType\" : \"simple\" \n }, \n { \n \"type\" : \"FilterNode\", \n \"dependencies\" : [ \n 4 \n ], \n \"id\" : 5, \n \"estimatedCost\" : 41, \n \"estimatedNrItems\" : 10, \n \"inVariable\" : { \n \"id\" : 4, \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 \"expressionType\" : \"attribute\" \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\" : 6, \n \"name\" : \"5\" \n }, \n { \n \"id\" : 4, \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\" : 34, \n \"rulesSkipped\" : 0, \n \"plansCreated\" : 1 \n }, \n \"error\" : false, \n \"code\" : 200 \n}\n
shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/explain <<EOF\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\"]}}}\nEOF\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\" : \"1326326837\", \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 \"expressionType\" : \"attribute\" \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\" : 4, \n \"name\" : \"3\" \n }, \n \"canThrow\" : false, \n \"expressionType\" : \"simple\" \n }, \n { \n \"type\" : \"FilterNode\", \n \"dependencies\" : [ \n 4 \n ], \n \"id\" : 5, \n \"estimatedCost\" : 41, \n \"estimatedNrItems\" : 10, \n \"inVariable\" : { \n \"id\" : 4, \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 \"expressionType\" : \"attribute\" \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\" : 6, \n \"name\" : \"5\" \n }, \n \"canThrow\" : false, \n \"expressionType\" : \"attribute\" \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\" : 6, \n \"name\" : \"5\" \n }, \n { \n \"id\" : 4, \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\" : 30, \n \"plansCreated\" : 1 \n }, \n \"error\" : false, \n \"code\" : 200 \n}\n
shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/explain <<EOF\n{\"query\":\"FOR p IN products FILTER p.id == 25 RETURN p\",\"options\":{\"allPlans\":true}}\nEOF\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\" : \"1328882741\", \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\" : 2, \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\" : 22, \n \"rulesSkipped\" : 0, \n \"plansCreated\" : 1 \n }, \n \"error\" : false, \n \"code\" : 200 \n}\n
shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/explain <<EOF\n{\"query\":\"FOR i IN 1..10 RETURN 1 / 0\"}\nEOF\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\" : 2, \n \"name\" : \"1\" \n }, \n \"canThrow\" : false, \n \"expressionType\" : \"simple\" \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\" : 4, \n \"name\" : \"3\" \n }, \n \"canThrow\" : false, \n \"expressionType\" : \"json\" \n }, \n { \n \"type\" : \"EnumerateListNode\", \n \"dependencies\" : [ \n 4 \n ], \n \"id\" : 3, \n \"estimatedCost\" : 13, \n \"estimatedNrItems\" : 10, \n \"inVariable\" : { \n \"id\" : 2, \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\" : 4, \n \"name\" : \"3\" \n } \n } \n ], \n \"rules\" : [ \n \"move-calculations-up\", \n \"move-calculations-up-2\" \n ], \n \"collections\" : [ ], \n \"variables\" : [ \n { \n \"id\" : 4, \n \"name\" : \"3\" \n }, \n { \n \"id\" : 2, \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\" : 22, \n \"rulesSkipped\" : 0, \n \"plansCreated\" : 1 \n }, \n \"error\" : false, \n \"code\" : 200 \n}\n
shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/explain <<EOF\n{ \n \"query\" : \"FOR p IN products FILTER p.id == @id LIMIT 2 RETURN p.n\" \n}\nEOF\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
shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/explain <<EOF\n{ \"query\" : \"FOR i IN [ 1, 2, 3 ] FILTER 1 == 2 RETURN i\" }\nEOF\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\" : 2, \n \"name\" : \"1\" \n }, \n \"canThrow\" : false, \n \"expressionType\" : \"json\" \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\" : 2, \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\" : 4, \n \"name\" : \"3\" \n }, \n { \n \"id\" : 2, \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\" : 22, \n \"rulesSkipped\" : 0, \n \"plansCreated\" : 1 \n }, \n \"error\" : false, \n \"code\" : 200 \n}\n