From 0be81aa4e5e4168377ab89e00aab9d27b94d2a24 Mon Sep 17 00:00:00 2001 From: Shannon Date: Thu, 4 Aug 2016 18:01:57 +0200 Subject: [PATCH 1/2] U4-8786 Member search in listview returns error (7.5-beta2) --- .../Repositories/MediaRepository.cs | 8 ++++- .../Repositories/MemberRepository.cs | 29 +++++++++++++++++-- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs index 603bef04c8..3b18477caa 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs @@ -453,8 +453,14 @@ namespace Umbraco.Core.Persistence.Repositories Func> filterCallback = null; if (filter.IsNullOrWhiteSpace() == false) { - sbWhere.Append("AND (umbracoNode." + SqlSyntax.GetQuotedColumnName("text") + " LIKE @" + args.Count + ")"); + sbWhere + .Append("AND (umbracoNode.") + .Append(SqlSyntax.GetQuotedColumnName("text")) + .Append(" LIKE @") + .Append(args.Count) + .Append(")"); args.Add("%" + filter + "%"); + filterCallback = () => new Tuple(sbWhere.ToString().Trim(), args.ToArray()); } diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs index 5253e81a05..f14d66691b 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs @@ -622,9 +622,32 @@ namespace Umbraco.Core.Persistence.Repositories Func> filterCallback = null; if (filter.IsNullOrWhiteSpace() == false) { - sbWhere.Append("AND ((umbracoNode. " + SqlSyntax.GetQuotedColumnName("text") + " LIKE @" + args.Count + ") " + - "OR (cmsMember.LoginName LIKE @0" + args.Count + "))"); - args.Add("%" + filter + "%"); + //This will build up the where clause - even though the same 'filter' is being + //applied to both columns, the parameters values passed to PetaPoco need to be + //duplicated, otherwise it gets confused :/ + var columnFilters = new List> + { + new Tuple("umbracoNode", "text"), + new Tuple("cmsMember", "LoginName") + }; + sbWhere.Append("AND ("); + for (int i = 0; i < columnFilters.Count; i++) + { + sbWhere + .Append("(") + .Append(SqlSyntax.GetQuotedTableName(columnFilters[i].Item1)) + .Append(".") + .Append(SqlSyntax.GetQuotedColumnName(columnFilters[i].Item2)) + .Append(" LIKE @") + .Append(args.Count) + .Append(") "); + args.Add(string.Format("%{0}%", filter)); + if (i < (columnFilters.Count - 1)) + { + sbWhere.Append("OR "); + } + } + sbWhere.Append(")"); filterCallback = () => new Tuple(sbWhere.ToString().Trim(), args.ToArray()); } From 36a191464d2241f6e4cd4e961bf4d53ac63f3f24 Mon Sep 17 00:00:00 2001 From: Shannon Date: Fri, 5 Aug 2016 11:26:20 +0200 Subject: [PATCH 2/2] ensures table name is quoted properly --- src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs index 3b18477caa..97981849bc 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs @@ -454,7 +454,9 @@ namespace Umbraco.Core.Persistence.Repositories if (filter.IsNullOrWhiteSpace() == false) { sbWhere - .Append("AND (umbracoNode.") + .Append("AND (") + .Append(SqlSyntax.GetQuotedTableName("umbracoNode")) + .Append(".") .Append(SqlSyntax.GetQuotedColumnName("text")) .Append(" LIKE @") .Append(args.Count)