void HybridBuildStrategy::handleReorderMatch() { DiskLoc loc = _cursor->currLoc(); if ( _scanAndOrderDups.getsetdup( loc ) ) { return; } try { _reorderBuild._handleMatchNoDedup(); } catch ( const UserException &e ) { if ( e.getCode() == ScanAndOrderMemoryLimitExceededAssertionCode ) { if ( _queryOptimizerCursor->runningInitialCachedPlan() ) { _queryOptimizerCursor->clearIndexesForPatterns(); throw QueryRetryException(); } else if ( _queryOptimizerCursor->runningInitialInOrderPlan() ) { _queryOptimizerCursor->abortOutOfOrderPlans(); return; } } throw; } }
bool HybridBuildStrategy::handleReorderMatch( ResultDetails* resultDetails ) { DiskLoc loc = _cursor->currLoc(); if ( _scanAndOrderDups.getsetdup( loc ) ) { return false; } resultDetails->match = true; try { _reorderBuild->_handleMatchNoDedup( resultDetails ); } catch ( const UserException &e ) { if ( e.getCode() == ScanAndOrderMemoryLimitExceededAssertionCode ) { if ( _queryOptimizerCursor->hasPossiblyExcludedPlans() ) { _queryOptimizerCursor->clearIndexesForPatterns(); throw QueryRetryException(); } else if ( _queryOptimizerCursor->runningInitialInOrderPlan() ) { _queryOptimizerCursor->abortOutOfOrderPlans(); return true; } } throw; } return true; }