Hi,

Are you still working on this?  Do you plan to submit your change to the 
project?

The reason I ask is I have extended the IngresDialect to support skip/take 
and this causing me issues too, works fine with Criteria selection but not 
via Linq (calling from WCF Data Services).  Spotted your change and applied 
to my local copy and it works like a dream.


On Tuesday, 19 June 2012 23:25:26 UTC+1, Moises Goncalves wrote:
>
> I'm still getting used to git, so I don't know how to create patches 
> on it yet. 
>
> I'm pasting here my temporary fix for the Skip/Take clauses when a 
> dialect support just constant limits. 
>
> Any advice is welcome. 
>
> using System.Linq.Expressions; 
> using NHibernate.Engine.Query; 
> using NHibernate.Param; 
> using Remotion.Linq.Clauses.ResultOperators; 
>
> namespace NHibernate.Linq.Visitors.ResultOperatorProcessors 
> { 
>         public class ProcessSkip : 
> IResultOperatorProcessor<SkipResultOperator> 
>         { 
>                 #region IResultOperatorProcessor<SkipResultOperator> 
> Members 
>
>                 public void Process(SkipResultOperator resultOperator, 
> QueryModelVisitor queryModelVisitor, IntermediateHqlTree tree) 
>                 { 
>                         VisitorParameters parameters = 
> queryModelVisitor.VisitorParameters; 
>                         NamedParameter namedParameter; 
>
> #warning TEMP. FIX FOR DIALECTS THAT SUPPORT CONSTANT LIMIT ONLY 
>             /** 
>              * Temporary fix for Skip for dialects that support 
> constant limiting only 
>              * */ 
>             if (parameters.SessionFactory.Dialect.SupportsLimit && ! 
> parameters.SessionFactory.Dialect.SupportsVariableLimit) 
>             { 
>   
> tree.AddSkipClause(tree.TreeBuilder.Constant(resultOperator.GetConstantCount()));
>  
>
>                 return; 
>             } 
>
>             if 
> (parameters.ConstantToParameterMap.TryGetValue(resultOperator.Count as 
> ConstantExpression, out namedParameter)) 
>                         { 
>                                 parameters.RequiredHqlParameters.Add(new 
> NamedParameterDescriptor(namedParameter.Name, null, false)); 
>   
> tree.AddSkipClause(tree.TreeBuilder.Parameter(namedParameter.Name)); 
>                         } 
>             else 
>             { 
>   
> tree.AddSkipClause(tree.TreeBuilder.Constant(resultOperator.GetConstantCount()));
>  
>
>             } 
>                 } 
>
>                 #endregion 
>         } 
> } 
>
>
>
> using System.Linq.Expressions; 
> using NHibernate.Engine.Query; 
> using NHibernate.Param; 
> using Remotion.Linq.Clauses.ResultOperators; 
>
> namespace NHibernate.Linq.Visitors.ResultOperatorProcessors 
> { 
>         public class ProcessTake : 
> IResultOperatorProcessor<TakeResultOperator> 
>         { 
>                 #region IResultOperatorProcessor<TakeResultOperator> 
> Members 
>
>                 public void Process(TakeResultOperator resultOperator, 
> QueryModelVisitor queryModelVisitor, IntermediateHqlTree tree) 
>                 { 
>                         VisitorParameters parameters = 
> queryModelVisitor.VisitorParameters; 
>                         NamedParameter namedParameter; 
>
> #warning TEMP. FIX FOR DIALECTS THAT SUPPORT CONSTANT LIMIT ONLY 
>
>             /** 
>              * Temporary fix for Take for dialects that support 
> constant limiting only 
>              * */ 
>             if (parameters.SessionFactory.Dialect.SupportsLimit && ! 
> parameters.SessionFactory.Dialect.SupportsVariableLimit) 
>             { 
>   
> tree.AddTakeClause(tree.TreeBuilder.Constant(resultOperator.GetConstantCount()));
>  
>
>                 return; 
>             } 
>
>                         if 
> (parameters.ConstantToParameterMap.TryGetValue(resultOperator.Count as 
> ConstantExpression, out namedParameter)) 
>                         { 
>                                 parameters.RequiredHqlParameters.Add(new 
> NamedParameterDescriptor(namedParameter.Name, null, false)); 
>          
> tree.AddTakeClause(tree.TreeBuilder.Parameter(namedParameter.Name)); 
>                         } 
>                         else 
>                         { 
>          
> tree.AddTakeClause(tree.TreeBuilder.Constant(resultOperator.GetConstantCount()));
>  
>
>                         } 
>                 } 
>
>                 #endregion 
>         } 
> }

Reply via email to