Package org.hibernate.sql.ast.tree.from
Class DelegatingTableGroup
- java.lang.Object
-
- org.hibernate.sql.ast.tree.from.DelegatingTableGroup
-
- All Implemented Interfaces:
DomainResultProducer,SqmPathInterpretation,SqlSelectionProducer,Expression,ColumnReferenceQualifier,TableGroup,SqlAstNode
- Direct Known Subclasses:
LazyTableGroup,MappedByTableGroup
public abstract class DelegatingTableGroup extends Object implements TableGroup
-
-
Constructor Summary
Constructors Constructor Description DelegatingTableGroup()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidaccept(SqlAstWalker sqlTreeWalker)voidaddNestedTableGroupJoin(TableGroupJoin join)A nested table group join is a join against a table group, that is ensured to be joined against the primary table reference and table reference joins in isolation, prior to doing other table group joins e.g.voidaddTableGroupJoin(TableGroupJoin join)voidapplyAffectedTableNames(Consumer<String> nameCollector)voidapplySqlSelections(DomainResultCreationState creationState)Used when this producer is a selection in a sub-query.booleancanUseInnerJoins()DomainResultcreateDomainResult(String resultVariable, DomainResultCreationState creationState)Produce the domain querySqlSelectioncreateSqlSelection(int jdbcPosition, int valuesArrayPosition, JavaType javaType, boolean virtual, TypeConfiguration typeConfiguration)Create a SqlSelection for the given JDBC ResultSet positionColumnReferencegetColumnReference()ModelPartgetExpressionType()The type for this expressionStringgetGroupAlias()If we want to use CTE for TableGroup rendering we will need to know the alias we can use for the groupModelPartContainergetModelPart()NavigablePathgetNavigablePath()List<TableGroupJoin>getNestedTableGroupJoins()TableReferencegetPrimaryTableReference()StringgetSourceAlias()ExpressiongetSqlExpression()protected abstract TableGroupgetTableGroup()List<TableGroupJoin>getTableGroupJoins()TableReferencegetTableReference(NavigablePath navigablePath, String tableExpression, boolean resolve)Returns the table reference for the table expression, or null if not found.TableReferencegetTableReference(NavigablePath navigablePath, ValuedModelPart modelPart, String tableExpression, boolean resolve)List<TableReferenceJoin>getTableReferenceJoins()booleanisFetched()booleanisInitialized()If this is a lazy table group, it may report that it is not initialized, which would also mean that a join referring to this table group should not be rendered.booleanisLateral()booleanisRealTableGroup()voidprependTableGroupJoin(NavigablePath navigablePath, TableGroupJoin join)Adds the given table group join before a join as found via the given navigable path.voidvisitNestedTableGroupJoins(Consumer<TableGroupJoin> consumer)voidvisitTableGroupJoins(Consumer<TableGroupJoin> consumer)-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.hibernate.sql.ast.tree.from.ColumnReferenceQualifier
getTableReference, getTableReference, resolveTableReference, resolveTableReference, resolveTableReference
-
Methods inherited from interface org.hibernate.sql.ast.tree.expression.Expression
createDomainResultSqlSelection
-
Methods inherited from interface org.hibernate.sql.ast.tree.from.TableGroup
findCompatibleJoin, findCompatibleJoinedGroup, findTableGroupJoin, hasRealJoins, isVirtual
-
-
-
-
Method Detail
-
getTableGroup
protected abstract TableGroup getTableGroup()
-
getExpressionType
public ModelPart getExpressionType()
Description copied from interface:ExpressionThe type for this expression- Specified by:
getExpressionTypein interfaceExpression- Specified by:
getExpressionTypein interfaceSqmPathInterpretation
-
getSqlExpression
public Expression getSqlExpression()
- Specified by:
getSqlExpressionin interfaceSqmPathInterpretation
-
getColumnReference
public ColumnReference getColumnReference()
- Specified by:
getColumnReferencein interfaceExpression
-
createSqlSelection
public SqlSelection createSqlSelection(int jdbcPosition, int valuesArrayPosition, JavaType javaType, boolean virtual, TypeConfiguration typeConfiguration)
Description copied from interface:SqlSelectionProducerCreate a SqlSelection for the given JDBC ResultSet position- Specified by:
createSqlSelectionin interfaceExpression- Specified by:
createSqlSelectionin interfaceSqlSelectionProducer- Parameters:
jdbcPosition- The index position used to read values from JDBCvaluesArrayPosition- The position in our "current JDBC values array"javaType- The descriptor for the Java type to read the value asvirtual- Whether the select is virtual or real. SeeSqlSelection.isVirtual()typeConfiguration- The associated TypeConfiguration
-
getTableReference
public TableReference getTableReference(NavigablePath navigablePath, String tableExpression, boolean resolve)
Description copied from interface:ColumnReferenceQualifierReturns the table reference for the table expression, or null if not found.- Specified by:
getTableReferencein interfaceColumnReferenceQualifier- Parameters:
navigablePath- The path for which to look up the table reference, may be nulltableExpression- The table expression for which to look up the table referenceresolve- Whether to potentially create table reference joins for this table group
-
getTableReference
public TableReference getTableReference(NavigablePath navigablePath, ValuedModelPart modelPart, String tableExpression, boolean resolve)
- Specified by:
getTableReferencein interfaceColumnReferenceQualifier
-
getNavigablePath
public NavigablePath getNavigablePath()
- Specified by:
getNavigablePathin interfaceSqmPathInterpretation- Specified by:
getNavigablePathin interfaceTableGroup
-
getGroupAlias
public String getGroupAlias()
Description copied from interface:TableGroupIf we want to use CTE for TableGroup rendering we will need to know the alias we can use for the group- Specified by:
getGroupAliasin interfaceTableGroup
-
getModelPart
public ModelPartContainer getModelPart()
- Specified by:
getModelPartin interfaceTableGroup
-
getSourceAlias
public String getSourceAlias()
- Specified by:
getSourceAliasin interfaceTableGroup
-
getTableGroupJoins
public List<TableGroupJoin> getTableGroupJoins()
- Specified by:
getTableGroupJoinsin interfaceTableGroup
-
getNestedTableGroupJoins
public List<TableGroupJoin> getNestedTableGroupJoins()
- Specified by:
getNestedTableGroupJoinsin interfaceTableGroup
-
canUseInnerJoins
public boolean canUseInnerJoins()
- Specified by:
canUseInnerJoinsin interfaceTableGroup
-
isLateral
public boolean isLateral()
- Specified by:
isLateralin interfaceTableGroup
-
addTableGroupJoin
public void addTableGroupJoin(TableGroupJoin join)
- Specified by:
addTableGroupJoinin interfaceTableGroup
-
prependTableGroupJoin
public void prependTableGroupJoin(NavigablePath navigablePath, TableGroupJoin join)
Description copied from interface:TableGroupAdds the given table group join before a join as found via the given navigable path.- Specified by:
prependTableGroupJoinin interfaceTableGroup
-
addNestedTableGroupJoin
public void addNestedTableGroupJoin(TableGroupJoin join)
Description copied from interface:TableGroupA nested table group join is a join against a table group, that is ensured to be joined against the primary table reference and table reference joins in isolation, prior to doing other table group joins e.g.select * from entity1 e left join ( collection_table c1 join association a on a.id = c1.target_id ) on c1.entity_id = e.id and c1.key = 1is modeled asTableGroup( primaryTableReference = TableReference(entity1, e), tableGroupJoins = [ TableGroupJoin( TableGroup( primaryTableReference = TableReference(collection_table, c1), nestedTableGroupJoins = [ TableGroupJoin( TableGroup( primaryTableReference = TableReference(association, a) ) ) ] ) ) ] )This is necessary to correctly retain the cardinality of an HQL join like e.g.from Entity1 e left join e.collectionAssociation c on key(c) = 1- Specified by:
addNestedTableGroupJoinin interfaceTableGroup
-
visitTableGroupJoins
public void visitTableGroupJoins(Consumer<TableGroupJoin> consumer)
- Specified by:
visitTableGroupJoinsin interfaceTableGroup
-
visitNestedTableGroupJoins
public void visitNestedTableGroupJoins(Consumer<TableGroupJoin> consumer)
- Specified by:
visitNestedTableGroupJoinsin interfaceTableGroup
-
applyAffectedTableNames
public void applyAffectedTableNames(Consumer<String> nameCollector)
- Specified by:
applyAffectedTableNamesin interfaceTableGroup
-
getPrimaryTableReference
public TableReference getPrimaryTableReference()
- Specified by:
getPrimaryTableReferencein interfaceTableGroup
-
getTableReferenceJoins
public List<TableReferenceJoin> getTableReferenceJoins()
- Specified by:
getTableReferenceJoinsin interfaceTableGroup
-
createDomainResult
public DomainResult createDomainResult(String resultVariable, DomainResultCreationState creationState)
Description copied from interface:DomainResultProducerProduce the domain query- Specified by:
createDomainResultin interfaceDomainResultProducer- Specified by:
createDomainResultin interfaceTableGroup
-
applySqlSelections
public void applySqlSelections(DomainResultCreationState creationState)
Description copied from interface:DomainResultProducerUsed when this producer is a selection in a sub-query. The DomainResult is only needed for root query of a SELECT statement. This default impl assumes this producer is a true (Sql)Expression- Specified by:
applySqlSelectionsin interfaceDomainResultProducer- Specified by:
applySqlSelectionsin interfaceTableGroup
-
accept
public void accept(SqlAstWalker sqlTreeWalker)
- Specified by:
acceptin interfaceSqlAstNode- Specified by:
acceptin interfaceTableGroup
-
isRealTableGroup
public boolean isRealTableGroup()
- Specified by:
isRealTableGroupin interfaceTableGroup
-
isFetched
public boolean isFetched()
- Specified by:
isFetchedin interfaceTableGroup
-
isInitialized
public boolean isInitialized()
Description copied from interface:TableGroupIf this is a lazy table group, it may report that it is not initialized, which would also mean that a join referring to this table group should not be rendered.- Specified by:
isInitializedin interfaceTableGroup
-
-