|
From: <ste...@us...> - 2009-10-22 14:52:49
|
Revision: 4794
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4794&view=rev
Author: steverstrong
Date: 2009-10-22 14:52:39 +0000 (Thu, 22 Oct 2009)
Log Message:
-----------
Linq modifications to integrate with the HQL Query cache
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Engine/Query/HQLQueryPlan.cs
trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeNode.cs
trunk/nhibernate/src/NHibernate/IQueryExpression.cs
trunk/nhibernate/src/NHibernate/Impl/QueryImpl.cs
trunk/nhibernate/src/NHibernate/Linq/CommandData.cs
trunk/nhibernate/src/NHibernate/Linq/HqlGeneratorExpressionTreeVisitor.cs
trunk/nhibernate/src/NHibernate/Linq/NhQueryable.cs
trunk/nhibernate/src/NHibernate/Linq/ProjectionEvaluator.cs
trunk/nhibernate/src/NHibernate/Linq/QueryModelVisitor.cs
trunk/nhibernate/src/NHibernate/NHibernate.csproj
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Modified: trunk/nhibernate/src/NHibernate/Engine/Query/HQLQueryPlan.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Engine/Query/HQLQueryPlan.cs 2009-10-18 21:21:57 UTC (rev 4793)
+++ trunk/nhibernate/src/NHibernate/Engine/Query/HQLQueryPlan.cs 2009-10-22 14:52:39 UTC (rev 4794)
@@ -132,11 +132,18 @@
querySpaces = new HashedSet<string>(translator.QuerySpaces);
- // TODO - need to build parameterMetadata. Current function no good, since is parses the HQL. Might need to walk the AST here,
- // probably inside the QueryTranslator. That's probably a better place for the parsing to be anyway; possibly worth moving for classic as well...
- //parameterMetadata = BuildParameterMetadata(translator.GetParameterTranslations(), hql);
- parameterMetadata = new ParameterMetadata(new OrdinalParameterDescriptor[0], new Dictionary<string, NamedParameterDescriptor>());
+ var parameterTranslations = translator.GetParameterTranslations();
+ var namedParamDescriptorMap = new Dictionary<string, NamedParameterDescriptor>();
+ foreach (NamedParameterDescriptor entry in queryExpression.Parameters)
+ {
+ namedParamDescriptorMap[entry.Name] =
+ new NamedParameterDescriptor(entry.Name, parameterTranslations.GetNamedParameterExpectedType(entry.Name),
+ entry.SourceLocations, entry.JpaStyle);
+ }
+
+ parameterMetadata = new ParameterMetadata(new OrdinalParameterDescriptor[0], namedParamDescriptorMap);
+
returnMetadata = new ReturnMetadata(translator.ReturnAliases, translator.ReturnTypes);
}
Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeNode.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeNode.cs 2009-10-18 21:21:57 UTC (rev 4793)
+++ trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeNode.cs 2009-10-22 14:52:39 UTC (rev 4794)
@@ -117,6 +117,9 @@
switch (System.Type.GetTypeCode(type))
{
+ case TypeCode.Boolean:
+ _node.Text = "bool";
+ break;
case TypeCode.Int32:
_node.Text = "integer";
break;
@@ -126,6 +129,9 @@
case TypeCode.DateTime:
_node.Text = "datetime";
break;
+ case TypeCode.String:
+ _node.Text = "string";
+ break;
default:
throw new NotSupportedException(string.Format("Don't currently support idents of type {0}", type.Name));
}
@@ -239,8 +245,9 @@
public class HqlParameter : HqlTreeNode
{
public HqlParameter(IASTFactory factory, string name)
- : base(HqlSqlWalker.PARAM, name, factory)
+ : base(HqlSqlWalker.COLON, ":", factory)
{
+ AddChild(new HqlIdent(factory, name));
}
}
Modified: trunk/nhibernate/src/NHibernate/IQueryExpression.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/IQueryExpression.cs 2009-10-18 21:21:57 UTC (rev 4793)
+++ trunk/nhibernate/src/NHibernate/IQueryExpression.cs 2009-10-22 14:52:39 UTC (rev 4794)
@@ -1,4 +1,5 @@
-using NHibernate.Engine;
+using System.Collections.Generic;
+using NHibernate.Engine.Query;
using NHibernate.Hql.Ast.ANTLR.Tree;
using NHibernate.Impl;
@@ -9,6 +10,7 @@
IASTNode Translate(ISessionFactory sessionFactory);
string Key { get; }
System.Type Type { get; }
- void SetQueryParametersPriorToExecute(QueryImpl impl);
+ IList<NamedParameterDescriptor> Parameters { get; }
+ void SetQueryParametersPriorToExecute(QueryImpl impl);
}
}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/Impl/QueryImpl.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Impl/QueryImpl.cs 2009-10-18 21:21:57 UTC (rev 4793)
+++ trunk/nhibernate/src/NHibernate/Impl/QueryImpl.cs 2009-10-22 14:52:39 UTC (rev 4794)
@@ -63,6 +63,11 @@
public override IList List()
{
+ if (_queryExpression != null)
+ {
+ _queryExpression.SetQueryParametersPriorToExecute(this);
+ }
+
VerifyParameters();
IDictionary<string, TypedValue> namedParams = NamedParams;
Before();
@@ -74,7 +79,6 @@
}
else
{
- _queryExpression.SetQueryParametersPriorToExecute(this);
return Session.List(_queryExpression, GetQueryParameters(namedParams));
}
}
Modified: trunk/nhibernate/src/NHibernate/Linq/CommandData.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Linq/CommandData.cs 2009-10-18 21:21:57 UTC (rev 4793)
+++ trunk/nhibernate/src/NHibernate/Linq/CommandData.cs 2009-10-22 14:52:39 UTC (rev 4794)
@@ -8,28 +8,26 @@
{
public class CommandData
{
- private readonly NamedParameter[] _namedParameters;
- private readonly List<LambdaExpression> _itemTransformers;
+ private readonly List<LambdaExpression> _itemTransformers;
private readonly List<LambdaExpression> _listTransformers;
private readonly List<Action<IQuery>> _additionalCriteria;
- public CommandData(HqlQuery statement, NamedParameter[] namedParameters, List<LambdaExpression> itemTransformers, List<LambdaExpression> listTransformers, List<Action<IQuery>> additionalCriteria)
+ public CommandData(HqlQuery statement, List<LambdaExpression> itemTransformers, List<LambdaExpression> listTransformers, List<Action<IQuery>> additionalCriteria)
{
_itemTransformers = itemTransformers;
_listTransformers = listTransformers;
Statement = statement;
- _namedParameters = namedParameters;
- _additionalCriteria = additionalCriteria;
+ _additionalCriteria = additionalCriteria;
}
public HqlQuery Statement { get; private set; }
- public void SetParameters(IQuery query)
+ public void SetParameters(IQuery query, IDictionary<string, object> parameters)
{
- foreach (var parameter in _namedParameters)
+ foreach (var parameterName in query.NamedParameters)
{
- query.SetParameter(parameter.Name, parameter.Value);
+ query.SetParameter(parameterName, parameters[parameterName]);
}
}
Modified: trunk/nhibernate/src/NHibernate/Linq/HqlGeneratorExpressionTreeVisitor.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Linq/HqlGeneratorExpressionTreeVisitor.cs 2009-10-18 21:21:57 UTC (rev 4793)
+++ trunk/nhibernate/src/NHibernate/Linq/HqlGeneratorExpressionTreeVisitor.cs 2009-10-22 14:52:39 UTC (rev 4794)
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
+using NHibernate.Engine.Query;
using NHibernate.Hql.Ast;
using Remotion.Data.Linq.Clauses.Expressions;
using Remotion.Data.Linq.Clauses.ExpressionTreeVisitors;
@@ -12,12 +13,14 @@
{
protected readonly HqlTreeBuilder _hqlTreeBuilder;
protected readonly HqlNodeStack _stack;
- private readonly ParameterAggregator _parameterAggregator;
+ private readonly IDictionary<ConstantExpression, NamedParameter> _parameters;
+ private readonly IList<NamedParameterDescriptor> _requiredHqlParameters;
- public HqlGeneratorExpressionTreeVisitor(ParameterAggregator parameterAggregator)
+ public HqlGeneratorExpressionTreeVisitor(IDictionary<ConstantExpression, NamedParameter> parameters, IList<NamedParameterDescriptor> requiredHqlParameters)
{
- _parameterAggregator = parameterAggregator;
- _hqlTreeBuilder = new HqlTreeBuilder();
+ _parameters = parameters;
+ _requiredHqlParameters = requiredHqlParameters;
+ _hqlTreeBuilder = new HqlTreeBuilder();
_stack = new HqlNodeStack(_hqlTreeBuilder);
}
@@ -33,7 +36,7 @@
protected override Expression VisitNhAverage(NhAverageExpression expression)
{
- var visitor = new HqlGeneratorExpressionTreeVisitor(_parameterAggregator);
+ var visitor = new HqlGeneratorExpressionTreeVisitor(_parameters, _requiredHqlParameters);
visitor.Visit(expression.Expression);
_stack.PushLeaf(_hqlTreeBuilder.Cast(_hqlTreeBuilder.Average(visitor.GetHqlTreeNodes().Single()), expression.Type));
@@ -43,7 +46,7 @@
protected override Expression VisitNhCount(NhCountExpression expression)
{
- var visitor = new HqlGeneratorExpressionTreeVisitor(_parameterAggregator);
+ var visitor = new HqlGeneratorExpressionTreeVisitor(_parameters, _requiredHqlParameters);
visitor.Visit(expression.Expression);
_stack.PushLeaf(_hqlTreeBuilder.Cast(_hqlTreeBuilder.Count(visitor.GetHqlTreeNodes().Single()), expression.Type));
@@ -53,7 +56,7 @@
protected override Expression VisitNhMin(NhMinExpression expression)
{
- var visitor = new HqlGeneratorExpressionTreeVisitor(_parameterAggregator);
+ var visitor = new HqlGeneratorExpressionTreeVisitor(_parameters, _requiredHqlParameters);
visitor.Visit(expression.Expression);
_stack.PushLeaf(_hqlTreeBuilder.Cast(_hqlTreeBuilder.Min(visitor.GetHqlTreeNodes().Single()), expression.Type));
@@ -63,7 +66,7 @@
protected override Expression VisitNhMax(NhMaxExpression expression)
{
- var visitor = new HqlGeneratorExpressionTreeVisitor(_parameterAggregator);
+ var visitor = new HqlGeneratorExpressionTreeVisitor(_parameters, _requiredHqlParameters);
visitor.Visit(expression.Expression);
_stack.PushLeaf(_hqlTreeBuilder.Cast(_hqlTreeBuilder.Max(visitor.GetHqlTreeNodes().Single()), expression.Type));
@@ -73,7 +76,7 @@
protected override Expression VisitNhSum(NhSumExpression expression)
{
- var visitor = new HqlGeneratorExpressionTreeVisitor(_parameterAggregator);
+ var visitor = new HqlGeneratorExpressionTreeVisitor(_parameters, _requiredHqlParameters);
visitor.Visit(expression.Expression);
_stack.PushLeaf(_hqlTreeBuilder.Cast(_hqlTreeBuilder.Sum(visitor.GetHqlTreeNodes().Single()), expression.Type));
@@ -83,7 +86,7 @@
protected override Expression VisitNhDistinct(NhDistinctExpression expression)
{
- var visitor = new HqlGeneratorExpressionTreeVisitor(_parameterAggregator);
+ var visitor = new HqlGeneratorExpressionTreeVisitor(_parameters, _requiredHqlParameters);
visitor.Visit(expression.Expression);
_stack.PushLeaf(_hqlTreeBuilder.Distinct());
@@ -216,17 +219,19 @@
}
}
- /*
- var namedParameter = _parameterAggregator.AddParameter(expression.Value);
+ NamedParameter namedParameter;
- _expression = _hqlTreeBuilder.Parameter(namedParameter.Name);
+ if (_parameters.TryGetValue(expression, out namedParameter))
+ {
+ _stack.PushLeaf(_hqlTreeBuilder.Cast(_hqlTreeBuilder.Parameter(namedParameter.Name), namedParameter.Value.GetType()));
+ _requiredHqlParameters.Add(new NamedParameterDescriptor(namedParameter.Name, null, new []{ _requiredHqlParameters.Count + 1}, false));
+ }
+ else
+ {
+ _stack.PushLeaf(_hqlTreeBuilder.Constant(expression.Value));
+ }
return expression;
- */
- // TODO - get parameter support in place in the HQLQueryPlan
- _stack.PushLeaf(_hqlTreeBuilder.Constant(expression.Value));
-
- return expression;
}
protected override Expression VisitMethodCallExpression(MethodCallExpression expression)
@@ -331,7 +336,7 @@
protected override Expression VisitSubQueryExpression(SubQueryExpression expression)
{
- CommandData query = QueryModelVisitor.GenerateHqlQuery(expression.QueryModel, _parameterAggregator);
+ CommandData query = QueryModelVisitor.GenerateHqlQuery(expression.QueryModel, _parameters, _requiredHqlParameters);
_stack.PushLeaf(query.Statement);
Modified: trunk/nhibernate/src/NHibernate/Linq/NhQueryable.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Linq/NhQueryable.cs 2009-10-18 21:21:57 UTC (rev 4793)
+++ trunk/nhibernate/src/NHibernate/Linq/NhQueryable.cs 2009-10-22 14:52:39 UTC (rev 4794)
@@ -1,9 +1,13 @@
using System;
+using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
+using NHibernate.Engine.Query;
using NHibernate.Hql.Ast.ANTLR.Tree;
using NHibernate.Impl;
using Remotion.Data.Linq;
+using Remotion.Data.Linq.Parsing;
+using Remotion.Data.Linq.Parsing.ExpressionTreeVisitors;
using Remotion.Data.Linq.Parsing.Structure;
namespace NHibernate.Linq
@@ -75,15 +79,21 @@
{
private readonly Expression _expression;
private CommandData _commandData;
+ private readonly IDictionary<ConstantExpression, NamedParameter> _queryParameters;
+ private readonly IDictionary<string, object> _queryParameterValues;
public NhLinqExpression(Expression expression)
{
- _expression = expression;
+ _expression = PartialEvaluatingExpressionTreeVisitor.EvaluateIndependentSubtrees(expression);
- Key = expression.ToString();
+ _queryParameters = ExpressionParameterVisitor.Visit(_expression);
+ _queryParameterValues = _queryParameters.Values.ToDictionary(p => p.Name, p => p.Value);
- Type = expression.Type;
+ Key = ExpressionKeyVisitor.Visit(_expression, _queryParameters);
+ Type = _expression.Type;
+ ParameterValues = _queryParameters.Values;
+
// Note - re-linq handles return types via the GetOutputDataInfo method, and allows for SingleOrDefault here for the ChoiceResultOperator...
ReturnType = NhLinqExpressionReturnType.Scalar;
@@ -94,26 +104,57 @@
}
}
- public IASTNode Translate(ISessionFactory sessionFactory)
+ public IASTNode Translate(ISessionFactory sessionFactory)
{
+ var requiredHqlParameters = new List<NamedParameterDescriptor>();
var queryModel = new QueryParser(new ExpressionTreeParser(MethodCallExpressionNodeTypeRegistry.CreateDefault())).GetParsedQuery(_expression);
- _commandData = QueryModelVisitor.GenerateHqlQuery(queryModel);
+ _commandData = QueryModelVisitor.GenerateHqlQuery(queryModel, _queryParameters, requiredHqlParameters);
+ Parameters = requiredHqlParameters.AsReadOnly();
+
return _commandData.Statement.AstNode;
}
public string Key { get; private set; }
+ public IList<NamedParameterDescriptor> Parameters { get; private set; }
+
+ public ICollection<NamedParameter> ParameterValues { get; private set; }
+
public NhLinqExpressionReturnType ReturnType { get; private set; }
public System.Type Type { get; private set; }
public void SetQueryParametersPriorToExecute(QueryImpl impl)
{
- _commandData.SetParameters(impl);
+ _commandData.SetParameters(impl, _queryParameterValues);
_commandData.SetResultTransformer(impl);
_commandData.AddAdditionalCriteria(impl);
}
}
+
+ public class ExpressionParameterVisitor : ExpressionTreeVisitor
+ {
+ private readonly Dictionary<ConstantExpression, NamedParameter> _parameters = new Dictionary<ConstantExpression, NamedParameter>();
+
+ public static IDictionary<ConstantExpression, NamedParameter> Visit(Expression expression)
+ {
+ var visitor = new ExpressionParameterVisitor();
+
+ visitor.VisitExpression(expression);
+
+ return visitor._parameters;
+ }
+
+ protected override Expression VisitConstantExpression(ConstantExpression expression)
+ {
+ if (!typeof(IQueryable).IsAssignableFrom(expression.Type))
+ {
+ _parameters.Add(expression, new NamedParameter("p" + (_parameters.Count + 1), expression.Value));
+ }
+
+ return base.VisitConstantExpression(expression);
+ }
+ }
}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/Linq/ProjectionEvaluator.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Linq/ProjectionEvaluator.cs 2009-10-18 21:21:57 UTC (rev 4793)
+++ trunk/nhibernate/src/NHibernate/Linq/ProjectionEvaluator.cs 2009-10-22 14:52:39 UTC (rev 4794)
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
+using NHibernate.Engine.Query;
using NHibernate.Hql.Ast;
using Remotion.Data.Linq.Parsing;
@@ -10,18 +11,20 @@
{
protected readonly HqlTreeBuilder _hqlTreeBuilder;
protected readonly HqlNodeStack _stack;
- private readonly ParameterAggregator _parameterAggregator;
private HashSet<Expression> _hqlNodes;
private readonly ParameterExpression _inputParameter;
private readonly Func<Expression, bool> _predicate;
- private int _iColumn;
+ private readonly IDictionary<ConstantExpression, NamedParameter> _parameters;
+ private readonly IList<NamedParameterDescriptor> _requiredHqlParameters;
+ private int _iColumn;
- public ProjectionEvaluator(ParameterAggregator parameterAggregator, System.Type inputType, Func<Expression, bool> predicate)
+ public ProjectionEvaluator(System.Type inputType, Func<Expression, bool> predicate, IDictionary<ConstantExpression, NamedParameter> parameters, IList<NamedParameterDescriptor> requiredHqlParameters)
{
- _parameterAggregator = parameterAggregator;
_inputParameter = Expression.Parameter(inputType, "input");
_predicate = predicate;
- _hqlTreeBuilder = new HqlTreeBuilder();
+ _parameters = parameters;
+ _requiredHqlParameters = requiredHqlParameters;
+ _hqlTreeBuilder = new HqlTreeBuilder();
_stack = new HqlNodeStack(_hqlTreeBuilder);
}
@@ -56,7 +59,7 @@
if (_hqlNodes.Contains(expression))
{
// Pure HQL evaluation
- var hqlVisitor = new HqlGeneratorExpressionTreeVisitor(_parameterAggregator);
+ var hqlVisitor = new HqlGeneratorExpressionTreeVisitor(_parameters, _requiredHqlParameters);
hqlVisitor.Visit(expression);
hqlVisitor.GetHqlTreeNodes().ForEach(n =>_stack.PushLeaf(n) );
Modified: trunk/nhibernate/src/NHibernate/Linq/QueryModelVisitor.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Linq/QueryModelVisitor.cs 2009-10-18 21:21:57 UTC (rev 4793)
+++ trunk/nhibernate/src/NHibernate/Linq/QueryModelVisitor.cs 2009-10-22 14:52:39 UTC (rev 4794)
@@ -3,6 +3,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
+using NHibernate.Engine.Query;
using NHibernate.Hql.Ast;
using Remotion.Data.Linq;
using Remotion.Data.Linq.Clauses;
@@ -14,7 +15,6 @@
public class QueryModelVisitor : QueryModelVisitorBase
{
private readonly HqlTreeBuilder _hqlTreeBuilder;
- private readonly ParameterAggregator _parameterAggregator;
private readonly List<Action<IQuery>> _additionalCriteria = new List<Action<IQuery>>();
private readonly List<LambdaExpression> _listTransformers = new List<LambdaExpression>();
@@ -27,20 +27,18 @@
private HqlSelect _selectClause;
private ResultOperatorProcessingMode _resultOperatorProcessingMode;
+ private readonly IDictionary<ConstantExpression, NamedParameter> _parameters;
+ private readonly IList<NamedParameterDescriptor> _requiredHqlParameters;
- private QueryModelVisitor(ParameterAggregator parameterAggregator)
+ private QueryModelVisitor(IDictionary<ConstantExpression, NamedParameter> parameters, IList<NamedParameterDescriptor> requiredHqlParameters)
{
+ _parameters = parameters;
+ _requiredHqlParameters = requiredHqlParameters;
_hqlTreeBuilder = new HqlTreeBuilder();
- _parameterAggregator = parameterAggregator;
}
- public static CommandData GenerateHqlQuery(QueryModel queryModel)
+ public static CommandData GenerateHqlQuery(QueryModel queryModel, IDictionary<ConstantExpression, NamedParameter> parameters, IList<NamedParameterDescriptor> requiredHqlParameters)
{
- return GenerateHqlQuery(queryModel, new ParameterAggregator());
- }
-
- public static CommandData GenerateHqlQuery(QueryModel queryModel, ParameterAggregator aggregator)
- {
// Merge aggregating result operators (distinct, count, sum etc) into the select clause
new MergeAggregatingResultsRewriter().ReWrite(queryModel);
@@ -56,7 +54,7 @@
// Flatten pointless subqueries
new QueryReferenceExpressionFlattener().ReWrite(queryModel);
- var visitor = new QueryModelVisitor(aggregator);
+ var visitor = new QueryModelVisitor(parameters, requiredHqlParameters);
visitor.VisitQueryModel(queryModel);
return visitor.GetHqlCommand();
}
@@ -100,7 +98,6 @@
}
return new CommandData(query,
- _parameterAggregator.GetParameters(),
_itemTransformers,
_listTransformers,
_additionalCriteria);
@@ -144,7 +141,7 @@
public override void VisitMainFromClause(MainFromClause fromClause, QueryModel queryModel)
{
- var visitor = new HqlGeneratorExpressionTreeVisitor(_parameterAggregator);
+ var visitor = new HqlGeneratorExpressionTreeVisitor(_parameters, _requiredHqlParameters);
visitor.Visit(fromClause.FromExpression);
_fromClauses.Add(_hqlTreeBuilder.Range(
@@ -278,7 +275,7 @@
private void ProcessGroupByOperator(GroupResultOperator resultOperator)
{
- var visitor = new HqlGeneratorExpressionTreeVisitor(_parameterAggregator);
+ var visitor = new HqlGeneratorExpressionTreeVisitor(_parameters, _requiredHqlParameters);
visitor.Visit(resultOperator.KeySelector);
_groupByClause = _hqlTreeBuilder.GroupBy();
_groupByClause.AddChild(visitor.GetHqlTreeNodes().Single());
@@ -301,7 +298,7 @@
return;
}
- var visitor = new ProjectionEvaluator(_parameterAggregator, typeof(object[]), CanBeEvaluatedInHqlSelectStatement);
+ var visitor = new ProjectionEvaluator(typeof(object[]), CanBeEvaluatedInHqlSelectStatement, _parameters, _requiredHqlParameters);
visitor.Visit(selectClause.Selector);
@@ -318,7 +315,7 @@
public override void VisitWhereClause(WhereClause whereClause, QueryModel queryModel, int index)
{
// Visit the predicate to build the query
- var visitor = new HqlGeneratorExpressionTreeVisitor(_parameterAggregator);
+ var visitor = new HqlGeneratorExpressionTreeVisitor(_parameters, _requiredHqlParameters);
visitor.Visit(whereClause.Predicate);
// There maybe a where clause in existence already, in which case we AND with it.
@@ -331,7 +328,7 @@
foreach (Ordering clause in orderByClause.Orderings)
{
- var visitor = new HqlGeneratorExpressionTreeVisitor(_parameterAggregator);
+ var visitor = new HqlGeneratorExpressionTreeVisitor(_parameters, _requiredHqlParameters);
visitor.Visit(clause.Expression);
_orderByClause.AddChild(visitor.GetHqlTreeNodes().Single());
@@ -345,13 +342,13 @@
public override void VisitJoinClause(JoinClause joinClause, QueryModel queryModel, int index)
{
- var fromVisitor = new HqlGeneratorExpressionTreeVisitor(_parameterAggregator);
+ var fromVisitor = new HqlGeneratorExpressionTreeVisitor(_parameters, _requiredHqlParameters);
fromVisitor.Visit(joinClause.InnerSequence);
- var innerKey = new HqlGeneratorExpressionTreeVisitor(_parameterAggregator);
+ var innerKey = new HqlGeneratorExpressionTreeVisitor(_parameters, _requiredHqlParameters);
innerKey.Visit(joinClause.InnerKeySelector);
- var outerKey = new HqlGeneratorExpressionTreeVisitor(_parameterAggregator);
+ var outerKey = new HqlGeneratorExpressionTreeVisitor(_parameters, _requiredHqlParameters);
outerKey.Visit(joinClause.OuterKeySelector);
_whereClauses.Add(_hqlTreeBuilder.Equality(innerKey.GetHqlTreeNodes().Single(), outerKey.GetHqlTreeNodes().Single()));
@@ -369,7 +366,7 @@
if (member.Expression is QuerySourceReferenceExpression)
{
// It's a join
- var visitor = new HqlGeneratorExpressionTreeVisitor(_parameterAggregator);
+ var visitor = new HqlGeneratorExpressionTreeVisitor(_parameters, _requiredHqlParameters);
visitor.Visit(fromClause.FromExpression);
_fromClauses.Add(_hqlTreeBuilder.Join(
Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-10-18 21:21:57 UTC (rev 4793)
+++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-10-22 14:52:39 UTC (rev 4794)
@@ -569,6 +569,7 @@
<Compile Include="Criterion\QueryOver.cs" />
<Compile Include="Impl\ExpressionProcessor.cs" />
<Compile Include="Impl\SessionIdLoggingContext.cs" />
+ <Compile Include="Linq\ExpressionKeyVisitor.cs" />
<Compile Include="Linq\GroupByAggregateDetectionVisitor.cs" />
<Compile Include="Linq\AggregatingGroupByRewriter.cs" />
<Compile Include="Linq\AggregatingGroupJoinRewriter.cs" />
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-10-18 21:21:57 UTC (rev 4793)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-10-22 14:52:39 UTC (rev 4794)
@@ -62,6 +62,10 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\net\3.5\nunit.framework.dll</HintPath>
</Reference>
+ <Reference Include="Remotion.Data.Linq, Version=1.13.9.2, Culture=neutral, PublicKeyToken=cab60358ab4081ea, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\..\lib\net\3.5\Remotion.Data.Linq.dll</HintPath>
+ </Reference>
<Reference Include="System" />
<Reference Include="System.configuration" />
<Reference Include="System.Core">
@@ -383,6 +387,7 @@
<Compile Include="Linq\Entities\Territory.cs" />
<Compile Include="Linq\LinqQuerySamples.cs" />
<Compile Include="Linq\LinqTestCase.cs" />
+ <Compile Include="Linq\ParameterisedQueries.cs" />
<Compile Include="Linq\ReadonlyTestCase.cs" />
<Compile Include="MappingTest\NonReflectiveBinderFixture.cs" />
<Compile Include="MappingTest\Wicked.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|