blob: e88349468ce47c2c2a155b26fcf3c064ef32de8a [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 @@@
#include "TDBTreeView.h"
#include "ui_TDBTreeView.h"
#include "MainWindow.h"
#include "QueryData.h"
#include "TDBDlgMdamNet.h"
#include "TDBDlgExprList.h"
extern MainWindow *mainWindow_;
TDBTreeView::TDBTreeView(QWidget * parent):
QWidget(parent), ui(new Ui::TDBTreeView)
{
ui->setupUi(this);
QStringList header;
header << "TDB Display" << "Expressions" << "MDAM Disjuncts";
QTreeWidgetItem *hdrItem = new QTreeWidgetItem(header);
hdrItem->setIcon(0, QIcon(":/file/R_SQLNODE"));
hdrItem->setIcon(1, QIcon(":/file/R_SQLNODE"));
hdrItem->setIcon(2, QIcon(":/file/R_SQLNODE"));
ui->treeWidget->setHeaderItem(hdrItem);
ui->treeWidget->setIconSize(QSize(32, 32));
ui->treeWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->treeWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
ui->treeWidget->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
}
TDBTreeView::~TDBTreeView()
{
delete ui;
}
/* Public Method Begin */
NAString TDBTreeView::TDBNodeTypeToString(ComTdb::ex_node_type nodeType)
{
NAString tdbName;
switch (nodeType)
{
case ComTdb::ex_DDL:
tdbName = "ex_ddl_tdb";
break;
case ComTdb::ex_DESCRIBE:
tdbName = "ex_describe_tdb";
break;
case ComTdb::ex_ROOT:
tdbName = "ex_root_tdb";
break;
case ComTdb::ex_ONLJ:
tdbName = "ex_onlj_tdb";
break;
case ComTdb::ex_MJ:
tdbName = "ex_mj_tdb";
break;
case ComTdb::ex_FIRST_N:
tdbName = "ExFirstNTdb";
break;
case ComTdb::ex_HASHJ:
tdbName = "ex_hashj_tdb";
break;
case ComTdb::ex_HASH_GRBY:
tdbName = "ex_hash_grby_tdb";
break;
case ComTdb::ex_LOCK:
tdbName = "ExLockTdb";
break;
case ComTdb::ex_SORT:
tdbName = "ExSortTdb";
break;
case ComTdb::ex_SORT_GRBY:
tdbName = "ex_sort_grby_tdb";
break;
case ComTdb::ex_TRANSACTION:
tdbName = "ExTransTdb";
break;
case ComTdb::ex_UNION:
tdbName = "ex_union_tdb";
break;
case ComTdb::ex_LEAF_TUPLE:
tdbName = "ex_leaf_tuple_tdb";
break;
case ComTdb::ex_NON_LEAF_TUPLE:
tdbName = "ex_nonleaf_tuple_tdb";
break;
case ComTdb::ex_TUPLE_FLOW:
tdbName = "ex_tuple_flow_tdb";
break;
case ComTdb::ex_SPLIT_TOP:
tdbName = "ex_split_top_tdb";
break;
case ComTdb::ex_SPLIT_BOTTOM:
tdbName = "ex_split_bottom_tdb";
break;
case ComTdb::ex_PARTN_ACCESS:
tdbName = "ex_partn_access_tdb";
break;
case ComTdb::ex_SEND_TOP:
tdbName = "ex_send_top_tdb";
break;
case ComTdb::ex_SEND_BOTTOM:
tdbName = "ex_send_bottom_tdb";
break;
case ComTdb::ex_EXPLAIN:
tdbName = "exExplainTdb";
break;
case ComTdb::ex_SEQUENCE_FUNCTION:
tdbName = "ExSequenceTdb";
break;
case ComTdb::ex_UDR:
tdbName = "ExUdrTdb";
break;
default:
tdbName = "NULL";
}
return tdbName;
}
void TDBTreeView::UpdateView()
{
//CSqldbgDoc* pDoc = (CSqldbgDoc*) GetDocument();
//ASSERT_VALID(pDoc);
//------------------------------------------------------------------
// GSH : Get the Tree to be displayed from the document.
//------------------------------------------------------------------
//void* tree;
//void* plan;
//pDoc->GetDocumentData(&tree, &plan);
ComTdb* tdb;
ExFragDir* fragDir;
Lng32 baseAddr;
mainWindow_->m_querydata->GetTDBData((void**) &tdb, (void**) &fragDir, baseAddr);
//------------------------------------------------------------------
// GSH : Delete the existing Tree.
//------------------------------------------------------------------
FreeItemMemory();
//------------------------------------------------------------------
// GSH : Now we do the tree walk to display the tree.
//------------------------------------------------------------------
DisplayTDBTree(tdb, fragDir, baseAddr, NULL);
//adjust column width
ui->treeWidget->expandAll();
for (int i = 0; i < ui->treeWidget->columnCount(); i++)
{
ui->treeWidget->resizeColumnToContents(i);
int width = ui->treeWidget->columnWidth(i);
ui->treeWidget->setColumnWidth(i, width + 30);
}
//------------------------------------------------------------------
// GSH :Once ALL TREE CONTROL ITEMS HAVE BEEN ADDED, you can set
// additional tree control attributes.
//------------------------------------------------------------------
//------------------------------------------------------------------
// GSH : Make all column widths optimal, so text and bitmaps are
// not clipped horizontally.
//------------------------------------------------------------------
//m_Tree.MakeColumnOptimal(1); // Make column widths optimal
//m_Tree.MakeColumnOptimal(2); // Make column widths optimal
//m_Tree.RecalcHorizontalExtent(); // Update horizontal scroll bar
}
void TDBTreeView::FreeItemMemory(void)
{
ui->treeWidget->clear();
}
void TDBTreeView::DisplayTDBTree(const class ComTdb* curr,
ExFragDir* fragDir,
Lng32 baseAddr,
QTreeWidgetItem * parentTreeItem)
{
//Int32 treeItemIndex;
char labelString[20];
if (curr != NULL) {
//col 0 string
//ComTdb::ex_node_type t = curr->getNodeType();
//NAString textString = TDBNodeTypeToString(t);
NAString textString = curr->getNodeName();
//col 1 string
sprintf(labelString,"%d Expressions.",
((ComTdb*)curr)->numExpressions());
QStringList rowValues;
rowValues << QString(QLatin1String(textString.data())) << labelString;
//new and fill item
QTreeWidgetItem *treeItem = new QTreeWidgetItem(rowValues);
treeItem->setTextAlignment (1, Qt::AlignRight|Qt::AlignVCenter);
treeItem->setIcon(0, QIcon(":/file/Resource/Main/Tdbnodes.bmp"));
QVariant itemData = qVariantFromValue((void*)curr);
treeItem->setData(0, Qt::UserRole, itemData);
//add Item into tree
if (parentTreeItem == NULL)
{
ui->treeWidget->addTopLevelItem(treeItem);
}
else
{
parentTreeItem->addChild(treeItem);
}
for (Int32 j = ((ComTdb*)curr)->numChildren()-1; j >= 0; j--) {
DisplayTDBTree(curr->getChildForGUI(j, baseAddr, fragDir),
fragDir,
baseAddr,
treeItem);
}
}//if(curr != NULL)
}
/* Public Method End */
void TDBTreeView::closeEvent(QCloseEvent * event)
{
event->ignore();
}
void TDBTreeView::on_treeWidget_itemClicked ( QTreeWidgetItem * item, int column )
{
#if 1
class ComTdb* currTdb;
TDBDlgExprList* ExprDlg_;
TDBDlgMdamNet* MdamDlg_;
QVariant v = item->data(0, Qt::UserRole);
currTdb = (ComTdb*)v.value <void *>();
//ComTdb::ex_node_type t = currTdb->getNodeType();
//NAString textString = TDBNodeTypeToString(t);
NAString textString = currTdb->getNodeName();
switch (column) {
case 1 : // Expr
ExprDlg_ = new TDBDlgExprList(this, currTdb, textString);
ExprDlg_->setAttribute(Qt::WA_DeleteOnClose);
ExprDlg_->show();
break;
case 2 : // MDAM
MdamDlg_ = new TDBDlgMdamNet(this);
MdamDlg_->setAttribute(Qt::WA_DeleteOnClose);
MdamDlg_->show();
break;
default : ;
}//switch
#endif
}