blob: 1ac1a42fa9825807bb9a8f1eb2ca8ea724add1ca [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
<<<<<<< Updated upstream
*
* 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
=======
*
* 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
>>>>>>> Stashed changes
* limitations under the License.
*/
package javax.jdo;
import java.io.Serializable;
import javax.jdo.query.BooleanExpression;
import javax.jdo.query.CharacterExpression;
import javax.jdo.query.CollectionExpression;
import javax.jdo.query.DateExpression;
import javax.jdo.query.DateTimeExpression;
import javax.jdo.query.Expression;
import javax.jdo.query.NumericExpression;
import javax.jdo.query.PersistableExpression;
import javax.jdo.query.StringExpression;
import javax.jdo.query.TimeExpression;
/**
* Interface for a type-safe subquery, using a fluent API. Users should call methods on the subquery
* instance and end with a select of what the subquery returns; this returns the expression that
* they use to link it with the owning query.
*
* @param <T> (Candidate) type being represented
*/
public interface JDOQLTypedSubquery<T> extends Serializable {
/**
* Method to return an expression for the candidate of the subquery. Cast the returned expression
* to the candidate "Q" type to be able to call methods on it.
*
* @return Expression for the candidate
*/
PersistableExpression<T> candidate();
/**
* Method to set the filter of the query.
*
* @param expr Filter expression
* @return The query
*/
JDOQLTypedSubquery<T> filter(BooleanExpression expr);
/**
* Method to set the grouping(s) for the query.
*
* @param exprs Grouping expression(s)
* @return The query
*/
JDOQLTypedSubquery<T> groupBy(Expression<?>... exprs);
/**
* Method to set the having clause of the query.
*
* @param expr Having expression
* @return The query
*/
JDOQLTypedSubquery<T> having(Expression<?> expr);
/**
* Accessor for the subquery (numeric) expression from the subquery when the subquery returns a
* single value.
*
* @param expr The expression
* @return Expression for the typesafe query
* @param <S> numeric type
*/
<S> NumericExpression<S> selectUnique(NumericExpression<S> expr);
/**
* Accessor for the subquery (string) expression from the subquery when the subquery returns a
* single value.
*
* @param expr The expression
* @return Expression for the typesafe query
*/
StringExpression selectUnique(StringExpression expr);
/**
* Accessor for the subquery (date) expression from the subquery when the subquery returns a
* single value.
*
* @param expr The expression
* @return Expression for the typesafe query
*/
DateExpression selectUnique(DateExpression expr);
/**
* Accessor for the subquery (datetime) expression from the subquery when the subquery returns a
* single value.
*
* @param expr The expression
* @return Expression for the typesafe query
*/
DateTimeExpression selectUnique(DateTimeExpression expr);
/**
* Accessor for the subquery (time) expression from the subquery when the subquery returns a
* single value.
*
* @param expr The expression
* @return Expression for the typesafe query
*/
TimeExpression selectUnique(TimeExpression expr);
/**
* Accessor for the subquery (character) expression from the subquery when the subquery returns a
* single value.
*
* @param expr The expression
* @return Expression for the typesafe query
*/
CharacterExpression selectUnique(CharacterExpression expr);
/**
* Accessor for the subquery (collection) expression from the subquery.
*
* @param expr The expression
* @return Expression for the typesafe query
*/
CollectionExpression<?, ?> select(CollectionExpression<?, ?> expr);
}