blob: ea4e0356f61ee530debd3fa2b78e908aba1c068a [file] [log] [blame]
#ifndef TABLENAMEMAP_H
#define TABLENAMEMAP_H
/* -*-C++-*-
**************************************************************************
*
* File: TableNameMap.h
* Description: A name map for a table
* Created: 4/27/94
* Language: C++
*
// @@@ 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 @@@
*
**************************************************************************
*/
#include "ColumnDesc.h"
// -----------------------------------------------------------------------
// contents of this file
// -----------------------------------------------------------------------
class TableNameMap;
class XTNM;
class TableViewUsage;
class TableViewUsageList;
// ***********************************************************************
//
// TableNameMap : A table name map.
//
// A TableNameMap associates the exposed name for a table with its
// TableId. A TableNameMap is transient and is used only during the
// name binding phase.
//
// The XTNM (Exposed Table Name Map) cache is a hash table of
// TableNameMap's that permits an associative (exposed name) lookup.
//
// ***********************************************************************
class TableNameMap : public NABasicObject
{
public:
// ---------------------------------------------------------------------
// Constructor functions
// ---------------------------------------------------------------------
TableNameMap(const CorrName& tableName,
ColumnDescList *columnList,
CollHeap * h=0)
: tableName_(tableName,h),
columnList_(columnList), hbaseColNameSet_(h){}
// copy ctor
TableNameMap (const TableNameMap &, CollHeap * h=0) ; // not written
// ---------------------------------------------------------------------
// Destructor function
// ---------------------------------------------------------------------
~TableNameMap() { delete columnList_; }
// ---------------------------------------------------------------------
// Accessor functions
// ---------------------------------------------------------------------
const CorrName& getTableName() const { return tableName_; }
ColumnDescList *getColumnList() const { return columnList_; }
// ---------------------------------------------------------------------
// The following methods are required by the NAKeyLookup
// ---------------------------------------------------------------------
const CorrName* getKey() const { return &tableName_; }
NABoolean operator==(const TableNameMap& other) const
{ return this == &other; }
private:
CorrName tableName_;
ColumnDescList *columnList_;
// columns retrieved from hbase external tables through the use of
// COLUMN_LOOKUP of COLUMNS_DISPLAY function.
// Valid only for external hbase tables in row format.
// (hbase."_ROW_".<tab>)
// NAList<NAString> hbaseColNameList_;
NASet<NAString> hbaseColNameSet_;
}; // class TableNameMap
// ***********************************************************************
// XTNM
//
// A collection of TableNameMap
// ***********************************************************************
#define XTNM_INIT_SIZE 47 // Initial size of the XTNM cache
class XTNM : public NAKeyLookup<CorrName,TableNameMap>
{
public:
XTNM(CollHeap* h/*=0*/) :
NAKeyLookup<CorrName,TableNameMap> (XTNM_INIT_SIZE,
NAKeyLookupEnums::KEY_INSIDE_VALUE,
h)
{}
// copy ctor
XTNM (const XTNM & orig, CollHeap * h=0) :
NAKeyLookup<CorrName,TableNameMap> (orig, h)
{}
~XTNM();
// XTNM clients must use this method, not the simplistic insert()
// inherited from NAKeyLookup!
void insertNames(BindWA *bindWA,
CorrName& tableName,
ColumnDescList *columnList = NULL);
}; // class XTNM
// ***********************************************************************
class TableViewUsage : public NABasicObject
{
public:
TableViewUsage(const QualifiedName& tableName,
ExtendedQualName::SpecialTableType type,
NABoolean isView,
Int32 viewCount,
CollHeap *h = CmpCommon::statementHeap())
: tableName_(tableName,h),
type_(type),
isView_(isView),
viewCount_(viewCount)
{}
const QualifiedName& getTableName() const { return tableName_; }
ExtendedQualName::SpecialTableType getSpecialType() const { return type_; }
NABoolean isView() const { return isView_; }
Int32 viewCount() const { return viewCount_; }
private:
const QualifiedName tableName_;
ExtendedQualName::SpecialTableType type_;
NABoolean isView_;
Int32 viewCount_;
}; // class TableViewUsage
class TableViewUsageList : public LIST(TableViewUsage *)
{
public:
TableViewUsageList(CollHeap *h = CmpCommon::statementHeap())
: LIST(TableViewUsage *)(h) {}
void display(NABoolean newline, size_t indent) const;
void display() const; // useful in MSDEV
Int32 getViewsOnTable(CollIndex begIx, CollIndex endIx, Int32 viewCount,
const QualifiedName &baseName,
ExtendedQualName::SpecialTableType baseType,
const QualifiedName *additionalNameToFormat,
NAString &formattedListOfViewsThatUseTheBaseTable)
const;
}; // class TableViewUsageList
#endif /* TABLENAMEMAP_H */