|
From: <fab...@us...> - 2011-04-08 05:24:55
|
Revision: 5637
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5637&view=rev
Author: fabiomaulo
Date: 2011-04-08 05:24:48 +0000 (Fri, 08 Apr 2011)
Log Message:
-----------
Minor refactoring (class renaming thinking in NH-2611)
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Linq/LinqExtensionMethods.cs
trunk/nhibernate/src/NHibernate/Linq/NhQueryable.cs
trunk/nhibernate/src/NHibernate/NHibernate.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate/Linq/DefaultQueryProvider.cs
Removed Paths:
-------------
trunk/nhibernate/src/NHibernate/Linq/NhQueryProvider.cs
Copied: trunk/nhibernate/src/NHibernate/Linq/DefaultQueryProvider.cs (from rev 5634, trunk/nhibernate/src/NHibernate/Linq/NhQueryProvider.cs)
===================================================================
--- trunk/nhibernate/src/NHibernate/Linq/DefaultQueryProvider.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Linq/DefaultQueryProvider.cs 2011-04-08 05:24:48 UTC (rev 5637)
@@ -0,0 +1,177 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Reflection;
+using NHibernate.Engine;
+using NHibernate.Impl;
+using NHibernate.Type;
+
+namespace NHibernate.Linq
+{
+ public class DefaultQueryProvider : IQueryProvider
+ {
+ private readonly ISessionImplementor _session;
+
+ public DefaultQueryProvider(ISessionImplementor session)
+ {
+ _session = session;
+ }
+
+ public object Execute(Expression expression)
+ {
+ IQuery query;
+ NhLinqExpression nhQuery;
+ NhLinqExpression nhLinqExpression = PrepareQuery(expression, out query, out nhQuery);
+
+ return ExecuteQuery(nhLinqExpression, query, nhQuery);
+ }
+
+ public object ExecuteFuture(Expression expression)
+ {
+ IQuery query;
+ NhLinqExpression nhQuery;
+ NhLinqExpression nhLinqExpression = PrepareQuery(expression, out query, out nhQuery);
+ return ExecuteFutureQuery(nhLinqExpression, query, nhQuery);
+ }
+
+ private NhLinqExpression PrepareQuery(Expression expression, out IQuery query, out NhLinqExpression nhQuery)
+ {
+ var nhLinqExpression = new NhLinqExpression(expression);
+
+ query = _session.CreateQuery(nhLinqExpression);
+
+ nhQuery = query.As<ExpressionQueryImpl>().QueryExpression.As<NhLinqExpression>();
+
+ SetParameters(query, nhLinqExpression.ParameterValuesByName);
+ SetResultTransformerAndAdditionalCriteria(query, nhQuery, nhLinqExpression.ParameterValuesByName);
+ return nhLinqExpression;
+ }
+
+ private object ExecuteFutureQuery(NhLinqExpression nhLinqExpression, IQuery query, NhLinqExpression nhQuery)
+ {
+ MethodInfo method;
+ if (nhLinqExpression.ReturnType == NhLinqExpressionReturnType.Sequence)
+ {
+ method = typeof (IQuery).GetMethod("Future").MakeGenericMethod(nhQuery.Type);
+ }
+ else
+ {
+ method = typeof(IQuery).GetMethod("FutureValue").MakeGenericMethod(nhQuery.Type);
+ }
+
+ var result = method.Invoke(query, new object[0]);
+
+
+
+ if (nhQuery.ExpressionToHqlTranslationResults.PostExecuteTransformer != null)
+ {
+ ((IDelayedValue) result).ExecuteOnEval = nhQuery.ExpressionToHqlTranslationResults.PostExecuteTransformer;
+ }
+
+ return result;
+
+ }
+
+ private object ExecuteQuery(NhLinqExpression nhLinqExpression, IQuery query, NhLinqExpression nhQuery)
+ {
+ var results = query.List();
+
+ if (nhQuery.ExpressionToHqlTranslationResults.PostExecuteTransformer != null)
+ {
+ try
+ {
+ return nhQuery.ExpressionToHqlTranslationResults.PostExecuteTransformer.DynamicInvoke(results.AsQueryable());
+ }
+ catch (TargetInvocationException e)
+ {
+ throw e.InnerException;
+ }
+ }
+
+ if (nhLinqExpression.ReturnType == NhLinqExpressionReturnType.Sequence)
+ {
+ return results.AsQueryable();
+ }
+
+ return results[0];
+ }
+
+ public TResult Execute<TResult>(Expression expression)
+ {
+ return (TResult) Execute(expression);
+ }
+
+ public IQueryable CreateQuery(Expression expression)
+ {
+ var m = ReflectionHelper.GetMethodDefinition((DefaultQueryProvider p) => p.CreateQuery<object>(null)).MakeGenericMethod(expression.Type.GetGenericArguments()[0]);
+
+ return (IQueryable) m.Invoke(this, new[] {expression});
+ }
+
+ public IQueryable<T> CreateQuery<T>(Expression expression)
+ {
+ return new NhQueryable<T>(this, expression);
+ }
+
+ static void SetParameters(IQuery query, IDictionary<string, Tuple<object, IType>> parameters)
+ {
+ foreach (var parameterName in query.NamedParameters)
+ {
+ var param = parameters[parameterName];
+
+ if (param.First == null)
+ {
+ if (typeof(ICollection).IsAssignableFrom(param.Second.ReturnedClass))
+ {
+ query.SetParameterList(parameterName, null, param.Second);
+ }
+ else
+ {
+ query.SetParameter(parameterName, null, param.Second);
+ }
+ }
+ else
+ {
+ if (param.First is ICollection)
+ {
+ query.SetParameterList(parameterName, (ICollection) param.First);
+ }
+ else if (param.Second != null)
+ {
+ query.SetParameter(parameterName, param.First, param.Second);
+ }
+ else
+ {
+ query.SetParameter(parameterName, param.First);
+ }
+ }
+ }
+ }
+
+ public void SetResultTransformerAndAdditionalCriteria(IQuery query, NhLinqExpression nhExpression, IDictionary<string, Tuple<object, IType>> parameters)
+ {
+ query.SetResultTransformer(nhExpression.ExpressionToHqlTranslationResults.ResultTransformer);
+
+ foreach (var criteria in nhExpression.ExpressionToHqlTranslationResults.AdditionalCriteria)
+ {
+ criteria(query, parameters);
+ }
+ }
+ }
+
+ public class Tuple<T1, T2>
+ {
+ public T1 First { get; set; }
+ public T2 Second { get; set; }
+
+ }
+
+ public class Tuple<T1, T2, T3>
+ {
+ public T1 First { get; set; }
+ public T2 Second { get; set; }
+ public T3 Third { get; set; }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/Linq/LinqExtensionMethods.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Linq/LinqExtensionMethods.cs 2011-04-08 05:11:33 UTC (rev 5636)
+++ trunk/nhibernate/src/NHibernate/Linq/LinqExtensionMethods.cs 2011-04-08 05:24:48 UTC (rev 5637)
@@ -53,7 +53,7 @@
throw new NotSupportedException("You can also use the AsFuture() method on NhQueryable");
- var future = ((NhQueryProvider)nhQueryable.Provider).ExecuteFuture(nhQueryable.Expression);
+ var future = ((DefaultQueryProvider)nhQueryable.Provider).ExecuteFuture(nhQueryable.Expression);
return (IEnumerable<T>)future;
}
@@ -63,7 +63,7 @@
if (nhQueryable == null)
throw new NotSupportedException("You can also use the AsFuture() method on NhQueryable");
- var future = ((NhQueryProvider)nhQueryable.Provider).ExecuteFuture(nhQueryable.Expression);
+ var future = ((DefaultQueryProvider)nhQueryable.Provider).ExecuteFuture(nhQueryable.Expression);
if(future is DelayedEnumerator<T>)
{
return new FutureValue<T>(() => ((IEnumerable<T>) future));
Deleted: trunk/nhibernate/src/NHibernate/Linq/NhQueryProvider.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Linq/NhQueryProvider.cs 2011-04-08 05:11:33 UTC (rev 5636)
+++ trunk/nhibernate/src/NHibernate/Linq/NhQueryProvider.cs 2011-04-08 05:24:48 UTC (rev 5637)
@@ -1,177 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-using System.Linq.Expressions;
-using System.Reflection;
-using NHibernate.Engine;
-using NHibernate.Impl;
-using NHibernate.Type;
-
-namespace NHibernate.Linq
-{
- public class NhQueryProvider : IQueryProvider
- {
- private readonly ISessionImplementor _session;
-
- public NhQueryProvider(ISessionImplementor session)
- {
- _session = session;
- }
-
- public object Execute(Expression expression)
- {
- IQuery query;
- NhLinqExpression nhQuery;
- NhLinqExpression nhLinqExpression = PrepareQuery(expression, out query, out nhQuery);
-
- return ExecuteQuery(nhLinqExpression, query, nhQuery);
- }
-
- public object ExecuteFuture(Expression expression)
- {
- IQuery query;
- NhLinqExpression nhQuery;
- NhLinqExpression nhLinqExpression = PrepareQuery(expression, out query, out nhQuery);
- return ExecuteFutureQuery(nhLinqExpression, query, nhQuery);
- }
-
- private NhLinqExpression PrepareQuery(Expression expression, out IQuery query, out NhLinqExpression nhQuery)
- {
- var nhLinqExpression = new NhLinqExpression(expression);
-
- query = _session.CreateQuery(nhLinqExpression);
-
- nhQuery = query.As<ExpressionQueryImpl>().QueryExpression.As<NhLinqExpression>();
-
- SetParameters(query, nhLinqExpression.ParameterValuesByName);
- SetResultTransformerAndAdditionalCriteria(query, nhQuery, nhLinqExpression.ParameterValuesByName);
- return nhLinqExpression;
- }
-
- private object ExecuteFutureQuery(NhLinqExpression nhLinqExpression, IQuery query, NhLinqExpression nhQuery)
- {
- MethodInfo method;
- if (nhLinqExpression.ReturnType == NhLinqExpressionReturnType.Sequence)
- {
- method = typeof (IQuery).GetMethod("Future").MakeGenericMethod(nhQuery.Type);
- }
- else
- {
- method = typeof(IQuery).GetMethod("FutureValue").MakeGenericMethod(nhQuery.Type);
- }
-
- var result = method.Invoke(query, new object[0]);
-
-
-
- if (nhQuery.ExpressionToHqlTranslationResults.PostExecuteTransformer != null)
- {
- ((IDelayedValue) result).ExecuteOnEval = nhQuery.ExpressionToHqlTranslationResults.PostExecuteTransformer;
- }
-
- return result;
-
- }
-
- private object ExecuteQuery(NhLinqExpression nhLinqExpression, IQuery query, NhLinqExpression nhQuery)
- {
- var results = query.List();
-
- if (nhQuery.ExpressionToHqlTranslationResults.PostExecuteTransformer != null)
- {
- try
- {
- return nhQuery.ExpressionToHqlTranslationResults.PostExecuteTransformer.DynamicInvoke(results.AsQueryable());
- }
- catch (TargetInvocationException e)
- {
- throw e.InnerException;
- }
- }
-
- if (nhLinqExpression.ReturnType == NhLinqExpressionReturnType.Sequence)
- {
- return results.AsQueryable();
- }
-
- return results[0];
- }
-
- public TResult Execute<TResult>(Expression expression)
- {
- return (TResult) Execute(expression);
- }
-
- public IQueryable CreateQuery(Expression expression)
- {
- var m = ReflectionHelper.GetMethodDefinition((NhQueryProvider p) => p.CreateQuery<object>(null)).MakeGenericMethod(expression.Type.GetGenericArguments()[0]);
-
- return (IQueryable) m.Invoke(this, new[] {expression});
- }
-
- public IQueryable<T> CreateQuery<T>(Expression expression)
- {
- return new NhQueryable<T>(this, expression);
- }
-
- static void SetParameters(IQuery query, IDictionary<string, Tuple<object, IType>> parameters)
- {
- foreach (var parameterName in query.NamedParameters)
- {
- var param = parameters[parameterName];
-
- if (param.First == null)
- {
- if (typeof(ICollection).IsAssignableFrom(param.Second.ReturnedClass))
- {
- query.SetParameterList(parameterName, null, param.Second);
- }
- else
- {
- query.SetParameter(parameterName, null, param.Second);
- }
- }
- else
- {
- if (param.First is ICollection)
- {
- query.SetParameterList(parameterName, (ICollection) param.First);
- }
- else if (param.Second != null)
- {
- query.SetParameter(parameterName, param.First, param.Second);
- }
- else
- {
- query.SetParameter(parameterName, param.First);
- }
- }
- }
- }
-
- public void SetResultTransformerAndAdditionalCriteria(IQuery query, NhLinqExpression nhExpression, IDictionary<string, Tuple<object, IType>> parameters)
- {
- query.SetResultTransformer(nhExpression.ExpressionToHqlTranslationResults.ResultTransformer);
-
- foreach (var criteria in nhExpression.ExpressionToHqlTranslationResults.AdditionalCriteria)
- {
- criteria(query, parameters);
- }
- }
- }
-
- public class Tuple<T1, T2>
- {
- public T1 First { get; set; }
- public T2 Second { get; set; }
-
- }
-
- public class Tuple<T1, T2, T3>
- {
- public T1 First { get; set; }
- public T2 Second { get; set; }
- public T3 Third { get; set; }
- }
-}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/Linq/NhQueryable.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Linq/NhQueryable.cs 2011-04-08 05:11:33 UTC (rev 5636)
+++ trunk/nhibernate/src/NHibernate/Linq/NhQueryable.cs 2011-04-08 05:24:48 UTC (rev 5637)
@@ -12,7 +12,7 @@
{
// This constructor is called by our users, create a new IQueryExecutor.
public NhQueryable(ISessionImplementor session)
- : base(new NhQueryProvider(session))
+ : base(new DefaultQueryProvider(session))
{
}
Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-04-08 05:11:33 UTC (rev 5636)
+++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-04-08 05:24:48 UTC (rev 5637)
@@ -933,7 +933,7 @@
<Compile Include="Linq\Visitors\ExpressionParameterVisitor.cs" />
<Compile Include="Linq\NhLinqExpression.cs" />
<Compile Include="Linq\NhLinqExpressionReturnType.cs" />
- <Compile Include="Linq\NhQueryProvider.cs" />
+ <Compile Include="Linq\DefaultQueryProvider.cs" />
<Compile Include="Linq\Visitors\ExpressionKeyVisitor.cs" />
<Compile Include="Linq\GroupBy\GroupByAggregateDetectionVisitor.cs" />
<Compile Include="Linq\GroupBy\AggregatingGroupByRewriter.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|