blob: 4a552d6dde249a23c218692e560fb774d11beb4f [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 @@@
**********************************************************************/
#ifndef ELEMDDLPARTITIONSYSTEM_H
#define ELEMDDLPARTITIONSYSTEM_H
/* -*-C++-*-
*****************************************************************************
*
* File: ElemDDLPartitionSystem.h
* Description: class representing a system partition element
* specified in a DDL statement
*
*
* Created: 4/6/95
* Language: C++
*
*
*
*
*****************************************************************************
*/
#include "NAString.h"
#include "ElemDDLNode.h"
#include "ElemDDLFileAttrMaxSize.h"
#include "ElemDDLFileAttrExtents.h"
#include "ElemDDLFileAttrMaxExtents.h"
#include "ElemDDLLocation.h"
#include "ElemDDLPartition.h"
#include "ItemConstValueArray.h"
// -----------------------------------------------------------------------
// contents of this file
// -----------------------------------------------------------------------
class ElemDDLPartitionSystem;
// -----------------------------------------------------------------------
// forward references
// -----------------------------------------------------------------------
class BindWA;
// -----------------------------------------------------------------------
// definition of class ElemDDLPartitionSystem
// -----------------------------------------------------------------------
class ElemDDLPartitionSystem : public ElemDDLPartition
{
public:
// constructors
ElemDDLPartitionSystem();
ElemDDLPartitionSystem(ElemDDLPartition::optionEnum,
ElemDDLNode * pLocation,
ElemDDLNode * pPartitionSystemAttrList);
ElemDDLPartitionSystem(OperatorTypeEnum operType,
ElemDDLPartition::optionEnum,
ElemDDLNode * pLocation,
ElemDDLNode * pPartitionSystemAttrList);
// virtual destructor
virtual ~ElemDDLPartitionSystem();
// cast
virtual ElemDDLPartitionSystem * castToElemDDLPartitionSystem();
//
// accessors
//
virtual Int32 getArity() const;
virtual ExprNode * getChild(Lng32 index);
inline const NAString & getGuardianLocation() const;
// returns an empty string unless the parse node
// is bound (the method bindNode is invoked).
// After the parse node is bound, returns the
// location of the primary partition in Guardian
// physical device name format. If the LOCATION
// clause is not specified, a default location is
// used.
inline const NAString & getLocation() const;
// returns the location name specified in the LOCATION
// clause/phrase associating with the primary or
// secondary partition; returns an empty string if the
// LOCATION clause associating with the primary partition
// does not appear.
inline const NAString & getLocationName() const;
// same as getLocation()
inline const NAString & getPartitionName() const;
// returns the partition name specified in the LOCATION clause.
// returns an empty string if the LOCATION clause is not specified.
inline ElemDDLLocation::locationNameTypeEnum getLocationNameType() const;
// returns the type of the location name (e.g., an OSS
// path name, a Guardian device name, an OSS environment
// variable name, etc.) If LOCATION clause does not
// appear, the returned value has no meaning.
inline ElemDDLNode * getLocationNode() const;
// returns the pointer pointing to the parse node
// representing the specified LOCATION clause. If the
// LOCATION clause does not appear, returns NULL.
inline ULng32 getMaxSize() const;
inline ComUnits getMaxSizeUnit() const;
inline ULng32 getPriExt() const;
inline ULng32 getSecExt() const;
inline ULng32 getMaxExt() const;
inline ElemDDLPartition::optionEnum getOption() const;
// returns either ElemDDLPartition::ADD_OPTION or
// ElemDDLPartition::DROP_OPTION depending on whether
// ADD or DROP is specified.
NAString getOptionAsNAString() const;
// Same as getOption() except that this method returns
// NAString("ADD") or NAString("DROP").
inline NABoolean isMaxSizeSpecified() const;
inline NABoolean isMaxSizeUnbounded() const;
inline NABoolean isExtentSpecified() const;
inline NABoolean isMaxExtentSpecified() const;
//
// mutators
//
virtual void setChild(Lng32 index, ExprNode * pChildNode);
inline void setIsMaxSizeSpecified(NABoolean isMaxSizeSpecified);
inline void setIsMaxSizeUnbounded(NABoolean isMaxSizeUnbounded);
inline void setIsExtentSpecified(NABoolean isExtentSpecified);
inline void setIsMaxExtentSpecified(NABoolean isMaxExtentSpecified);
inline void setLocationName(const NAString &locationName);
inline void setPartitionName(const NAString &partitionName);
inline void setLocationNameType(ElemDDLLocation::locationNameTypeEnum
locationNameType);
inline void setMaxSize(ULng32 maxSize);
inline void setMaxSizeUnit(ComUnits maxSizeUnit);
inline void setPriExt(ULng32 priExt);
inline void setSecExt(ULng32 secExt);
inline void setMaxExt(ULng32 maxExt);
//
// method for binding
//
virtual ExprNode * bindNode(BindWA * pBindWA);
//
// methods for tracing
//
virtual const NAString displayLabel1() const;
virtual const NAString displayLabel2() const;
virtual const NAString displayLabel3() const;
virtual NATraceList getDetailInfo() const;
virtual const NAString getText() const;
// method for building text
virtual NAString getSyntax() const;
protected:
//
// pointer to child parse nodes
//
enum { INDEX_LOCATION = 0,
INDEX_PARTITION_ATTR_LIST,
MAX_ELEM_DDL_PARTITION_SYSTEM_ARITY };
ElemDDLNode * children_[MAX_ELEM_DDL_PARTITION_SYSTEM_ARITY];
private:
// ---------------------------------------------------------------------
// private methods
// ---------------------------------------------------------------------
// accessor
inline ElemDDLNode * getPartitionSystemAttrList() const;
// mutators
void initializeDataMembers();
void setPartitionAttr(ElemDDLNode * pOptionNode);
// ---------------------------------------------------------------------
// private data members
// ---------------------------------------------------------------------
ElemDDLPartition::optionEnum option_;
//
// location
//
NAString locationName_;
ElemDDLLocation::locationNameTypeEnum locationNameType_;
// guardianLocation_ is empty until the parse node is
// bound (the method bindNode() is invoked). The method
// bindNode() converts the specified location to a
// Guardian physical device and then saves the computed
// name in this data member. If the LOCATION clause does
// not appear, a default location name is selected.
NAString guardianLocation_;
NAString partitionName_;
//
// file attributes
//
// The flags is...Spec_ shows whether the corresponding partitionSystem
// attributes were specified in the PARTITIONSYSTEM clause or not. They
// are used by the parser to look for duplicate clauses.
// MAXSIZE
NABoolean isMaxSizeSpec_;
NABoolean isMaxSizeUnbounded_;
ULng32 maxSize_;
ComUnits maxSizeUnit_;
// EXTENT
NABoolean isExtentSpec_;
ULng32 priExt_;
ULng32 secExt_;
// MAXEXTENT
NABoolean isMaxExtentSpec_;
ULng32 maxExt_;
}; // class ElemDDLPartitionSystem
// -----------------------------------------------------------------------
// definitions of inline methods for class ElemDDLPartitionSystem
// -----------------------------------------------------------------------
//
// accessors
//
inline const NAString &
ElemDDLPartitionSystem::getGuardianLocation() const
{
return guardianLocation_;
}
inline const NAString &
ElemDDLPartitionSystem::getLocation() const
{
return locationName_;
}
// same as getLocation()
inline const NAString &
ElemDDLPartitionSystem::getLocationName() const
{
return locationName_;
}
inline const NAString &
ElemDDLPartitionSystem::getPartitionName() const
{
return partitionName_;
}
inline ElemDDLLocation::locationNameTypeEnum
ElemDDLPartitionSystem::getLocationNameType() const
{
return locationNameType_;
}
inline ElemDDLNode *
ElemDDLPartitionSystem::getLocationNode() const
{
return children_[INDEX_LOCATION];
}
inline ULng32
ElemDDLPartitionSystem::getMaxSize() const
{
return maxSize_;
}
inline ComUnits
ElemDDLPartitionSystem::getMaxSizeUnit() const
{
return maxSizeUnit_;
}
inline ULng32
ElemDDLPartitionSystem::getPriExt() const
{
return priExt_;
}
inline ULng32
ElemDDLPartitionSystem::getSecExt() const
{
return secExt_;
}
inline ULng32
ElemDDLPartitionSystem::getMaxExt() const
{
return maxExt_;
}
// is ADD or DELETE option?
inline ElemDDLPartition::optionEnum
ElemDDLPartitionSystem::getOption() const
{
return option_;
}
inline ElemDDLNode *
ElemDDLPartitionSystem::getPartitionSystemAttrList() const
{
return children_[INDEX_PARTITION_ATTR_LIST];
}
inline NABoolean
ElemDDLPartitionSystem::isMaxSizeSpecified() const
{
return isMaxSizeSpec_;
}
inline NABoolean
ElemDDLPartitionSystem::isExtentSpecified() const
{
return isExtentSpec_;
}
inline NABoolean
ElemDDLPartitionSystem::isMaxExtentSpecified() const
{
return isMaxExtentSpec_;
}
inline NABoolean
ElemDDLPartitionSystem::isMaxSizeUnbounded() const
{
return isMaxSizeUnbounded_;
}
//
// mutators
//
inline void
ElemDDLPartitionSystem::setIsMaxSizeSpecified(NABoolean isMaxSizeSpecified)
{
isMaxSizeSpec_ = isMaxSizeSpecified;
}
inline void
ElemDDLPartitionSystem::setIsMaxSizeUnbounded(NABoolean isMaxSizeUnbounded)
{
isMaxSizeUnbounded_ = isMaxSizeUnbounded;
}
inline void
ElemDDLPartitionSystem::setIsExtentSpecified(NABoolean isExtentSpecified)
{
isExtentSpec_ = isExtentSpecified;
}
inline void
ElemDDLPartitionSystem::setIsMaxExtentSpecified(NABoolean isMaxExtentSpecified)
{
isMaxExtentSpec_ = isMaxExtentSpecified;
}
inline void
ElemDDLPartitionSystem::setLocationName(const NAString & locationName)
{
locationName_ = locationName;
}
inline void
ElemDDLPartitionSystem::setPartitionName(const NAString & partitionName)
{
partitionName_ = partitionName;
}
inline void
ElemDDLPartitionSystem::setLocationNameType(
ElemDDLLocation::locationNameTypeEnum locationNameType)
{
locationNameType_ = locationNameType;
}
inline void
ElemDDLPartitionSystem::setMaxSize(ULng32 maxSize)
{
maxSize_ = maxSize;
}
inline void
ElemDDLPartitionSystem::setMaxSizeUnit(ComUnits maxSizeUnit)
{
maxSizeUnit_ = maxSizeUnit;
}
inline void
ElemDDLPartitionSystem::setPriExt(ULng32 priExt)
{
priExt_ = priExt;
}
inline void
ElemDDLPartitionSystem::setSecExt(ULng32 secExt)
{
secExt_ = secExt;
}
inline void
ElemDDLPartitionSystem::setMaxExt(ULng32 maxExt)
{
maxExt_ = maxExt;
}
#endif // ELEMDDLPARTITIONSYSTEM_H