Esempio n. 1
0
 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;
     }            
 }
Esempio n. 2
0
 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;
 }