/*
 * Copyright (c) 2006, 2020 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0,
 * or the Eclipse Distribution License v. 1.0 which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
 */

// Contributors:
//     Oracle - initial API and implementation
//
package org.eclipse.persistence.jpa.jpql.parser;

/**
 * This interface is used to traverse the JPQL parsed tree. It follows the Visitor pattern. It visits
 * the concrete instances of {@link Expression}.
 * <p>
 * Provisional API: This interface is part of an interim API that is still under development and
 * expected to change significantly before reaching stability. It is available at this early stage
 * to solicit feedback from pioneering adopters on the understanding that any code that uses this
 * API will almost certainly be broken (repeatedly) as the API evolves.
 *
 * @version 2.4
 * @since 2.3
 * @author Pascal Filion
 */
public interface ExpressionVisitor {

    /**
     * Visits the {@link AbsExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(AbsExpression expression);

    /**
     * Visits the {@link AbstractSchemaName} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(AbstractSchemaName expression);

    /**
     * Visits the {@link AdditionExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(AdditionExpression expression);

    /**
     * Visits the {@link AllOrAnyExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(AllOrAnyExpression expression);

    /**
     * Visits the {@link AndExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(AndExpression expression);

    /**
     * Visits the {@link ArithmeticFactor} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(ArithmeticFactor expression);

    /**
     * Visits the {@link AvgFunction} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(AvgFunction expression);

    /**
     * Visits the {@link BadExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(BadExpression expression);

    /**
     * Visits the {@link BetweenExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(BetweenExpression expression);

    /**
     * Visits the {@link CaseExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(CaseExpression expression);

    /**
     * Visits the {@link CoalesceExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(CoalesceExpression expression);

    /**
     * Visits the {@link CollectionExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(CollectionExpression expression);

    /**
     * Visits the {@link CollectionMemberDeclaration} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(CollectionMemberDeclaration expression);

    /**
     * Visits the {@link CollectionMemberExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(CollectionMemberExpression expression);

    /**
     * Visits the {@link CollectionValuedPathExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(CollectionValuedPathExpression expression);

    /**
     * Visits the {@link ComparisonExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(ComparisonExpression expression);

    /**
     * Visits the {@link ConcatExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(ConcatExpression expression);

    /**
     * Visits the {@link ConstructorExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(ConstructorExpression expression);

    /**
     * Visits the {@link CountFunction} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(CountFunction expression);

    /**
     * Visits the {@link DateTime} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(DateTime expression);

    /**
     * Visits the {@link DeleteClause} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(DeleteClause expression);

    /**
     * Visits the {@link DeleteStatement} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(DeleteStatement expression);

    /**
     * Visits the {@link DivisionExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(DivisionExpression expression);

    /**
     * Visits the {@link EmptyCollectionComparisonExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(EmptyCollectionComparisonExpression expression);

    /**
     * Visits the {@link EntityTypeLiteral} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(EntityTypeLiteral expression);

    /**
     * Visits the {@link EntryExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(EntryExpression expression);

    /**
     * Visits the {@link ExistsExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(ExistsExpression expression);

    /**
     * Visits the {@link FromClause} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(FromClause expression);

    /**
     * Visits the {@link FunctionExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(FunctionExpression expression);

    /**
     * Visits the {@link GroupByClause} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(GroupByClause expression);

    /**
     * Visits the {@link HavingClause} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(HavingClause expression);

    /**
     * Visits the {@link IdentificationVariable} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(IdentificationVariable expression);

    /**
     * Visits the {@link IdentificationVariableDeclaration} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(IdentificationVariableDeclaration expression);

    /**
     * Visits the {@link IndexExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(IndexExpression expression);

    /**
     * Visits the {@link InExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(InExpression expression);

    /**
     * Visits the {@link InputParameter} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(InputParameter expression);

    /**
     * Visits the {@link Join} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(Join expression);

    /**
     * Visits the {@link JPQLExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(JPQLExpression expression);

    /**
     * Visits the {@link KeyExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(KeyExpression expression);

    /**
     * Visits the {@link KeywordExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(KeywordExpression expression);

    /**
     * Visits the {@link LengthExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(LengthExpression expression);

    /**
     * Visits the {@link LikeExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(LikeExpression expression);

    /**
     * Visits the {@link LocateExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(LocateExpression expression);

    /**
     * Visits the {@link LowerExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(LowerExpression expression);

    /**
     * Visits the {@link MaxFunction} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(MaxFunction expression);

    /**
     * Visits the {@link MinFunction} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(MinFunction expression);

    /**
     * Visits the {@link ModExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(ModExpression expression);

    /**
     * Visits the {@link MultiplicationExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(MultiplicationExpression expression);

    /**
     * Visits the {@link NotExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(NotExpression expression);

    /**
     * Visits the {@link NullComparisonExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(NullComparisonExpression expression);

    /**
     * Visits the {@link NullExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(NullExpression expression);

    /**
     * Visits the {@link NullIfExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(NullIfExpression expression);

    /**
     * Visits the {@link NumericLiteral} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(NumericLiteral expression);

    /**
     * Visits the {@link ObjectExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(ObjectExpression expression);

    /**
     * Visits the {@link OnClause} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(OnClause expression);

    /**
     * Visits the {@link OrderByClause} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(OrderByClause expression);

    /**
     * Visits the {@link OrderByItem} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(OrderByItem expression);

    /**
     * Visits the {@link OrExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(OrExpression expression);

    /**
     * Visits the {@link RangeVariableDeclaration} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(RangeVariableDeclaration expression);

    /**
     * Visits the {@link ResultVariable} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(ResultVariable expression);

    /**
     * Visits the {@link SelectClause} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(SelectClause expression);

    /**
     * Visits the {@link SelectStatement} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(SelectStatement expression);

    /**
     * Visits the {@link SimpleFromClause} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(SimpleFromClause expression);

    /**
     * Visits the {@link SimpleSelectClause} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(SimpleSelectClause expression);

    /**
     * Visits the {@link SimpleSelectStatement} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(SimpleSelectStatement expression);

    /**
     * Visits the {@link SizeExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(SizeExpression expression);

    /**
     * Visits the {@link SqrtExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(SqrtExpression expression);

    /**
     * Visits the {@link StateFieldPathExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(StateFieldPathExpression expression);

    /**
     * Visits the {@link StringLiteral} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(StringLiteral expression);

    /**
     * Visits the {@link SubExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(SubExpression expression);

    /**
     * Visits the {@link SubstringExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(SubstringExpression expression);

    /**
     * Visits the {@link SubtractionExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(SubtractionExpression expression);

    /**
     * Visits the {@link SumFunction} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(SumFunction expression);

    /**
     * Visits the {@link TreatExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(TreatExpression expression);

    /**
     * Visits the {@link TrimExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(TrimExpression expression);

    /**
     * Visits the {@link TypeExpression} expression.
     *
     * @param expression The {@link Expression} to visit
     */
    void visit(TypeExpression expression);

    /**
     * Visits the {@link UnknownExpression} expression.
     *
     * @param expression The {@link UnknownExpression} to visit
     */
    void visit(UnknownExpression expression);

    /**
     * Visits the {@link UpdateClause} expression.
     *
     * @param expression The {@link UpdateClause} to visit
     */
    void visit(UpdateClause expression);

    /**
     * Visits the {@link UpdateItem} expression.
     *
     * @param expression The {@link UpdateItem} to visit
     */
    void visit(UpdateItem expression);

    /**
     * Visits the {@link UpdateStatement} expression.
     *
     * @param expression The {@link UpdateStatement} to visit
     */
    void visit(UpdateStatement expression);

    /**
     * Visits the {@link UpperExpression} expression.
     *
     * @param expression The {@link UpperExpression} to visit
     */
    void visit(UpperExpression expression);

    /**
     * Visits the {@link ValueExpression} expression.
     *
     * @param expression The {@link ValueExpression} to visit
     */
    void visit(ValueExpression expression);

    /**
     * Visits the {@link WhenClause} expression.
     *
     * @param expression The {@link WhenClause} to visit
     */
    void visit(WhenClause expression);

    /**
     * Visits the {@link WhereClause} expression.
     *
     * @param expression The {@link WhereClause} to visit
     */
    void visit(WhereClause expression);
}
