From 4a39faeb39548536146ca1df91477411c16e9538 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 30 May 2013 17:30:32 -0700 Subject: [PATCH] Fixed paging ID10T issue --- Marr.Data/QGen/SqlitePagingQueryDecorator.cs | 23 ++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/Marr.Data/QGen/SqlitePagingQueryDecorator.cs b/Marr.Data/QGen/SqlitePagingQueryDecorator.cs index a152ede50..b1681d3b0 100644 --- a/Marr.Data/QGen/SqlitePagingQueryDecorator.cs +++ b/Marr.Data/QGen/SqlitePagingQueryDecorator.cs @@ -66,13 +66,14 @@ namespace Marr.Data.QGen sql.Append(" FROM ("); BuildSimpleInnerSelect(sql); _innerQuery.BuildFromClause(sql); + _innerQuery.BuildJoinClauses(sql); _innerQuery.BuildWhereClause(sql); - sql.AppendLine(String.Format("LIMIT {0},{1}", _skip, _take)); + BuildGroupBy(sql); + BuildOrderBy(sql); + sql.AppendFormat(" LIMIT {0},{1}", _skip, _take); sql.AppendFormat(") AS {0} ", _innerQuery.Dialect.CreateToken(baseTable.Alias)); _innerQuery.BuildJoinClauses(sql); - - _innerQuery.BuildOrderClause(sql); return sql.ToString(); } @@ -137,10 +138,24 @@ namespace Marr.Data.QGen if (sql.Length > startIndex) sql.Append(","); - string token = c.ColumnInfo.Name; + string token = string.Concat(join.Alias, ".", c.ColumnInfo.Name); sql.Append(_innerQuery.Dialect.CreateToken(token)); } } + + private void BuildOrderBy(StringBuilder sql) + { + sql.Append(_innerQuery.OrderBy.BuildQuery(false)); + } + + private void BuildGroupBy(StringBuilder sql) + { + var baseTable = _innerQuery.Tables.First(); + var primaryKeyColumn = baseTable.Columns.Single(c => c.ColumnInfo.IsPrimaryKey); + + string token = _innerQuery.Dialect.CreateToken(string.Concat(baseTable.Alias, ".", _innerQuery.NameOrAltName(primaryKeyColumn.ColumnInfo))); + sql.AppendFormat(" GROUP BY {0}", token); + } } }