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));
        }
Beispiel #2
0
        public static bool TryGetQueryValue(NameValueCollection queryCollection, QueryKey queryKey, out int value)
        {
            var key = queryCollection.AllKeys.FirstOrDefault(x => x.Equals(queryKey.ToString(), StringComparison.OrdinalIgnoreCase));

            if (key != null)
            {
                return(int.TryParse(queryCollection[key], out value));
            }

            value = default(int);
            return(false);
        }
Beispiel #3
0
        /// <summary>
        /// Builds query agrregate function.
        /// </summary>
        protected override void Build()
        {
            // Build expression.
            string function   = QueryFunction.ToString().ToUpper();
            string expression = Expression.ToString();
            string key        = string.Empty;

            if (QueryKey != QueryKey.All)
            {
                key = QueryKey.ToString().ToUpper();
            }

            // If normal template.
            if (Expression != null && OverColumns == null)
            {
                if (QueryKey == QueryKey.All)
                {
                    Text = string.Format(m_normalTemplate, function, expression);
                }
                else if (QueryKey != QueryKey.All)
                {
                    Text = string.Format(m_normalTemplateKey, function, key, expression);
                }
            }

            // If over template.
            else if (OverColumns != null && PartitionColumns == null)
            {
            }

            // If partition template.
            else if (PartitionColumns != null)
            {
            }

            // Column name.
            //string columnName = ColumnName.TrimComma();

            // Generate aggregate string.
            //Text = string.Format(m_normalTemplate, queryFunction, queryKey, columnName);
        }
        public void ToStringWithMoreFilters()
        {
            string filterName = "DescriptionLike";
            var    f          = new FilterImpl(Sfi.GetFilterDefinition(filterName));

            f.SetParameter("pLike", "so%");
            var fk = new FilterKey(filterName, f.Parameters, f.FilterDefinition.ParameterTypes);

            filterName = "DescriptionEqualAndValueGT";
            var fv = new FilterImpl(Sfi.GetFilterDefinition(filterName));

            fv.SetParameter("pDesc", "something").SetParameter("pValue", 10);
            var fvk = new FilterKey(filterName, f.Parameters, f.FilterDefinition.ParameterTypes);

            ISet <FilterKey> fks = new HashSet <FilterKey> {
                fk, fvk
            };
            var qk = new QueryKey(Sfi, SqlAll, new QueryParameters(), fks, null);

            Assert.That(qk.ToString(), Does.Contain(string.Format("filters: ['{0}', '{1}']", fk, fvk)));
        }
Beispiel #5
0
        public void ToStringWithMoreFilters()
        {
            string filterName = "DescriptionLike";
            var    f          = new FilterImpl(sessions.GetFilterDefinition(filterName));

            f.SetParameter("pLike", "so%");
            var fk = new FilterKey(filterName, f.Parameters, f.FilterDefinition.ParameterTypes, EntityMode.Poco);

            filterName = "DescriptionEqualAndValueGT";
            var fv = new FilterImpl(sessions.GetFilterDefinition(filterName));

            fv.SetParameter("pDesc", "something").SetParameter("pValue", 10);
            var fvk = new FilterKey(filterName, f.Parameters, f.FilterDefinition.ParameterTypes, EntityMode.Poco);

            ISet <FilterKey> fks = new HashedSet <FilterKey> {
                fk, fvk
            };
            var qk = new QueryKey(sessions, SqlAll, new QueryParameters(), (ISet)fks);

            Assert.That(qk.ToString(), Is.StringContaining(string.Format("filters: ['{0}', '{1}']", fk, fvk)));
        }
        public void ToStringWithFilters()
        {
            string filterName = "DescriptionLike";
            var    f          = new FilterImpl(Sfi.GetFilterDefinition(filterName));

            f.SetParameter("pLike", "so%");
            var fk = new FilterKey(f);
            ISet <FilterKey> fks = new HashSet <FilterKey> {
                fk
            };
            var qk = new QueryKey(Sfi, SqlAll, new QueryParameters(), fks, null, null);

            Assert.That(qk.ToString(), Does.Contain($"filters: ['{fk}']"), "Like");

            filterName = "DescriptionEqualAndValueGT";
            f          = new FilterImpl(Sfi.GetFilterDefinition(filterName));
            f.SetParameter("pDesc", "something").SetParameter("pValue", 10);
            fk  = new FilterKey(f);
            fks = new HashSet <FilterKey> {
                fk
            };
            qk = new QueryKey(Sfi, SqlAll, new QueryParameters(), fks, null, null);
            Assert.That(qk.ToString(), Does.Contain($"filters: ['{fk}']"), "Value");
        }
        private IList ListUsingQueryCache()
        {
            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[]>();

            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 (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 = DoList();
                result = list;
                if ((session.CacheMode & CacheMode.Put) == CacheMode.Put)
                {
                    bool put = queryCache.Put(key, new ICacheAssembler[] { assembler }, new object[] { list }, combinedParameters.NaturalKeyLookup, session);
                    if (put && factory.Statistics.IsStatisticsEnabled)
                    {
                        factory.StatisticsImplementor.QueryCachePut(key.ToString(), queryCache.RegionName);
                    }
                }
            }

            return(GetResultList(result));
        }
Beispiel #8
0
 protected override string PayloadToString()
 {
     return(QKey.ToString());
 }