Fixes and closes #365: all SELECT queries have now a proper ORDER BY clause (especially ones with JOINs).

This commit is contained in:
Dario Solera 2009-10-09 17:09:41 +00:00
parent 061207cb60
commit 4262bfd884
8 changed files with 43 additions and 13 deletions

View file

@ -171,6 +171,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
string query = queryBuilder.SelectFrom("File", new string[] { "Name" });
query = queryBuilder.Where(query, "Directory", WhereOperator.Equals, "Directory");
query = queryBuilder.OrderBy(query, new [] { "Name" }, new[] { Ordering.Asc });
List<Parameter> parameters = new List<Parameter>(1);
parameters.Add(new Parameter(ParameterType.String, "Directory", directory));
@ -213,6 +214,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
string query = queryBuilder.SelectFrom("Directory", new string[] { "FullPath" });
query = queryBuilder.Where(query, "Parent", WhereOperator.Equals, "Parent");
query = queryBuilder.OrderBy(query, new[] { "FullPath" }, new[] { Ordering.Asc });
List<Parameter> parameters = new List<Parameter>(1);
parameters.Add(new Parameter(ParameterType.String, "Parent", directory));
@ -258,6 +260,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
List<Parameter> parameters = new List<Parameter>(1);
parameters.Add(new Parameter(ParameterType.String, "Parent", directory));
query = queryBuilder.OrderBy(query, new[] { "FullPath" }, new[] { Ordering.Asc });
DbCommand command = builder.GetCommand(transaction, query, parameters);
@ -850,7 +853,8 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
QueryBuilder queryBuilder = new QueryBuilder(builder);
string query = queryBuilder.SelectFrom("Attachment", new string[] { "Page" });
query = queryBuilder.GroupBy(query, new string[] { "Page" });
query = queryBuilder.GroupBy(query, new[] { "Page" });
query = queryBuilder.OrderBy(query, new[] { "Page" }, new[] { Ordering.Asc });
DbCommand command = builder.GetCommand(connString, query, new List<Parameter>());
@ -882,6 +886,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
string query = queryBuilder.SelectFrom("Attachment", new string[] { "Name" });
query = queryBuilder.Where(query, "Page", WhereOperator.Equals, "Page");
query = queryBuilder.OrderBy(query, new[] { "Name" }, new[] { Ordering.Asc });
List<Parameter> parameters = new List<Parameter>(1);
parameters.Add(new Parameter(ParameterType.String, "Page", pageInfo.FullName));
@ -919,6 +924,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
List<Parameter> parameters = new List<Parameter>(1);
parameters.Add(new Parameter(ParameterType.String, "Page", pageInfo.FullName));
query = queryBuilder.OrderBy(query, new[] { "Name" }, new[] { Ordering.Asc });
DbCommand command = builder.GetCommand(connection, query, parameters);

View file

@ -825,6 +825,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
query = queryBuilder.Where(query, "Namespace", "Name", WhereOperator.NotEquals, "Empty1");
query = queryBuilder.AndWhere(query, "Namespace", "DefaultPage", WhereOperator.IsNull, null, true, false);
query = queryBuilder.OrWhere(query, "Page", "Namespace", WhereOperator.NotEquals, "Empty2", false, true);
query = queryBuilder.OrderBy(query, new[] { "Namespace_Name" }, new[] { Ordering.Asc });
List<Parameter> parameters = new List<Parameter>(2);
parameters.Add(new Parameter(ParameterType.String, "Empty1", ""));
@ -1442,6 +1443,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
new string[] { "Name", "Namespace" }, new string[] { "Page" });
query = queryBuilder.Where(query, "CategoryBinding", "Namespace", WhereOperator.Equals, "Namespace");
query = queryBuilder.AndWhere(query, "CategoryBinding", "Page", WhereOperator.Equals, "Page");
query = queryBuilder.OrderBy(query, new[] { "Category_Name" }, new[] { Ordering.Asc });
List<Parameter> parameters = new List<Parameter>(2);
parameters.Add(new Parameter(ParameterType.String, "Namespace", nspace));
@ -1918,6 +1920,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
string query = queryBuilder.SelectFrom("Page");
query = queryBuilder.Where(query, "Namespace", WhereOperator.Equals, "Namespace");
query = queryBuilder.OrderBy(query, new[] { "Name" }, new[] { Ordering.Asc });
List<Parameter> parameters = new List<Parameter>(1);
parameters.Add(new Parameter(ParameterType.String, "Namespace", nspaceName));
@ -1958,6 +1961,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
List<Parameter> parameters = new List<Parameter>(1);
parameters.Add(new Parameter(ParameterType.String, "Namespace", nspaceName));
query = queryBuilder.OrderBy(query, new[] { "Name" }, new[] { Ordering.Asc });
DbCommand command = builder.GetCommand(connection, query, parameters);
@ -2004,10 +2008,10 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
ICommandBuilder builder = GetCommandBuilder();
QueryBuilder queryBuilder = new QueryBuilder(builder);
string query = queryBuilder.SelectFrom("Page");
query = queryBuilder.SelectFrom("Page", "CategoryBinding", "Name", "Page", Join.LeftJoin);
string query = queryBuilder.SelectFrom("Page", "CategoryBinding", "Name", "Page", Join.LeftJoin);
query = queryBuilder.Where(query, "CategoryBinding", "Category", WhereOperator.IsNull, null);
query = queryBuilder.AndWhere(query, "Page", "Namespace", WhereOperator.Equals, "Namespace");
query = queryBuilder.OrderBy(query, new[] { "Name" }, new[] { Ordering.Asc });
List<Parameter> parameters = new List<Parameter>(1);
parameters.Add(new Parameter(ParameterType.String, "Namespace", nspaceName));
@ -2237,6 +2241,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
query = queryBuilder.Where(query, "Page", WhereOperator.Equals, "Page");
query = queryBuilder.AndWhere(query, "Namespace", WhereOperator.Equals, "Namespace");
query = queryBuilder.AndWhere(query, "Revision", WhereOperator.GreaterThanOrEqualTo, "Revision");
query = queryBuilder.OrderBy(query, new[] { "Revision" }, new[] { Ordering.Asc });
List<Parameter> parameters = new List<Parameter>(3);
parameters.Add(new Parameter(ParameterType.String, "Page", name));
@ -2283,6 +2288,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
query = queryBuilder.Where(query, "Page", WhereOperator.Equals, "Page");
query = queryBuilder.AndWhere(query, "Namespace", WhereOperator.Equals, "Namespace");
query = queryBuilder.AndWhere(query, "Revision", WhereOperator.GreaterThanOrEqualTo, "Revision");
query = queryBuilder.OrderBy(query, new[] { "Revision" }, new[] { Ordering.Asc });
List<Parameter> parameters = new List<Parameter>(3);
parameters.Add(new Parameter(ParameterType.String, "Page", name));
@ -3088,7 +3094,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
string query = queryBuilder.SelectFrom("Message", new string[] { "Id", "Parent", "Username", "Subject", "DateTime", "Body" });
query = queryBuilder.Where(query, "Page", WhereOperator.Equals, "Page");
query = queryBuilder.AndWhere(query, "Namespace", WhereOperator.Equals, "Namespace");
query = queryBuilder.OrderBy(query, new string[] { "DateTime" }, new Ordering[] { Ordering.Asc });
query = queryBuilder.OrderBy(query, new string[] { "DateTime", "Id" }, new Ordering[] { Ordering.Asc, Ordering.Asc });
List<Parameter> parameters = new List<Parameter>(2);
parameters.Add(new Parameter(ParameterType.String, "Page", name));
@ -3164,7 +3170,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
string query = queryBuilder.SelectFrom("Message", new string[] { "Id", "Parent", "Username", "Subject", "DateTime", "Body" });
query = queryBuilder.Where(query, "Page", WhereOperator.Equals, "Page");
query = queryBuilder.AndWhere(query, "Namespace", WhereOperator.Equals, "Namespace");
query = queryBuilder.OrderBy(query, new string[] { "DateTime" }, new Ordering[] { Ordering.Asc });
query = queryBuilder.OrderBy(query, new string[] { "DateTime", "Id" }, new Ordering[] { Ordering.Asc, Ordering.Asc });
List<Parameter> parameters = new List<Parameter>(2);
parameters.Add(new Parameter(ParameterType.String, "Page", name));
@ -3996,7 +4002,9 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
public Snippet[] GetSnippets() {
ICommandBuilder builder = GetCommandBuilder();
string query = QueryBuilder.NewQuery(builder).SelectFrom("Snippet");
QueryBuilder queryBuilder = QueryBuilder.NewQuery(builder);
string query = queryBuilder.SelectFrom("Snippet");
query = queryBuilder.OrderBy(query, new[] { "Name" }, new[] { Ordering.Asc });
DbCommand command = builder.GetCommand(connString, query, new List<Parameter>());
@ -4194,7 +4202,9 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
public ContentTemplate[] GetContentTemplates() {
ICommandBuilder builder = GetCommandBuilder();
string query = QueryBuilder.NewQuery(builder).SelectFrom("ContentTemplate");
QueryBuilder queryBuilder = QueryBuilder.NewQuery(builder);
string query = queryBuilder.SelectFrom("ContentTemplate");
query = queryBuilder.OrderBy(query, new[] { "Name" }, new[] { Ordering.Asc });
DbCommand command = builder.GetCommand(connString, query, new List<Parameter>());

View file

@ -157,6 +157,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
public IDictionary<string, string> GetAllSettings() {
ICommandBuilder builder = GetCommandBuilder();
// Sorting order is not relevant
string query = QueryBuilder.NewQuery(builder).SelectFrom("Setting");
DbCommand command = builder.GetCommand(connString, query, new List<Parameter>());
@ -705,6 +706,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
public string[] ListPluginAssemblies() {
ICommandBuilder builder = GetCommandBuilder();
// Sort order is not relevant
string query = QueryBuilder.NewQuery(builder).SelectFrom("PluginAssembly", new string[] { "Name" });
DbCommand command = builder.GetCommand(connString, query, new List<Parameter>());
@ -1095,6 +1097,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
private AclEntry[] LoadDataInternal() {
ICommandBuilder builder = GetCommandBuilder();
// Sort order is not relevant
string query = QueryBuilder.NewQuery(builder).SelectFrom("AclEntry");
DbCommand command = builder.GetCommand(connString, query, new List<Parameter>());
@ -1257,6 +1260,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
string query = queryBuilder.SelectFrom("OutgoingLink", new string[] { "Destination" });
query = queryBuilder.Where(query, "Source", WhereOperator.Equals, "Source");
query = queryBuilder.OrderBy(query, new[] { "Destination" }, new[] { Ordering.Asc });
List<Parameter> parameters = new List<Parameter>(1);
parameters.Add(new Parameter(ParameterType.String, "Source", page));

View file

@ -35,10 +35,12 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
public UserInfo[] GetUsers() {
ICommandBuilder builder = GetCommandBuilder();
string query = QueryBuilder.NewQuery(builder).SelectFrom(
QueryBuilder queryBuilder = QueryBuilder.NewQuery(builder);
string query = queryBuilder.SelectFrom(
"User", "UserGroupMembership", "Username", "User", Join.LeftJoin,
new string[] { "Username", "DisplayName", "Email", "Active", "DateTime" },
new string[] { "UserGroup" });
query = queryBuilder.OrderBy(query, new[] { "User_Username" }, new[] { Ordering.Asc });
DbCommand command = builder.GetCommand(connString, query, new List<Parameter>());
@ -150,6 +152,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
string query = queryBuilder.SelectFrom("UserGroupMembership", new string[] { "UserGroup" });
query = queryBuilder.Where(query, "User", WhereOperator.Equals, "Username");
queryBuilder.OrderBy(query, new[] { "UserGroup_Name" }, new[] { Ordering.Asc });
List<Parameter> parameters = new List<Parameter>(1);
parameters.Add(new Parameter(ParameterType.String, "Username", username));
@ -184,6 +187,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
string query = queryBuilder.SelectFrom("UserGroupMembership", new string[] { "UserGroup" });
query = queryBuilder.Where(query, "User", WhereOperator.Equals, "Username");
queryBuilder.OrderBy(query, new[] { "UserGroup_Name" }, new[] { Ordering.Asc });
List<Parameter> parameters = new List<Parameter>(1);
parameters.Add(new Parameter(ParameterType.String, "Username", username));
@ -300,9 +304,11 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
public UserGroup[] GetUserGroups() {
ICommandBuilder builder = GetCommandBuilder();
string query = QueryBuilder.NewQuery(builder).SelectFrom(
QueryBuilder queryBuilder = QueryBuilder.NewQuery(builder);
string query = queryBuilder.SelectFrom(
"UserGroup", "UserGroupMembership", "Name", "UserGroup", Join.LeftJoin,
new string[] { "Name", "Description" }, new string[] { "User" });
query = queryBuilder.OrderBy(query, new[] { "UserGroup_Name", "UserGroupMembership_User" }, new[] { Ordering.Asc, Ordering.Asc });
DbCommand command = builder.GetCommand(connString, query, new List<Parameter>());
@ -395,6 +401,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
string query = queryBuilder.SelectFrom("UserGroupMembership", new string[] { "User" });
query = queryBuilder.Where(query, "UserGroup", WhereOperator.Equals, "UserGroup");
query = queryBuilder.OrderBy(query, new[] { "User" }, new[] { Ordering.Asc });
List<Parameter> parameters = new List<Parameter>(1);
parameters.Add(new Parameter(ParameterType.String, "UserGroup", group));
@ -429,6 +436,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
string query = queryBuilder.SelectFrom("UserGroupMembership", new string[] { "User" });
query = queryBuilder.Where(query, "UserGroup", WhereOperator.Equals, "UserGroup");
query = queryBuilder.OrderBy(query, new[] { "User" }, new[] { Ordering.Asc });
List<Parameter> parameters = new List<Parameter>(1);
parameters.Add(new Parameter(ParameterType.String, "UserGroup", group));
@ -1020,6 +1028,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
ICommandBuilder builder = GetCommandBuilder();
QueryBuilder queryBuilder = new QueryBuilder(builder);
// Sorting order is not relevant
string query = queryBuilder.SelectFrom("UserData", new string[] { "Key", "Data" });
query = queryBuilder.Where(query, "User", WhereOperator.Equals, "Username");
@ -1062,6 +1071,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlCommon {
new string[] { "Username", "DisplayName", "Email", "Active", "DateTime" }, new string[] { "Data" },
"UserGroupMembership", "User", Join.LeftJoin, new string[] { "UserGroup" });
query = queryBuilder.Where(query, "UserData", "Key", WhereOperator.Equals, "Key");
query = queryBuilder.OrderBy(query, new[] { "User_Username" }, new[] { Ordering.Asc });
List<Parameter> parameters = new List<Parameter>(1);
parameters.Add(new Parameter(ParameterType.String, "Key", key));

View file

@ -13,7 +13,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlServer {
/// </summary>
public class SqlServerFilesStorageProvider : SqlFilesStorageProviderBase {
private readonly ComponentInformation info = new ComponentInformation("SQL Server Files Storage Provider", "ScrewTurn Software", "3.0.0.180", "http://www.screwturn.eu", "http://www.screwturn.eu/Version/SQLServerProv/Files.txt");
private readonly ComponentInformation info = new ComponentInformation("SQL Server Files Storage Provider", "ScrewTurn Software", "3.0.0.341", "http://www.screwturn.eu", "http://www.screwturn.eu/Version/SQLServerProv/Files.txt");
private readonly SqlServerCommandBuilder commandBuilder = new SqlServerCommandBuilder();

View file

@ -13,7 +13,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlServer {
/// </summary>
public class SqlServerPagesStorageProvider : SqlPagesStorageProviderBase, IPagesStorageProviderV30 {
private readonly ComponentInformation info = new ComponentInformation("SQL Server Pages Storage Provider", "ScrewTurn Software", "3.0.0.237", "http://www.screwturn.eu", "http://www.screwturn.eu/Version/SQLServerProv/Pages.txt");
private readonly ComponentInformation info = new ComponentInformation("SQL Server Pages Storage Provider", "ScrewTurn Software", "3.0.0.341", "http://www.screwturn.eu", "http://www.screwturn.eu/Version/SQLServerProv/Pages.txt");
private readonly SqlServerCommandBuilder commandBuilder = new SqlServerCommandBuilder();

View file

@ -13,7 +13,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlServer {
/// </summary>
public class SqlServerSettingsStorageProvider : SqlSettingsStorageProviderBase {
private readonly ComponentInformation info = new ComponentInformation("SQL Server Settings Storage Provider", "ScrewTurn Software", "3.0.0.235", "http://www.screwturn.eu", "http://www.screwturn.eu/Version/SQLServerProv/Settings.txt");
private readonly ComponentInformation info = new ComponentInformation("SQL Server Settings Storage Provider", "ScrewTurn Software", "3.0.0.341", "http://www.screwturn.eu", "http://www.screwturn.eu/Version/SQLServerProv/Settings.txt");
private readonly SqlServerCommandBuilder commandBuilder = new SqlServerCommandBuilder();

View file

@ -13,7 +13,7 @@ namespace ScrewTurn.Wiki.Plugins.SqlServer {
/// </summary>
public class SqlServerUsersStorageProvider : SqlUsersStorageProviderBase, IUsersStorageProviderV30 {
private readonly ComponentInformation info = new ComponentInformation("SQL Server Users Storage Provider", "ScrewTurn Software", "3.0.0.180", "http://www.screwturn.eu", "http://www.screwturn.eu/Version/SQLServerProv/Users.txt");
private readonly ComponentInformation info = new ComponentInformation("SQL Server Users Storage Provider", "ScrewTurn Software", "3.0.0.341", "http://www.screwturn.eu", "http://www.screwturn.eu/Version/SQLServerProv/Users.txt");
private readonly SqlServerCommandBuilder commandBuilder = new SqlServerCommandBuilder();