private async Task <IList> ListUsingQueryCacheAsync(HashSet <string> querySpaces, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); IQueryCache queryCache = session.Factory.GetQueryCache(cacheRegion); ISet <FilterKey> filterKeys = FilterKey.CreateFilterKeys(session.EnabledFilters); List <IType[]> resultTypesList = new List <IType[]>(); int[] maxRows = new int[loaders.Count]; int[] firstRows = new int[loaders.Count]; for (int i = 0; i < loaders.Count; i++) { resultTypesList.Add(loaders[i].ResultTypes); firstRows[i] = parameters[i].RowSelection.FirstRow; maxRows[i] = parameters[i].RowSelection.MaxRows; } MultipleQueriesCacheAssembler assembler = new MultipleQueriesCacheAssembler(resultTypesList); QueryParameters combinedParameters = CreateCombinedQueryParameters(); QueryKey key = new QueryKey(session.Factory, SqlString, combinedParameters, filterKeys, null) .SetFirstRows(firstRows) .SetMaxRows(maxRows); IList result = await(assembler.GetResultFromQueryCacheAsync(session, combinedParameters, querySpaces, queryCache, key, cancellationToken)).ConfigureAwait(false); if (factory.Statistics.IsStatisticsEnabled) { if (result == null) { factory.StatisticsImplementor.QueryCacheMiss(key.ToString(), queryCache.RegionName); } else { factory.StatisticsImplementor.QueryCacheHit(key.ToString(), queryCache.RegionName); } } if (result == null) { log.Debug("Cache miss for multi criteria query"); IList list = await(DoListAsync(cancellationToken)).ConfigureAwait(false); result = list; if (session.CacheMode.HasFlag(CacheMode.Put)) { bool put = await(queryCache.PutAsync(key, new ICacheAssembler[] { assembler }, new object[] { list }, combinedParameters.NaturalKeyLookup, session, cancellationToken)).ConfigureAwait(false); if (put && factory.Statistics.IsStatisticsEnabled) { factory.StatisticsImplementor.QueryCachePut(key.ToString(), queryCache.RegionName); } } } return(GetResultList(result)); }
private async Task <IList> ListUsingQueryCacheAsync(CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); IQueryCache queryCache = session.Factory.GetQueryCache(cacheRegion); ISet <FilterKey> filterKeys = FilterKey.CreateFilterKeys(session.EnabledFilters); ISet <string> querySpaces = new HashSet <string>(); List <IType[]> resultTypesList = new List <IType[]>(Translators.Count); for (int i = 0; i < Translators.Count; i++) { ITranslator queryTranslator = Translators[i]; querySpaces.UnionWith(queryTranslator.QuerySpaces); resultTypesList.Add(queryTranslator.ReturnTypes); } int[] firstRows = new int[Parameters.Count]; int[] maxRows = new int[Parameters.Count]; for (int i = 0; i < Parameters.Count; i++) { RowSelection rowSelection = Parameters[i].RowSelection; firstRows[i] = rowSelection.FirstRow; maxRows[i] = rowSelection.MaxRows; } MultipleQueriesCacheAssembler assembler = new MultipleQueriesCacheAssembler(resultTypesList); QueryKey key = new QueryKey(session.Factory, SqlString, combinedParameters, filterKeys, null) .SetFirstRows(firstRows) .SetMaxRows(maxRows); IList result = await(assembler.GetResultFromQueryCacheAsync(session, combinedParameters, querySpaces, queryCache, key, cancellationToken)).ConfigureAwait(false); if (result == null) { log.Debug("Cache miss for multi query"); var list = await(DoListAsync(cancellationToken)).ConfigureAwait(false); await(queryCache.PutAsync(key, new ICacheAssembler[] { assembler }, new object[] { list }, false, session, cancellationToken)).ConfigureAwait(false); result = list; } return(GetResultList(result)); }
private IList ListUsingQueryCache() { IQueryCache queryCache = session.Factory.GetQueryCache(cacheRegion); ISet <FilterKey> filterKeys = FilterKey.CreateFilterKeys(session.EnabledFilters, session.EntityMode); ISet <string> querySpaces = new HashSet <string>(); List <IType[]> resultTypesList = new List <IType[]>(); int[] maxRows = new int[loaders.Count]; int[] firstRows = new int[loaders.Count]; for (int i = 0; i < loaders.Count; i++) { querySpaces.UnionWith(loaders[i].QuerySpaces); resultTypesList.Add(loaders[i].ResultTypes); firstRows[i] = parameters[i].RowSelection.FirstRow; maxRows[i] = parameters[i].RowSelection.MaxRows; } MultipleQueriesCacheAssembler assembler = new MultipleQueriesCacheAssembler(resultTypesList); QueryParameters combinedParameters = CreateCombinedQueryParameters(); QueryKey key = new QueryKey(session.Factory, SqlString, combinedParameters, filterKeys, null) .SetFirstRows(firstRows) .SetMaxRows(maxRows); IList result = assembler.GetResultFromQueryCache(session, combinedParameters, querySpaces, queryCache, key); if (result == null) { log.Debug("Cache miss for multi criteria query"); IList list = DoList(); queryCache.Put(key, new ICacheAssembler[] { assembler }, new object[] { list }, combinedParameters.NaturalKeyLookup, session); result = list; } return(GetResultList(result)); }
private IList ListUsingQueryCache() { IQueryCache queryCache = session.Factory.GetQueryCache(cacheRegion); ISet <FilterKey> filterKeys = FilterKey.CreateFilterKeys(session.EnabledFilters, session.EntityMode); ISet <string> querySpaces = new HashedSet <string>(); List <IType[]> resultTypesList = new List <IType[]>(Translators.Count); for (int i = 0; i < Translators.Count; i++) { ITranslator queryTranslator = Translators[i]; querySpaces.AddAll(queryTranslator.QuerySpaces); resultTypesList.Add(queryTranslator.ReturnTypes); } int[] firstRows = new int[Parameters.Count]; int[] maxRows = new int[Parameters.Count]; for (int i = 0; i < Parameters.Count; i++) { RowSelection rowSelection = Parameters[i].RowSelection; firstRows[i] = rowSelection.FirstRow; maxRows[i] = rowSelection.MaxRows; } MultipleQueriesCacheAssembler assembler = new MultipleQueriesCacheAssembler(resultTypesList); QueryKey key = new QueryKey(session.Factory, SqlString, combinedParameters, filterKeys) .SetFirstRows(firstRows) .SetMaxRows(maxRows); IList result = assembler.GetResultFromQueryCache(session, combinedParameters, querySpaces, queryCache, key); if (result == null) { log.Debug("Cache miss for multi query"); var list = DoList(); queryCache.Put(key, new ICacheAssembler[] { assembler }, new object[] { list }, false, session); result = list; } return(GetResultList(result)); }
private IList ListUsingQueryCache() { IQueryCache queryCache = session.Factory.GetQueryCache(cacheRegion); ISet filterKeys = FilterKey.CreateFilterKeys(session.EnabledFilters, session.EntityMode); Iesi.Collections.Generic.ISet<string> querySpaces = new HashedSet<string>(); ArrayList resultTypesList = new ArrayList(); int[] maxRows = new int[loaders.Count]; int[] firstRows = new int[loaders.Count]; for (int i = 0; i < loaders.Count; i++) { querySpaces.AddAll(loaders[i].QuerySpaces); resultTypesList.Add(loaders[i].ResultTypes); firstRows[i] = parameters[i].RowSelection.FirstRow; maxRows[i] = parameters[i].RowSelection.MaxRows; } MultipleQueriesCacheAssembler assembler = new MultipleQueriesCacheAssembler(resultTypesList); QueryParameters combinedParameters = CreateCombinedQueryParameters(); QueryKey key = new QueryKey(session.Factory, SqlString, combinedParameters, filterKeys) .SetFirstRows(firstRows) .SetMaxRows(maxRows); IList result = assembler.GetResultFromQueryCache(session, combinedParameters, querySpaces, queryCache, key); if (result == null) { log.Debug("Cache miss for multi criteria query"); IList list = DoList(); queryCache.Put(key, new ICacheAssembler[] {assembler}, new object[] {list}, session); result = list; } return GetResultList(result); }
private IList ListUsingQueryCache() { IQueryCache queryCache = session.Factory.GetQueryCache(cacheRegion); ISet filterKeys = FilterKey.CreateFilterKeys(session.EnabledFilters, session.EntityMode); ISet<string> querySpaces = new HashedSet<string>(); ArrayList resultTypesList = new ArrayList(); for (int i = 0; i < Translators.Count; i++) { QueryTranslator queryTranslator = (QueryTranslator)Translators[i]; querySpaces.AddAll(queryTranslator.QuerySpaces); resultTypesList.Add(queryTranslator.ActualReturnTypes); } int[] firstRows = new int[Parameters.Count]; int[] maxRows = new int[Parameters.Count]; for (int i = 0; i < Parameters.Count; i++) { RowSelection rowSelection = ((QueryParameters)Parameters[i]).RowSelection; firstRows[i] = rowSelection.FirstRow; maxRows[i] = rowSelection.MaxRows; } MultipleQueriesCacheAssembler assembler = new MultipleQueriesCacheAssembler(resultTypesList); QueryKey key = new QueryKey(session.Factory, SqlString, combinedParameters, filterKeys) .SetFirstRows(firstRows) .SetMaxRows(maxRows); IList result = assembler.GetResultFromQueryCache(session, combinedParameters, querySpaces, queryCache, key); if (result == null) { log.Debug("Cache miss for multi query"); ArrayList list = DoList(); queryCache.Put(key, new ICacheAssembler[] { assembler }, new object[] { list }, session); result = list; } return GetResultList(result); }