mirror of
				https://github.com/gyurix1968/guacamole-client.git
				synced 2025-10-31 17:13:21 +00:00 
			
		
		
		
	GUACAMOLE-220: Dynamically detect whether the MariaDB / MySQL server supports recursive CTEs.
This commit is contained in:
		| @@ -65,43 +65,76 @@ | ||||
|     <!-- Select names of all effective groups (including inherited) --> | ||||
|     <select id="selectEffectiveGroupIdentifiers" resultType="string"> | ||||
|  | ||||
|         WITH RECURSIVE related_entity(entity_id) AS ( | ||||
|                 SELECT | ||||
|                     guacamole_user_group.entity_id | ||||
|                 FROM guacamole_user_group | ||||
|                 JOIN guacamole_user_group_member ON guacamole_user_group.user_group_id = guacamole_user_group_member.user_group_id | ||||
|                 WHERE | ||||
|         <if test="!recursive"> | ||||
|             SELECT | ||||
|                 guacamole_entity.name | ||||
|             FROM guacamole_user_group | ||||
|             JOIN guacamole_entity ON guacamole_user_group.entity_id = guacamole_entity.entity_id | ||||
|             JOIN guacamole_user_group_member ON guacamole_user_group.user_group_id = guacamole_user_group_member.user_group_id | ||||
|             WHERE | ||||
|                 guacamole_user_group.disabled = false | ||||
|                 AND ( | ||||
|                     guacamole_user_group_member.member_entity_id = #{entity.entityID} | ||||
|                     AND guacamole_user_group.disabled = false | ||||
|             <if test="!effectiveGroups.isEmpty()"> | ||||
|                     <if test="!effectiveGroups.isEmpty()"> | ||||
|                         OR guacamole_user_group_member.member_entity_id IN ( | ||||
|                             SELECT entity_id FROM guacamole_entity | ||||
|                             WHERE type = 'USER_GROUP' AND name IN | ||||
|                                 <foreach collection="effectiveGroups" item="effectiveGroup" | ||||
|                                          open="(" separator="," close=")"> | ||||
|                                     #{effectiveGroup,jdbcType=VARCHAR} | ||||
|                                 </foreach> | ||||
|                         ) | ||||
|                         OR guacamole_user_group.entity_id IN ( | ||||
|                             SELECT entity_id FROM guacamole_entity | ||||
|                             WHERE type = 'USER_GROUP' AND name IN | ||||
|                                 <foreach collection="effectiveGroups" item="effectiveGroup" | ||||
|                                          open="(" separator="," close=")"> | ||||
|                                     #{effectiveGroup,jdbcType=VARCHAR} | ||||
|                                 </foreach> | ||||
|                         ) | ||||
|                     </if> | ||||
|                 ) | ||||
|         </if> | ||||
|  | ||||
|         <if test="recursive"> | ||||
|             WITH RECURSIVE related_entity(entity_id) AS ( | ||||
|                     SELECT | ||||
|                         guacamole_user_group.entity_id | ||||
|                     FROM guacamole_user_group | ||||
|                     JOIN guacamole_user_group_member ON guacamole_user_group.user_group_id = guacamole_user_group_member.user_group_id | ||||
|                     WHERE | ||||
|                         guacamole_user_group_member.member_entity_id = #{entity.entityID} | ||||
|                         AND guacamole_user_group.disabled = false | ||||
|                 <if test="!effectiveGroups.isEmpty()"> | ||||
|                     UNION | ||||
|                         SELECT | ||||
|                             guacamole_entity.entity_id | ||||
|                         FROM guacamole_entity | ||||
|                         JOIN guacamole_user_group ON guacamole_user_group.entity_id = guacamole_entity.entity_id | ||||
|                         WHERE | ||||
|                             type = 'USER_GROUP' | ||||
|                             AND name IN | ||||
|                                 <foreach collection="effectiveGroups" item="effectiveGroup" | ||||
|                                          open="(" separator="," close=")"> | ||||
|                                     #{effectiveGroup,jdbcType=VARCHAR} | ||||
|                                 </foreach> | ||||
|                             AND guacamole_user_group.disabled = false | ||||
|                 </if> | ||||
|                 UNION | ||||
|                     SELECT | ||||
|                         guacamole_entity.entity_id | ||||
|                     FROM guacamole_entity | ||||
|                     JOIN guacamole_user_group ON guacamole_user_group.entity_id = guacamole_entity.entity_id | ||||
|                         guacamole_user_group.entity_id | ||||
|                     FROM related_entity | ||||
|                     JOIN guacamole_user_group_member ON related_entity.entity_id = guacamole_user_group_member.member_entity_id | ||||
|                     JOIN guacamole_user_group ON guacamole_user_group.user_group_id = guacamole_user_group_member.user_group_id | ||||
|                     WHERE | ||||
|                         type = 'USER_GROUP' | ||||
|                         AND name IN | ||||
|                             <foreach collection="effectiveGroups" item="effectiveGroup" | ||||
|                                      open="(" separator="," close=")"> | ||||
|                                 #{effectiveGroup,jdbcType=VARCHAR} | ||||
|                             </foreach> | ||||
|                         AND guacamole_user_group.disabled = false | ||||
|             </if> | ||||
|             UNION | ||||
|                 SELECT | ||||
|                     guacamole_user_group.entity_id | ||||
|                 FROM related_entity | ||||
|                 JOIN guacamole_user_group_member ON related_entity.entity_id = guacamole_user_group_member.member_entity_id | ||||
|                 JOIN guacamole_user_group ON guacamole_user_group.user_group_id = guacamole_user_group_member.user_group_id | ||||
|                 WHERE | ||||
|                     guacamole_user_group.disabled = false | ||||
|         ) | ||||
|         SELECT name | ||||
|         FROM related_entity | ||||
|         JOIN guacamole_entity ON related_entity.entity_id = guacamole_entity.entity_id | ||||
|         WHERE | ||||
|             guacamole_entity.type = 'USER_GROUP'; | ||||
|                         guacamole_user_group.disabled = false | ||||
|             ) | ||||
|             SELECT name | ||||
|             FROM related_entity | ||||
|             JOIN guacamole_entity ON related_entity.entity_id = guacamole_entity.entity_id | ||||
|             WHERE | ||||
|                 guacamole_entity.type = 'USER_GROUP'; | ||||
|         </if> | ||||
|  | ||||
|     </select> | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user