blob: 3bc9432aa56f1880dbff7045ddcb1c491cd4172f [file] [log] [blame]
/**
* 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;
/**
*
* QueryProperties.
*
* A structure to contain features of a query that are determined
* during parsing and may be useful for categorizing a query type
*
* These include whether the query contains:
* a join clause, a group by clause, an order by clause, a sort by
* clause, a group by clause following a join clause, and whether
* the query uses a script for mapping/reducing
*/
public class QueryProperties {
boolean query;
boolean analyzeCommand;
boolean partialScanAnalyzeCommand;
boolean noScanAnalyzeCommand;
boolean analyzeRewrite;
boolean ctas;
int outerQueryLimit;
boolean hasJoin = false;
boolean hasGroupBy = false;
boolean hasOrderBy = false;
boolean hasOuterOrderBy = false;
boolean hasSortBy = false;
boolean hasJoinFollowedByGroupBy = false;
boolean hasPTF = false;
boolean hasWindowing = false;
// does the query have a using clause
boolean usesScript = false;
boolean hasDistributeBy = false;
boolean hasClusterBy = false;
boolean mapJoinRemoved = false;
boolean hasMapGroupBy = false;
private int noOfJoins = 0;
private int noOfOuterJoins = 0;
private boolean hasLateralViews;
private boolean multiDestQuery;
private boolean filterWithSubQuery;
public boolean isQuery() {
return query;
}
public void setQuery(boolean query) {
this.query = query;
}
public boolean isAnalyzeCommand() {
return analyzeCommand;
}
public void setAnalyzeCommand(boolean analyzeCommand) {
this.analyzeCommand = analyzeCommand;
}
public boolean isPartialScanAnalyzeCommand() {
return partialScanAnalyzeCommand;
}
public void setPartialScanAnalyzeCommand(boolean partialScanAnalyzeCommand) {
this.partialScanAnalyzeCommand = partialScanAnalyzeCommand;
}
public boolean isNoScanAnalyzeCommand() {
return noScanAnalyzeCommand;
}
public void setNoScanAnalyzeCommand(boolean noScanAnalyzeCommand) {
this.noScanAnalyzeCommand = noScanAnalyzeCommand;
}
public boolean isAnalyzeRewrite() {
return analyzeRewrite;
}
public void setAnalyzeRewrite(boolean analyzeRewrite) {
this.analyzeRewrite = analyzeRewrite;
}
public boolean isCTAS() {
return ctas;
}
public void setCTAS(boolean ctas) {
this.ctas = ctas;
}
public int getOuterQueryLimit() {
return outerQueryLimit;
}
public void setOuterQueryLimit(int outerQueryLimit) {
this.outerQueryLimit = outerQueryLimit;
}
public boolean hasJoin() {
return (noOfJoins > 0);
}
public void incrementJoinCount(boolean outerJoin) {
noOfJoins++;
if (outerJoin)
noOfOuterJoins++;
}
public int getJoinCount() {
return noOfJoins;
}
public int getOuterJoinCount() {
return noOfOuterJoins;
}
public void setHasLateralViews(boolean hasLateralViews) {
this.hasLateralViews = hasLateralViews;
}
public boolean hasLateralViews() {
return hasLateralViews;
}
public boolean hasGroupBy() {
return hasGroupBy;
}
public void setHasGroupBy(boolean hasGroupBy) {
this.hasGroupBy = hasGroupBy;
}
public boolean hasOrderBy() {
return hasOrderBy;
}
public void setHasOrderBy(boolean hasOrderBy) {
this.hasOrderBy = hasOrderBy;
}
public boolean hasOuterOrderBy() {
return hasOuterOrderBy;
}
public void setHasOuterOrderBy(boolean hasOuterOrderBy) {
this.hasOuterOrderBy = hasOuterOrderBy;
}
public boolean hasSortBy() {
return hasSortBy;
}
public void setHasSortBy(boolean hasSortBy) {
this.hasSortBy = hasSortBy;
}
public boolean hasJoinFollowedByGroupBy() {
return hasJoinFollowedByGroupBy;
}
public void setHasJoinFollowedByGroupBy(boolean hasJoinFollowedByGroupBy) {
this.hasJoinFollowedByGroupBy = hasJoinFollowedByGroupBy;
}
public boolean usesScript() {
return usesScript;
}
public void setUsesScript(boolean usesScript) {
this.usesScript = usesScript;
}
public boolean hasDistributeBy() {
return hasDistributeBy;
}
public void setHasDistributeBy(boolean hasDistributeBy) {
this.hasDistributeBy = hasDistributeBy;
}
public boolean hasClusterBy() {
return hasClusterBy;
}
public void setHasClusterBy(boolean hasClusterBy) {
this.hasClusterBy = hasClusterBy;
}
public boolean hasPTF() {
return hasPTF;
}
public void setHasPTF(boolean hasPTF) {
this.hasPTF = hasPTF;
}
public boolean hasWindowing() {
return hasWindowing;
}
public void setHasWindowing(boolean hasWindowing) {
this.hasWindowing = hasWindowing;
}
public boolean isMapJoinRemoved() {
return mapJoinRemoved;
}
public void setMapJoinRemoved(boolean mapJoinRemoved) {
this.mapJoinRemoved = mapJoinRemoved;
}
public boolean isHasMapGroupBy() {
return hasMapGroupBy;
}
public void setHasMapGroupBy(boolean hasMapGroupBy) {
this.hasMapGroupBy = hasMapGroupBy;
}
public boolean hasMultiDestQuery() {
return this.multiDestQuery;
}
public void setMultiDestQuery(boolean multiDestQuery) {
this.multiDestQuery = multiDestQuery;
}
public void setFilterWithSubQuery(boolean filterWithSubQuery) {
this.filterWithSubQuery = filterWithSubQuery;
}
public boolean hasFilterWithSubQuery() {
return this.filterWithSubQuery;
}
public void clear() {
query = false;
analyzeCommand = false;
partialScanAnalyzeCommand = false;
noScanAnalyzeCommand = false;
analyzeRewrite = false;
ctas = false;
outerQueryLimit = -1;
hasJoin = false;
hasGroupBy = false;
hasOrderBy = false;
hasOuterOrderBy = false;
hasSortBy = false;
hasJoinFollowedByGroupBy = false;
hasPTF = false;
hasWindowing = false;
// does the query have a using clause
usesScript = false;
hasDistributeBy = false;
hasClusterBy = false;
mapJoinRemoved = false;
hasMapGroupBy = false;
noOfJoins = 0;
noOfOuterJoins = 0;
multiDestQuery = false;
filterWithSubQuery = false;
}
}