mirror of
https://github.com/lidarr/lidarr.git
synced 2025-08-19 21:13:28 -07:00
rebased with Marr.Data
there is a broken test.
This commit is contained in:
parent
6e6df842a0
commit
261ce772de
8 changed files with 199 additions and 58 deletions
|
@ -30,6 +30,19 @@ namespace Marr.Data.QGen
|
|||
|
||||
public string Generate()
|
||||
{
|
||||
if (_innerQuery.IsView || _innerQuery.IsJoin)
|
||||
{
|
||||
return ComplexPaging();
|
||||
}
|
||||
else
|
||||
{
|
||||
return SimplePaging();
|
||||
}
|
||||
}
|
||||
|
||||
private string SimplePaging()
|
||||
{
|
||||
// Create paged query
|
||||
StringBuilder sql = new StringBuilder();
|
||||
|
||||
_innerQuery.BuildSelectClause(sql);
|
||||
|
@ -42,6 +55,28 @@ namespace Marr.Data.QGen
|
|||
return sql.ToString();
|
||||
}
|
||||
|
||||
private string ComplexPaging()
|
||||
{
|
||||
var baseTable = _innerQuery.Tables.First();
|
||||
|
||||
|
||||
StringBuilder sql = new StringBuilder();
|
||||
|
||||
_innerQuery.BuildSelectClause(sql);
|
||||
sql.Append(" FROM (");
|
||||
BuildSimpleInnerSelect(sql);
|
||||
_innerQuery.BuildFromClause(sql);
|
||||
_innerQuery.BuildWhereClause(sql);
|
||||
sql.AppendLine(String.Format("LIMIT {0},{1}", _skip, _take));
|
||||
sql.AppendFormat(") AS {0} ", _innerQuery.Dialect.CreateToken(baseTable.Alias));
|
||||
|
||||
_innerQuery.BuildJoinClauses(sql);
|
||||
|
||||
_innerQuery.BuildOrderClause(sql);
|
||||
|
||||
return sql.ToString();
|
||||
}
|
||||
|
||||
public void BuildSelectClause(StringBuilder sql)
|
||||
{
|
||||
List<string> appended = new List<string>();
|
||||
|
@ -86,5 +121,26 @@ namespace Marr.Data.QGen
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void BuildSimpleInnerSelect(StringBuilder sql)
|
||||
{
|
||||
sql.Append("SELECT ");
|
||||
int startIndex = sql.Length;
|
||||
|
||||
// COLUMNS
|
||||
var join = _innerQuery.Tables.First();
|
||||
|
||||
for (int i = 0; i < join.Columns.Count; i++)
|
||||
{
|
||||
var c = join.Columns[i];
|
||||
|
||||
if (sql.Length > startIndex)
|
||||
sql.Append(",");
|
||||
|
||||
string token = c.ColumnInfo.Name;
|
||||
sql.Append(_innerQuery.Dialect.CreateToken(token));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue