void CRUUnAuditRefreshTaskExecutor::SetObjectsUnavailable() { if (TRUE == isPopindex_ && 0 < numOfIndexes_) { // Turn all indexes to unavailable state ExecuteIndexStatmenents(*pUnAuditUnavailableIndeXdynamicContainer_, IDS_RU_INDEXSTATUS_FAILED); } CRUMVList &mvList = GetRefreshTask()->GetMVList(); DSListPosition pos = mvList.GetHeadPosition(); while (NULL != pos) { CRUMV *pMV = mvList.GetNext(pos); if (CDDObject::eNO_AUDIT_ON_REFRESH == pMV->GetAuditType() // || // CDDObject::eAUDIT == pMV->GetAuditType() // DO NOT TURN THE AUDITED MV'S TABLE TO NON-AUDITED // UNTIL THE BUG WITH TURNING THE AUDIT ATTRIBUTE IS FIXED !!! // Right now, we assume that the MV's table is initially // non-audited if this task executor is picked up. ) { // Alter table audit uses "ALTER TABLE" syntax // and it cannot be performed if there is a DDL lock. // Due to the transaction protection , for any other transaction // the ddl locks will preserve continuity. pMV->ReleaseDDLLock(); pMV->SetMVTableAudit(FALSE); pMV->SaveMetadata(); pMV->CreateDDLLock(); } pMV->SetMVStatus(CDDObject::eUNAVAILABLE); pMV->SaveMetadata(); } // Since the mv ddl lock was released and recreated, the popindex // sql statements need to be recomposed if( TRUE == isPopindex_ && 0 < numOfIndexes_ ) { ComposeIndexesSql(); } }
void CRUAuditRefreshTaskExecutor::SetObjectsUnavailable() { if (TRUE == isPopindex_ && 0 < numOfIndexes_) { // Turn all indexes to unavailable state ExecuteIndexStatmenents(*pAuditUnavailableIndeXdynamicContainer_, IDS_RU_INDEXSTATUS_FAILED); } // first turn the audit flag ON for the MV table // and set the MV to unavailable CRUMVList &mvList = GetRefreshTask()->GetMVList(); DSListPosition pos = mvList.GetHeadPosition(); while (NULL != pos) { CRUMV *pMV = mvList.GetNext(pos); // Alter table audit uses "ALTER TABLE" syntax // and it cannot be performed if there is a DDL lock. // Due to the transaction protection , for any other transaction // the ddl locks will preserve continuity. pMV->ReleaseDDLLock(); pMV->SetMVTableAudit(TRUE); pMV->SaveMetadata(); pMV->CreateDDLLock(); // if hasn't been set to initialized, initialize it if( CDDObject::eINITIALIZED != pMV->GetMVStatus() ) { pMV->SetMVStatus(CDDObject::eUNAVAILABLE); pMV->SaveMetadata(); } } // Since the mv ddl lock was released and recreated, the popindex // sql statements need to be recomposed if( TRUE == isPopindex_ && 0 < numOfIndexes_ ) { ComposeIndexesSql(); } }
void CRUUnAuditRefreshTaskExecutor::ResetObjectsAvailable() { CRUMVList &mvList = GetRefreshTask()->GetMVList(); DSListPosition pos = mvList.GetHeadPosition(); while (NULL != pos) { CRUMV *pMV = mvList.GetNext(pos); if (CDDObject::eNO_AUDIT != pMV->GetAuditType()) { // Alter table audit uses "ALTER TABLE" syntax // and it cannot be performed if there is a DDL lock. // Due to the transaction protection , for any other transaction // the ddl locks will preserve continuity. pMV->ReleaseDDLLock(); pMV->SetMVTableAudit(TRUE); pMV->SaveMetadata(); pMV->CreateDDLLock(); } RUASSERT(CDDObject::eUNAVAILABLE == pMV->GetMVStatus()); pMV->SetMVStatus(CDDObject::eINITIALIZED); pMV->SaveMetadata(); } if (TRUE == isPopindex_ && 0 < numOfIndexes_) { // must recompose since DDL locks were released/created ComposeIndexesSql(); // Turn all indexes to available state ExecuteIndexStatmenents(*pUnAuditAvailableIndeXdynamicContainer_, IDS_RU_INDEXSTATUS_FAILED); } }