/** * 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.tajo.engine.eval; import java.util.Stack; public interface EvalNodeVisitor2<CONTEXT, RESULT> { RESULT visitChild(CONTEXT context, EvalNode evalNode, Stack<EvalNode> stack); // Column and Value reference expressions RESULT visitConst(CONTEXT context, ConstEval evalNode, Stack<EvalNode> stack); RESULT visitRowConstant(CONTEXT context, RowConstantEval evalNode, Stack<EvalNode> stack); RESULT visitField(CONTEXT context, Stack<EvalNode> stack, FieldEval evalNode); // Arithmetic expression RESULT visitPlus(CONTEXT context, BinaryEval evalNode, Stack<EvalNode> stack); RESULT visitMinus(CONTEXT context, BinaryEval evalNode, Stack<EvalNode> stack); RESULT visitMultiply(CONTEXT context, BinaryEval evalNode, Stack<EvalNode> stack); RESULT visitDivide(CONTEXT context, BinaryEval evalNode, Stack<EvalNode> stack); RESULT visitModular(CONTEXT context, BinaryEval evalNode, Stack<EvalNode> stack); // Logical Predicates RESULT visitAnd(CONTEXT context, BinaryEval evalNode, Stack<EvalNode> stack); RESULT visitOr(CONTEXT context, BinaryEval evalNode, Stack<EvalNode> stack); RESULT visitNot(CONTEXT context, NotEval evalNode, Stack<EvalNode> stack); // Comparison Predicates RESULT visitEqual(CONTEXT context, BinaryEval evalNode, Stack<EvalNode> stack); RESULT visitNotEqual(CONTEXT context, BinaryEval evalNode, Stack<EvalNode> stack); RESULT visitLessThan(CONTEXT context, BinaryEval evalNode, Stack<EvalNode> stack); RESULT visitLessThanOrEqual(CONTEXT context, BinaryEval evalNode, Stack<EvalNode> stack); RESULT visitGreaterThan(CONTEXT context, BinaryEval evalNode, Stack<EvalNode> stack); RESULT visitGreaterThanOrEqual(CONTEXT context, BinaryEval evalNode, Stack<EvalNode> stack); // Other Predicates RESULT visitIsNull(CONTEXT context, IsNullEval evalNode, Stack<EvalNode> stack); RESULT visitBetween(CONTEXT context, BetweenPredicateEval evalNode, Stack<EvalNode> stack); RESULT visitCaseWhen(CONTEXT context, CaseWhenEval evalNode, Stack<EvalNode> stack); RESULT visitIfThen(CONTEXT context, CaseWhenEval.IfThenEval evalNode, Stack<EvalNode> stack); RESULT visitInPredicate(CONTEXT context, InEval evalNode, Stack<EvalNode> stack); // String operator and Pattern matching predicates RESULT visitLike(CONTEXT context, LikePredicateEval evalNode, Stack<EvalNode> stack); RESULT visitSimilarTo(CONTEXT context, SimilarToPredicateEval evalNode, Stack<EvalNode> stack); RESULT visitRegex(CONTEXT context, RegexPredicateEval evalNode, Stack<EvalNode> stack); RESULT visitConcatenate(CONTEXT context, BinaryEval evalNode, Stack<EvalNode> stack); // Functions RESULT visitFuncCall(CONTEXT context, GeneralFunctionEval evalNode, Stack<EvalNode> stack); RESULT visitAggrFuncCall(CONTEXT context, AggregationFunctionCallEval evalNode, Stack<EvalNode> stack); RESULT visitSigned(CONTEXT context, SignedEval signedEval, Stack<EvalNode> stack); RESULT visitCast(CONTEXT context, CastEval signedEval, Stack<EvalNode> stack); }