コード例 #1
0
ファイル: Loader.cs プロジェクト: remcoros/nhibernate
		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);
						}
					}
				}
			}
		}
コード例 #2
0
		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);
コード例 #4
0
 /// <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;
 }
コード例 #5
0
		/// <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;
		}
コード例 #6
0
		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]);
						}
					}
				}
			}
		}