internal void CreateSubselects(IList<EntityKey[]> keys, QueryParameters queryParameters, ISessionImplementor session) { if (keys.Count > 1) { //if we only returned one entity, query by key is more efficient ISet<EntityKey>[] keySets = Transpose(keys); IDictionary<string, int[]> namedParameterLocMap = BuildNamedParameterLocMap(queryParameters); ILoadable[] loadables = EntityPersisters; string[] aliases = Aliases; foreach (EntityKey[] rowKeys in keys) { for (int i = 0; i < rowKeys.Length; i++) { if (rowKeys[i] != null && loadables[i].HasSubselectLoadableCollections) { SubselectFetch subselectFetch = new SubselectFetch(aliases[i], loadables[i], queryParameters, keySets[i], namedParameterLocMap); session.PersistenceContext.BatchFetchQueue.AddSubselect(rowKeys[i], subselectFetch); } } } } }
protected override ICollectionInitializer CreateSubselectInitializer(SubselectFetch subselect, ISessionImplementor session) { return new SubselectOneToManyLoader( this, subselect.ToSubselectString(CollectionType.LHSPropertyName), subselect.Result, subselect.QueryParameters, session.Factory, session.EnabledFilters); }
protected abstract ICollectionInitializer CreateSubselectInitializer(SubselectFetch subselect, ISessionImplementor session);
/// <summary> /// Adds a subselect fetch decriptor for the given entity key. /// </summary> /// <param name="key">The entity for which to register the subselect fetch.</param> /// <param name="subquery">The fetch descriptor.</param> public void AddSubselect(EntityKey key, SubselectFetch subquery) { subselectsByEntityKey[key] = subquery; }
/// <summary> /// Adds a subselect fetch decriptor for the given entity key. /// </summary> /// <param name="key">The entity for which to register the subselect fetch.</param> /// <param name="subquery">The fetch descriptor.</param> public void AddSubselect(EntityKey key, SubselectFetch subquery) { subselectsByEntityKey[key] = subquery; }
internal void CreateSubselects(IList keys, QueryParameters queryParameters, ISessionImplementor session) { if (keys.Count > 1) { //if we only returned one entity, query by key is more efficient ISet[] keySets = Transpose(keys); IDictionary namedParameterLocMap = BuildNamedParameterLocMap(queryParameters); ILoadable[] loadables = EntityPersisters; string[] aliases = Aliases; int rowKeysLength = ((EntityKey[]) keys[0]).Length; SubselectFetch[] subselectFetches = new SubselectFetch[rowKeysLength]; for (int i = 0; i < rowKeysLength; i++) { if (loadables[i].HasSubselectLoadableCollections) { subselectFetches[i] = new SubselectFetch( //getSQLString(), aliases[i], factory.Dialect, loadables[i], queryParameters, keySets[i], namedParameterLocMap ); } } foreach (EntityKey[] rowKeys in keys) { for (int i = 0; i < rowKeys.Length; i++) { if (rowKeys[i] != null && subselectFetches[i] != null) { session.BatchFetchQueue.AddSubselect(rowKeys[i], subselectFetches[i]); } } } } }