From: <pa...@us...> - 2011-06-04 05:07:51
|
Revision: 5903 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5903&view=rev Author: patearl Date: 2011-06-04 05:07:45 +0000 (Sat, 04 Jun 2011) Log Message: ----------- Hql: Minor simplification to limit string generation that keeps the bulk of the logic in one place in the code and makes it easier to convert parameter limits into constant limits later. Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/SqlGenerator.cs Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/SqlGenerator.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/SqlGenerator.cs 2011-06-02 15:16:15 UTC (rev 5902) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/SqlGenerator.cs 2011-06-04 05:07:45 UTC (rev 5903) @@ -325,23 +325,6 @@ private SqlString GetSqlStringWithLimitsIfNeeded(QueryWriter queryWriter) { - SqlString sqlString = queryWriter.ToSqlString(); - var skipIsParameter = queryWriter.SkipParameter != null; - var takeIsParameter = queryWriter.TakeParameter != null; - var hqlQueryHasLimits = queryWriter.Take.HasValue || queryWriter.Skip.HasValue || skipIsParameter || takeIsParameter; - if (!hqlQueryHasLimits) - { - return sqlString; - } - - var dialect = sessionFactory.Dialect; - - // Skip-Take in HQL should be supported just for Dialect supporting variable limits at least when users use parameters for skip-take. - if (!dialect.SupportsVariableLimit && (skipIsParameter || takeIsParameter)) - { - throw new NotSupportedException("The dialect " + dialect.GetType().FullName + " does not supports variable limits"); - } - Parameter skipParameter = null; Parameter takeParameter = null; if(queryWriter.SkipParameter != null) @@ -358,8 +341,9 @@ } // We allow the user to specify either constants or parameters for their limits. - // The dialect can move the given parameters where he need, what it can't do is generates new parameters loosing the BackTrack. - return dialect.GetLimitString(sqlString, + // The dialect can move the given parameters where he need, what it can't do is generates new parameters, losing the BackTrack. + var dialect = sessionFactory.Dialect; + return dialect.GetLimitString(queryWriter.ToSqlString(), queryWriter.Skip.HasValue ? (int?) dialect.GetOffsetValue(queryWriter.Skip.Value) : null, queryWriter.Take.HasValue ? (int?) dialect.GetLimitValue(queryWriter.Skip ?? 0, queryWriter.Take.Value) : null, skipParameter, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |