1
0
Fork 0

Use two shapers in TRI_CompareShapeTypes

This commit is contained in:
Max Neunhoeffer 2014-08-07 09:51:24 +02:00
parent c628a85bc8
commit 7956c69c69
4 changed files with 19 additions and 12 deletions

View File

@ -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;

View File

@ -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,

View File

@ -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;

View File

@ -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