Skip to content

Commit 24ee723

Browse files
committed
NH-3336 - Fix error "MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery" by wrapping queries with limits into subquery
1 parent eb6067e commit 24ee723

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

src/NHibernate/Dialect/MySQLDialect.cs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Data;
3-
using System.Data.Common;
3+
using System.Data.Common;
4+
using System.Globalization;
45
using System.Text;
56
using NHibernate.Dialect.Function;
67
using NHibernate.Dialect.Schema;
@@ -177,10 +178,12 @@ public override bool SupportsSubSelects
177178
get { return false; }
178179
}
179180

180-
public override SqlString GetLimitString(SqlString queryString, SqlString offset, SqlString limit)
181-
{
182-
var pagingBuilder = new SqlStringBuilder(queryString);
183-
pagingBuilder.Add(" limit ");
181+
public override SqlString GetLimitString(SqlString queryString, SqlString offset, SqlString limit)
182+
{
183+
var pagingBuilder = new SqlStringBuilder()
184+
.Add("SELECT * FROM (")
185+
.Add(queryString)
186+
.Add(" limit ");
184187

185188
if (offset != null)
186189
{
@@ -191,8 +194,10 @@ public override SqlString GetLimitString(SqlString queryString, SqlString offset
191194
if (limit != null)
192195
pagingBuilder.Add(limit);
193196
else
194-
pagingBuilder.Add(int.MaxValue.ToString());
197+
pagingBuilder.Add(int.MaxValue.ToString(CultureInfo.InvariantCulture));
195198

199+
pagingBuilder.Add(") q_");
200+
196201
return pagingBuilder.ToSqlString();
197202
}
198203

0 commit comments

Comments
 (0)