/* * Copyright 2015, The Querydsl Team (http://www.querydsl.com/team) * * 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 com.querydsl.sql; import com.querydsl.core.JoinFlag; import com.querydsl.core.Query; import com.querydsl.core.QueryFlag.Position; import com.querydsl.core.types.*; /** * {@code SQLCommonQuery} is a common interface for SQLQuery and SQLSubQuery * * @author tiwe * * @param <Q> concrete type */ public interface SQLCommonQuery<Q extends SQLCommonQuery<Q>> extends Query<Q> { /** * Add the given Expression as a query flag * * @param position position * @param flag query flag * @return the current object */ Q addFlag(Position position, Expression<?> flag); /** * Add the given String literal as query flag * * @param position position * @param flag query flag * @return the current object */ Q addFlag(Position position, String flag); /** * Add the given prefix and expression as a general query flag * * @param position position of the flag * @param prefix prefix for the flag * @param expr expression of the flag * @return the current object */ Q addFlag(Position position, String prefix, Expression<?> expr); /** * Add the given String literal as a join flag to the last added join with the * position BEFORE_TARGET * * @param flag join flag * @return the current object */ Q addJoinFlag(String flag); /** * Add the given String literal as a join flag to the last added join * * @param flag join flag * @param position position * @return the current object */ Q addJoinFlag(String flag, JoinFlag.Position position); /** * Defines the sources of the query * * @param o from * @return the current object */ Q from(Expression<?>... o); /** * Adds a sub query source * * @param subQuery sub query * @param alias alias * @return the current object */ Q from(SubQueryExpression<?> subQuery, Path<?> alias); /** * Adds a full join to the given target * * @param o full join target * @return the current object */ Q fullJoin(EntityPath<?> o); /** * Adds a full join to the given target * * @param <E> * @param o full join target * @param alias alias * @return the current object */ <E> Q fullJoin(EntityPath<E> o, Path<E> alias); /** * Adds a full join to the given target * * @param <E> * @param o full join target * @param alias alias * @return the current object */ <E> Q fullJoin(RelationalFunctionCall<E> o, Path<E> alias); /** * Adds a full join to the given target * * @param <E> * @param key foreign key for join * @param entity join target * @return the current object */ <E> Q fullJoin(ForeignKey<E> key, RelationalPath<E> entity); /** * Adds a full join to the given target * * @param o subquery * @param alias alias * @return the current object */ Q fullJoin(SubQueryExpression<?> o, Path<?> alias); /** * Adds an inner join to the given target * * @param o * @return the current object */ Q innerJoin(EntityPath<?> o); /** * Adds an inner join to the given target * * @param <E> * @param o inner join target * @param alias alias * @return the current object */ <E> Q innerJoin(EntityPath<E> o, Path<E> alias); /** * Adds a inner join to the given target * * @param <E> * @param o relational function call * @param alias alias * @return the current object */ <E> Q innerJoin(RelationalFunctionCall<E> o, Path<E> alias); /** * Adds an inner join to the given target * * @param <E> * @param foreign foreign key to use for join * @param entity join target * @return the current object */ <E> Q innerJoin(ForeignKey<E> foreign, RelationalPath<E> entity); /** * Adds an inner join to the given target * * @param o subquery * @param alias alias * @return the current object */ Q innerJoin(SubQueryExpression<?> o, Path<?> alias); /** * Adds a join to the given target * * @param o join target * @return the current object */ Q join(EntityPath<?> o); /** * Adds a join to the given target * * @param <E> * @param o join target * @param alias alias * @return the current object */ <E> Q join(EntityPath<E> o, Path<E> alias); /** * Adds a join to the given target * * @param <E> * @param o join target * @param alias alias * @return the current object */ <E> Q join(RelationalFunctionCall<E> o, Path<E> alias); /** * Adds a join to the given target * * @param <E> * @param foreign foreign key to use for join * @param entity join target * @return the current object */ <E> Q join(ForeignKey<E> foreign, RelationalPath<E> entity); /** * Adds a join to the given target * * @param o subquery * @param alias alias * @return the current object */ Q join(SubQueryExpression<?> o, Path<?> alias); /** * Adds a left join to the given target * * @param o join target * @return the current object */ Q leftJoin(EntityPath<?> o); /** * Adds a left join to the given target * * @param <E> * @param o left join target * @param alias alias * @return the current object */ <E> Q leftJoin(EntityPath<E> o, Path<E> alias); /** * Adds a left join to the given target * * @param <E> * @param o relational function call * @param alias alias * @return the current object */ <E> Q leftJoin(RelationalFunctionCall<E> o, Path<E> alias); /** * Adds a left join to the given target * * @param <E> * @param foreign foreign key to use for join * @param entity join target * @return the current object */ <E> Q leftJoin(ForeignKey<E> foreign, RelationalPath<E> entity); /** * Adds a left join to the given target * * @param o subquery * @param alias alias * @return the current object */ Q leftJoin(SubQueryExpression<?> o, Path<?> alias); /** * Defines a filter to the last added join * * @param conditions join conditions * @return the current object */ Q on(Predicate... conditions); /** * Adds a right join to the given target * * @param o join target * @return the current object */ Q rightJoin(EntityPath<?> o); /** * Adds a right join to the given target * * @param <E> * @param o right join target * @param alias alias * @return the current object */ <E> Q rightJoin(EntityPath<E> o, Path<E> alias); /** * Adds a full join to the given target * * @param <E> * @param o relational function call * @param alias alias * @return the current object */ <E> Q rightJoin(RelationalFunctionCall<E> o, Path<E> alias); /** * Adds a right join to the given target * * @param <E> * @param foreign foreign key to use for join * @param entity join target * @return the current object */ <E> Q rightJoin(ForeignKey<E> foreign, RelationalPath<E> entity); /** * Adds a right join to the given target * * @param o subquery * @param alias alias * @return the current object */ Q rightJoin(SubQueryExpression<?> o, Path<?> alias); /** * Adds a common table expression * * <p>Usage</p> * <pre> * query.with(alias, subQuery) * .from(...) * </pre> * * @param alias alias for query * @param o subquery * @return the current object */ Q with(Path<?> alias, SubQueryExpression<?> o); /** * Adds a common table expression * * <p>Usage</p> * <pre> * query.with(alias, subQuery) * .from(...) * </pre> * * @param alias alias for query * @param query subquery * @return the current object */ Q with(Path<?> alias, Expression<?> query); /** * Adds a common table expression * * <p>Usage</p> * <pre> * query.with(alias, columns...).as(subQuery) * .from(...) * </pre> * * @param alias alias for query * @param columns columns to use * @return the current object */ WithBuilder<Q> with(Path<?> alias, Path<?>... columns); /** * Adds a common table expression * * <p>Usage</p> * <pre> * query.withRecursive(alias, subQuery) * .from(...) * </pre> * * @param alias alias for query * @param o subquery * @return the current object */ Q withRecursive(Path<?> alias, SubQueryExpression<?> o); /** * Adds a common table expression * * <p>Usage</p> * <pre> * query.withRecursive(alias, subQuery) * .from(...) * </pre> * * @param alias alias for query * @param query subquery * @return the current object */ Q withRecursive(Path<?> alias, Expression<?> query); /** * Adds a common table expression * * <p>Usage</p> * <pre> * query.withRecursive(alias, columns...).as(subQuery) * .from(...) * </pre> * * @param alias alias for query * @param columns columns to use * @return builder for with part */ WithBuilder<Q> withRecursive(Path<?> alias, Path<?>... columns); }