blob: faef89a9b4ef84eb0a335be53523eb41d1d521e1 [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
*
* https://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.cayenne.ejbql;
import org.apache.cayenne.ejbql.parser.EJBQLAggregateColumn;
import org.apache.cayenne.ejbql.parser.EJBQLDecimalLiteral;
import org.apache.cayenne.ejbql.parser.EJBQLFromItem;
import org.apache.cayenne.ejbql.parser.EJBQLIntegerLiteral;
import org.apache.cayenne.ejbql.parser.EJBQLJoin;
import org.apache.cayenne.ejbql.parser.EJBQLPositionalInputParameter;
/**
* A visitor interface to inspect the EJBQL expression tree. Visit methods return
* booleans, indicating whether the children of a given node should be visited.
*
* @since 3.0
*/
public interface EJBQLExpressionVisitor {
boolean visitAbs(EJBQLExpression expression, int finishedChildIndex);
boolean visitAbstractSchemaName(EJBQLExpression expression);
/**
* Called on visiting "add" expression and also after visiting every expression child.
*
* @param expression an "add" node being visited.
* @param finishedChildIndex "-1" when the expression node is visited for the first
* time, before its children; otherwise this is an index of a child just
* visited.
*/
boolean visitAdd(EJBQLExpression expression, int finishedChildIndex);
boolean visitAggregate(EJBQLExpression expression);
boolean visitAll(EJBQLExpression expression);
/**
* Called on visiting "and" expression and also after visiting every expression child.
*
* @param expression an "and" node being visited.
* @param finishedChildIndex "-1" when the expression node is visited for the first
* time, before its children; otherwise this is an index of a child just
* visited.
*/
boolean visitAnd(EJBQLExpression expression, int finishedChildIndex);
boolean visitAny(EJBQLExpression expression);
boolean visitAscending(EJBQLExpression expression);
boolean visitAverage(EJBQLAggregateColumn expression);
/**
* Called on visiting "between" expression and also after visiting every expression
* child.
*
* @param expression an "between" node being visited.
* @param finishedChildIndex "-1" when the expression node is visited for the first
* time, before its children; otherwise this is an index of a child just
* visited.
*/
boolean visitBetween(EJBQLExpression expression, int finishedChildIndex);
boolean visitBooleanLiteral(EJBQLExpression expression);
boolean visitClassName(EJBQLExpression expression);
boolean visitConcat(EJBQLExpression expression, int finishedChildIndex);
boolean visitConstructor(EJBQLExpression expression);
boolean visitConstructorParameter(EJBQLExpression expression);
boolean visitConstructorParameters(EJBQLExpression expression);
boolean visitCount(EJBQLAggregateColumn expression);
boolean visitCurrentDate(EJBQLExpression expression);
boolean visitCurrentTime(EJBQLExpression expression);
boolean visitCurrentTimestamp(EJBQLExpression expression);
boolean visitDecimalLiteral(EJBQLDecimalLiteral expression);
boolean visitDelete(EJBQLExpression expression);
boolean visitDescending(EJBQLExpression expression);
boolean visitDistinct(EJBQLExpression expression);
/**
* Called on visiting "divide" expression and also after visiting every expression
* child.
*
* @param expression an "divide" node being visited.
* @param finishedChildIndex "-1" when the expression node is visited for the first
* time, before its children; otherwise this is an index of a child just
* visited.
*/
boolean visitDivide(EJBQLExpression expression, int finishedChildIndex);
/**
* Called on visiting "equals" expression and also after visiting every expression
* child.
*
* @param expression an "equals" node being visited.
* @param finishedChildIndex "-1" when the expression node is visited for the first
* time, before its children; otherwise this is an index of a child just
* visited.
*/
boolean visitEquals(EJBQLExpression expression, int finishedChildIndex);
boolean visitEscapeCharacter(EJBQLExpression expression);
boolean visitExists(EJBQLExpression expression);
boolean visitFrom(EJBQLExpression expression, int finishedChildIndex);
boolean visitFromItem(EJBQLFromItem expression, int finishedChildIndex);
/**
* Called on visiting ">=" expression and also after visiting every expression child.
*
* @param expression an ">=" node being visited.
* @param finishedChildIndex "-1" when the expression node is visited for the first
* time, before its children; otherwise this is an index of a child just
* visited.
*/
boolean visitGreaterOrEqual(EJBQLExpression expression, int finishedChildIndex);
/**
* Called on visiting ">=" expression and also after visiting every expression child.
*
* @param expression an ">=" node being visited.
* @param finishedChildIndex "-1" when the expression node is visited for the first
* time, before its children; otherwise this is an index of a child just
* visited.
*/
boolean visitGreaterThan(EJBQLExpression expression, int finishedChildIndex);
boolean visitGroupBy(EJBQLExpression expression);
boolean visitHaving(EJBQLExpression expression);
boolean visitIdentificationVariable(EJBQLExpression expression);
boolean visitIdentifier(EJBQLExpression expression);
boolean visitIn(EJBQLExpression expression, int finishedChildIndex);
boolean visitInnerFetchJoin(EJBQLJoin join);
boolean visitInnerJoin(EJBQLJoin join);
boolean visitIntegerLiteral(EJBQLIntegerLiteral expression);
boolean visitIsEmpty(EJBQLExpression expression);
boolean visitIsNull(EJBQLExpression expression, int finishedChildIndex);
boolean visitLength(EJBQLExpression expression, int finishedChildIndex);
/**
* Called on visiting "<=" expression and also after visiting every expression child.
*
* @param expression an "<=" node being visited.
* @param finishedChildIndex "-1" when the expression node is visited for the first
* time, before its children; otherwise this is an index of a child just
* visited.
*/
boolean visitLessOrEqual(EJBQLExpression expression, int finishedChildIndex);
/**
* Called on visiting "<" expression and also after visiting every expression child.
*
* @param expression an "<" node being visited.
* @param finishedChildIndex "-1" when the expression node is visited for the first
* time, before its children; otherwise this is an index of a child just
* visited.
*/
boolean visitLessThan(EJBQLExpression expression, int finishedChildIndex);
/**
* Called on visiting "LIKE" expression and also after visiting every expression
* child.
*
* @param expression an "LIKE" node being visited.
* @param finishedChildIndex "-1" when the expression node is visited for the first
* time, before its children; otherwise this is an index of a child just
* visited.
*/
boolean visitLike(EJBQLExpression expression, int finishedChildIndex);
boolean visitLocate(EJBQLExpression expression, int finishedChildIndex);
boolean visitLower(EJBQLExpression expression, int finishedChildIndex);
boolean visitMax(EJBQLAggregateColumn expression);
boolean visitMemberOf(EJBQLExpression expression);
boolean visitMin(EJBQLAggregateColumn expression);
boolean visitMod(EJBQLExpression expression, int finishedChildIndex);
/**
* Called on visiting "*" expression and also after visiting every expression child.
*
* @param expression an "*" node being visited.
* @param finishedChildIndex "-1" when the expression node is visited for the first
* time, before its children; otherwise this is an index of a child just
* visited.
*/
boolean visitMultiply(EJBQLExpression expression, int finishedChildIndex);
/**
* <p>This method is invoked from the processing of the
* {@link org.apache.cayenne.ejbql.parser.EJBQLIn} in order to handle a query such
* as;</p>
*
* <div><code>p.toArtist IN (:artists)</code></div>
*/
boolean visitNamedInputParameterForIn(EJBQLExpression expression);
boolean visitNamedInputParameter(EJBQLExpression expression);
boolean visitNegative(EJBQLExpression expression);
boolean visitNot(EJBQLExpression expression);
/**
* Called on visiting "!=" expression and also after visiting every expression child.
*
* @param expression an "!=" node being visited.
* @param finishedChildIndex "-1" when the expression node is visited for the first
* time, before its children; otherwise this is an index of a child just
* visited.
*/
boolean visitNotEquals(EJBQLExpression expression, int finishedChildIndex);
/**
* Called on visiting "or" expression and also after visiting every expression child.
*
* @param expression an "or" node being visited.
* @param finishedChildIndex "-1" when the expression node is visited for the first
* time, before its children; otherwise this is an index of a child just
* visited.
*/
boolean visitOr(EJBQLExpression expression, int finishedChildIndex);
boolean visitOrderBy(EJBQLExpression expression);
boolean visitOrderByItem(EJBQLExpression expression);
boolean visitOuterFetchJoin(EJBQLJoin join);
boolean visitOuterJoin(EJBQLJoin join);
/**
* Called on visiting "path" expression and also after visiting every expression
* child.
*
* @param expression a "path" node being visited.
* @param finishedChildIndex "-1" when the expression node is visited for the first
* time, before its children; otherwise this is an index of a child just
* visited.
*/
boolean visitPath(EJBQLExpression expression, int finishedChildIndex);
boolean visitDbPath(EJBQLExpression expression, int finishedChildIndex);
boolean visitPatternValue(EJBQLExpression expression);
/**
* <p>This method is invoked from the processing of the
* {@link org.apache.cayenne.ejbql.parser.EJBQLIn} in order to handle a query such
* as;</p>
*
* <div><code>p.toArtist IN (?1)</code></div>
*/
boolean visitPositionalInputParameterForIn(EJBQLPositionalInputParameter expression);
boolean visitPositionalInputParameter(EJBQLPositionalInputParameter expression);
boolean visitSelect(EJBQLExpression expression);
boolean visitSelectClause(EJBQLExpression expression);
boolean visitSelectExpression(EJBQLExpression expression);
boolean visitSelectExpressions(EJBQLExpression expression);
boolean visitSize(EJBQLExpression expression);
boolean visitSqrt(EJBQLExpression expression, int finishedChildIndex);
boolean visitStringLiteral(EJBQLExpression expression);
boolean visitSubselect(EJBQLExpression expression);
boolean visitSubstring(EJBQLExpression expression, int finishedChildIndex);
/**
* Called on visiting "subtract" expression and also after visiting every expression
* child.
*
* @param expression an "subtract" node being visited.
* @param finishedChildIndex "-1" when the expression node is visited for the first
* time, before its children; otherwise this is an index of a child just
* visited.
*/
boolean visitSubtract(EJBQLExpression expression, int finishedChildIndex);
boolean visitSum(EJBQLAggregateColumn expression);
boolean visitTok(EJBQLExpression expression);
boolean visitTrim(EJBQLExpression expression, int finishedChildIndex);
boolean visitTrimBoth(EJBQLExpression expression);
boolean visitTrimCharacter(EJBQLExpression expression);
boolean visitTrimLeading(EJBQLExpression expression);
boolean visitTrimTrailing(EJBQLExpression expression);
boolean visitUpdate(EJBQLExpression expression);
boolean visitUpdateField(EJBQLExpression expression, int finishedChildIndex);
boolean visitUpdateItem(EJBQLExpression expression, int finishedChildIndex);
boolean visitUpdateValue(EJBQLExpression expression);
boolean visitUpper(EJBQLExpression expression, int finishedChildIndex);
boolean visitWhere(EJBQLExpression expression);
}