org.apache.hadoop.hive.ql.optimizer.unionproc.UnionProcContext Maven / Gradle / Ivy
/**
* 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.optimizer.unionproc;
import java.util.HashMap;
import java.util.Map;
import org.apache.hadoop.hive.ql.exec.UnionOperator;
import org.apache.hadoop.hive.ql.lib.NodeProcessorCtx;
import org.apache.hadoop.hive.ql.parse.ParseContext;
/**
* UnionProcContext.
*
*/
public class UnionProcContext implements NodeProcessorCtx {
/**
* UnionParseContext.
*
*/
public static class UnionParseContext {
private final transient boolean[] mapOnlySubq;
private final transient boolean[] mapOnlySubqSet;
private final transient boolean[] rootTask;
private final transient int numInputs;
public UnionParseContext(int numInputs) {
this.numInputs = numInputs;
mapOnlySubq = new boolean[numInputs];
rootTask = new boolean[numInputs];
mapOnlySubqSet = new boolean[numInputs];
}
public boolean getMapOnlySubq(int pos) {
return mapOnlySubq[pos];
}
public void setMapOnlySubq(int pos, boolean mapOnlySubq) {
this.mapOnlySubq[pos] = mapOnlySubq;
this.mapOnlySubqSet[pos] = true;
}
public boolean getRootTask(int pos) {
return rootTask[pos];
}
public void setRootTask(int pos, boolean rootTask) {
this.rootTask[pos] = rootTask;
}
public int getNumInputs() {
return numInputs;
}
public boolean allMapOnlySubQ() {
return isAllTrue(mapOnlySubq);
}
public boolean allMapOnlySubQSet() {
return isAllTrue(mapOnlySubqSet);
}
public boolean allRootTasks() {
return isAllTrue(rootTask);
}
public boolean isAllTrue(boolean[] array) {
for (boolean value : array) {
if (!value) {
return false;
}
}
return true;
}
}
// the subqueries are map-only jobs
private boolean mapOnlySubq;
// ParseContext
private ParseContext parseContext;
/**
* @return the mapOnlySubq
*/
public boolean isMapOnlySubq() {
return mapOnlySubq;
}
/**
* @param mapOnlySubq
* the mapOnlySubq to set
*/
public void setMapOnlySubq(boolean mapOnlySubq) {
this.mapOnlySubq = mapOnlySubq;
}
private final Map uCtxMap;
public UnionProcContext() {
uCtxMap = new HashMap();
mapOnlySubq = true;
}
public void setUnionParseContext(UnionOperator u, UnionParseContext uCtx) {
uCtxMap.put(u, uCtx);
}
public UnionParseContext getUnionParseContext(UnionOperator u) {
return uCtxMap.get(u);
}
public ParseContext getParseContext() {
return parseContext;
}
public void setParseContext(ParseContext parseContext) {
this.parseContext = parseContext;
}
}