|  |  |  | @ -825,6 +825,10 @@ public extension SessionThreadViewModel { | 
		
	
		
			
				|  |  |  |  |          | 
		
	
		
			
				|  |  |  |  |         let profileIdColumnLiteral: SQL = SQL(stringLiteral: Profile.Columns.id.name) | 
		
	
		
			
				|  |  |  |  |          | 
		
	
		
			
				|  |  |  |  |         let groupMemberProfileIdColumnLiteral: SQL = SQL(stringLiteral: GroupMember.Columns.profileId.name) | 
		
	
		
			
				|  |  |  |  |         let groupMemberRoleColumnLiteral: SQL = SQL(stringLiteral: GroupMember.Columns.role.name) | 
		
	
		
			
				|  |  |  |  |         let groupMemberGroupIdColumnLiteral: SQL = SQL(stringLiteral: GroupMember.Columns.groupId.name) | 
		
	
		
			
				|  |  |  |  |          | 
		
	
		
			
				|  |  |  |  |         /// **Note:** The `numColumnsBeforeProfiles` value **MUST** match the number of fields before | 
		
	
		
			
				|  |  |  |  |         /// the `ViewModel.contactProfileKey` entry below otherwise the query will fail to | 
		
	
		
			
				|  |  |  |  |         /// parse and might throw | 
		
	
	
		
			
				
					|  |  |  | @ -851,7 +855,8 @@ public extension SessionThreadViewModel { | 
		
	
		
			
				|  |  |  |  |                 \(ViewModel.closedGroupProfileBackFallbackKey).*, | 
		
	
		
			
				|  |  |  |  |                  | 
		
	
		
			
				|  |  |  |  |                 \(closedGroup[.name]) AS \(ViewModel.closedGroupNameKey), | 
		
	
		
			
				|  |  |  |  |                 (\(groupMember[.profileId]) IS NOT NULL) AS \(ViewModel.currentUserIsClosedGroupMemberKey), | 
		
	
		
			
				|  |  |  |  |                 (\(ViewModel.currentUserIsClosedGroupMemberKey).profileId IS NOT NULL) AS \(ViewModel.currentUserIsClosedGroupMemberKey), | 
		
	
		
			
				|  |  |  |  |                 (\(ViewModel.currentUserIsClosedGroupAdminKey).profileId IS NOT NULL) AS \(ViewModel.currentUserIsClosedGroupAdminKey), | 
		
	
		
			
				|  |  |  |  |                 \(openGroup[.name]) AS \(ViewModel.openGroupNameKey), | 
		
	
		
			
				|  |  |  |  |                 \(openGroup[.server]) AS \(ViewModel.openGroupServerKey), | 
		
	
		
			
				|  |  |  |  |                 \(openGroup[.roomToken]) AS \(ViewModel.openGroupRoomTokenKey), | 
		
	
	
		
			
				
					|  |  |  | @ -865,10 +870,15 @@ public extension SessionThreadViewModel { | 
		
	
		
			
				|  |  |  |  |             LEFT JOIN \(Profile.self) AS \(ViewModel.contactProfileKey) ON \(ViewModel.contactProfileKey).\(profileIdColumnLiteral) = \(thread[.id]) | 
		
	
		
			
				|  |  |  |  |             LEFT JOIN \(OpenGroup.self) ON \(openGroup[.threadId]) = \(thread[.id]) | 
		
	
		
			
				|  |  |  |  |             LEFT JOIN \(ClosedGroup.self) ON \(closedGroup[.threadId]) = \(thread[.id]) | 
		
	
		
			
				|  |  |  |  |             LEFT JOIN \(GroupMember.self) ON ( | 
		
	
		
			
				|  |  |  |  |                 \(SQL("\(groupMember[.role]) = \(GroupMember.Role.standard)")) AND | 
		
	
		
			
				|  |  |  |  |                 \(groupMember[.groupId]) = \(closedGroup[.threadId]) AND | 
		
	
		
			
				|  |  |  |  |                 \(SQL("\(groupMember[.profileId]) = \(userPublicKey)")) | 
		
	
		
			
				|  |  |  |  |             LEFT JOIN \(GroupMember.self) AS \(ViewModel.currentUserIsClosedGroupMemberKey) ON ( | 
		
	
		
			
				|  |  |  |  |                 \(SQL("\(ViewModel.currentUserIsClosedGroupMemberKey).\(groupMemberRoleColumnLiteral) != \(GroupMember.Role.zombie)")) AND | 
		
	
		
			
				|  |  |  |  |                 \(ViewModel.currentUserIsClosedGroupMemberKey).\(groupMemberGroupIdColumnLiteral) = \(closedGroup[.threadId]) AND | 
		
	
		
			
				|  |  |  |  |                 \(SQL("\(ViewModel.currentUserIsClosedGroupMemberKey).\(groupMemberProfileIdColumnLiteral) = \(userPublicKey)")) | 
		
	
		
			
				|  |  |  |  |             ) | 
		
	
		
			
				|  |  |  |  |             LEFT JOIN \(GroupMember.self) AS \(ViewModel.currentUserIsClosedGroupAdminKey) ON ( | 
		
	
		
			
				|  |  |  |  |                 \(SQL("\(ViewModel.currentUserIsClosedGroupAdminKey).\(groupMemberRoleColumnLiteral) = \(GroupMember.Role.admin)")) AND | 
		
	
		
			
				|  |  |  |  |                 \(ViewModel.currentUserIsClosedGroupAdminKey).\(groupMemberGroupIdColumnLiteral) = \(closedGroup[.threadId]) AND | 
		
	
		
			
				|  |  |  |  |                 \(SQL("\(ViewModel.currentUserIsClosedGroupAdminKey).\(groupMemberProfileIdColumnLiteral) = \(userPublicKey)")) | 
		
	
		
			
				|  |  |  |  |             ) | 
		
	
		
			
				|  |  |  |  |          | 
		
	
		
			
				|  |  |  |  |             LEFT JOIN \(Profile.self) AS \(ViewModel.closedGroupProfileFrontKey) ON ( | 
		
	
	
		
			
				
					|  |  |  | 
 |