From 02a84a4f92bee3812c4498a271a7223d7a68581c Mon Sep 17 00:00:00 2001 From: Jan Steemann Date: Mon, 6 Jan 2014 11:14:54 +0100 Subject: [PATCH] allow functions results as parameters in all function calls --- arangod/Ahuacatl/ahuacatl-functions.c | 3 ++- js/server/tests/ahuacatl-functions.js | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/arangod/Ahuacatl/ahuacatl-functions.c b/arangod/Ahuacatl/ahuacatl-functions.c index b3160be91d..e34e9ff5c9 100644 --- a/arangod/Ahuacatl/ahuacatl-functions.c +++ b/arangod/Ahuacatl/ahuacatl-functions.c @@ -150,7 +150,8 @@ static bool CheckArgumentType (TRI_aql_node_t const* parameter, const param_t* const allowed) { param_t found = InitParam(); - if (parameter->_type == TRI_AQL_NODE_REFERENCE) { + if (parameter->_type == TRI_AQL_NODE_REFERENCE || + parameter->_type == TRI_AQL_NODE_FCALL) { return true; } diff --git a/js/server/tests/ahuacatl-functions.js b/js/server/tests/ahuacatl-functions.js index 3d71255954..0a5501910c 100644 --- a/js/server/tests/ahuacatl-functions.js +++ b/js/server/tests/ahuacatl-functions.js @@ -1760,13 +1760,28 @@ function ahuacatlFunctionsTestSuite () { actual = getQueryResults("RETURN DOCUMENT(\"" + d2._id + "\")"); assertEqual(expected, actual); + // test with function result parameter + actual = getQueryResults("RETURN DOCUMENT(CONCAT(\"foo\", \"bar\"))"); + assertEqual([ null ], actual); + actual = getQueryResults("RETURN DOCUMENT(CONCAT(\"" + cn + "\", \"bart\"))"); + assertEqual([ null ], actual); + + var d3 = cx.save({ _key: "foo", value: "bar" }); + expected = [ { value: "bar" } ]; + actual = getQueryResults("RETURN DOCUMENT(CONCAT(\"" + cn + "\", \"foo\"))"); + assertEqual([ null ], actual); + actual = getQueryResults("RETURN DOCUMENT(CONCAT(@c, \"/\", @k))", { c: cn, k: "foo" }); + assertEqual(expected, actual); + actual = getQueryResults("RETURN DOCUMENT(CONCAT(\"" + cn + "\", \"/\", @k))", { k: "foo" }); + assertEqual(expected, actual); + // test with bind parameter expected = [ { title: "nada", value : 123 } ]; actual = getQueryResults("RETURN DOCUMENT(@id)", { id: d2._id }); assertEqual(expected, actual); // test dynamic parameter - expected = [ { title: "nada", value : 123 }, { title: "123", value: 456 } ]; + expected = [ { title: "nada", value : 123 }, { title: "123", value: 456 }, { value: "bar" } ]; actual = getQueryResults("FOR d IN @@cn SORT d.value RETURN DOCUMENT(d._id)", { "@cn" : cn }); assertEqual(expected, actual);