/***************************************************************** * 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.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); }