mirror of https://gitee.com/bigwinds/arangodb
Added CXX implementation for ROUND and RAND
This commit is contained in:
parent
858a8ba4f8
commit
ac1cf36daf
|
|
@ -144,9 +144,9 @@ std::unordered_map<std::string, Function const> const Executor::FunctionNames{
|
|||
// numeric functions
|
||||
{ "FLOOR", Function("FLOOR", "AQL_FLOOR", "n", true, true, false, true, true, &Functions::Floor) },
|
||||
{ "CEIL", Function("CEIL", "AQL_CEIL", "n", true, true, false, true, true, &Functions::Ceil) },
|
||||
{ "ROUND", Function("ROUND", "AQL_ROUND", "n", true, true, false, true, true) },
|
||||
{ "ROUND", Function("ROUND", "AQL_ROUND", "n", true, true, false, true, true, &Functions::Round) },
|
||||
{ "ABS", Function("ABS", "AQL_ABS", "n", true, true, false, true, true, &Functions::Abs) },
|
||||
{ "RAND", Function("RAND", "AQL_RAND", "", false, false, false, true, true) },
|
||||
{ "RAND", Function("RAND", "AQL_RAND", "", false, false, false, true, true, &Functions::Rand) },
|
||||
{ "SQRT", Function("SQRT", "AQL_SQRT", "n", true, true, false, true, true, &Functions::Sqrt) },
|
||||
|
||||
// list functions
|
||||
|
|
|
|||
|
|
@ -3043,7 +3043,7 @@ AqlValue Functions::Round (triagens::aql::Query* query,
|
|||
Json inputJson = ExtractFunctionParameter(trx, parameters, 0, false);
|
||||
|
||||
double input = TRI_ToDoubleJson(inputJson.json());
|
||||
input = round(input);
|
||||
input = floor(input + 0.5); // Rounds down for < x.4999 and up for > x.50000
|
||||
return AqlValue(new Json(input));
|
||||
}
|
||||
|
||||
|
|
@ -3057,7 +3057,7 @@ AqlValue Functions::Abs (triagens::aql::Query* query,
|
|||
size_t const n = parameters.size();
|
||||
|
||||
if (n != 1) {
|
||||
THROW_ARANGO_EXCEPTION_PARAMS(TRI_ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH, "ROUND", (int) 1, (int) 1);
|
||||
THROW_ARANGO_EXCEPTION_PARAMS(TRI_ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH, "ABS", (int) 1, (int) 1);
|
||||
}
|
||||
|
||||
Json inputJson = ExtractFunctionParameter(trx, parameters, 0, false);
|
||||
|
|
@ -3068,7 +3068,7 @@ AqlValue Functions::Abs (triagens::aql::Query* query,
|
|||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief function ABS
|
||||
/// @brief function CEIL
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
AqlValue Functions::Ceil (triagens::aql::Query* query,
|
||||
|
|
@ -3077,7 +3077,7 @@ AqlValue Functions::Ceil (triagens::aql::Query* query,
|
|||
size_t const n = parameters.size();
|
||||
|
||||
if (n != 1) {
|
||||
THROW_ARANGO_EXCEPTION_PARAMS(TRI_ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH, "ROUND", (int) 1, (int) 1);
|
||||
THROW_ARANGO_EXCEPTION_PARAMS(TRI_ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH, "CEIL", (int) 1, (int) 1);
|
||||
}
|
||||
|
||||
Json inputJson = ExtractFunctionParameter(trx, parameters, 0, false);
|
||||
|
|
@ -3088,7 +3088,7 @@ AqlValue Functions::Ceil (triagens::aql::Query* query,
|
|||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief function ABS
|
||||
/// @brief function FLOOR
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
AqlValue Functions::Floor (triagens::aql::Query* query,
|
||||
|
|
@ -3097,7 +3097,7 @@ AqlValue Functions::Floor (triagens::aql::Query* query,
|
|||
size_t const n = parameters.size();
|
||||
|
||||
if (n != 1) {
|
||||
THROW_ARANGO_EXCEPTION_PARAMS(TRI_ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH, "ROUND", (int) 1, (int) 1);
|
||||
THROW_ARANGO_EXCEPTION_PARAMS(TRI_ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH, "FLOOR", (int) 1, (int) 1);
|
||||
}
|
||||
|
||||
Json inputJson = ExtractFunctionParameter(trx, parameters, 0, false);
|
||||
|
|
@ -3108,7 +3108,7 @@ AqlValue Functions::Floor (triagens::aql::Query* query,
|
|||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief function ABS
|
||||
/// @brief function SQRT
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
AqlValue Functions::Sqrt (triagens::aql::Query* query,
|
||||
|
|
@ -3117,7 +3117,7 @@ AqlValue Functions::Sqrt (triagens::aql::Query* query,
|
|||
size_t const n = parameters.size();
|
||||
|
||||
if (n != 1) {
|
||||
THROW_ARANGO_EXCEPTION_PARAMS(TRI_ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH, "ROUND", (int) 1, (int) 1);
|
||||
THROW_ARANGO_EXCEPTION_PARAMS(TRI_ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH, "SQRT", (int) 1, (int) 1);
|
||||
}
|
||||
|
||||
Json inputJson = ExtractFunctionParameter(trx, parameters, 0, false);
|
||||
|
|
@ -3127,6 +3127,24 @@ AqlValue Functions::Sqrt (triagens::aql::Query* query,
|
|||
return AqlValue(new Json(input));
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief function RAND
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
AqlValue Functions::Rand (triagens::aql::Query* query,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
FunctionParameters const& parameters) {
|
||||
size_t const n = parameters.size();
|
||||
|
||||
if (n != 0) {
|
||||
THROW_ARANGO_EXCEPTION_PARAMS(TRI_ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH, "RAND", (int) 0, (int) 0);
|
||||
}
|
||||
|
||||
// This Random functionality is not too good yet...
|
||||
double output = static_cast<double>(std::rand()) / RAND_MAX;
|
||||
return AqlValue(new Json(output));
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// --SECTION-- END-OF-FILE
|
||||
// -----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -119,6 +119,12 @@ namespace triagens {
|
|||
static AqlValue Minus (triagens::aql::Query*, triagens::arango::AqlTransaction*, FunctionParameters const&);
|
||||
static AqlValue Document (triagens::aql::Query*, triagens::arango::AqlTransaction*, FunctionParameters const&);
|
||||
static AqlValue Edges (triagens::aql::Query*, triagens::arango::AqlTransaction*, FunctionParameters const&);
|
||||
static AqlValue Round (triagens::aql::Query*, triagens::arango::AqlTransaction*, FunctionParameters const&);
|
||||
static AqlValue Abs (triagens::aql::Query*, triagens::arango::AqlTransaction*, FunctionParameters const&);
|
||||
static AqlValue Ceil (triagens::aql::Query*, triagens::arango::AqlTransaction*, FunctionParameters const&);
|
||||
static AqlValue Floor (triagens::aql::Query*, triagens::arango::AqlTransaction*, FunctionParameters const&);
|
||||
static AqlValue Sqrt (triagens::aql::Query*, triagens::arango::AqlTransaction*, FunctionParameters const&);
|
||||
static AqlValue Rand (triagens::aql::Query*, triagens::arango::AqlTransaction*, FunctionParameters const&);
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue