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
|
||||
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
|
||||
|
||||
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.
|
||||
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*
|
||||
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
|
||||
created plans with the different *COLLECT* variants will be shipped through the regular optimization
|
||||
|
|
|
@ -40,6 +40,10 @@
|
|||
using namespace triagens::aql;
|
||||
using Json = triagens::basics::Json;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// --SECTION-- private functions
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief register warning
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -204,6 +208,10 @@ static void AppendAsString (triagens::basics::StringBuffer& buffer,
|
|||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// --SECTION-- AQL function bindings
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief function IS_NULL
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -211,7 +219,7 @@ static void AppendAsString (triagens::basics::StringBuffer& buffer,
|
|||
AqlValue Functions::IsNull (triagens::aql::Query*,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
Json j(parameters.extractArrayMember(trx, collection, 0, false));
|
||||
return AqlValue(new Json(j.isNull()));
|
||||
}
|
||||
|
@ -223,7 +231,7 @@ AqlValue Functions::IsNull (triagens::aql::Query*,
|
|||
AqlValue Functions::IsBool (triagens::aql::Query*,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
Json j(parameters.extractArrayMember(trx, collection, 0, false));
|
||||
return AqlValue(new Json(j.isBoolean()));
|
||||
}
|
||||
|
@ -235,7 +243,7 @@ AqlValue Functions::IsBool (triagens::aql::Query*,
|
|||
AqlValue Functions::IsNumber (triagens::aql::Query*,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
Json j(parameters.extractArrayMember(trx, collection, 0, false));
|
||||
return AqlValue(new Json(j.isNumber()));
|
||||
}
|
||||
|
@ -247,7 +255,7 @@ AqlValue Functions::IsNumber (triagens::aql::Query*,
|
|||
AqlValue Functions::IsString (triagens::aql::Query*,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
Json j(parameters.extractArrayMember(trx, collection, 0, false));
|
||||
return AqlValue(new Json(j.isString()));
|
||||
}
|
||||
|
@ -259,7 +267,7 @@ AqlValue Functions::IsString (triagens::aql::Query*,
|
|||
AqlValue Functions::IsArray (triagens::aql::Query*,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
Json j(parameters.extractArrayMember(trx, collection, 0, false));
|
||||
return AqlValue(new Json(j.isArray()));
|
||||
}
|
||||
|
@ -271,7 +279,7 @@ AqlValue Functions::IsArray (triagens::aql::Query*,
|
|||
AqlValue Functions::IsObject (triagens::aql::Query*,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
Json j(parameters.extractArrayMember(trx, collection, 0, false));
|
||||
return AqlValue(new Json(j.isObject()));
|
||||
}
|
||||
|
@ -283,7 +291,7 @@ AqlValue Functions::IsObject (triagens::aql::Query*,
|
|||
AqlValue Functions::Length (triagens::aql::Query*,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
Json j(parameters.extractArrayMember(trx, collection, 0, false));
|
||||
|
||||
TRI_json_t const* json = j.json();
|
||||
|
@ -347,7 +355,7 @@ AqlValue Functions::Length (triagens::aql::Query*,
|
|||
AqlValue Functions::Concat (triagens::aql::Query*,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
triagens::basics::StringBuffer buffer(TRI_UNKNOWN_MEM_ZONE, 24);
|
||||
|
||||
size_t const n = parameters.arraySize();
|
||||
|
@ -398,7 +406,7 @@ AqlValue Functions::Concat (triagens::aql::Query*,
|
|||
AqlValue Functions::Passthru (triagens::aql::Query*,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
|
||||
Json j(parameters.extractArrayMember(trx, collection, 0, true));
|
||||
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,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
||||
|
||||
if (! value.isObject()) {
|
||||
|
@ -471,7 +479,7 @@ AqlValue Functions::Unset (triagens::aql::Query* query,
|
|||
AqlValue Functions::Keep (triagens::aql::Query* query,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
||||
|
||||
if (! value.isObject()) {
|
||||
|
@ -521,7 +529,7 @@ AqlValue Functions::Keep (triagens::aql::Query* query,
|
|||
AqlValue Functions::Merge (triagens::aql::Query* query,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
size_t const n = parameters.arraySize();
|
||||
|
||||
if (n == 0) {
|
||||
|
@ -569,7 +577,7 @@ AqlValue Functions::Merge (triagens::aql::Query* query,
|
|||
AqlValue Functions::Has (triagens::aql::Query* query,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
size_t const n = parameters.arraySize();
|
||||
|
||||
if (n < 2) {
|
||||
|
@ -609,7 +617,7 @@ AqlValue Functions::Has (triagens::aql::Query* query,
|
|||
AqlValue Functions::Attributes (triagens::aql::Query* query,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
size_t const n = parameters.arraySize();
|
||||
|
||||
if (n < 1) {
|
||||
|
@ -686,7 +694,7 @@ AqlValue Functions::Attributes (triagens::aql::Query* query,
|
|||
AqlValue Functions::Values (triagens::aql::Query* query,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
size_t const n = parameters.arraySize();
|
||||
|
||||
if (n < 1) {
|
||||
|
@ -745,7 +753,7 @@ AqlValue Functions::Values (triagens::aql::Query* query,
|
|||
AqlValue Functions::Min (triagens::aql::Query* query,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
||||
|
||||
if (! value.isArray()) {
|
||||
|
@ -791,7 +799,7 @@ AqlValue Functions::Min (triagens::aql::Query* query,
|
|||
AqlValue Functions::Max (triagens::aql::Query* query,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
||||
|
||||
if (! value.isArray()) {
|
||||
|
@ -837,7 +845,7 @@ AqlValue Functions::Max (triagens::aql::Query* query,
|
|||
AqlValue Functions::Sum (triagens::aql::Query* query,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
||||
|
||||
if (! value.isArray()) {
|
||||
|
@ -884,7 +892,7 @@ AqlValue Functions::Sum (triagens::aql::Query* query,
|
|||
AqlValue Functions::Average (triagens::aql::Query* query,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
||||
|
||||
if (! value.isArray()) {
|
||||
|
@ -934,7 +942,7 @@ AqlValue Functions::Average (triagens::aql::Query* query,
|
|||
AqlValue Functions::Md5 (triagens::aql::Query* query,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
||||
|
||||
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,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
Json value(parameters.extractArrayMember(trx, collection, 0, false));
|
||||
|
||||
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,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
if (parameters.arraySize() != 1) {
|
||||
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,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
size_t const n = parameters.arraySize();
|
||||
|
||||
if (parameters.arraySize() < 2) {
|
||||
|
@ -1109,7 +1117,7 @@ AqlValue Functions::Union (triagens::aql::Query* query,
|
|||
AqlValue Functions::UnionDistinct (triagens::aql::Query* query,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
if (parameters.arraySize() < 2) {
|
||||
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,
|
||||
triagens::arango::AqlTransaction* trx,
|
||||
TRI_document_collection_t const* collection,
|
||||
AqlValue const parameters) {
|
||||
FunctionParameters parameters) {
|
||||
size_t const n = parameters.arraySize();
|
||||
|
||||
if (parameters.arraySize() < 2) {
|
||||
|
|
|
@ -42,42 +42,48 @@ namespace triagens {
|
|||
|
||||
class Query;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// --SECTION-- public typedefs
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
typedef AqlValue const FunctionParameters;
|
||||
|
||||
typedef std::function<AqlValue(triagens::aql::Query*,
|
||||
triagens::arango::AqlTransaction*,
|
||||
TRI_document_collection_t const*,
|
||||
AqlValue const)> FunctionImplementation;
|
||||
FunctionParameters)> FunctionImplementation;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// --SECTION-- AQL function bindings
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
struct Functions {
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief functions
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static AqlValue IsNull (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
||||
static AqlValue IsBool (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
||||
static AqlValue IsNumber (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, AqlValue const);
|
||||
static AqlValue IsString (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*, AqlValue const);
|
||||
static AqlValue IsObject (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*, AqlValue const);
|
||||
static AqlValue Concat (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*, AqlValue const);
|
||||
static AqlValue Unset (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*, AqlValue const);
|
||||
static AqlValue Merge (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*, AqlValue const);
|
||||
static AqlValue Attributes (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*, AqlValue const);
|
||||
static AqlValue Min (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*, AqlValue const);
|
||||
static AqlValue Sum (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*, AqlValue const);
|
||||
static AqlValue Md5 (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*, AqlValue const);
|
||||
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);
|
||||
static AqlValue IsNull (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*, 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 IsArray (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*, FunctionParameters);
|
||||
static AqlValue Length (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*, FunctionParameters);
|
||||
static AqlValue Passthru (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*, FunctionParameters);
|
||||
static AqlValue Keep (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*, FunctionParameters);
|
||||
static AqlValue Has (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*, FunctionParameters);
|
||||
static AqlValue Values (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*, FunctionParameters);
|
||||
static AqlValue Max (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*, FunctionParameters);
|
||||
static AqlValue Average (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*, FunctionParameters);
|
||||
static AqlValue Sha1 (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*, FunctionParameters);
|
||||
static AqlValue Union (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||
static AqlValue UnionDistinct (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||
static AqlValue Intersection (triagens::aql::Query*, triagens::arango::AqlTransaction*, TRI_document_collection_t const*, FunctionParameters);
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
$(selector).tooltip({
|
||||
placement: placement,
|
||||
|
@ -2168,8 +2176,6 @@ window.StatisticsCollection = Backbone.Collection.extend({
|
|||
{async: true}
|
||||
).done(
|
||||
function (d) {
|
||||
console.log(url + urlParams);
|
||||
console.log(d);
|
||||
if (d.times.length > 0) {
|
||||
self.isUpdating = true;
|
||||
self.mergeHistory(d);
|
||||
|
|
|
@ -4104,7 +4104,6 @@ svg.graph-viewer {
|
|||
pointer-events: none; }
|
||||
|
||||
div.gv-background {
|
||||
height: 685px;
|
||||
position: relative; }
|
||||
|
||||
.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) {
|
||||
$(selector).tooltip({
|
||||
placement: placement,
|
||||
|
|
|
@ -141,7 +141,7 @@ global.tutorial = require("org/arangodb/tutorial");
|
|||
/// @brief prints help
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
(function() {
|
||||
var initHelp = function() {
|
||||
var internal = require("internal");
|
||||
|
||||
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");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief read rc file
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
if (typeof window === 'undefined') {
|
||||
// We're in arangosh
|
||||
initHelp();
|
||||
|
||||
// these variables are not defined in the browser context
|
||||
if (
|
||||
global.IS_EXECUTE_SCRIPT ||
|
||||
|
@ -194,7 +199,7 @@ global.tutorial = require("org/arangodb/tutorial");
|
|||
delete global.IS_UNIT_TESTS;
|
||||
delete global.IS_JS_LINT;
|
||||
} catch (e) {}
|
||||
}());
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// --SECTION-- END-OF-FILE
|
||||
|
|
|
@ -45,7 +45,10 @@
|
|||
};
|
||||
var width = $("#content").width() - 75;
|
||||
$("#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: {
|
||||
label: "_key",
|
||||
color: {
|
||||
|
@ -56,6 +59,8 @@
|
|||
|
||||
}, true);
|
||||
|
||||
$('.contentDiv').height(height);
|
||||
|
||||
},
|
||||
|
||||
handleResize: function(w) {
|
||||
|
|
|
@ -70,7 +70,6 @@ svg.graph-viewer {
|
|||
}
|
||||
|
||||
div.gv-background {
|
||||
height: 685px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
|
|
|
@ -141,7 +141,7 @@ global.tutorial = require("org/arangodb/tutorial");
|
|||
/// @brief prints help
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
(function() {
|
||||
var initHelp = function() {
|
||||
var internal = require("internal");
|
||||
|
||||
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");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief read rc file
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
if (typeof window === 'undefined') {
|
||||
// We're in arangosh
|
||||
initHelp();
|
||||
|
||||
// these variables are not defined in the browser context
|
||||
if (
|
||||
global.IS_EXECUTE_SCRIPT ||
|
||||
|
@ -194,7 +199,7 @@ global.tutorial = require("org/arangodb/tutorial");
|
|||
delete global.IS_UNIT_TESTS;
|
||||
delete global.IS_JS_LINT;
|
||||
} catch (e) {}
|
||||
}());
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// --SECTION-- END-OF-FILE
|
||||
|
|
|
@ -133,6 +133,7 @@ struct TRI_log_appender_t {
|
|||
virtual void closeLog () = 0;
|
||||
virtual char* details () = 0;
|
||||
virtual TRI_log_appender_type_e type () = 0;
|
||||
virtual char const* typeName () = 0;
|
||||
|
||||
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
|
||||
|
@ -854,14 +855,16 @@ static void LogThread (char const* func,
|
|||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
try {
|
||||
std::string message("format string is corrupt: [");
|
||||
message += fmt + std::string("] - GenerateMessage failed");
|
||||
TRI_GetBacktrace(message);
|
||||
DisarmFormatString(message);
|
||||
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)) {
|
||||
// static buffer was big enough
|
||||
|
@ -901,11 +904,15 @@ static void LogThread (char const* func,
|
|||
#endif
|
||||
{
|
||||
TRI_Free(TRI_UNKNOWN_MEM_ZONE, p);
|
||||
std::string message("format string is corrupt: [");
|
||||
message += fmt + std::string("] ");
|
||||
TRI_GetBacktrace(message);
|
||||
DisarmFormatString(message);
|
||||
TRI_Log(func, file, line, TRI_LOG_LEVEL_WARNING, TRI_LOG_SEVERITY_HUMAN, message.c_str());
|
||||
try {
|
||||
std::string message("format string is corrupt: [");
|
||||
message += fmt + std::string("] ");
|
||||
TRI_GetBacktrace(message);
|
||||
DisarmFormatString(message);
|
||||
TRI_Log(func, file, line, TRI_LOG_LEVEL_WARNING, TRI_LOG_SEVERITY_HUMAN, message.c_str());
|
||||
}
|
||||
catch (...) {
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -1327,6 +1334,10 @@ struct log_appender_file_t : public TRI_log_appender_t {
|
|||
return APPENDER_TYPE_FILE;
|
||||
}
|
||||
|
||||
char const* typeName () override final {
|
||||
return "file";
|
||||
}
|
||||
|
||||
private:
|
||||
void writeLogFile (int, char const*, ssize_t);
|
||||
|
||||
|
@ -1613,6 +1624,10 @@ struct log_appender_syslog_t : public TRI_log_appender_t {
|
|||
TRI_log_appender_type_e type () override final {
|
||||
return APPENDER_TYPE_SYSLOG;
|
||||
}
|
||||
|
||||
char const* typeName () override final {
|
||||
return "syslog";
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
|
@ -1932,7 +1947,13 @@ void TRI_ReopenLogging () {
|
|||
MUTEX_LOCKER(AppendersLock);
|
||||
|
||||
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);
|
||||
}
|
||||
catch (std::exception const& ex) {
|
||||
catch (std::bad_alloc const& ex) {
|
||||
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);
|
||||
LOG_WARNING("caught exception in work(): %s", ex2.what());
|
||||
}
|
||||
catch (Exception const& ex) {
|
||||
LOG_WARNING("caught error while handling error: %s", ex.what());
|
||||
catch (...) {
|
||||
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 (...) {
|
||||
LOG_WARNING("caught error while handling error!");
|
||||
|
@ -181,15 +189,10 @@ void DispatcherThread::run () {
|
|||
#endif
|
||||
|
||||
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);
|
||||
}
|
||||
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());
|
||||
LOG_WARNING("caught unknown exception in work()");
|
||||
}
|
||||
catch (...) {
|
||||
LOG_WARNING("caught error while handling error!");
|
||||
|
|
Loading…
Reference in New Issue