blob: 0cbee941963f931c03befdfee4d39c92ea15395d [file] [log] [blame]
/**********************************************************************
// @@@ START COPYRIGHT @@@
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
// @@@ END COPYRIGHT @@@
**********************************************************************/
/* -*-C++-*-
*****************************************************************************
*
* File: ComMvAttributeBitmap.cpp
* Description:
*
*
* Created: 04/04/2000
* Language: C++
*
*
*
*
*****************************************************************************
*/
#include <NAAssert.h>
#include "ComMvAttributeBitmap.h"
void ComMvAttributeBitmap::initBitmap(ComSInt32 initialiVal)
{
bitmap_ = initialiVal;
}
ComSInt32 ComMvAttributeBitmap::getBitmap() const
{
return bitmap_;
}
//----------------------------------------------------------------------------
// exclude from coverage since this is a debugging method
void ComMvAttributeBitmap::trace()
{
#ifdef _DEBUG
ComSInt32 initOnStOnMe = IS_INIT_ON_STMT_ON_ME_MASK & bitmap_;
ComSInt32 isMV = IS_MV_MASK & bitmap_;
ComSInt32 rangeLog = RANGE_LOGGING_MASK & bitmap_;
ComSInt32 insertLog = INSERT_LOGGING_MASK & bitmap_;
ComSInt32 lockOnRefresh = LOCKONREFRESH_MASK & bitmap_;
ComSInt32 rewrite = REWRITE_MASK & bitmap_;
ComSInt32 mvsAllowed = MVS_ALLOWED_MASK & bitmap_;
ComSInt32 mvStatus = MVSTATUS_MASK & bitmap_;
ComSInt32 mvAudit = MV_AUDIT_MASK & bitmap_;
cout << endl << "MV ATTRIBUTE BITMAP" << endl;
cout.flags(ios::hex);
cout << "bitmap val: " << bitmap_ << endl;
cout.flags(ios::dec);
if(IsBitSet(NO_LOGS))
cout << "NO_LOGS" << endl;
if(IsBitSet(LOGS_CREATED))
cout << "LOGS_CREATED" << endl;
if(IsBitSet(LOGS_ON_CREATION))
cout << "LOGS_ON_CREATION" << endl;
if(IsBitSet(LOGGING_REQUIRED))
cout << "LOGGING_REQUIRED" << endl;
if(IsBitSet(MVS_ON_ME))
cout << "MVS_ON_ME" << endl;
switch(initOnStOnMe)
{
case NO_INIT_ON_STMT_ON_ME:
cout << "NO_INIT_ON_STMT_ON_ME" << endl;
break;
case INIT_ON_STMT_ON_ME:
cout << "INIT_ON_STMT_ON_ME" << endl;
break;
}
switch(isMV)
{
case NOT_AN_MV:
cout << "NOT_AN_MV" << endl;
break;
case IS_AN_MV:
cout << "IS_AN_MV" << endl;
break;
}
switch(rangeLog)
{
case NO_RANGELOG:
cout << "NO_RANGELOG" << endl;
break;
case MANUAL_RANGELOG:
cout << "MANUAL_RANGELOG" << endl;
break;
case AUTO_RANGELOG:
cout << "AUTO_RANGELOG" << endl;
break;
case MIXED_RANGELOG:
cout << "MIXED_RANGELOG" << endl;
break;
}
switch(insertLog)
{
case NO_INSERTLOG:
cout << "NO_INSERTLOG" << endl;
break;
case INSERTLOG:
cout << "INSERTLOG" << endl;
break;
}
switch(lockOnRefresh)
{
case NO_LOCKONREFRESH:
cout << "NO_LOCKONREFRESH" << endl;
break;
case LOCKONREFRESH:
cout << "IS_LOCKONREFRESH" << endl;
break;
}
switch(rewrite)
{
case DISABLE_REWRITE:
cout << "DISABLE_REWRITE" << endl;
break;
case ENABLE_REWRITE:
cout << "DISABLE_REWRITE" << endl;
break;
}
switch(mvsAllowed)
{
case NO_MVS_ALLOWED:
cout << "NO_MVS_ALLOWED" << endl;
break;
case ALL_MVS_ALLOWED:
cout << "ALL_MVS_ALLOWED" << endl;
break;
case ONSTATEMENT_MVS_ALLOWED:
cout << "ONSTATEMENT_MVS_ALLOWED" << endl;
break;
case ONREQUEST_MVS_ALLOWED:
cout << "ONREQUEST_MVS_ALLOWED" << endl;
break;
case RECOMPUTE_MVS_ALLOWED:
cout << "RECOMPUTE_MVS_ALLOWED" << endl;
break;
}
switch(mvStatus)
{
case MV_NOT_INITIALIZED:
cout << "MV_NOT_INITIALIZED" << endl;
break;
case MV_INITIALIZED:
cout << "MV_INITIALIZED" << endl;
break;
case MV_UNAVAILABLE:
cout << "MV_UNAVAILABLE" << endl;
break;
}
switch(mvAudit)
{
case MV_NO_AUDIT:
cout << "MV_NO_AUDIT" << endl;
break;
case MV_AUDIT:
cout << "MV_AUDIT" << endl;
break;
case MV_NO_AUDITONREFRESH:
cout << "MV_NO_AUDITONREFRESH" << endl;
break;
}
cout << "LOG ON MV CREATION " << getLogCreatedOnMVCreation() << endl;
cout << "LOGGING REQUIRED " << getLoggingRequired() << endl;
cout << "AUTO RANGELOG REQUIRED " << getAutomaticRangeLoggingRequired() << endl;
cout << "ENABLE MVLOG " << getEnableMVLOGExecution() << endl;
cout << endl;
#else
assert(0);
#endif
} // trace
//----------------------------------------------------------------------------
// exclude from coverage - this code is not used for now
ComMvAttributeBitmap::Result
ComMvAttributeBitmap::setLogsCreatedOnMVCreation()
{
ComSInt32 initialVal = bitmap_;
SetBit(LOGS_CREATED | LOGS_ON_CREATION);
return (initialVal != bitmap_) ? ATTRIBUTE_SET : NO_CHAGE;
}
//----------------------------------------------------------------------------
ComMvAttributeBitmap::Result
ComMvAttributeBitmap::setLogCreated()
{
ComSInt32 initialVal = bitmap_;
SetBit(LOGS_CREATED | MVS_ON_ME);
if(!IsBitSet(MANUAL_RANGELOG))
{
SetBit(LOGGING_REQUIRED);
}
return (initialVal != bitmap_) ? ATTRIBUTE_SET : NO_CHAGE;
}
//----------------------------------------------------------------------------
ComMvAttributeBitmap::Result
ComMvAttributeBitmap::setLastOnRequestMvOnMe()
{
ComSInt32 initialVal = bitmap_;
if(!IsBitSet(LOGS_ON_CREATION))
{
ClearMask(LOGS_STATUS_MASK);
}
else
{
ClearBit(LOGGING_REQUIRED | MVS_ON_ME);
}
return (initialVal != bitmap_) ? ATTRIBUTE_SET : NO_CHAGE;
}
//----------------------------------------------------------------------------
ComMvAttributeBitmap::Result
ComMvAttributeBitmap::setIsAnMv(NABoolean value)
{
ComSInt32 initialVal = bitmap_;
if(TRUE == value)
{
SetBit(IS_AN_MV);
}
else
{
ClearBit(IS_AN_MV);
}
return (initialVal != bitmap_) ? ATTRIBUTE_SET : NO_CHAGE;
}
//----------------------------------------------------------------------------
ComMvAttributeBitmap::Result
ComMvAttributeBitmap::setInitOnStmtMvOnMe(NABoolean value)
{
ComSInt32 initialVal = bitmap_;
if(TRUE == value)
{
SetBit(INIT_ON_STMT_ON_ME);
}
else
{
ClearBit(INIT_ON_STMT_ON_ME);
}
return (initialVal != bitmap_) ? ATTRIBUTE_SET : NO_CHAGE;
}
//----------------------------------------------------------------------------
void ComMvAttributeBitmap::clearBaseTableAttributes()
{
ClearBit(BASE_TABLE_ATTRIBUTES_MASK);
}
//----------------------------------------------------------------------------
void ComMvAttributeBitmap::clearMvAttributes()
{
ClearBit(MV_ATTRIBUTES_MASK);
}
//----------------------------------------------------------------------------
ComMvAttributeBitmap::Result
ComMvAttributeBitmap::setRangeLogType(ComRangeLogType rangeLogType)
{
ComSInt32 initialVal = bitmap_;
NABoolean wasManualRangeLog = IsBitSet(MANUAL_RANGELOG);
NABoolean setToOtherThanManualRangeLog = FALSE;
ClearMask(RANGE_LOGGING_MASK);
switch(rangeLogType)
{
case COM_MANUAL_RANGELOG:
ClearBit(LOGGING_REQUIRED);
SetBit(MANUAL_RANGELOG);
break;
case COM_NO_RANGELOG:
SetBit(NO_RANGELOG);
setToOtherThanManualRangeLog = TRUE;
break;
case COM_AUTO_RANGELOG:
SetBit(AUTO_RANGELOG);
setToOtherThanManualRangeLog = TRUE;
break;
case COM_MIXED_RANGELOG:
SetBit(MIXED_RANGELOG);
setToOtherThanManualRangeLog = TRUE;
break;
// exclude from coverage - range logging is not supported
// and default condition not reacheable
default:
bitmap_ = initialVal;
return INTERNAL_ERROR;
}
if (TRUE == wasManualRangeLog &&
TRUE == setToOtherThanManualRangeLog &&
IsBitSet(MVS_ON_ME))
{
SetBit(LOGGING_REQUIRED);
}
return (initialVal != bitmap_) ? ATTRIBUTE_SET : NO_CHAGE;
}
//----------------------------------------------------------------------------
ComMvAttributeBitmap::Result
ComMvAttributeBitmap::setInsertLog(NABoolean value)
{
ComSInt32 initialVal = bitmap_;
if(TRUE == value)
{
SetBit(INSERTLOG);
}
else
{
ClearBit(INSERTLOG);
}
return (initialVal != bitmap_) ? ATTRIBUTE_SET : NO_CHAGE;
}
//----------------------------------------------------------------------------
ComMvAttributeBitmap::Result
ComMvAttributeBitmap::setLockOnRefresh(NABoolean value)
{
ComSInt32 initialVal = bitmap_;
if(TRUE == value)
{
SetBit(LOCKONREFRESH);
}
else
{
ClearBit(LOCKONREFRESH);
}
return (initialVal != bitmap_) ? ATTRIBUTE_SET : NO_CHAGE;
}
//----------------------------------------------------------------------------
ComMvAttributeBitmap::Result
ComMvAttributeBitmap::setEnableRewrite(NABoolean value)
{
ComSInt32 initialVal = bitmap_;
if(TRUE == value)
{
SetBit(ENABLE_REWRITE);
}
else
{
ClearBit(ENABLE_REWRITE);
}
return (initialVal != bitmap_) ? ATTRIBUTE_SET : NO_CHAGE;
}
//----------------------------------------------------------------------------
ComMvAttributeBitmap::Result
ComMvAttributeBitmap::setMvsAllowed(ComMvsAllowed mvsAllowedType)
{
ComSInt32 initialVal = bitmap_;
ClearMask(MVS_ALLOWED_MASK);
switch(mvsAllowedType)
{
case COM_NO_MVS_ALLOWED:
SetBit(NO_MVS_ALLOWED);
break;
case COM_ALL_MVS_ALLOWED:
SetBit(ALL_MVS_ALLOWED);
break;
case COM_ON_STATEMENT_MVS_ALLOWED:
SetBit(ONSTATEMENT_MVS_ALLOWED);
break;
case COM_ON_REQUEST_MVS_ALLOWED:
SetBit(ONREQUEST_MVS_ALLOWED);
break;
case COM_RECOMPUTE_MVS_ALLOWED:
SetBit(RECOMPUTE_MVS_ALLOWED);
break;
// an exception code that we should not hit
case COM_MVS_ALLOWED_UNKNOWN:
bitmap_ = initialVal;
return INTERNAL_ERROR;
default:
assert(0);
}
return (initialVal != bitmap_) ? ATTRIBUTE_SET : NO_CHAGE;
} // setMvsAllowed
//----------------------------------------------------------------------------
ComMvAttributeBitmap::Result
ComMvAttributeBitmap::setMvStatus(ComMVStatus value)
{
ComSInt32 initialVal = bitmap_;
ClearMask(MVSTATUS_MASK);
switch(value)
{
case COM_MVSTATUS_INITIALIZED:
case COM_MVSTATUS_NO_INITIALIZATION:
SetBit(MV_INITIALIZED);
break;
case COM_MVSTATUS_NOT_INITIALIZED:
SetBit(MV_NOT_INITIALIZED);
break;
case COM_MVSTATUS_UNAVAILABLE:
SetBit(MV_UNAVAILABLE);
break;
case COM_MVSTATUS_UNKNOWN:
default:
assert(0);
}
return (initialVal != bitmap_) ? ATTRIBUTE_SET : NO_CHAGE;
}
//----------------------------------------------------------------------------
ComMvAttributeBitmap::Result
ComMvAttributeBitmap::setMvAudit(ComMvAuditType value)
{
ComSInt32 initialVal = bitmap_;
ClearMask(MV_AUDIT_MASK);
switch(value)
{
case COM_MV_AUDIT:
SetBit(MV_AUDIT);
break;
case COM_MV_NO_AUDIT:
SetBit(MV_NO_AUDIT);
break;
case COM_MV_NO_AUDIT_ON_REFRESH:
SetBit(MV_NO_AUDITONREFRESH);
break;
case COM_MV_AUDIT_UNKNOWN:
default:
assert(0);
}
return (initialVal != bitmap_) ? ATTRIBUTE_SET : NO_CHAGE;
}
//----------------------------------------------------------------------------
ComMvsAllowed ComMvAttributeBitmap::getMvsAllowed() const
{
if(IsBitSet(ONSTATEMENT_MVS_ALLOWED) &&
IsBitSet(ONREQUEST_MVS_ALLOWED) &&
IsBitSet(RECOMPUTE_MVS_ALLOWED) )
{
return COM_ALL_MVS_ALLOWED;
}
if(IsBitSet(ONSTATEMENT_MVS_ALLOWED))
{
return COM_ON_STATEMENT_MVS_ALLOWED;
}
if(IsBitSet(ONREQUEST_MVS_ALLOWED))
{
return COM_ON_REQUEST_MVS_ALLOWED;
}
if(IsBitSet(RECOMPUTE_MVS_ALLOWED))
{
return COM_RECOMPUTE_MVS_ALLOWED;
}
return COM_NO_MVS_ALLOWED;
}
//----------------------------------------------------------------------------
ComRangeLogType ComMvAttributeBitmap::getRangeLogType() const
{
if(IsBitSet(MANUAL_RANGELOG))
{
return COM_MANUAL_RANGELOG;
}
if(IsBitSet(AUTO_RANGELOG))
{
return COM_AUTO_RANGELOG;
}
if(IsBitSet(MIXED_RANGELOG))
{
return COM_MIXED_RANGELOG;
}
return COM_NO_RANGELOG;
}
//----------------------------------------------------------------------------
ComMVStatus
ComMvAttributeBitmap::getMvStatus() const
{
if(IsBitSet(MV_INITIALIZED))
{
return COM_MVSTATUS_INITIALIZED;
}
if(IsBitSet(MV_UNAVAILABLE))
{
return COM_MVSTATUS_UNAVAILABLE;
}
return COM_MVSTATUS_NOT_INITIALIZED;
}
//----------------------------------------------------------------------------
ComMvAuditType
ComMvAttributeBitmap::getMvAuditType() const
{
if(IsBitSet(MV_AUDIT))
{
return COM_MV_AUDIT;
}
if(IsBitSet(MV_NO_AUDITONREFRESH))
{
return COM_MV_NO_AUDIT_ON_REFRESH;
}
return COM_MV_NO_AUDIT;
}