private void writeQuerySpace( QuerySpace querySpace, int depth, AliasResolutionContext aliasResolutionContext, PrintWriter printWriter) { generateDetailLines( querySpace, depth, aliasResolutionContext, printWriter ); writeJoins( querySpace.getJoins(), depth + 1, aliasResolutionContext, printWriter ); }
/** * Feeds a QuerySpace into this spaces group. * * @param querySpace The space */ private void registerQuerySpace(QuerySpace querySpace) { log.debugf( "Adding QuerySpace : uid = %s -> %s]", querySpace.getUid(), querySpace ); final QuerySpace previous = querySpaceByUid.put( querySpace.getUid(), querySpace ); if ( previous != null ) { throw new IllegalStateException( "Encountered duplicate QuerySpace uid : " + querySpace.getUid() ); } }
@Override public String[] resolveAliasedLeftHandSideJoinConditionColumns(String leftHandSideTableAlias) { return getLeftHandSide().toAliasedColumns( leftHandSideTableAlias, getJoinedPropertyName() ); }
private void renderJoin(Join join, JoinFragment joinFragment) { if ( CompositeQuerySpace.class.isInstance( join.getRightHandSide() ) ) { handleCompositeJoin( join, joinFragment ); } else if ( EntityQuerySpace.class.isInstance( join.getRightHandSide() ) ) { // do not render the entity join for a one-to-many association, since the collection join // already joins to the associated entity table (see doc in renderCollectionJoin()). if ( join.getLeftHandSide().getDisposition() == QuerySpace.Disposition.COLLECTION ) { if ( CollectionQuerySpace.class.cast( join.getLeftHandSide() ).getCollectionPersister().isManyToMany() ) { renderManyToManyJoin( join, joinFragment ); } else if ( JoinDefinedByMetadata.class.isInstance( join ) && CollectionPropertyNames.COLLECTION_INDICES.equals( JoinDefinedByMetadata.class.cast( join ).getJoinedPropertyName() ) ) { renderManyToManyJoin( join, joinFragment ); } } else { renderEntityJoin( join, joinFragment ); } } else if ( CollectionQuerySpace.class.isInstance( join.getRightHandSide() ) ) { renderCollectionJoin( join, joinFragment ); } }
private void dumpQuerySpace(QuerySpace querySpace, int depth, PrintWriter printWriter) { generateDetailLines( querySpace, depth, printWriter ); dumpJoins( querySpace.getJoins(), depth + 1, printWriter ); }
private void handleCompositeJoin(Join join, JoinFragment joinFragment) { final String leftHandSideUid = join.getLeftHandSide().getUid(); final String rightHandSideUid = join.getRightHandSide().getUid(); final String leftHandSideTableAlias = aliasResolutionContext.resolveSqlTableAliasFromQuerySpaceUid( leftHandSideUid ); if ( leftHandSideTableAlias == null ) { throw new IllegalStateException( "QuerySpace with that UID was not yet registered in the AliasResolutionContext" ); } aliasResolutionContext.registerCompositeQuerySpaceUidResolution( rightHandSideUid, leftHandSideTableAlias ); }
for ( Join join : querySpace.getJoins() ) { processQuerySpaceJoin( join, joinFragment );
private void dumpJoins(Iterable<Join> joins, int depth, PrintWriter printWriter) { for ( Join join : joins ) { printWriter.println( TreePrinterHelper.INSTANCE.generateNodePrefix( depth ) + "JOIN (" + join.getLeftHandSide().getUid() + " -> " + join.getRightHandSide() .getUid() + ")" ); dumpQuerySpace( join.getRightHandSide(), depth+1, printWriter ); } } }
public void processQuerySpaceJoins(QuerySpace querySpace, SelectStatementBuilder selectStatementBuilder) { LOG.debug( "processing queryspace " + querySpace.getUid() ); final JoinFragment joinFragment = factory.getDialect().createOuterJoinFragment(); processQuerySpaceJoins( querySpace, joinFragment ); selectStatementBuilder.setOuterJoins( joinFragment.toFromFragmentString(), joinFragment.toWhereFragmentString() ); }
private void generateDetailLines(QuerySpace querySpace, int depth, PrintWriter printWriter) { printWriter.println( TreePrinterHelper.INSTANCE.generateNodePrefix( depth ) + querySpace.getUid() + " -> " + extractDetails( querySpace ) ); printWriter.println( TreePrinterHelper.INSTANCE.generateNodePrefix( depth+3 ) + "SQL table alias mapping - " + resolveSqlTableAliasFromQuerySpaceUid( querySpace.getUid() ) ); final EntityReferenceAliases entityAliases = resolveEntityReferenceAliases( querySpace.getUid() ); final CollectionReferenceAliases collectionReferenceAliases = resolveCollectionReferenceAliases( querySpace.getUid() );
TreePrinterHelper.INSTANCE.generateNodePrefix( depth + detailDepthOffset ) + "SQL table alias mapping - " + aliasResolutionContext.resolveSqlTableAliasFromQuerySpaceUid( querySpace.getUid() final EntityReferenceAliases entityAliases = aliasResolutionContext.resolveEntityReferenceAliases( querySpace.getUid() ); final CollectionReferenceAliases collectionReferenceAliases = aliasResolutionContext.resolveCollectionReferenceAliases( querySpace.getUid() );
join.getRightHandSide().getUid() );