internal void CopyExpressionTranslation(NhLinqExpression other)
 {
     ExpressionToHqlTranslationResults = other.ExpressionToHqlTranslationResults;
     ParameterDescriptors = other.ParameterDescriptors;
     // Type could have been overridden by translation.
     Type = other.Type;
 }
        public IASTNode Translate(ISessionFactoryImplementor sessionFactory, bool filter)
        {
            if (ExpressionToHqlTranslationResults != null)
            {
                // Query has already been translated. Arguments do not really matter, because queries are anyway tied
                // to a single session factory and cannot switch from being a filter query (query on a mapped collection)
                // or not.
                return(DuplicateTree(ExpressionToHqlTranslationResults.Statement.AstNode));
            }

            var requiredHqlParameters = new List <NamedParameterDescriptor>();
            var queryModel            = NhRelinqQueryParser.Parse(_expression);
            var visitorParameters     = new VisitorParameters(sessionFactory, _constantToParameterMap, requiredHqlParameters,
                                                              new QuerySourceNamer(), TargetType, QueryMode);

            ExpressionToHqlTranslationResults = QueryModelVisitor.GenerateHqlQuery(queryModel, visitorParameters, true, ReturnType);

            if (ExpressionToHqlTranslationResults.ExecuteResultTypeOverride != null)
            {
                Type = ExpressionToHqlTranslationResults.ExecuteResultTypeOverride;
            }

            ParameterDescriptors = requiredHqlParameters.AsReadOnly();

            CanCachePlan = CanCachePlan &&
                           // If some constants do not have matching HQL parameters, their values from first query will
                           // be embedded in the plan and reused for subsequent queries: do not cache the plan.
                           !ParameterValuesByName
                           .Keys
                           .Except(requiredHqlParameters.Select(p => p.Name))
                           .Any();

            // The ast node may be altered by caller, duplicate it for preserving the original one.
            return(DuplicateTree(ExpressionToHqlTranslationResults.Statement.AstNode));
        }
Beispiel #3
0
        public IASTNode Translate(ISessionFactoryImplementor sessionFactory, bool filter)
        {
            var requiredHqlParameters = new List <NamedParameterDescriptor>();
            var queryModel            = NhRelinqQueryParser.Parse(_expression);
            var visitorParameters     = new VisitorParameters(sessionFactory, _constantToParameterMap, requiredHqlParameters,
                                                              new QuerySourceNamer(), TargetType, QueryMode);

            ExpressionToHqlTranslationResults = QueryModelVisitor.GenerateHqlQuery(queryModel, visitorParameters, true, ReturnType);

            if (ExpressionToHqlTranslationResults.ExecuteResultTypeOverride != null)
            {
                Type = ExpressionToHqlTranslationResults.ExecuteResultTypeOverride;
            }

            ParameterDescriptors = requiredHqlParameters.AsReadOnly();

            CanCachePlan = CanCachePlan &&
                           // If some constants do not have matching HQL parameters, their values from first query will
                           // be embedded in the plan and reused for subsequent queries: do not cache the plan.
                           !ParameterValuesByName
                           .Keys
                           .Except(requiredHqlParameters.Select(p => p.Name))
                           .Any();

            return(ExpressionToHqlTranslationResults.Statement.AstNode);
        }
Beispiel #4
0
        public IASTNode Translate(ISessionFactoryImplementor sessionFactory, bool filter)
        {
            var requiredHqlParameters = new List <NamedParameterDescriptor>();
            var querySourceNamer      = new QuerySourceNamer();
            var queryModel            = NhRelinqQueryParser.Parse(_expression);
            var visitorParameters     = new VisitorParameters(sessionFactory, _constantToParameterMap, requiredHqlParameters, querySourceNamer);

            ExpressionToHqlTranslationResults = QueryModelVisitor.GenerateHqlQuery(queryModel, visitorParameters, true);

            ParameterDescriptors = requiredHqlParameters.AsReadOnly();

            return(ExpressionToHqlTranslationResults.Statement.AstNode);
        }
		public IASTNode Translate(ISessionFactoryImplementor sessionFactory)
		{
			var requiredHqlParameters = new List<NamedParameterDescriptor>();
			var querySourceNamer = new QuerySourceNamer();
			var queryModel = NhRelinqQueryParser.Parse(_expression);
			var visitorParameters = new VisitorParameters(sessionFactory, _constantToParameterMap, requiredHqlParameters, querySourceNamer);

			ExpressionToHqlTranslationResults = QueryModelVisitor.GenerateHqlQuery(queryModel, visitorParameters, true);

			ParameterDescriptors = requiredHqlParameters.AsReadOnly();
			
			return ExpressionToHqlTranslationResults.Statement.AstNode;
		}
	    public IASTNode Translate(ISessionFactory sessionFactory)
		{
            //if (_astNode == null)
            {
                var requiredHqlParameters = new List<NamedParameterDescriptor>();

                // TODO - can we cache any of this? 
                var queryModel = NhRelinqQueryParser.Parse(_expression);

                ExpressionToHqlTranslationResults = QueryModelVisitor.GenerateHqlQuery(queryModel,
                                                                                       _constantToParameterMap,
                                                                                       requiredHqlParameters);

                ParameterDescriptors = requiredHqlParameters.AsReadOnly();
                _astNode = ExpressionToHqlTranslationResults.Statement.AstNode;
            }

	        return _astNode;
		}
Beispiel #7
0
        public IASTNode Translate(ISessionFactoryImplementor sessionFactory)
        {
            //if (_astNode == null)
            {
                var requiredHqlParameters = new List <NamedParameterDescriptor>();

                // TODO - can we cache any of this?
                var queryModel = NhRelinqQueryParser.Parse(_expression);

                ExpressionToHqlTranslationResults = QueryModelVisitor.GenerateHqlQuery(queryModel,
                                                                                       new VisitorParameters(
                                                                                           sessionFactory,
                                                                                           _constantToParameterMap,
                                                                                           requiredHqlParameters),
                                                                                       true);

                ParameterDescriptors = requiredHqlParameters.AsReadOnly();
                _astNode             = ExpressionToHqlTranslationResults.Statement.AstNode;
            }

            return(_astNode);
        }
Beispiel #8
0
 internal void CopyExpressionTranslation(NhLinqExpression other)
 {
     ExpressionToHqlTranslationResults = other.ExpressionToHqlTranslationResults;
     ParameterDescriptors = other.ParameterDescriptors;
 }
		internal void CopyExpressionTranslation(NhLinqExpression other)
		{
			ExpressionToHqlTranslationResults = other.ExpressionToHqlTranslationResults;
			ParameterDescriptors = other.ParameterDescriptors;
		}