/*
* Copyright 2016, Red Hat Inc. and/or its affiliates.
*
* Licensed 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.infinispan.objectfilter.impl.ql;
import java.util.List;
import org.antlr.runtime.tree.Tree;
/**
* Defines hooks for implementing custom logic when walking the parse tree of a JPQL query.
*
* @author Gunnar Morling
* @author Adrian Nistor
* @since 9.0
*/
public interface QueryRendererDelegate<TypeDescriptor> {
void registerPersisterSpace(String entityName, Tree aliasTree);
void registerJoinAlias(Tree aliasTree, PropertyPath<TypeDescriptor> path);
boolean isUnqualifiedPropertyReference();
boolean isPersisterReferenceAlias();
void activateFromStrategy(JoinType joinType, Tree associationFetchTree, Tree propertyFetchTree, Tree aliasTree);
void activateSelectStrategy();
void activateWhereStrategy();
void activateGroupByStrategy();
void activateHavingStrategy();
void activateOrderByStrategy();
void deactivateStrategy();
void activateOR();
void activateAND();
void activateNOT();
void deactivateBoolean();
void predicateLess(String value);
void predicateLessOrEqual(String value);
void predicateEquals(String value);
void predicateNotEquals(String value);
void predicateGreaterOrEqual(String value);
void predicateGreater(String value);
void predicateBetween(String lowerValue, String upperValue);
void predicateIn(List<String> values);
void predicateLike(String patternValue, Character escapeCharacter);
void predicateIsNull();
void predicateConstantBoolean(boolean booleanConstant);
void predicateFullTextTerm(String term, String fuzzyFlop);
void predicateFullTextRegexp(String term);
void predicateFullTextRange(boolean includeLower, String lower, String upper, boolean includeUpper);
enum Occur {
MUST("+"),
FILTER("#"),
SHOULD(""),
MUST_NOT("-");
private final String operator;
Occur(String operator) {
this.operator = operator;
}
public String getOperator() {
return operator;
}
}
void activateFullTextOccur(Occur occur);
void deactivateFullTextOccur();
void activateFullTextBoost(float boost);
void deactivateFullTextBoost();
void activateAggregation(AggregationFunction aggregationFunction);
void deactivateAggregation();
/**
* @param collateName optional collation name
*/
void groupingValue(String collateName);
/**
* Sets the sort direction, either "asc" or "desc", for the current property. The property was previously
* specified by {@link #setPropertyPath(PropertyPath)}
*
* @param collateName optional collation name
* @param isAscending indicates if sorting is ascending or descending
*/
void sortSpecification(String collateName, boolean isAscending);
/**
* Sets a property path representing one property in the SELECT, GROUP BY, WHERE or HAVING clause of a given query.
*
* @param propertyPath the property path to set
*/
void setPropertyPath(PropertyPath<TypeDescriptor> propertyPath);
}