@SuppressWarnings({ "unchecked" }) private void renderJoins( StringBuilder jpaqlQuery, RenderingContext renderingContext, Collection<Join<?,?>> joins) { if ( joins == null ) { return; } for ( Join join : joins ) { ( (FromImplementor) join ).prepareAlias( renderingContext ); jpaqlQuery.append( renderJoinType( join.getJoinType() ) ) .append( ( (FromImplementor) join ).renderTableExpression( renderingContext ) ); renderJoins( jpaqlQuery, renderingContext, join.getJoins() ); renderFetches( jpaqlQuery, renderingContext, join.getFetches() ); } }
/** * Returns an existing join for the given attribute if one already exists or creates a new one if not. * * @param from the {@link From} to get the current joins from. * @param attribute the {@link Attribute} to look for in the current joins. * @return will never be {@literal null}. */ private static Join<?, ?> getOrCreateJoin(From<?, ?> from, String attribute) { for (Join<?, ?> join : from.getJoins()) { boolean sameName = join.getAttribute().getName().equals(attribute); if (sameName && join.getJoinType().equals(JoinType.LEFT)) { return join; } } return from.join(attribute, JoinType.LEFT); }
private <T> void useDistinctWhenLefOuterJoinsPresent(CriteriaQuery<T> criteriaQuery) { boolean useDistinct = false; Root<TaskImpl> taskRoot = null; ROOTS_FOR: for( Root root : criteriaQuery.getRoots() ) { if( TaskImpl.class.equals(root.getJavaType()) ) { taskRoot = (Root<TaskImpl>) root; for( Join<TaskImpl, ?> taskJoin : taskRoot.getJoins() ) { if( PeopleAssignmentsImpl.class.equals(taskJoin.getJavaType()) ) { Join<TaskImpl, PeopleAssignmentsImpl> peopleAssignJoin = (Join<TaskImpl, PeopleAssignmentsImpl>) taskJoin; if( JoinType.LEFT.equals(peopleAssignJoin.getJoinType()) ) { useDistinct = true; break ROOTS_FOR; } for( Join peopleAssignJoinJoin : peopleAssignJoin.getJoins() ) { if( JoinType.LEFT.equals(peopleAssignJoinJoin.getJoinType()) ) { useDistinct = true; break ROOTS_FOR; } } } } } } if( useDistinct ) { criteriaQuery.distinct(true); } }
if( join.getAttribute().equals(parentJoinAttr) ) { fieldParentJoin = (Join<F, T>) join; if( ! JoinType.INNER.equals(fieldParentJoin.getJoinType()) ) {
@Override public JoinType getJoinType() { return join.getJoinType(); }
static FromImpl getMembers(PathImpl join, java.util.List<Members.Member> members, java.util.List<JoinType> jts) { PathImpl parent = (PathImpl) join.getParentPath(); Members.Member member = join.getMember(); JoinType jt = ((Join) join).getJoinType(); FromImpl<?, ?> from = null; if (parent instanceof RootImpl) { members.add(member); jts.add(jt); return (FromImpl) parent; } else { from = getMembers(parent, members, jts); } members.add(member); jts.add(jt); return from; }
static FromImpl getMembers(PathImpl join, java.util.List<Members.Member> members, java.util.List<JoinType> jts) { PathImpl parent = (PathImpl) join.getParentPath(); Members.Member member = join.getMember(); JoinType jt = ((Join) join).getJoinType(); FromImpl<?, ?> from = null; if (parent instanceof RootImpl) { members.add(member); jts.add(jt); return (FromImpl) parent; } else { from = getMembers(parent, members, jts); } members.add(member); jts.add(jt); return from; }
static FromImpl getMembers(PathImpl join, java.util.List<Members.Member> members, java.util.List<JoinType> jts) { PathImpl parent = (PathImpl) join.getParentPath(); Members.Member member = join.getMember(); JoinType jt = ((Join) join).getJoinType(); FromImpl<?, ?> from = null; if (parent instanceof RootImpl) { members.add(member); jts.add(jt); return (FromImpl) parent; } else { from = getMembers(parent, members, jts); } members.add(member); jts.add(jt); return from; }
static FromImpl getMembers(PathImpl join, java.util.List<Members.Member> members, java.util.List<JoinType> jts) { PathImpl parent = (PathImpl) join.getParentPath(); Members.Member member = join.getMember(); JoinType jt = ((Join) join).getJoinType(); FromImpl<?, ?> from = null; if (parent instanceof RootImpl) { members.add(member); jts.add(jt); return (FromImpl) parent; } else { from = getMembers(parent, members, jts); } members.add(member); jts.add(jt); return from; }
private Join<?,?> reuseJoin(From<?, ?> path, String fieldName, boolean outer) { for (Join<?,?> join : path.getJoins()) { if (join.getAttribute().getName().equals(fieldName)) { if ((join.getJoinType() == JoinType.LEFT) == outer) { logger.debug("Reusing existing join for field " + fieldName); return join; } } } return outer ? path.join(fieldName, JoinType.LEFT) : path.join(fieldName); }
private Join<?,?> reuseJoin(From<?, ?> path, String fieldName, boolean outer) { for (Join<?,?> join : path.getJoins()) { if (join.getAttribute().getName().equals(fieldName)) { if ((join.getJoinType() == JoinType.LEFT) == outer) { //logger.debug("Reusing existing join for field " + fieldName); return join; } } } return outer ? path.join(fieldName, JoinType.LEFT) : path.join(fieldName); }
/** * Returns an existing join for the given attribute if one already exists or creates a new one if not. * * @param from the {@link From} to get the current joins from. * @param attribute the {@link Attribute} to look for in the current joins. * @return will never be {@literal null}. */ private static Join<?, ?> getOrCreateJoin(From<?, ?> from, String attribute) { for (Join<?, ?> join : from.getJoins()) { boolean sameName = join.getAttribute().getName().equals(attribute); if (sameName && join.getJoinType().equals(JoinType.LEFT)) { return join; } } return from.join(attribute, JoinType.LEFT); }
protected void traversePath(PathImpl<?,?> parent, org.apache.openjpa.kernel.exps.Path path, FieldMetaData fmd) { boolean allowNull = parent == null ? false : parent instanceof Join && ((Join<?,?>)parent).getJoinType() != JoinType.INNER; FieldMetaData fmd1 = parent._member == null ? null : parent._member.fmd; PathImpl<?,?> parent1 = parent._parent; if (parent1 == null || parent1.getCorrelatedPath() != null) { if (fmd != null) path.get(fmd, allowNull); return; } traversePath(parent1, path, fmd1); if (fmd != null) path.get(fmd, allowNull); }
protected void traversePath(PathImpl<?,?> parent, org.apache.openjpa.kernel.exps.Path path, FieldMetaData fmd) { boolean allowNull = parent == null ? false : parent instanceof Join && ((Join<?,?>)parent).getJoinType() != JoinType.INNER; FieldMetaData fmd1 = parent._member == null ? null : parent._member.fmd; PathImpl<?,?> parent1 = parent._parent; if (parent1 == null || parent1.getCorrelatedPath() != null) { if (fmd != null) path.get(fmd, allowNull); return; } traversePath(parent1, path, fmd1); if (fmd != null) path.get(fmd, allowNull); }
protected void traversePath(PathImpl<?,?> parent, org.apache.openjpa.kernel.exps.Path path, FieldMetaData fmd) { boolean allowNull = parent == null ? false : parent instanceof Join && ((Join<?,?>)parent).getJoinType() != JoinType.INNER; FieldMetaData fmd1 = parent._member == null ? null : parent._member.fmd; PathImpl<?,?> parent1 = parent._parent; if (parent1 == null || parent1.getCorrelatedPath() != null) { if (fmd != null) path.get(fmd, allowNull); return; } traversePath(parent1, path, fmd1); if (fmd != null) path.get(fmd, allowNull); }
protected void traversePath(PathImpl<?,?> parent, org.apache.openjpa.kernel.exps.Path path, FieldMetaData fmd) { boolean allowNull = parent == null ? false : parent instanceof Join && ((Join<?,?>)parent).getJoinType() != JoinType.INNER; FieldMetaData fmd1 = parent._member == null ? null : parent._member.fmd; PathImpl<?,?> parent1 = parent._parent; if (parent1 == null || parent1.getCorrelatedPath() != null) { if (fmd != null) path.get(fmd, allowNull); return; } traversePath(parent1, path, fmd1); if (fmd != null) path.get(fmd, allowNull); }
@SuppressWarnings({ "unchecked" }) private void renderJoins( StringBuilder jpaqlQuery, CriteriaQueryCompiler.RenderingContext renderingContext, Collection<Join<?,?>> joins) { if ( joins == null ) { return; } for ( Join join : joins ) { ( (FromImplementor) join ).prepareAlias( renderingContext ); jpaqlQuery.append( renderJoinType( join.getJoinType() ) ) .append( ( (FromImplementor) join ).renderTableExpression( renderingContext ) ); renderJoins( jpaqlQuery, renderingContext, join.getJoins() ); renderFetches( jpaqlQuery, renderingContext, join.getFetches() ); } }
/** * Correlates a join object of the enclosing query to a join object of the * subquery and returns the subquery join object. * * @param parentJoin * join target of the containing query * @return subquery join */ public <X, Y> Join<X, Y> correlate(Join<X, Y> parentJoin){ this.correlatedJoins.add(parentJoin); JoinImpl join = new JoinImpl(parentJoin.getParentPath(), metamodel.managedType(parentJoin.getModel().getBindableJavaType()), metamodel, parentJoin.getJavaType(), internalCorrelate((FromImpl) parentJoin), parentJoin.getModel(), parentJoin.getJoinType(), (FromImpl) parentJoin); return join; } /**
private static boolean isLeftOrNonNullReferenceJoin(Join<?, ?> join, boolean dbSchemaStrict) { if (join.getAttribute().isCollection()) { return false; } if (join.getJoinType() == JoinType.LEFT) { return true; } if (!dbSchemaStrict) { return false; } SingularAttribute<?, ?> singularAttribute = (SingularAttribute<?, ?>)join.getAttribute(); return !singularAttribute.isOptional() && singularAttribute.getPersistentAttributeType() == PersistentAttributeType.MANY_TO_ONE; } }
/** * Copy Joins * * @param from source Join * @param to destination Join */ public static void copyJoins(From<?, ?> from, From<?, ?> to) { for (Join<?, ?> j : from.getJoins()) { Join<?, ?> toJoin = to.join(j.getAttribute().getName(), j.getJoinType()); toJoin.alias(getOrCreateAlias(j)); copyJoins(j, toJoin); } for (Fetch<?, ?> f : from.getFetches()) { Fetch<?, ?> toFetch = to.fetch(f.getAttribute().getName()); copyFetches(f, toFetch); } }