/// <summary> /// Add on association (one-to-one, many-to-one, or a collection) to a list /// of associations to be fetched by outerjoin /// </summary> private void AddAssociationToJoinTree(IAssociationType type, string[] aliasedLhsColumns, string alias, string path, int currentDepth, JoinType joinType) { IJoinable joinable = type.GetAssociatedJoinable(Factory); string subalias = GenerateTableAlias(associations.Count + 1, path, joinable); OuterJoinableAssociation assoc = new OuterJoinableAssociation(type, alias, aliasedLhsColumns, subalias, joinType, GetWithClause(path), Factory, enabledFilters); assoc.ValidateJoin(path); AddAssociation(subalias, assoc); int nextDepth = currentDepth + 1; if (!joinable.IsCollection) { IOuterJoinLoadable pjl = joinable as IOuterJoinLoadable; if (pjl != null) { WalkEntityTree(pjl, subalias, path, nextDepth); } } else { IQueryableCollection qc = joinable as IQueryableCollection; if (qc != null) { WalkCollectionTree(qc, subalias, path, nextDepth); } } }
/// <summary> /// Add on association (one-to-one, many-to-one, or a collection) to a list /// of associations to be fetched by outerjoin /// </summary> private void AddAssociationToJoinTree(IAssociationType type, string[] aliasedLhsColumns, string alias, string path, string subPathAlias, int currentDepth, JoinType joinType) { IJoinable joinable = type.GetAssociatedJoinable(Factory); string subalias = GenerateTableAlias(associations.Count + 1, path, subPathAlias, joinable); var qc = joinable.IsCollection ? (IQueryableCollection)joinable : null; var assoc = new OuterJoinableAssociation( type, alias, aliasedLhsColumns, subalias, joinType, //for many-to-many with clause is applied with OuterJoinableAssociation created for entity persister so simply skip it here qc?.IsManyToMany == true ? null : GetWithClause(path, subPathAlias), Factory, enabledFilters, GetSelectMode(path)); assoc.ValidateJoin(path); AddAssociation(assoc); int nextDepth = currentDepth + 1; if (qc == null) { IOuterJoinLoadable pjl = joinable as IOuterJoinLoadable; if (pjl != null) { WalkEntityTree(pjl, subalias, path, nextDepth); } } else { WalkCollectionTree(qc, subalias, path, subPathAlias, nextDepth); } }
/// <summary> /// Add on association (one-to-one, many-to-one, or a collection) to a list /// of associations to be fetched by outerjoin /// </summary> private void AddAssociationToJoinTree(IAssociationType type, string[] aliasedLhsColumns, string alias, string path, int currentDepth, JoinType joinType) { IJoinable joinable = type.GetAssociatedJoinable(Factory); string subalias = GenerateTableAlias(associations.Count + 1, path, joinable); OuterJoinableAssociation assoc = new OuterJoinableAssociation(type, alias, aliasedLhsColumns, subalias, joinType, GetWithClause(path), Factory, enabledFilters); assoc.ValidateJoin(path); AddAssociation(subalias, assoc); int nextDepth = currentDepth + 1; if (!joinable.IsCollection) { IOuterJoinLoadable pjl = joinable as IOuterJoinLoadable; if (pjl != null) WalkEntityTree(pjl, subalias, path, nextDepth); } else { IQueryableCollection qc = joinable as IQueryableCollection; if (qc != null) WalkCollectionTree(qc, subalias, path, nextDepth); } }
/// <summary> /// Add on association (one-to-one, many-to-one, or a collection) to a list /// of associations to be fetched by outerjoin /// </summary> private void AddAssociationToJoinTree( IAssociationType type, string[] aliasedLhsColumns, string alias, string path, int currentDepth, JoinType joinType) { IJoinable joinable = type.GetAssociatedJoinable(Factory); string subalias = GenerateTableAlias( associations.Count + 1, //before adding to collection! path, joinable ); OuterJoinableAssociation assoc = new OuterJoinableAssociation( type, alias, aliasedLhsColumns, subalias, joinType, Factory, enabledFilters ); assoc.ValidateJoin(path); associations.Add(assoc); int nextDepth = currentDepth + 1; if (!joinable.IsCollection) { if (joinable is IOuterJoinLoadable) { WalkEntityTree( (IOuterJoinLoadable) joinable, subalias, path, nextDepth ); } } else { if (joinable is IQueryableCollection) { WalkCollectionTree( (IQueryableCollection) joinable, subalias, path, nextDepth ); } } }