From 98fa89400e5694ae618963f72c2bba5402fd5c4a Mon Sep 17 00:00:00 2001 From: Marius Balteanu Date: Sat, 11 Nov 2023 06:00:20 +0000 Subject: [PATCH] Fix an expression of non-boolean type specified in a context where a condition is expected when MSSQL is used (#39443). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Patch by Pavel Rosický. git-svn-id: https://svn.redmine.org/redmine/trunk@22417 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/issue_query.rb | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb index 235bf2fbe..9e1e1c432 100644 --- a/app/models/issue_query.rb +++ b/app/models/issue_query.rb @@ -566,11 +566,12 @@ class IssueQuery < Query when "*", "!*" # Member / Not member sw = operator == "!*" ? 'NOT' : '' nl = operator == "!*" ? "#{Issue.table_name}.assigned_to_id IS NULL OR" : '' + subquery = - "SELECT DISTINCT #{Member.table_name}.user_id" + + "SELECT 1" + " FROM #{Member.table_name}" + - " WHERE #{Member.table_name}.project_id = #{Issue.table_name}.project_id" - "(#{nl} #{Issue.table_name}.assigned_to_id #{sw} IN (#{subquery}))" + " WHERE #{Issue.table_name}.project_id = #{Member.table_name}.project_id AND #{Member.table_name}.user_id = #{Issue.table_name}.assigned_to_id" + "(#{nl} #{sw} EXISTS (#{subquery}))" when "=", "!" role_cond = if value.any? @@ -581,10 +582,10 @@ class IssueQuery < Query sw = operator == "!" ? 'NOT' : '' nl = operator == "!" ? "#{Issue.table_name}.assigned_to_id IS NULL OR" : '' subquery = - "SELECT DISTINCT #{Member.table_name}.user_id, #{Member.table_name}.project_id" + - " FROM #{Member.table_name}, #{MemberRole.table_name}" + - " WHERE #{Member.table_name}.id = #{MemberRole.table_name}.member_id AND #{role_cond}" - "(#{nl} (#{Issue.table_name}.assigned_to_id, #{Issue.table_name}.project_id) #{sw} IN (#{subquery}))" + "SELECT 1" + + " FROM #{Member.table_name} inner join #{MemberRole.table_name} on members.id = member_roles.member_id" + + " WHERE #{Issue.table_name}.project_id = #{Member.table_name}.project_id AND #{Member.table_name}.user_id = #{Issue.table_name}.assigned_to_id AND #{role_cond}" + "(#{nl} #{sw} EXISTS (#{subquery}))" end end