package io.ebeaninternal.server.query;

import io.ebean.Version;
import io.ebean.bean.EntityBean;
import io.ebean.core.type.ScalarType;
import io.ebeaninternal.api.SpiQuery;
import io.ebeaninternal.server.deploy.DbReadContext;
import io.ebeaninternal.server.deploy.DbSqlContext;

import java.util.List;
import java.util.Set;

Join to Many (or child of a many) to support where clause predicates on many properties.
/** * Join to Many (or child of a many) to support where clause predicates on many properties. */
class SqlTreeNodeFormulaWhereJoin implements SqlTreeNode { private final STreeProperty nodeBeanProp;
The many where join which is either INNER or OUTER.
/** * The many where join which is either INNER or OUTER. */
private final SqlJoinType manyJoinType; SqlTreeNodeFormulaWhereJoin(STreeProperty prop, SqlJoinType manyJoinType) { this.nodeBeanProp = prop; this.manyJoinType = manyJoinType; } @Override public boolean isSingleProperty() { return true; } @Override public ScalarType<?> getSingleAttributeReader() { throw new IllegalStateException("No expected"); } @Override public void addAsOfTableAlias(SpiQuery<?> query) { // do nothing here ... } @Override public void addSoftDeletePredicate(SpiQuery<?> query) { // do nothing here ... } @Override public boolean isAggregation() { return false; } @Override public void appendDistinctOn(DbSqlContext ctx, boolean subQuery) { // do nothing here ... } @Override public void appendGroupBy(DbSqlContext ctx, boolean subQuery) { // do nothing here }
Append to the FROM clause for this node.
/** * Append to the FROM clause for this node. */
@Override public void appendFrom(DbSqlContext ctx, SqlJoinType currentJoinType) { // always use the join type as per this many where join // (OUTER for disjunction and otherwise INNER) nodeBeanProp.appendFrom(ctx, manyJoinType); } @Override public void dependentTables(Set<String> tables) { // FIXME: we cannot easily determine the dependent tables this would require an enhancement // of the @Formula(dependentTables=...) annotation } @Override public void buildRawSqlSelectChain(List<String> selectChain) { // nothing to add } @Override public void appendSelect(DbSqlContext ctx, boolean subQuery) { // nothing to do here } @Override public void appendWhere(DbSqlContext ctx) { // nothing to do here } @Override public EntityBean load(DbReadContext ctx, EntityBean localBean, EntityBean parentBean) { // nothing to do here return null; } @Override public <T> Version<T> loadVersion(DbReadContext ctx) { // nothing to do here return null; } @Override public boolean hasMany() { return true; } }