|
From: <ste...@us...> - 2010-01-19 10:31:27
|
Revision: 4920
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4920&view=rev
Author: steverstrong
Date: 2010-01-19 10:31:20 +0000 (Tue, 19 Jan 2010)
Log Message:
-----------
Upgraded to latest re-linq version
Modified Paths:
--------------
trunk/nhibernate/lib/net/3.5/Remotion.Data.Linq.dll
trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeBuilder.cs
trunk/nhibernate/src/NHibernate/Linq/Functions/QueryableGenerator.cs
trunk/nhibernate/src/NHibernate/Linq/NhLinqExpression.cs
trunk/nhibernate/src/NHibernate/Linq/ResultOperators/ClientSideTransformOperator.cs
trunk/nhibernate/src/NHibernate/Linq/ResultTransformer.cs
trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs
trunk/nhibernate/src/NHibernate/Linq/Visitors/QueryModelVisitor.cs
trunk/nhibernate/src/NHibernate/NHibernate.csproj
trunk/nhibernate/src/NHibernate.Test/Linq/MethodCallTests.cs
Removed Paths:
-------------
trunk/nhibernate/lib/net/3.5/Remotion.Interfaces.dll
trunk/nhibernate/lib/net/3.5/Remotion.dll
Modified: trunk/nhibernate/lib/net/3.5/Remotion.Data.Linq.dll
===================================================================
(Binary files differ)
Deleted: trunk/nhibernate/lib/net/3.5/Remotion.Interfaces.dll
===================================================================
(Binary files differ)
Deleted: trunk/nhibernate/lib/net/3.5/Remotion.dll
===================================================================
(Binary files differ)
Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeBuilder.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeBuilder.cs 2010-01-17 19:31:11 UTC (rev 4919)
+++ trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeBuilder.cs 2010-01-19 10:31:20 UTC (rev 4920)
@@ -261,7 +261,7 @@
return new HqlBitwiseNot(_factory);
}
- public HqlBooleanNot Not(HqlBooleanExpression operand)
+ public HqlBooleanNot BooleanNot(HqlBooleanExpression operand)
{
return new HqlBooleanNot(_factory, operand);
}
Modified: trunk/nhibernate/src/NHibernate/Linq/Functions/QueryableGenerator.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Linq/Functions/QueryableGenerator.cs 2010-01-17 19:31:11 UTC (rev 4919)
+++ trunk/nhibernate/src/NHibernate/Linq/Functions/QueryableGenerator.cs 2010-01-19 10:31:20 UTC (rev 4920)
@@ -75,7 +75,7 @@
// All has two arguments. Arg 1 is the source and arg 2 is the predicate
var predicate = (LambdaExpression)arguments[1];
- return treeBuilder.Not(
+ return treeBuilder.BooleanNot(
treeBuilder.Exists(
treeBuilder.Query(
treeBuilder.SelectFrom(
@@ -86,7 +86,7 @@
)
),
treeBuilder.Where(
- treeBuilder.Not(visitor.Visit(arguments[1]).AsBooleanExpression())
+ treeBuilder.BooleanNot(visitor.Visit(arguments[1]).AsBooleanExpression())
)
)
)
Modified: trunk/nhibernate/src/NHibernate/Linq/NhLinqExpression.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Linq/NhLinqExpression.cs 2010-01-17 19:31:11 UTC (rev 4919)
+++ trunk/nhibernate/src/NHibernate/Linq/NhLinqExpression.cs 2010-01-19 10:31:20 UTC (rev 4920)
@@ -3,6 +3,7 @@
using System.Linq;
using System.Linq.Expressions;
using NHibernate.Engine.Query;
+using NHibernate.Hql.Ast;
using NHibernate.Hql.Ast.ANTLR.Tree;
using NHibernate.Linq.ResultOperators;
using NHibernate.Linq.Visitors;
@@ -71,7 +72,7 @@
ExpressionToHqlTranslationResults = QueryModelVisitor.GenerateHqlQuery(queryModel,
_constantToParameterMap,
- requiredHqlParameters);
+ requiredHqlParameters, true);
ParameterDescriptors = requiredHqlParameters.AsReadOnly();
_astNode = ExpressionToHqlTranslationResults.Statement.AstNode;
Modified: trunk/nhibernate/src/NHibernate/Linq/ResultOperators/ClientSideTransformOperator.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Linq/ResultOperators/ClientSideTransformOperator.cs 2010-01-17 19:31:11 UTC (rev 4919)
+++ trunk/nhibernate/src/NHibernate/Linq/ResultOperators/ClientSideTransformOperator.cs 2010-01-19 10:31:20 UTC (rev 4920)
@@ -1,4 +1,5 @@
using System;
+using System.Linq.Expressions;
using Remotion.Data.Linq.Clauses;
using Remotion.Data.Linq.Clauses.StreamedData;
@@ -20,5 +21,9 @@
{
throw new NotImplementedException();
}
+
+ public override void TransformExpressions(Func<Expression, Expression> transformation)
+ {
+ }
}
}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/Linq/ResultTransformer.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Linq/ResultTransformer.cs 2010-01-17 19:31:11 UTC (rev 4919)
+++ trunk/nhibernate/src/NHibernate/Linq/ResultTransformer.cs 2010-01-19 10:31:20 UTC (rev 4920)
@@ -3,7 +3,6 @@
using System.Linq;
using System.Linq.Expressions;
using NHibernate.Transform;
-using Remotion.Collections;
namespace NHibernate.Linq
{
Modified: trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs 2010-01-17 19:31:11 UTC (rev 4919)
+++ trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs 2010-01-19 10:31:20 UTC (rev 4920)
@@ -325,7 +325,7 @@
switch (expression.NodeType)
{
case ExpressionType.Not:
- return _hqlTreeBuilder.Not(VisitExpression(expression.Operand).AsBooleanExpression());
+ return _hqlTreeBuilder.BooleanNot(VisitExpression(expression.Operand).AsBooleanExpression());
case ExpressionType.Convert:
return VisitExpression(expression.Operand);
}
@@ -415,7 +415,7 @@
protected HqlTreeNode VisitSubQueryExpression(SubQueryExpression expression)
{
- ExpressionToHqlTranslationResults query = QueryModelVisitor.GenerateHqlQuery(expression.QueryModel, _parameters, _requiredHqlParameters);
+ ExpressionToHqlTranslationResults query = QueryModelVisitor.GenerateHqlQuery(expression.QueryModel, _parameters, _requiredHqlParameters, false);
return query.Statement;
}
Modified: trunk/nhibernate/src/NHibernate/Linq/Visitors/QueryModelVisitor.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Linq/Visitors/QueryModelVisitor.cs 2010-01-17 19:31:11 UTC (rev 4919)
+++ trunk/nhibernate/src/NHibernate/Linq/Visitors/QueryModelVisitor.cs 2010-01-19 10:31:20 UTC (rev 4920)
@@ -21,7 +21,7 @@
{
public class QueryModelVisitor : QueryModelVisitorBase
{
- public static ExpressionToHqlTranslationResults GenerateHqlQuery(QueryModel queryModel, IDictionary<ConstantExpression, NamedParameter> parameters, IList<NamedParameterDescriptor> requiredHqlParameters)
+ public static ExpressionToHqlTranslationResults GenerateHqlQuery(QueryModel queryModel, IDictionary<ConstantExpression, NamedParameter> parameters, IList<NamedParameterDescriptor> requiredHqlParameters, bool root)
{
// Remove unnecessary body operators
RemoveUnnecessaryBodyOperators.ReWrite(queryModel);
@@ -44,7 +44,7 @@
// Flatten pointless subqueries
QueryReferenceExpressionFlattener.ReWrite(queryModel);
- var visitor = new QueryModelVisitor(parameters, requiredHqlParameters);
+ var visitor = new QueryModelVisitor(parameters, requiredHqlParameters, root);
visitor.VisitQueryModel(queryModel);
return visitor.GetTranslation();
@@ -62,20 +62,28 @@
private readonly IDictionary<ConstantExpression, NamedParameter> _parameters;
private readonly IList<NamedParameterDescriptor> _requiredHqlParameters;
+ private readonly bool _root;
private bool _serverSide = true;
private HqlTreeNode _treeNode;
+ private System.Type _resultType;
- private QueryModelVisitor(IDictionary<ConstantExpression, NamedParameter> parameters, IList<NamedParameterDescriptor> requiredHqlParameters)
+ private QueryModelVisitor(IDictionary<ConstantExpression, NamedParameter> parameters, IList<NamedParameterDescriptor> requiredHqlParameters, bool root)
{
_parameters = parameters;
_requiredHqlParameters = requiredHqlParameters;
- _hqlTreeBuilder = new HqlTreeBuilder();
+ _root = root;
+ _hqlTreeBuilder = new HqlTreeBuilder();
_treeNode = _hqlTreeBuilder.Query(_hqlTreeBuilder.SelectFrom(_hqlTreeBuilder.From()));
}
public ExpressionToHqlTranslationResults GetTranslation()
{
+ if (_root)
+ {
+ DetectOuterExists();
+ }
+
return new ExpressionToHqlTranslationResults(_treeNode,
_itemTransformers,
_listTransformers,
@@ -83,6 +91,20 @@
_additionalCriteria);
}
+ private void DetectOuterExists()
+ {
+ if (_treeNode is HqlExists)
+ {
+ _treeNode = _treeNode.Children.First();
+
+ _additionalCriteria.Add((q, p) => q.SetMaxResults(1));
+
+ Expression<Func<IEnumerable<object>, bool>> x = l => l.Any();
+
+ _listTransformers.Add(x);
+ }
+ }
+
public override void VisitMainFromClause(MainFromClause fromClause, QueryModel queryModel)
{
AddFromClause(_hqlTreeBuilder.Range(
@@ -194,6 +216,14 @@
{
ProcessAggregateOperator((AggregateResultOperator)resultOperator);
}
+ else if (resultOperator is AnyResultOperator)
+ {
+ ProcessAnyOperator((AnyResultOperator) resultOperator);
+ }
+ else if (resultOperator is AllResultOperator)
+ {
+ ProcessAllOperator((AllResultOperator) resultOperator);
+ }
else
{
throw new NotSupportedException(string.Format("The {0} result operator is not current supported",
@@ -201,6 +231,20 @@
}
}
+ private void ProcessAllOperator(AllResultOperator resultOperator)
+ {
+ AddWhereClause(_hqlTreeBuilder.BooleanNot(
+ HqlGeneratorExpressionTreeVisitor.Visit(resultOperator.Predicate, _parameters,
+ _requiredHqlParameters).AsBooleanExpression()));
+
+ _treeNode = _hqlTreeBuilder.BooleanNot(_hqlTreeBuilder.Exists((HqlQuery)_treeNode));
+ }
+
+ private void ProcessAnyOperator(AnyResultOperator anyOperator)
+ {
+ _treeNode = _hqlTreeBuilder.Exists((HqlQuery) _treeNode);
+ }
+
private void ProcessContainsOperator(ContainsResultOperator resultOperator)
{
var itemExpression =
Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2010-01-17 19:31:11 UTC (rev 4919)
+++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2010-01-19 10:31:20 UTC (rev 4920)
@@ -55,10 +55,6 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\net\3.5\log4net.dll</HintPath>
</Reference>
- <Reference Include="Remotion, Version=1.13.9.2, Culture=neutral, PublicKeyToken=cab60358ab4081ea, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>..\..\lib\net\3.5\Remotion.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>
Modified: trunk/nhibernate/src/NHibernate.Test/Linq/MethodCallTests.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Linq/MethodCallTests.cs 2010-01-17 19:31:11 UTC (rev 4919)
+++ trunk/nhibernate/src/NHibernate.Test/Linq/MethodCallTests.cs 2010-01-19 10:31:20 UTC (rev 4920)
@@ -7,7 +7,6 @@
public class MethodCallTests : LinqTestCase
{
[Test]
- [Ignore("Waiting for re-linq support")]
public void CanExecuteAny()
{
bool result = db.Users.Any();
@@ -15,7 +14,6 @@
}
[Test]
- [Ignore("Waiting for re-linq support")]
public void CanExecuteAnyWithArguments()
{
bool result = db.Users.Any(u => u.Name == "user-does-not-exist");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|