예제 #1
0
        public IQueryExpressionPlan GetHQLQueryPlan(IQueryExpression queryExpression, bool shallow, IDictionary<string, IFilter> enabledFilters)
        {
            string expressionStr = queryExpression.Key;

            var key = new HQLQueryPlanKey(expressionStr, shallow, enabledFilters);
            var plan = (IQueryExpressionPlan)planCache[key];

            if (plan == null)
            {
                if (log.IsDebugEnabled)
                {
                    log.Debug("unable to locate HQL query plan in cache; generating (" + expressionStr + ")");
                }
                plan = new HQLExpressionQueryPlan(expressionStr, queryExpression, shallow, enabledFilters, factory);
                planCache.Put(key, plan);
            }
            else
            {
                if (log.IsDebugEnabled)
                {
                    log.Debug("located HQL query plan in cache (" + expressionStr + ")");
                }
            }

            return plan;
        }
예제 #2
0
		public HQLQueryPlan GetHQLQueryPlan(string queryString, bool shallow, IDictionary<string, IFilter> enabledFilters)
		{
			HQLQueryPlanKey key = new HQLQueryPlanKey(queryString, shallow, enabledFilters);
			HQLQueryPlan plan = (HQLQueryPlan)planCache[key];

			if (plan == null)
			{
				if (log.IsDebugEnabled)
				{
					log.Debug("unable to locate HQL query plan in cache; generating (" + queryString + ")");
				}
				plan = new HQLQueryPlan(queryString, shallow, enabledFilters, factory);
			}
			else
			{
				if (log.IsDebugEnabled)
				{
					log.Debug("located HQL query plan in cache (" + queryString + ")");
				}
			}

			planCache.Put(key, plan);

			return plan;
		}
예제 #3
0
        public IQueryExpressionPlan GetHQLQueryPlan(IQueryExpression queryExpression, bool shallow, IDictionary <string, IFilter> enabledFilters)
        {
            var key  = new HQLQueryPlanKey(queryExpression, shallow, enabledFilters);
            var plan = (QueryExpressionPlan)planCache[key];

            if (plan == null)
            {
                if (log.IsDebugEnabled)
                {
                    log.Debug("unable to locate HQL query plan in cache; generating (" + queryExpression.Key + ")");
                }
                plan = new QueryExpressionPlan(queryExpression, shallow, enabledFilters, factory);
                planCache.Put(key, plan);
            }
            else
            {
                if (log.IsDebugEnabled)
                {
                    log.Debug("located HQL query plan in cache (" + queryExpression.Key + ")");
                }
                plan = CopyIfRequired(plan, queryExpression);
            }

            return(plan);
        }
예제 #4
0
        public IQueryExpressionPlan GetHQLQueryPlan(IQueryExpression queryExpression, bool shallow, IDictionary <string, IFilter> enabledFilters)
        {
            var key  = new HQLQueryPlanKey(queryExpression, shallow, enabledFilters);
            var plan = (QueryExpressionPlan)planCache[key];

            if (plan == null)
            {
                if (log.IsDebugEnabled)
                {
                    log.Debug("unable to locate HQL query plan in cache; generating (" + queryExpression.Key + ")");
                }
                plan = new QueryExpressionPlan(queryExpression, shallow, enabledFilters, factory);
                planCache.Put(key, plan);
            }
            else
            {
                if (log.IsDebugEnabled)
                {
                    log.Debug("located HQL query plan in cache (" + queryExpression.Key + ")");
                }
                var planExpression = plan.QueryExpression as NhLinqExpression;
                var expression     = queryExpression as NhLinqExpression;
                if (planExpression != null && expression != null)
                {
                    //NH-3413
                    //Here we have to use original expression.
                    //In most cases NH do not translate expression in second time, but
                    // for cases when we have list parameters in query, like @p1.Contains(...),
                    // it does, and then it uses parameters from first try.
                    //TODO: cache only required parts of QueryExpression

                    //NH-3436
                    // We have to return new instance plan with it's own query expression
                    // because other treads can override queryexpression of current plan during execution of query if we will use cached instance of plan
                    expression.CopyExpressionTranslation(planExpression);
                    plan = plan.Copy(expression);
                }
            }

            return(plan);
        }
예제 #5
0
        public IQueryExpressionPlan GetHQLQueryPlan(IQueryExpression queryExpression, bool shallow, IDictionary <string, IFilter> enabledFilters)
        {
            var key  = new HQLQueryPlanKey(queryExpression, shallow, enabledFilters);
            var plan = (QueryExpressionPlan)planCache[key];

            if (plan == null)
            {
                if (log.IsDebugEnabled())
                {
                    log.Debug("unable to locate HQL query plan in cache; generating ({0})", queryExpression.Key);
                }
                plan = new QueryExpressionPlan(queryExpression, shallow, enabledFilters, factory);
                // 6.0 TODO: add "CanCachePlan { get; }" to IQueryExpression interface
                if (!(queryExpression is NhLinqExpression linqExpression) || linqExpression.CanCachePlan)
                {
                    planCache.Put(key, plan);
                }
                else
                {
                    log.Debug("Query plan not cacheable");
                }
            }
예제 #6
0
        public IQueryExpressionPlan GetHQLQueryPlan(IQueryExpression queryExpression, bool shallow, IDictionary <string, IFilter> enabledFilters)
        {
            var key  = new HQLQueryPlanKey(queryExpression, shallow, enabledFilters);
            var plan = (IQueryExpressionPlan)planCache[key];

            if (plan == null)
            {
                if (log.IsDebugEnabled)
                {
                    log.Debug("unable to locate HQL query plan in cache; generating (" + queryExpression.Key + ")");
                }
                plan = new QueryExpressionPlan(queryExpression, shallow, enabledFilters, factory);
                planCache.Put(key, plan);
            }
            else
            {
                if (log.IsDebugEnabled)
                {
                    log.Debug("located HQL query plan in cache (" + queryExpression.Key + ")");
                }
                var planExpression = plan.QueryExpression as NhLinqExpression;
                var expression     = queryExpression as NhLinqExpression;
                if (planExpression != null && expression != null)
                {
                    //NH-3413
                    //Here we have to use original expression.
                    //In most cases NH do not translate expression in second time, but
                    // for cases when we have list parameters in query, like @p1.Contains(...),
                    // it does, and then it uses parameters from first try.
                    //TODO: cache only required parts of QueryExpression
                    planExpression._expression             = expression._expression;
                    planExpression._constantToParameterMap = expression._constantToParameterMap;
                }
            }

            return(plan);
        }
예제 #7
0
        public HQLQueryPlan GetHQLQueryPlan(string queryString, bool shallow, IDictionary <string, IFilter> enabledFilters)
        {
            var key  = new HQLQueryPlanKey(queryString, shallow, enabledFilters);
            var plan = (HQLQueryPlan)planCache[key];

            if (plan == null)
            {
                if (log.IsDebugEnabled)
                {
                    log.Debug("unable to locate HQL query plan in cache; generating (" + queryString + ")");
                }
                plan = new HQLQueryPlan(queryString, shallow, enabledFilters, factory);
                planCache.Put(key, plan);
            }
            else
            {
                if (log.IsDebugEnabled)
                {
                    log.Debug("located HQL query plan in cache (" + queryString + ")");
                }
            }

            return(plan);
        }
예제 #8
0
            public bool Equals(HQLQueryPlanKey that)
            {
                if (that == null)
                {
                    return(false);
                }

                if (shallow != that.shallow)
                {
                    return(false);
                }

                if (!CollectionHelper.SetEquals(filterNames, that.filterNames))
                {
                    return(false);
                }

                if (!query.Equals(that.query))
                {
                    return(false);
                }

                return(true);
            }
예제 #9
0
			public bool Equals(HQLQueryPlanKey that)
			{
				if (that == null)
				{
					return false;
				}

				if (shallow != that.shallow)
				{
					return false;
				}

				if (!filterNames.SetEquals(that.filterNames))
				{
					return false;
				}

				if (!query.Equals(that.query))
				{
					return false;
				}

				return true;
			}