1
0
Fork 0

fixed several AQL tests

This commit is contained in:
Jan Steemann 2014-08-28 16:19:05 +02:00
parent fd5e687ef0
commit 2a104b8bcb
3 changed files with 65 additions and 56 deletions

View File

@ -153,7 +153,7 @@ std::unordered_map<std::string, Function const> const V8Executor::FunctionNames{
{ "ATTRIBUTES", Function("ATTRIBUTES", "ATTRIBUTES", "a|b,b", true, true) },
{ "MERGE", Function("MERGE", "MERGE", "a,a|+", true, true) },
{ "MERGE_RECURSIVE", Function("MERGE_RECURSIVE", "MERGE_RECURSIVE", "a,a|+", true, true) },
{ "DOCUMENT", Function("DOCUMENT", "DOCUMENT", "h.|.", true, true) },
{ "DOCUMENT", Function("DOCUMENT", "DOCUMENT", "h.|.", false, true) },
{ "MATCHES", Function("MATCHES", "MATCHES", ".,l|b", true, true) },
{ "UNSET", Function("UNSET", "UNSET", "a,sl|+", true, true) },
{ "KEEP", Function("KEEP", "KEEP", "a,sl|+", true, true) },
@ -625,18 +625,20 @@ void V8Executor::generateCodeFunctionCall (AstNode const* node) {
if (member != nullptr) {
if (func->containsCollectionParameter &&
member->type == NODE_TYPE_COLLECTION &&
func->mustConvertArgument(i)) {
// the parameter at this position must be a collection name that is converted to a string
if (member->type == NODE_TYPE_COLLECTION) {
// do a parameter conversion from a collection parameter to a collection name parameter
char const* name = member->getStringValue();
generateCodeString(name);
}
// the parameter at this position is a collection name that is converted to a string
// do a parameter conversion from a collection parameter to a collection name parameter
char const* name = member->getStringValue();
generateCodeString(name);
}
/*
else {
// the parameter at the position is not a collection name... fail
THROW_ARANGO_EXCEPTION_PARAMS(TRI_ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH, func->internalName.c_str());
}
}
*/
else {
// generate regular code for the node
generateCodeNode(args->getMember(i));

View File

@ -3125,6 +3125,10 @@ function FLATTEN (values, maxDepth, depth) {
if (TYPEWEIGHT(maxDepth) === TYPEWEIGHT_NULL) {
maxDepth = 1;
}
else if (TYPEWEIGHT(maxDepth) !== TYPEWEIGHT_NUMBER) {
THROW(INTERNAL.errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH, "FLATTEN");
}
if (TYPEWEIGHT(depth) === TYPEWEIGHT_NULL) {
depth = 0;
}
@ -3663,6 +3667,10 @@ function SKIPLIST_QUERY (collection, condition, skip, limit) {
function HAS (element, name) {
"use strict";
if (TYPEWEIGHT(name) !== TYPEWEIGHT_STRING) {
THROW(INTERNAL.errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH, "HAS");
}
if (TYPEWEIGHT(element) === TYPEWEIGHT_NULL) {
return false;

View File

@ -1329,13 +1329,12 @@ function ahuacatlFunctionsTestSuite () {
////////////////////////////////////////////////////////////////////////////////
testUnsetInvalid : function () {
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN UNSET()");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN UNSET({ })");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN UNSET({ }, 1)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN UNSET({ }, { })");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN UNSET({ }, 'foo', { })");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN UNSET('foo', 'foo')");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN UNSET()");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN UNSET({ })");
},
////////////////////////////////////////////////////////////////////////////////
@ -2134,14 +2133,14 @@ function ahuacatlFunctionsTestSuite () {
testFlattenInvalid : function () {
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN FLATTEN()");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN FLATTEN([ ], 1, 1)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN FLATTEN(1)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN FLATTEN(null)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN FLATTEN(false)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN FLATTEN(1)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN FLATTEN('foo')");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN FLATTEN(1)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN FLATTEN(null)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN FLATTEN(false)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN FLATTEN(1)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN FLATTEN('foo')");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN FLATTEN([ ], 'foo')");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN FLATTEN([ ], [ ])");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN FLATTEN({ })");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN FLATTEN({ })");
},
////////////////////////////////////////////////////////////////////////////////
@ -2633,11 +2632,11 @@ function ahuacatlFunctionsTestSuite () {
testMinInvalid : function () {
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN MIN()");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN MIN([ ], 2)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN MIN(null)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN MIN(false)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN MIN(3)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN MIN(\"yes\")");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN MIN({ })");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN MIN(null)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN MIN(false)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN MIN(3)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN MIN(\"yes\")");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN MIN({ })");
},
////////////////////////////////////////////////////////////////////////////////
@ -2677,11 +2676,11 @@ function ahuacatlFunctionsTestSuite () {
testMaxInvalid : function () {
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN MAX()");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN MAX([ ], 2)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN MAX(null)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN MAX(false)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN MAX(3)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN MAX(\"yes\")");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN MAX({ })");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN MAX(null)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN MAX(false)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN MAX(3)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN MAX(\"yes\")");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN MAX({ })");
},
////////////////////////////////////////////////////////////////////////////////
@ -2718,11 +2717,11 @@ function ahuacatlFunctionsTestSuite () {
testSumInvalid : function () {
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN SUM()");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN SUM([ ], 2)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN SUM(null)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN SUM(false)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN SUM(3)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN SUM(\"yes\")");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN SUM({ })");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN SUM(null)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN SUM(false)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN SUM(3)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN SUM(\"yes\")");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN SUM({ })");
},
////////////////////////////////////////////////////////////////////////////////
@ -2765,11 +2764,11 @@ function ahuacatlFunctionsTestSuite () {
testAverageInvalid : function () {
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN AVERAGE()");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN AVERAGE([ ], 2)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN AVERAGE(null)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN AVERAGE(false)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN AVERAGE(3)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN AVERAGE(\"yes\")");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN AVERAGE({ })");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN AVERAGE(null)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN AVERAGE(false)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN AVERAGE(3)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN AVERAGE(\"yes\")");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN AVERAGE({ })");
},
////////////////////////////////////////////////////////////////////////////////
@ -2823,11 +2822,11 @@ function ahuacatlFunctionsTestSuite () {
testMedianInvalid : function () {
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN MEDIAN()");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN MEDIAN([ ], 2)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN MEDIAN(null)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN MEDIAN(false)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN MEDIAN(3)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN MEDIAN(\"yes\")");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN MEDIAN({ })");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN MEDIAN(null)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN MEDIAN(false)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN MEDIAN(3)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN MEDIAN(\"yes\")");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN MEDIAN({ })");
},
////////////////////////////////////////////////////////////////////////////////
@ -3870,11 +3869,11 @@ function ahuacatlFunctionsTestSuite () {
testVariancePopulationInvalid : function () {
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN VARIANCE_POPULATION()");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN VARIANCE_POPULATION([ ], 2)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN VARIANCE_POPULATION(null)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN VARIANCE_POPULATION(false)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN VARIANCE_POPULATION(3)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN VARIANCE_POPULATION(\"yes\")");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN VARIANCE_POPULATION({ })");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN VARIANCE_POPULATION(null)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN VARIANCE_POPULATION(false)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN VARIANCE_POPULATION(3)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN VARIANCE_POPULATION(\"yes\")");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN VARIANCE_POPULATION({ })");
},
////////////////////////////////////////////////////////////////////////////////
@ -3927,11 +3926,11 @@ function ahuacatlFunctionsTestSuite () {
testVarianceSampleInvalid : function () {
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN VARIANCE_SAMPLE()");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN VARIANCE_SAMPLE([ ], 2)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN VARIANCE_SAMPLE(null)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN VARIANCE_SAMPLE(false)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN VARIANCE_SAMPLE(3)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN VARIANCE_SAMPLE(\"yes\")");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN VARIANCE_SAMPLE({ })");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN VARIANCE_SAMPLE(null)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN VARIANCE_SAMPLE(false)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN VARIANCE_SAMPLE(3)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN VARIANCE_SAMPLE(\"yes\")");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN VARIANCE_SAMPLE({ })");
},
////////////////////////////////////////////////////////////////////////////////
@ -3989,11 +3988,11 @@ function ahuacatlFunctionsTestSuite () {
testStddevPopulationInvalid : function () {
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN STDDEV_POPULATION()");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN STDDEV_POPULATION([ ], 2)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN STDDEV_POPULATION(null)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN STDDEV_POPULATION(false)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN STDDEV_POPULATION(3)");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN STDDEV_POPULATION(\"yes\")");
assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_TYPE_MISMATCH.code, "RETURN STDDEV_POPULATION({ })");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN STDDEV_POPULATION(null)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN STDDEV_POPULATION(false)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN STDDEV_POPULATION(3)");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN STDDEV_POPULATION(\"yes\")");
assertQueryError(errors.ERROR_QUERY_LIST_EXPECTED.code, "RETURN STDDEV_POPULATION({ })");
},
////////////////////////////////////////////////////////////////////////////////