mirror of https://gitee.com/bigwinds/arangodb
Merge branch 'devel' of github.com:/arangodb/arangodb into devel
This commit is contained in:
commit
df75ae48f9
|
@ -144,6 +144,13 @@ FOR u IN users
|
||||||
SORT u.lastName, u.firstName, u.id DESC
|
SORT u.lastName, u.firstName, u.id DESC
|
||||||
RETURN u
|
RETURN u
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Note that constant *SORT* expressions can be used to indicate that no particular
|
||||||
|
sort order is desired. Constant *SORT* expressions will be optimized away by the AQL
|
||||||
|
optimizer during optimization, but specifying them explicitly may enable further
|
||||||
|
optimizations if the optimizer does not need to take into account any particular
|
||||||
|
sort order.
|
||||||
|
|
||||||
!SUBSECTION LIMIT
|
!SUBSECTION LIMIT
|
||||||
|
|
||||||
The *LIMIT* statement allows slicing the result array using an
|
The *LIMIT* statement allows slicing the result array using an
|
||||||
|
@ -420,7 +427,14 @@ added in front of the *COLLECT*. This is because the *hash* variant of *COLLECT*
|
||||||
sorted input. Instead, a *SORT* statement will be added after the *COLLECT* to sort its output.
|
sorted input. Instead, a *SORT* statement will be added after the *COLLECT* to sort its output.
|
||||||
This *SORT* statement may be optimized away again in later stages.
|
This *SORT* statement may be optimized away again in later stages.
|
||||||
If the sort order of the *COLLECT* is irrelevant to the user, adding the extra instruction *SORT null*
|
If the sort order of the *COLLECT* is irrelevant to the user, adding the extra instruction *SORT null*
|
||||||
after the *COLLECT* will allow the optimizer to remove the sorts altogether.
|
after the *COLLECT* will allow the optimizer to remove the sorts altogether:
|
||||||
|
|
||||||
|
```
|
||||||
|
FOR u IN users
|
||||||
|
COLLECT age = u.age
|
||||||
|
SORT null /* note: will be optimized away */
|
||||||
|
RETURN age
|
||||||
|
```
|
||||||
|
|
||||||
Which *COLLECT* variant is used by the optimizer depends on the optimizer's cost estimations. The
|
Which *COLLECT* variant is used by the optimizer depends on the optimizer's cost estimations. The
|
||||||
created plans with the different *COLLECT* variants will be shipped through the regular optimization
|
created plans with the different *COLLECT* variants will be shipped through the regular optimization
|
||||||
|
|
|
@ -40,6 +40,10 @@
|
||||||
using namespace triagens::aql;
|
using namespace triagens::aql;
|
||||||
using Json = triagens::basics::Json;
|
using Json = triagens::basics::Json;
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// --SECTION-- private functions
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief register warning
|
/// @brief register warning
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -204,6 +208,10 @@ static void AppendAsString (triagens::basics::StringBuffer& buffer,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// --SECTION-- AQL function bindings
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief function IS_NULL
|
/// @brief function IS_NULL
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -211,7 +219,7 @@ static void AppendAsString (triagens::basics::StringBuffer& buffer,
|
||||||
AqlValue Functions::IsNull (triagens::aql::Query*,
|
AqlValue Functions::IsNull (triagens::aql::Query*,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
Json j(parameters.extractArrayMember(trx, collection, 0, false));
|
Json j(parameters.extractArrayMember(trx, collection, 0, false));
|
||||||
return AqlValue(new Json(j.isNull()));
|
return AqlValue(new Json(j.isNull()));
|
||||||
}
|
}
|
||||||
|
@ -223,7 +231,7 @@ AqlValue Functions::IsNull (triagens::aql::Query*,
|
||||||
AqlValue Functions::IsBool (triagens::aql::Query*,
|
AqlValue Functions::IsBool (triagens::aql::Query*,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
Json j(parameters.extractArrayMember(trx, collection, 0, false));
|
Json j(parameters.extractArrayMember(trx, collection, 0, false));
|
||||||
return AqlValue(new Json(j.isBoolean()));
|
return AqlValue(new Json(j.isBoolean()));
|
||||||
}
|
}
|
||||||
|
@ -235,7 +243,7 @@ AqlValue Functions::IsBool (triagens::aql::Query*,
|
||||||
AqlValue Functions::IsNumber (triagens::aql::Query*,
|
AqlValue Functions::IsNumber (triagens::aql::Query*,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
Json j(parameters.extractArrayMember(trx, collection, 0, false));
|
Json j(parameters.extractArrayMember(trx, collection, 0, false));
|
||||||
return AqlValue(new Json(j.isNumber()));
|
return AqlValue(new Json(j.isNumber()));
|
||||||
}
|
}
|
||||||
|
@ -247,7 +255,7 @@ AqlValue Functions::IsNumber (triagens::aql::Query*,
|
||||||
AqlValue Functions::IsString (triagens::aql::Query*,
|
AqlValue Functions::IsString (triagens::aql::Query*,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
Json j(parameters.extractArrayMember(trx, collection, 0, false));
|
Json j(parameters.extractArrayMember(trx, collection, 0, false));
|
||||||
return AqlValue(new Json(j.isString()));
|
return AqlValue(new Json(j.isString()));
|
||||||
}
|
}
|
||||||
|
@ -259,7 +267,7 @@ AqlValue Functions::IsString (triagens::aql::Query*,
|
||||||
AqlValue Functions::IsArray (triagens::aql::Query*,
|
AqlValue Functions::IsArray (triagens::aql::Query*,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
Json j(parameters.extractArrayMember(trx, collection, 0, false));
|
Json j(parameters.extractArrayMember(trx, collection, 0, false));
|
||||||
return AqlValue(new Json(j.isArray()));
|
return AqlValue(new Json(j.isArray()));
|
||||||
}
|
}
|
||||||
|
@ -271,7 +279,7 @@ AqlValue Functions::IsArray (triagens::aql::Query*,
|
||||||
AqlValue Functions::IsObject (triagens::aql::Query*,
|
AqlValue Functions::IsObject (triagens::aql::Query*,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
Json j(parameters.extractArrayMember(trx, collection, 0, false));
|
Json j(parameters.extractArrayMember(trx, collection, 0, false));
|
||||||
return AqlValue(new Json(j.isObject()));
|
return AqlValue(new Json(j.isObject()));
|
||||||
}
|
}
|
||||||
|
@ -283,7 +291,7 @@ AqlValue Functions::IsObject (triagens::aql::Query*,
|
||||||
AqlValue Functions::Length (triagens::aql::Query*,
|
AqlValue Functions::Length (triagens::aql::Query*,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
Json j(parameters.extractArrayMember(trx, collection, 0, false));
|
Json j(parameters.extractArrayMember(trx, collection, 0, false));
|
||||||
|
|
||||||
TRI_json_t const* json = j.json();
|
TRI_json_t const* json = j.json();
|
||||||
|
@ -347,7 +355,7 @@ AqlValue Functions::Length (triagens::aql::Query*,
|
||||||
AqlValue Functions::Concat (triagens::aql::Query*,
|
AqlValue Functions::Concat (triagens::aql::Query*,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
triagens::basics::StringBuffer buffer(TRI_UNKNOWN_MEM_ZONE, 24);
|
triagens::basics::StringBuffer buffer(TRI_UNKNOWN_MEM_ZONE, 24);
|
||||||
|
|
||||||
size_t const n = parameters.arraySize();
|
size_t const n = parameters.arraySize();
|
||||||
|
@ -398,7 +406,7 @@ AqlValue Functions::Concat (triagens::aql::Query*,
|
||||||
AqlValue Functions::Passthru (triagens::aql::Query*,
|
AqlValue Functions::Passthru (triagens::aql::Query*,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
|
|
||||||
Json j(parameters.extractArrayMember(trx, collection, 0, true));
|
Json j(parameters.extractArrayMember(trx, collection, 0, true));
|
||||||
auto jr = new Json(TRI_UNKNOWN_MEM_ZONE, j.json());
|
auto jr = new Json(TRI_UNKNOWN_MEM_ZONE, j.json());
|
||||||
|
@ -413,7 +421,7 @@ AqlValue Functions::Passthru (triagens::aql::Query*,
|
||||||
AqlValue Functions::Unset (triagens::aql::Query* query,
|
AqlValue Functions::Unset (triagens::aql::Query* query,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
||||||
|
|
||||||
if (! value.isObject()) {
|
if (! value.isObject()) {
|
||||||
|
@ -471,7 +479,7 @@ AqlValue Functions::Unset (triagens::aql::Query* query,
|
||||||
AqlValue Functions::Keep (triagens::aql::Query* query,
|
AqlValue Functions::Keep (triagens::aql::Query* query,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
||||||
|
|
||||||
if (! value.isObject()) {
|
if (! value.isObject()) {
|
||||||
|
@ -521,7 +529,7 @@ AqlValue Functions::Keep (triagens::aql::Query* query,
|
||||||
AqlValue Functions::Merge (triagens::aql::Query* query,
|
AqlValue Functions::Merge (triagens::aql::Query* query,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
size_t const n = parameters.arraySize();
|
size_t const n = parameters.arraySize();
|
||||||
|
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
|
@ -569,7 +577,7 @@ AqlValue Functions::Merge (triagens::aql::Query* query,
|
||||||
AqlValue Functions::Has (triagens::aql::Query* query,
|
AqlValue Functions::Has (triagens::aql::Query* query,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
size_t const n = parameters.arraySize();
|
size_t const n = parameters.arraySize();
|
||||||
|
|
||||||
if (n < 2) {
|
if (n < 2) {
|
||||||
|
@ -609,7 +617,7 @@ AqlValue Functions::Has (triagens::aql::Query* query,
|
||||||
AqlValue Functions::Attributes (triagens::aql::Query* query,
|
AqlValue Functions::Attributes (triagens::aql::Query* query,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
size_t const n = parameters.arraySize();
|
size_t const n = parameters.arraySize();
|
||||||
|
|
||||||
if (n < 1) {
|
if (n < 1) {
|
||||||
|
@ -686,7 +694,7 @@ AqlValue Functions::Attributes (triagens::aql::Query* query,
|
||||||
AqlValue Functions::Values (triagens::aql::Query* query,
|
AqlValue Functions::Values (triagens::aql::Query* query,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
size_t const n = parameters.arraySize();
|
size_t const n = parameters.arraySize();
|
||||||
|
|
||||||
if (n < 1) {
|
if (n < 1) {
|
||||||
|
@ -745,7 +753,7 @@ AqlValue Functions::Values (triagens::aql::Query* query,
|
||||||
AqlValue Functions::Min (triagens::aql::Query* query,
|
AqlValue Functions::Min (triagens::aql::Query* query,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
||||||
|
|
||||||
if (! value.isArray()) {
|
if (! value.isArray()) {
|
||||||
|
@ -791,7 +799,7 @@ AqlValue Functions::Min (triagens::aql::Query* query,
|
||||||
AqlValue Functions::Max (triagens::aql::Query* query,
|
AqlValue Functions::Max (triagens::aql::Query* query,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
||||||
|
|
||||||
if (! value.isArray()) {
|
if (! value.isArray()) {
|
||||||
|
@ -837,7 +845,7 @@ AqlValue Functions::Max (triagens::aql::Query* query,
|
||||||
AqlValue Functions::Sum (triagens::aql::Query* query,
|
AqlValue Functions::Sum (triagens::aql::Query* query,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
||||||
|
|
||||||
if (! value.isArray()) {
|
if (! value.isArray()) {
|
||||||
|
@ -884,7 +892,7 @@ AqlValue Functions::Sum (triagens::aql::Query* query,
|
||||||
AqlValue Functions::Average (triagens::aql::Query* query,
|
AqlValue Functions::Average (triagens::aql::Query* query,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
||||||
|
|
||||||
if (! value.isArray()) {
|
if (! value.isArray()) {
|
||||||
|
@ -934,7 +942,7 @@ AqlValue Functions::Average (triagens::aql::Query* query,
|
||||||
AqlValue Functions::Md5 (triagens::aql::Query* query,
|
AqlValue Functions::Md5 (triagens::aql::Query* query,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
||||||
|
|
||||||
triagens::basics::StringBuffer buffer(TRI_UNKNOWN_MEM_ZONE);
|
triagens::basics::StringBuffer buffer(TRI_UNKNOWN_MEM_ZONE);
|
||||||
|
@ -963,7 +971,7 @@ AqlValue Functions::Md5 (triagens::aql::Query* query,
|
||||||
AqlValue Functions::Sha1 (triagens::aql::Query* query,
|
AqlValue Functions::Sha1 (triagens::aql::Query* query,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
||||||
|
|
||||||
triagens::basics::StringBuffer buffer(TRI_UNKNOWN_MEM_ZONE);
|
triagens::basics::StringBuffer buffer(TRI_UNKNOWN_MEM_ZONE);
|
||||||
|
@ -992,7 +1000,7 @@ AqlValue Functions::Sha1 (triagens::aql::Query* query,
|
||||||
AqlValue Functions::Unique (triagens::aql::Query* query,
|
AqlValue Functions::Unique (triagens::aql::Query* query,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
if (parameters.arraySize() != 1) {
|
if (parameters.arraySize() != 1) {
|
||||||
THROW_ARANGO_EXCEPTION_PARAMS(TRI_ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH, "UNIQUE");
|
THROW_ARANGO_EXCEPTION_PARAMS(TRI_ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH, "UNIQUE");
|
||||||
}
|
}
|
||||||
|
@ -1048,7 +1056,7 @@ AqlValue Functions::Unique (triagens::aql::Query* query,
|
||||||
AqlValue Functions::Union (triagens::aql::Query* query,
|
AqlValue Functions::Union (triagens::aql::Query* query,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
size_t const n = parameters.arraySize();
|
size_t const n = parameters.arraySize();
|
||||||
|
|
||||||
if (parameters.arraySize() < 2) {
|
if (parameters.arraySize() < 2) {
|
||||||
|
@ -1109,7 +1117,7 @@ AqlValue Functions::Union (triagens::aql::Query* query,
|
||||||
AqlValue Functions::UnionDistinct (triagens::aql::Query* query,
|
AqlValue Functions::UnionDistinct (triagens::aql::Query* query,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
if (parameters.arraySize() < 2) {
|
if (parameters.arraySize() < 2) {
|
||||||
THROW_ARANGO_EXCEPTION_PARAMS(TRI_ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH, "UNION_DISTINCT");
|
THROW_ARANGO_EXCEPTION_PARAMS(TRI_ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH, "UNION_DISTINCT");
|
||||||
}
|
}
|
||||||
|
@ -1199,7 +1207,7 @@ AqlValue Functions::UnionDistinct (triagens::aql::Query* query,
|
||||||
AqlValue Functions::Intersection (triagens::aql::Query* query,
|
AqlValue Functions::Intersection (triagens::aql::Query* query,
|
||||||
triagens::arango::AqlTransaction* trx,
|
triagens::arango::AqlTransaction* trx,
|
||||||
TRI_document_collection_t const* collection,
|
TRI_document_collection_t const* collection,
|
||||||
AqlValue const parameters) {
|
FunctionParameters parameters) {
|
||||||
size_t const n = parameters.arraySize();
|
size_t const n = parameters.arraySize();
|
||||||
|
|
||||||
if (parameters.arraySize() < 2) {
|
if (parameters.arraySize() < 2) {
|
||||||
|
|
|
@ -42,42 +42,48 @@ namespace triagens {
|
||||||
|
|
||||||
class Query;
|
class Query;
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// --SECTION-- public typedefs
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
typedef AqlValue const FunctionParameters;
|
||||||
|
|
||||||
typedef std::function<AqlValue(triagens::aql::Query*,
|
typedef std::function<AqlValue(triagens::aql::Query*,
|
||||||
triagens::arango::AqlTransaction*,
|
triagens::arango::AqlTransaction*,
|
||||||
TRI_document_collection_t const*,
|
TRI_document_collection_t const*,
|
||||||
AqlValue const)> FunctionImplementation;
|
FunctionParameters)> FunctionImplementation;
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// --SECTION-- AQL function bindings
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
struct Functions {
|
struct Functions {
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
static AqlValue IsNull (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
/// @brief functions
|
static AqlValue IsBool (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
static AqlValue IsNumber (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
|
static AqlValue IsString (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue IsNull (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
static AqlValue IsArray (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue IsBool (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
static AqlValue IsObject (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue IsNumber (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
static AqlValue Length (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue IsString (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
static AqlValue Concat (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue IsArray (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
static AqlValue Passthru (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue IsObject (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
static AqlValue Unset (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue Length (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
static AqlValue Keep (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue Concat (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
static AqlValue Merge (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue Passthru (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
static AqlValue Has (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue Unset (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
static AqlValue Attributes (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue Keep (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
static AqlValue Values (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue Merge (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
static AqlValue Min (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue Has (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
static AqlValue Max (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue Attributes (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
static AqlValue Sum (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue Values (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
static AqlValue Average (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue Min (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
static AqlValue Md5 (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue Max (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
static AqlValue Sha1 (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue Sum (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
static AqlValue Unique (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue Average (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
static AqlValue Union (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue Md5 (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
static AqlValue UnionDistinct (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue Sha1 (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
static AqlValue Intersection (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||||
static AqlValue Unique (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
|
||||||
static AqlValue Union (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
|
||||||
static AqlValue UnionDistinct (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
|
||||||
static AqlValue Intersection (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,6 +54,14 @@
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
calculateCenterDivHeight: function() {
|
||||||
|
var navigation = $('.navbar').height();
|
||||||
|
var footer = $('.footer').height();
|
||||||
|
var windowHeight = $(window).height();
|
||||||
|
|
||||||
|
return windowHeight - footer - navigation - 110;
|
||||||
|
},
|
||||||
|
|
||||||
fixTooltips: function (selector, placement) {
|
fixTooltips: function (selector, placement) {
|
||||||
$(selector).tooltip({
|
$(selector).tooltip({
|
||||||
placement: placement,
|
placement: placement,
|
||||||
|
@ -2168,8 +2176,6 @@ window.StatisticsCollection = Backbone.Collection.extend({
|
||||||
{async: true}
|
{async: true}
|
||||||
).done(
|
).done(
|
||||||
function (d) {
|
function (d) {
|
||||||
console.log(url + urlParams);
|
|
||||||
console.log(d);
|
|
||||||
if (d.times.length > 0) {
|
if (d.times.length > 0) {
|
||||||
self.isUpdating = true;
|
self.isUpdating = true;
|
||||||
self.mergeHistory(d);
|
self.mergeHistory(d);
|
||||||
|
|
|
@ -4104,7 +4104,6 @@ svg.graph-viewer {
|
||||||
pointer-events: none; }
|
pointer-events: none; }
|
||||||
|
|
||||||
div.gv-background {
|
div.gv-background {
|
||||||
height: 685px;
|
|
||||||
position: relative; }
|
position: relative; }
|
||||||
|
|
||||||
.link > line {
|
.link > line {
|
||||||
|
|
|
@ -54,6 +54,14 @@
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
calculateCenterDivHeight: function() {
|
||||||
|
var navigation = $('.navbar').height();
|
||||||
|
var footer = $('.footer').height();
|
||||||
|
var windowHeight = $(window).height();
|
||||||
|
|
||||||
|
return windowHeight - footer - navigation - 110;
|
||||||
|
},
|
||||||
|
|
||||||
fixTooltips: function (selector, placement) {
|
fixTooltips: function (selector, placement) {
|
||||||
$(selector).tooltip({
|
$(selector).tooltip({
|
||||||
placement: placement,
|
placement: placement,
|
||||||
|
|
|
@ -141,7 +141,7 @@ global.tutorial = require("org/arangodb/tutorial");
|
||||||
/// @brief prints help
|
/// @brief prints help
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
(function() {
|
var initHelp = function() {
|
||||||
var internal = require("internal");
|
var internal = require("internal");
|
||||||
|
|
||||||
if (internal.db) {
|
if (internal.db) {
|
||||||
|
@ -158,11 +158,16 @@ global.tutorial = require("org/arangodb/tutorial");
|
||||||
internal.print("Type 'tutorial' for a tutorial or 'help' to see common examples");
|
internal.print("Type 'tutorial' for a tutorial or 'help' to see common examples");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief read rc file
|
/// @brief read rc file
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
if (typeof window === 'undefined') {
|
||||||
|
// We're in arangosh
|
||||||
|
initHelp();
|
||||||
|
|
||||||
// these variables are not defined in the browser context
|
// these variables are not defined in the browser context
|
||||||
if (
|
if (
|
||||||
global.IS_EXECUTE_SCRIPT ||
|
global.IS_EXECUTE_SCRIPT ||
|
||||||
|
@ -194,7 +199,7 @@ global.tutorial = require("org/arangodb/tutorial");
|
||||||
delete global.IS_UNIT_TESTS;
|
delete global.IS_UNIT_TESTS;
|
||||||
delete global.IS_JS_LINT;
|
delete global.IS_JS_LINT;
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
}());
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// --SECTION-- END-OF-FILE
|
// --SECTION-- END-OF-FILE
|
||||||
|
|
|
@ -45,7 +45,10 @@
|
||||||
};
|
};
|
||||||
var width = $("#content").width() - 75;
|
var width = $("#content").width() - 75;
|
||||||
$("#content").html("");
|
$("#content").html("");
|
||||||
this.ui = new GraphViewerUI($("#content")[0], adapterConfig, width, 680, {
|
|
||||||
|
var height = arangoHelper.calculateCenterDivHeight();
|
||||||
|
|
||||||
|
this.ui = new GraphViewerUI($("#content")[0], adapterConfig, width, height, {
|
||||||
nodeShaper: {
|
nodeShaper: {
|
||||||
label: "_key",
|
label: "_key",
|
||||||
color: {
|
color: {
|
||||||
|
@ -56,6 +59,8 @@
|
||||||
|
|
||||||
}, true);
|
}, true);
|
||||||
|
|
||||||
|
$('.contentDiv').height(height);
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
handleResize: function(w) {
|
handleResize: function(w) {
|
||||||
|
|
|
@ -70,7 +70,6 @@ svg.graph-viewer {
|
||||||
}
|
}
|
||||||
|
|
||||||
div.gv-background {
|
div.gv-background {
|
||||||
height: 685px;
|
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -141,7 +141,7 @@ global.tutorial = require("org/arangodb/tutorial");
|
||||||
/// @brief prints help
|
/// @brief prints help
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
(function() {
|
var initHelp = function() {
|
||||||
var internal = require("internal");
|
var internal = require("internal");
|
||||||
|
|
||||||
if (internal.db) {
|
if (internal.db) {
|
||||||
|
@ -158,11 +158,16 @@ global.tutorial = require("org/arangodb/tutorial");
|
||||||
internal.print("Type 'tutorial' for a tutorial or 'help' to see common examples");
|
internal.print("Type 'tutorial' for a tutorial or 'help' to see common examples");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief read rc file
|
/// @brief read rc file
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
if (typeof window === 'undefined') {
|
||||||
|
// We're in arangosh
|
||||||
|
initHelp();
|
||||||
|
|
||||||
// these variables are not defined in the browser context
|
// these variables are not defined in the browser context
|
||||||
if (
|
if (
|
||||||
global.IS_EXECUTE_SCRIPT ||
|
global.IS_EXECUTE_SCRIPT ||
|
||||||
|
@ -194,7 +199,7 @@ global.tutorial = require("org/arangodb/tutorial");
|
||||||
delete global.IS_UNIT_TESTS;
|
delete global.IS_UNIT_TESTS;
|
||||||
delete global.IS_JS_LINT;
|
delete global.IS_JS_LINT;
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
}());
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// --SECTION-- END-OF-FILE
|
// --SECTION-- END-OF-FILE
|
||||||
|
|
|
@ -133,6 +133,7 @@ struct TRI_log_appender_t {
|
||||||
virtual void closeLog () = 0;
|
virtual void closeLog () = 0;
|
||||||
virtual char* details () = 0;
|
virtual char* details () = 0;
|
||||||
virtual TRI_log_appender_type_e type () = 0;
|
virtual TRI_log_appender_type_e type () = 0;
|
||||||
|
virtual char const* typeName () = 0;
|
||||||
|
|
||||||
char* _contentFilter; // an optional content filter for log messages
|
char* _contentFilter; // an optional content filter for log messages
|
||||||
TRI_log_severity_e _severityFilter; // appender will care only about message with a specific severity. set to TRI_LOG_SEVERITY_UNKNOWN to catch all
|
TRI_log_severity_e _severityFilter; // appender will care only about message with a specific severity. set to TRI_LOG_SEVERITY_UNKNOWN to catch all
|
||||||
|
@ -854,14 +855,16 @@ static void LogThread (char const* func,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
try {
|
||||||
std::string message("format string is corrupt: [");
|
std::string message("format string is corrupt: [");
|
||||||
message += fmt + std::string("] - GenerateMessage failed");
|
message += fmt + std::string("] - GenerateMessage failed");
|
||||||
TRI_GetBacktrace(message);
|
TRI_GetBacktrace(message);
|
||||||
DisarmFormatString(message);
|
DisarmFormatString(message);
|
||||||
TRI_Log(func, file, line, TRI_LOG_LEVEL_WARNING, TRI_LOG_SEVERITY_HUMAN, message.c_str());
|
TRI_Log(func, file, line, TRI_LOG_LEVEL_WARNING, TRI_LOG_SEVERITY_HUMAN, message.c_str());
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
catch (...) {
|
||||||
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
if (n < (int) (sizeof(buffer) - len)) {
|
if (n < (int) (sizeof(buffer) - len)) {
|
||||||
// static buffer was big enough
|
// static buffer was big enough
|
||||||
|
@ -901,11 +904,15 @@ static void LogThread (char const* func,
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
TRI_Free(TRI_UNKNOWN_MEM_ZONE, p);
|
TRI_Free(TRI_UNKNOWN_MEM_ZONE, p);
|
||||||
std::string message("format string is corrupt: [");
|
try {
|
||||||
message += fmt + std::string("] ");
|
std::string message("format string is corrupt: [");
|
||||||
TRI_GetBacktrace(message);
|
message += fmt + std::string("] ");
|
||||||
DisarmFormatString(message);
|
TRI_GetBacktrace(message);
|
||||||
TRI_Log(func, file, line, TRI_LOG_LEVEL_WARNING, TRI_LOG_SEVERITY_HUMAN, message.c_str());
|
DisarmFormatString(message);
|
||||||
|
TRI_Log(func, file, line, TRI_LOG_LEVEL_WARNING, TRI_LOG_SEVERITY_HUMAN, message.c_str());
|
||||||
|
}
|
||||||
|
catch (...) {
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1327,6 +1334,10 @@ struct log_appender_file_t : public TRI_log_appender_t {
|
||||||
return APPENDER_TYPE_FILE;
|
return APPENDER_TYPE_FILE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char const* typeName () override final {
|
||||||
|
return "file";
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void writeLogFile (int, char const*, ssize_t);
|
void writeLogFile (int, char const*, ssize_t);
|
||||||
|
|
||||||
|
@ -1614,6 +1625,10 @@ struct log_appender_syslog_t : public TRI_log_appender_t {
|
||||||
return APPENDER_TYPE_SYSLOG;
|
return APPENDER_TYPE_SYSLOG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char const* typeName () override final {
|
||||||
|
return "syslog";
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
triagens::basics::Mutex _lock;
|
triagens::basics::Mutex _lock;
|
||||||
|
@ -1932,7 +1947,13 @@ void TRI_ReopenLogging () {
|
||||||
MUTEX_LOCKER(AppendersLock);
|
MUTEX_LOCKER(AppendersLock);
|
||||||
|
|
||||||
for (auto& it : Appenders) {
|
for (auto& it : Appenders) {
|
||||||
it->reopenLog();
|
try {
|
||||||
|
it->reopenLog();
|
||||||
|
}
|
||||||
|
catch (...) {
|
||||||
|
// silently catch this error (we shouldn't try to log an error about a
|
||||||
|
// logging error as this will get us into trouble with mutexes etc.)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -154,17 +154,25 @@ void DispatcherThread::run () {
|
||||||
|
|
||||||
status = Job::status_t(Job::JOB_FAILED);
|
status = Job::status_t(Job::JOB_FAILED);
|
||||||
}
|
}
|
||||||
catch (std::exception const& ex) {
|
catch (std::bad_alloc const& ex) {
|
||||||
try {
|
try {
|
||||||
Exception ex2(TRI_ERROR_INTERNAL, string("job failed with unknown in work: ") + ex.what(), __FILE__, __LINE__);
|
Exception ex2(TRI_ERROR_OUT_OF_MEMORY, string("job failed with unknown error in work(): ") + ex.what(), __FILE__, __LINE__);
|
||||||
|
|
||||||
job->handleError(ex2);
|
job->handleError(ex2);
|
||||||
|
LOG_WARNING("caught exception in work(): %s", ex2.what());
|
||||||
}
|
}
|
||||||
catch (Exception const& ex) {
|
catch (...) {
|
||||||
LOG_WARNING("caught error while handling error: %s", ex.what());
|
LOG_WARNING("caught error while handling error!");
|
||||||
}
|
}
|
||||||
catch (std::exception const& ex) {
|
|
||||||
LOG_WARNING("caught error while handling error: %s", ex.what());
|
status = Job::status_t(Job::JOB_FAILED);
|
||||||
|
}
|
||||||
|
catch (std::exception const& ex) {
|
||||||
|
try {
|
||||||
|
Exception ex2(TRI_ERROR_INTERNAL, string("job failed with unknown error in work(): ") + ex.what(), __FILE__, __LINE__);
|
||||||
|
|
||||||
|
job->handleError(ex2);
|
||||||
|
LOG_WARNING("caught exception in work(): %s", ex2.what());
|
||||||
}
|
}
|
||||||
catch (...) {
|
catch (...) {
|
||||||
LOG_WARNING("caught error while handling error!");
|
LOG_WARNING("caught error while handling error!");
|
||||||
|
@ -181,15 +189,10 @@ void DispatcherThread::run () {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Exception ex(TRI_ERROR_INTERNAL, "job failed with unknown error in work", __FILE__, __LINE__);
|
Exception ex(TRI_ERROR_INTERNAL, "job failed with unknown error in work()", __FILE__, __LINE__);
|
||||||
|
|
||||||
job->handleError(ex);
|
job->handleError(ex);
|
||||||
}
|
LOG_WARNING("caught unknown exception in work()");
|
||||||
catch (Exception const& ex) {
|
|
||||||
LOG_WARNING("caught error while handling error: %s", DIAGNOSTIC_INFORMATION(ex));
|
|
||||||
}
|
|
||||||
catch (std::exception const& ex) {
|
|
||||||
LOG_WARNING("caught error while handling error: %s", ex.what());
|
|
||||||
}
|
}
|
||||||
catch (...) {
|
catch (...) {
|
||||||
LOG_WARNING("caught error while handling error!");
|
LOG_WARNING("caught error while handling error!");
|
||||||
|
|
Loading…
Reference in New Issue