/**
* 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.
*/
package org.apache.hadoop.hive.ql.parse;
import java.util.*;
import org.apache.hadoop.hive.ql.parse.QBParseInfo;
import org.apache.hadoop.hive.ql.parse.QBMetaData;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* Implementation of the query block
*
**/
public class QB {
private static final Log LOG = LogFactory.getLog("hive.ql.parse.QB");
private int numJoins = 0;
private int numGbys = 0;
private int numSels = 0;
private int numSelDi = 0;
private HashMap<String, String> aliasToTabs;
private HashMap<String, QBExpr> aliasToSubq;
private QBParseInfo qbp;
private QBMetaData qbm;
private QBJoinTree qbjoin;
private String id;
private boolean isQuery;
public void print(String msg) {
LOG.info(msg + "alias=" + qbp.getAlias());
for(String alias: getSubqAliases()) {
QBExpr qbexpr = getSubqForAlias(alias);
LOG.info(msg+"start subquery " + alias);
qbexpr.print(msg+" ");
LOG.info(msg+"end subquery " + alias);
}
}
public QB() {
}
public QB(String outer_id, String alias, boolean isSubQ) {
aliasToTabs = new HashMap<String, String>();
aliasToSubq = new HashMap<String, QBExpr>();
if (alias != null) {
alias = alias.toLowerCase();
}
qbp = new QBParseInfo(alias, isSubQ);
qbm = new QBMetaData();
this.id = (outer_id == null ? alias : outer_id + ":" + alias);
}
public QBParseInfo getParseInfo() {
return qbp;
}
public QBMetaData getMetaData() {
return qbm;
}
public void setQBParseInfo(QBParseInfo qbp) {
this.qbp = qbp;
}
public void countSelDi() {
numSelDi++;
}
public void countSel() {
numSels++;
}
public boolean exists(String alias) {
alias = alias.toLowerCase();
if (aliasToTabs.get(alias) != null || aliasToSubq.get(alias) != null)
return true;
return false;
}
public void setTabAlias(String alias, String tabName) {
aliasToTabs.put(alias.toLowerCase(), tabName);
}
public void setSubqAlias(String alias, QBExpr qbexpr) {
aliasToSubq.put(alias.toLowerCase(), qbexpr);
}
public String getId() {
return id;
}
public int getNumGbys() {
return numGbys;
}
public int getNumSelDi() {
return numSelDi;
}
public int getNumSels() {
return numSels;
}
public int getNumJoins() {
return numJoins;
}
public Set<String> getSubqAliases() {
return aliasToSubq.keySet();
}
public Set<String> getTabAliases() {
return aliasToTabs.keySet();
}
public QBExpr getSubqForAlias(String alias) {
return aliasToSubq.get(alias.toLowerCase());
}
public String getTabNameForAlias(String alias) {
return aliasToTabs.get(alias.toLowerCase());
}
public QBJoinTree getQbJoinTree() {
return qbjoin;
}
public void setQbJoinTree(QBJoinTree qbjoin) {
this.qbjoin = qbjoin;
}
public void setIsQuery(boolean isQuery) {
this.isQuery = isQuery;
}
public boolean getIsQuery() {
return isQuery;
}
public boolean isSelectStarQuery() {
return qbp.isSelectStarQuery() && aliasToSubq.isEmpty();
}
}