mirror of https://gitee.com/bigwinds/arangodb
fixed more leaks
This commit is contained in:
parent
276cc78957
commit
56b270be18
|
@ -1424,37 +1424,38 @@ static TRI_aql_field_access_t* CreateAccessForNode (TRI_aql_context_t* const con
|
||||||
assert(field->_name._buffer);
|
assert(field->_name._buffer);
|
||||||
assert(node);
|
assert(node);
|
||||||
|
|
||||||
value = TRI_NodeJsonAql(context, node);
|
|
||||||
if (!value) {
|
|
||||||
TRI_SetErrorContextAql(context, TRI_ERROR_OUT_OF_MEMORY, NULL);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldAccess = (TRI_aql_field_access_t*) TRI_Allocate(TRI_UNKNOWN_MEM_ZONE, sizeof(TRI_aql_field_access_t), false);
|
fieldAccess = (TRI_aql_field_access_t*) TRI_Allocate(TRI_UNKNOWN_MEM_ZONE, sizeof(TRI_aql_field_access_t), false);
|
||||||
if (fieldAccess == NULL) {
|
if (fieldAccess == NULL) {
|
||||||
// OOM
|
// OOM
|
||||||
TRI_SetErrorContextAql(context, TRI_ERROR_OUT_OF_MEMORY, NULL);
|
TRI_SetErrorContextAql(context, TRI_ERROR_OUT_OF_MEMORY, NULL);
|
||||||
TRI_FreeJson(TRI_UNKNOWN_MEM_ZONE, value);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldAccess->_fullName = TRI_DuplicateString(field->_name._buffer);
|
fieldAccess->_fullName = TRI_DuplicateString(field->_name._buffer);
|
||||||
if (fieldAccess->_fullName == NULL) {
|
if (fieldAccess->_fullName == NULL) {
|
||||||
TRI_SetErrorContextAql(context, TRI_ERROR_OUT_OF_MEMORY, NULL);
|
TRI_SetErrorContextAql(context, TRI_ERROR_OUT_OF_MEMORY, NULL);
|
||||||
TRI_FreeJson(TRI_UNKNOWN_MEM_ZONE, value);
|
|
||||||
TRI_Free(TRI_UNKNOWN_MEM_ZONE, fieldAccess);
|
TRI_Free(TRI_UNKNOWN_MEM_ZONE, fieldAccess);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (operator == AQL_NODE_OPERATOR_BINARY_NE) {
|
||||||
|
// create an all items access, and we're done
|
||||||
|
fieldAccess->_type = TRI_AQL_ACCESS_ALL;
|
||||||
|
return fieldAccess;
|
||||||
|
}
|
||||||
|
|
||||||
|
// all other operation types require a value...
|
||||||
|
value = TRI_NodeJsonAql(context, node);
|
||||||
|
if (!value) {
|
||||||
|
TRI_SetErrorContextAql(context, TRI_ERROR_OUT_OF_MEMORY, NULL);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (operator == AQL_NODE_OPERATOR_BINARY_EQ) {
|
if (operator == AQL_NODE_OPERATOR_BINARY_EQ) {
|
||||||
// create an exact value access
|
// create an exact value access
|
||||||
fieldAccess->_type = TRI_AQL_ACCESS_EXACT;
|
fieldAccess->_type = TRI_AQL_ACCESS_EXACT;
|
||||||
fieldAccess->_value._value = value;
|
fieldAccess->_value._value = value;
|
||||||
}
|
}
|
||||||
else if (operator == AQL_NODE_OPERATOR_BINARY_NE) {
|
|
||||||
// create an all items access
|
|
||||||
fieldAccess->_type = TRI_AQL_ACCESS_ALL;
|
|
||||||
}
|
|
||||||
else if (operator == AQL_NODE_OPERATOR_BINARY_LT) {
|
else if (operator == AQL_NODE_OPERATOR_BINARY_LT) {
|
||||||
// create a single range access
|
// create a single range access
|
||||||
fieldAccess->_type = TRI_AQL_ACCESS_RANGE_SINGLE;
|
fieldAccess->_type = TRI_AQL_ACCESS_RANGE_SINGLE;
|
||||||
|
@ -1893,30 +1894,11 @@ int TRI_PickAccessAql (const TRI_aql_field_access_t* const lhs,
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief free a range vector
|
/// @brief dump a single acces for debugging purposes
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
void TRI_FreeRangesAql (TRI_vector_pointer_t* const ranges) {
|
|
||||||
size_t i, n;
|
|
||||||
|
|
||||||
assert(ranges);
|
|
||||||
|
|
||||||
n = ranges->_length;
|
|
||||||
for (i = 0; i < n; ++i) {
|
|
||||||
TRI_aql_field_access_t* fieldAccess = TRI_AtVectorPointer(ranges, i);
|
|
||||||
|
|
||||||
TRI_FreeAccessAql(fieldAccess);
|
|
||||||
}
|
|
||||||
|
|
||||||
TRI_FreeVectorPointer(TRI_UNKNOWN_MEM_ZONE, ranges);
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief dump a single range for debugging purposes
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#if TRI_DEBUG_AQL
|
#if TRI_DEBUG_AQL
|
||||||
void TRI_DumpRangeAql (const TRI_aql_field_access_t* const fieldAccess) {
|
void TRI_DumpAccessAql (const TRI_aql_field_access_t* const fieldAccess) {
|
||||||
printf("\nFIELD ACCESS\n- FIELD: %s\n",fieldAccess->_fullName);
|
printf("\nFIELD ACCESS\n- FIELD: %s\n",fieldAccess->_fullName);
|
||||||
printf("- TYPE: %s\n", AccessName(fieldAccess->_type));
|
printf("- TYPE: %s\n", AccessName(fieldAccess->_type));
|
||||||
|
|
||||||
|
@ -1952,7 +1934,7 @@ void TRI_DumpRangeAql (const TRI_aql_field_access_t* const fieldAccess) {
|
||||||
/// @brief dump ranges found for debugging purposes
|
/// @brief dump ranges found for debugging purposes
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void TRI_DumpRangesAql (const TRI_vector_pointer_t* const ranges) {
|
void TRI_DumpAccessesAql (const TRI_vector_pointer_t* const ranges) {
|
||||||
size_t i, n;
|
size_t i, n;
|
||||||
|
|
||||||
assert(ranges);
|
assert(ranges);
|
||||||
|
@ -1961,7 +1943,7 @@ void TRI_DumpRangesAql (const TRI_vector_pointer_t* const ranges) {
|
||||||
for (i = 0; i < n; ++i) {
|
for (i = 0; i < n; ++i) {
|
||||||
TRI_aql_field_access_t* fieldAccess = TRI_AtVectorPointer(ranges, i);
|
TRI_aql_field_access_t* fieldAccess = TRI_AtVectorPointer(ranges, i);
|
||||||
|
|
||||||
TRI_DumpRangeAql(fieldAccess);
|
TRI_DumpAccessesAql(fieldAccess);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -183,24 +183,18 @@ TRI_aql_field_access_t* TRI_CloneAccessAql (TRI_aql_context_t* const,
|
||||||
int TRI_PickAccessAql (const TRI_aql_field_access_t* const,
|
int TRI_PickAccessAql (const TRI_aql_field_access_t* const,
|
||||||
const TRI_aql_field_access_t* const);
|
const TRI_aql_field_access_t* const);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief free a range vector
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
void TRI_FreeRangesAql (TRI_vector_pointer_t* const);
|
|
||||||
|
|
||||||
#ifdef DEBUG_AQL
|
#ifdef DEBUG_AQL
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief dump a single range for debugging purposes
|
/// @brief dump a single access for debugging purposes
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void TRI_DumpRangeAql (const TRI_aql_field_access_t* const);
|
void TRI_DumpAccessAql (const TRI_aql_field_access_t* const);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief dump ranges found for debugging purposes
|
/// @brief dump accesses found for debugging purposes
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void TRI_DumpRangesAql (const TRI_vector_pointer_t* const);
|
void TRI_DumpAccessesAql (const TRI_vector_pointer_t* const);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -92,8 +92,7 @@ TRI_json_t* TRI_NodeJsonAql (TRI_aql_context_t* const context,
|
||||||
TRI_json_t* subValue = TRI_NodeJsonAql(context, TRI_AQL_NODE_MEMBER(node, i));
|
TRI_json_t* subValue = TRI_NodeJsonAql(context, TRI_AQL_NODE_MEMBER(node, i));
|
||||||
|
|
||||||
if (subValue) {
|
if (subValue) {
|
||||||
TRI_PushBack2ListJson(result, subValue);
|
TRI_PushBack3ListJson(TRI_UNKNOWN_MEM_ZONE, result, subValue);
|
||||||
TRI_Free(TRI_UNKNOWN_MEM_ZONE, subValue);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -110,11 +109,10 @@ TRI_json_t* TRI_NodeJsonAql (TRI_aql_context_t* const context,
|
||||||
TRI_json_t* subValue = TRI_NodeJsonAql(context, TRI_AQL_NODE_MEMBER(element, 0));
|
TRI_json_t* subValue = TRI_NodeJsonAql(context, TRI_AQL_NODE_MEMBER(element, 0));
|
||||||
|
|
||||||
if (subValue) {
|
if (subValue) {
|
||||||
TRI_Insert2ArrayJson(TRI_UNKNOWN_MEM_ZONE,
|
TRI_Insert3ArrayJson(TRI_UNKNOWN_MEM_ZONE,
|
||||||
result,
|
result,
|
||||||
TRI_AQL_NODE_STRING(element),
|
TRI_AQL_NODE_STRING(element),
|
||||||
subValue);
|
subValue);
|
||||||
TRI_Free(TRI_UNKNOWN_MEM_ZONE, subValue);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue