1
0
Fork 0

add native implementation of the FAIL aql function (#5232)

This commit is contained in:
Wilfried Goesgens 2018-04-30 18:35:14 +02:00 committed by Jan
parent b4dcad9662
commit ba278a64c9
4 changed files with 88 additions and 1 deletions

View File

@ -325,7 +325,7 @@ void AqlFunctionFeature::addDateFunctions() {
void AqlFunctionFeature::addMiscFunctions() {
// misc functions
add({"FAIL", "|.", false, true, true });
add({"FAIL", "|.", false, true, true, &Functions::Fail});
add({"PASSTHRU", ".", false, false, true, &Functions::Passthru});
addAlias("NOOPT", "PASSTHRU");
add({"V8", ".", true, false, true });

View File

@ -5887,3 +5887,24 @@ AqlValue Functions::Warn(arangodb::aql::Query* query, transaction::Methods* trx,
}
return AqlValue(AqlValueHintBool(true));
}
AqlValue Functions::Fail(arangodb::aql::Query* query, transaction::Methods* trx,
VPackFunctionParameters const& parameters) {
static char const* AFN = "FAIL";
ValidateParameters(parameters, AFN, 0, 1);
if (parameters.size() == 0) {
THROW_ARANGO_EXCEPTION_PARAMS(TRI_ERROR_QUERY_FAIL_CALLED, "");
}
AqlValue value = ExtractFunctionParameterValue(parameters, 0);
if (! value.isString()) {
THROW_ARANGO_EXCEPTION_PARAMS(TRI_ERROR_QUERY_FAIL_CALLED, "");
}
AqlValueMaterializer materializer(trx);
VPackValueLength l;
char const* msg = materializer.slice(value, false).getString(l);
THROW_ARANGO_EXCEPTION_PARAMS(TRI_ERROR_QUERY_FAIL_CALLED, msg);
}

View File

@ -476,6 +476,8 @@ struct Functions {
VPackFunctionParameters const&);
static AqlValue Warn(arangodb::aql::Query*, transaction::Methods*,
VPackFunctionParameters const&);
static AqlValue Fail(arangodb::aql::Query*, transaction::Methods*,
VPackFunctionParameters const&);
};
}

View File

@ -35,6 +35,7 @@ var helper = require("@arangodb/aql-helper");
var getQueryResults = helper.getQueryResults;
var assertQueryError = helper.assertQueryError;
var assertQueryWarningAndNull = helper.assertQueryWarningAndNull;
var internal = require('internal');
var sortObj = function (obj) {
var result = { };
@ -86,7 +87,70 @@ function ahuacatlFunctionsTestSuite () {
tearDownAll : function () {
db._drop(collectionName);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test first function
////////////////////////////////////////////////////////////////////////////////
testFail : function () {
try {
db._query("RETURN FAIL()");
fail();
}
catch(err) {
var expected = internal.errors.ERROR_QUERY_FAIL_CALLED.code;
assertEqual(expected, err.errorNum);
}
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test first function
////////////////////////////////////////////////////////////////////////////////
testFailInt : function () {
try {
db._query("RETURN FAIL(1234)");
fail();
}
catch(err) {
var expected = internal.errors.ERROR_QUERY_FAIL_CALLED.code;
assertEqual(expected, err.errorNum);
assertTrue(err.errorMessage.search("1234") === -1);
}
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test first function
////////////////////////////////////////////////////////////////////////////////
testFailObj : function () {
try {
db._query("RETURN FAIL({})");
fail();
}
catch(err) {
var expected = internal.errors.ERROR_QUERY_FAIL_CALLED.code;
assertEqual(expected, err.errorNum);
assertTrue(err.errorMessage.search("{}") === -1);
}
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test first function
////////////////////////////////////////////////////////////////////////////////
testFailMessage : function () {
try {
db._query("RETURN FAIL('bla')");
fail();
}
catch(err) {
var expected = internal.errors.ERROR_QUERY_FAIL_CALLED.code;
assertEqual(expected, err.errorNum);
assertTrue(err.errorMessage.search("bla") !== -1);
}
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test first function
////////////////////////////////////////////////////////////////////////////////