blob: 8aa139afccbad8577ee1f47d0be22cabe7cebd6a [file] [log] [blame]
package edu.uci.ics.hivesterix.logical.plan.visitor.base;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.mutable.Mutable;
import org.apache.hadoop.hive.ql.exec.Operator;
import org.apache.hadoop.hive.ql.plan.AggregationDesc;
import org.apache.hadoop.hive.ql.plan.ExprNodeDesc;
import org.apache.hadoop.hive.ql.plan.PartitionDesc;
import org.apache.hadoop.hive.ql.plan.UDTFDesc;
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
import edu.uci.ics.hivesterix.runtime.jobgen.Schema;
import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalOperator;
import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
import edu.uci.ics.hyracks.algebricks.core.algebra.metadata.IMetadataProvider;
@SuppressWarnings("rawtypes")
public interface Translator {
/**
* generate input schema
*
* @param operator
* @return
*/
public Schema generateInputSchema(Operator operator);
/**
* rewrite the names of output columns for feture expression evaluators to
* use
*
* @param operator
*/
public void rewriteOperatorOutputSchema(List<LogicalVariable> vars, Operator operator);
/**
* rewrite the names of output columns for feture expression evaluators to
* use
*
* @param operator
*/
public void rewriteOperatorOutputSchema(Operator operator);
/**
* rewrite an expression and substitute variables
*
* @param expr
* hive expression
*/
public void rewriteExpression(ExprNodeDesc expr);
/**
* rewrite an expression and substitute variables
*
* @param expr
* hive expression
*/
public void rewriteExpressionPartial(ExprNodeDesc expr);
/**
* get an assign operator as a child of parent
*
* @param parent
* @param cols
* @param variables
* @return
*/
public ILogicalOperator getAssignOperator(Mutable<ILogicalOperator> parent, List<ExprNodeDesc> cols,
ArrayList<LogicalVariable> variables);
/**
* get type for a logical variable
*
* @param var
* @return type info
*/
public TypeInfo getType(LogicalVariable var);
/**
* translate an expression from hive to Algebricks
*
* @param desc
* @return
*/
public Mutable<ILogicalExpression> translateScalarFucntion(ExprNodeDesc desc);
/**
* translate an aggregation from hive to Algebricks
*
* @param aggregateDesc
* @return
*/
public Mutable<ILogicalExpression> translateAggregation(AggregationDesc aggregateDesc);
/**
* translate unnesting (UDTF) function expression
*
* @param aggregator
* @return
*/
public Mutable<ILogicalExpression> translateUnnestFunction(UDTFDesc udtfDesc, Mutable<ILogicalExpression> argument);
/**
* get variable from a schema
*
* @param schema
* @return
*/
public List<LogicalVariable> getVariablesFromSchema(Schema schema);
/**
* get variable from name
*
* @param name
* @return
*/
public LogicalVariable getVariable(String name);
/**
* get variable from field name
*
* @param name
* @return
*/
public LogicalVariable getVariableFromFieldName(String name);
/**
* get variable from name, type
*
* @param fieldName
* @param type
* @return
*/
public LogicalVariable getVariable(String fieldName, TypeInfo type);
/**
* get new variable from name, type
*
* @param fieldName
* @param type
* @return
*/
public LogicalVariable getNewVariable(String fieldName, TypeInfo type);
/**
* set the metadata provider
*
* @param metadata
*/
public void setMetadataProvider(IMetadataProvider<PartitionDesc, Object> metadata);
/**
* get the metadata provider
*
* @param metadata
*/
public IMetadataProvider<PartitionDesc, Object> getMetadataProvider();
/**
* replace the variable
*
* @param oldVar
* @param newVar
*/
public void replaceVariable(LogicalVariable oldVar, LogicalVariable newVar);
}