예제 #1
0
//
// -- TriggerDB::cleanupPerStatement()
//
// Called only in case that trigger-persistence is active. Returns a boolean 
// indicating whether to deallocate triggerDB or not.
// If the triggerDB_ is too big (THRASHOLD exceeded) then clear triggerDB and
// dealocate it. Else, reset the recursion counters, since triggers persist 
// across statements.
//
// only used when triggers are allocated from the cntext heap. 
// Currently triggers are allocated from the statement heap.
// See method Trigger::Heap() in file Triggers.h for more details
// LCOV_EXCL_START
NABoolean
TriggerDB::cleanupPerStatement()
{
  CMPASSERT(Trigger::Heap() == CmpCommon::contextHeap());

  if (this != NULL && (entries() >= TRIGGERDB_THRASHOLD)) 
  {
    clearAndDestroy();
    // caller will dealocate triggerDB itself
    return TRUE;
  } 
  else 
  {
    NAHashDictionaryIterator<TableOp,BeforeAndAfterTriggers> iter(*this);

    TableOp * key = NULL;
    BeforeAndAfterTriggers* curr = NULL;

    // iterate over all entries 
#pragma warning (disable : 4018)   //warning elimination
    for (Int32 i=0; i < iter.entries(); i++) 
#pragma warning (default : 4018)   //warning elimination
    {
      iter.getNext(key, curr);
      CMPASSERT(curr != NULL);

      //reset recursion counter for all lists
      ResetRecursionCounter(curr->getAfterRowTriggers());
      ResetRecursionCounter(curr->getAfterStatementTriggers());
      ResetRecursionCounter(curr->getBeforeTriggers());

      curr = NULL;
    }
    // Do not deallocate
    return FALSE;
  }
}
예제 #2
0
파일: PathTable.C 프로젝트: juddy/edcde
PathFeatureList::~PathFeatureList()
{
  clearAndDestroy();
}