mirror of https://gitee.com/bigwinds/arangodb
Use two shapers in TRI_CompareShapeTypes
This commit is contained in:
parent
c628a85bc8
commit
7956c69c69
|
@ -249,8 +249,9 @@ namespace triagens {
|
||||||
TRI_EXTRACT_SHAPED_JSON_MARKER(l, _marker);
|
TRI_EXTRACT_SHAPED_JSON_MARKER(l, _marker);
|
||||||
TRI_EXTRACT_SHAPED_JSON_MARKER(r, right._marker);
|
TRI_EXTRACT_SHAPED_JSON_MARKER(r, right._marker);
|
||||||
|
|
||||||
return TRI_CompareShapeTypes(nullptr, nullptr, &l, nullptr, nullptr, &r,
|
return TRI_CompareShapeTypes(
|
||||||
collection->getShaper());
|
nullptr, nullptr, &l, collection->getShaper(),
|
||||||
|
nullptr, nullptr, &r, collection->getShaper());
|
||||||
}
|
}
|
||||||
case DOCVEC: {
|
case DOCVEC: {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -75,6 +75,7 @@ static int CompareKeyElement (TRI_shaped_json_t const* left,
|
||||||
result = TRI_CompareShapeTypes(nullptr,
|
result = TRI_CompareShapeTypes(nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
left,
|
left,
|
||||||
|
shaper,
|
||||||
right->_document->getShapedJsonPtr(),
|
right->_document->getShapedJsonPtr(),
|
||||||
&right->_subObjects[rightPosition],
|
&right->_subObjects[rightPosition],
|
||||||
nullptr,
|
nullptr,
|
||||||
|
@ -112,6 +113,7 @@ static int CompareElementElement (TRI_skiplist_index_element_t* left,
|
||||||
int result = TRI_CompareShapeTypes(left->_document->getShapedJsonPtr(),
|
int result = TRI_CompareShapeTypes(left->_document->getShapedJsonPtr(),
|
||||||
&left->_subObjects[leftPosition],
|
&left->_subObjects[leftPosition],
|
||||||
nullptr,
|
nullptr,
|
||||||
|
shaper,
|
||||||
right->_document->getShapedJsonPtr(),
|
right->_document->getShapedJsonPtr(),
|
||||||
&right->_subObjects[rightPosition],
|
&right->_subObjects[rightPosition],
|
||||||
nullptr,
|
nullptr,
|
||||||
|
|
|
@ -1131,10 +1131,11 @@ static void DestroyAttributesVector (TRI_vector_t* vector) {
|
||||||
int TRI_CompareShapeTypes (char const* leftDocument,
|
int TRI_CompareShapeTypes (char const* leftDocument,
|
||||||
TRI_shaped_sub_t* leftObject,
|
TRI_shaped_sub_t* leftObject,
|
||||||
TRI_shaped_json_t const* leftShaped,
|
TRI_shaped_json_t const* leftShaped,
|
||||||
|
TRI_shaper_t* leftShaper,
|
||||||
char const* rightDocument,
|
char const* rightDocument,
|
||||||
TRI_shaped_sub_t* rightObject,
|
TRI_shaped_sub_t* rightObject,
|
||||||
TRI_shaped_json_t const* rightShaped,
|
TRI_shaped_json_t const* rightShaped,
|
||||||
TRI_shaper_t* shaper) {
|
TRI_shaper_t* rightShaper) {
|
||||||
|
|
||||||
TRI_shape_t const* leftShape;
|
TRI_shape_t const* leftShape;
|
||||||
TRI_shape_t const* rightShape;
|
TRI_shape_t const* rightShape;
|
||||||
|
@ -1167,14 +1168,14 @@ int TRI_CompareShapeTypes (char const* leftDocument,
|
||||||
}
|
}
|
||||||
|
|
||||||
// get shape and type
|
// get shape and type
|
||||||
if (left._sid == right._sid) {
|
if (leftShaper == rightShaper && left._sid == right._sid) {
|
||||||
// identical collection and shape
|
// identical collection and shape
|
||||||
leftShape = rightShape = shaper->lookupShapeId(shaper, left._sid);
|
leftShape = rightShape = leftShaper->lookupShapeId(leftShaper, left._sid);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// different shapes
|
// different shapes
|
||||||
leftShape = shaper->lookupShapeId(shaper, left._sid);
|
leftShape = leftShaper->lookupShapeId(leftShaper, left._sid);
|
||||||
rightShape = shaper->lookupShapeId(shaper, right._sid);
|
rightShape = rightShaper->lookupShapeId(rightShaper, right._sid);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (leftShape == nullptr || rightShape == nullptr) {
|
if (leftShape == nullptr || rightShape == nullptr) {
|
||||||
|
@ -1424,10 +1425,11 @@ int TRI_CompareShapeTypes (char const* leftDocument,
|
||||||
result = TRI_CompareShapeTypes(nullptr,
|
result = TRI_CompareShapeTypes(nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
&leftElement,
|
&leftElement,
|
||||||
|
leftShaper,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
&rightElement,
|
&rightElement,
|
||||||
shaper);
|
rightShaper);
|
||||||
|
|
||||||
if (result != 0) {
|
if (result != 0) {
|
||||||
return result;
|
return result;
|
||||||
|
@ -1483,11 +1485,11 @@ int TRI_CompareShapeTypes (char const* leftDocument,
|
||||||
TRI_vector_t rightSorted;
|
TRI_vector_t rightSorted;
|
||||||
|
|
||||||
bool error = false;
|
bool error = false;
|
||||||
if (FillAttributesVector(&leftSorted, &left, leftShape, shaper) != TRI_ERROR_NO_ERROR) {
|
if (FillAttributesVector(&leftSorted, &left, leftShape, leftShaper) != TRI_ERROR_NO_ERROR) {
|
||||||
error = true;
|
error = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FillAttributesVector(&rightSorted, &right, rightShape, shaper) != TRI_ERROR_NO_ERROR) {
|
if (FillAttributesVector(&rightSorted, &right, rightShape, rightShaper) != TRI_ERROR_NO_ERROR) {
|
||||||
error = true;
|
error = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1510,10 +1512,11 @@ int TRI_CompareShapeTypes (char const* leftDocument,
|
||||||
result = TRI_CompareShapeTypes(nullptr,
|
result = TRI_CompareShapeTypes(nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
&l->_value,
|
&l->_value,
|
||||||
|
leftShaper,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
&r->_value,
|
&r->_value,
|
||||||
shaper);
|
rightShaper);
|
||||||
|
|
||||||
if (result != 0) {
|
if (result != 0) {
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -128,10 +128,11 @@ bool TRI_ExtractShapedJsonVocShaper (TRI_shaper_t* s,
|
||||||
int TRI_CompareShapeTypes (char const* leftDocument,
|
int TRI_CompareShapeTypes (char const* leftDocument,
|
||||||
TRI_shaped_sub_t* leftObject,
|
TRI_shaped_sub_t* leftObject,
|
||||||
TRI_shaped_json_t const* leftShaped,
|
TRI_shaped_json_t const* leftShaped,
|
||||||
|
TRI_shaper_t* leftShaper,
|
||||||
char const* rightDocument,
|
char const* rightDocument,
|
||||||
TRI_shaped_sub_t* rightObject,
|
TRI_shaped_sub_t* rightObject,
|
||||||
TRI_shaped_json_t const* rightShaped,
|
TRI_shaped_json_t const* rightShaped,
|
||||||
TRI_shaper_t* shaper);
|
TRI_shaper_t* rightShaper);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief extracts the shape identifier pointer from a marker
|
/// @brief extracts the shape identifier pointer from a marker
|
||||||
|
|
Loading…
Reference in New Issue