@@ -970,39 +970,48 @@ final class Database
970970 return RoomType.non_existent;
971971 }
972972
973- string [] rooms (string owner = null ,
974- string member = null ,
975- RoomMemberType member_type = RoomMemberType.any)
973+ string [] public_rooms ()
976974 {
977- Appender! string sql;
978- Appender! (string []) parameters;
975+ enum sql = text(
976+ " SELECT r.room FROM " , rooms_table, " r" ,
977+ " WHERE r.type = ?;"
978+ );
979+ enum parameters = [text(cast (uint ) RoomType._public)];
979980
980- sql ~= text(" SELECT r.room FROM " , rooms_table, " r" );
981+ Appender! (string []) rooms;
982+ foreach (record ; query(sql, parameters)) rooms ~= record[0 ];
983+ return rooms[];
984+ }
981985
982- if (owner ! is null ) {
983- sql ~= text(" WHERE r.type = ? AND r.owner = ?" );
984- parameters ~= [text(cast (uint ) RoomType._private), owner];
985- }
986- else if (member ! is null ) {
987- sql ~= text(
988- " JOIN " , room_members_table, " m ON r.room = m.room" ,
989- " WHERE r.type = ? AND m.username = ?"
990- );
991- parameters ~= [text(cast (uint ) RoomType._private), member];
986+ string [] owned_rooms (string username)
987+ {
988+ enum sql = text(
989+ " SELECT r.room FROM " , rooms_table, " r" ,
990+ " WHERE r.type != ? AND r.owner = ?;"
991+ );
992+ auto parameters = [text(cast (uint ) RoomType._public), username];
992993
993- if (member_type != RoomMemberType.any) {
994- sql ~= " AND m.type = ?" ;
995- parameters ~= text(cast (uint ) member_type);
996- }
997- }
998- else {
999- sql ~= text(" WHERE r.type = ?" );
1000- parameters ~= text(cast (uint ) RoomType._public);
994+ Appender! (string []) rooms;
995+ foreach (record ; query(sql, parameters)) rooms ~= record[0 ];
996+ return rooms[];
997+ }
998+
999+ string [] member_rooms (RoomMemberType type)(string username)
1000+ {
1001+ auto sql = text(
1002+ " SELECT r.room FROM " , rooms_table, " r" ,
1003+ " JOIN " , room_members_table, " m ON r.room = m.room" ,
1004+ " WHERE r.type != ? AND m.username = ?"
1005+ );
1006+ auto parameters = [text(cast (uint ) RoomType._public), username];
1007+
1008+ if (type != RoomMemberType.any) {
1009+ sql ~= " AND m.type = ?" ;
1010+ parameters ~= text(cast (uint ) type);
10011011 }
1002- sql ~= " ;" ;
10031012
10041013 Appender! (string []) rooms;
1005- foreach (record ; query(sql[] , parameters[] )) rooms ~= record[0 ];
1014+ foreach (record ; query(sql, parameters)) rooms ~= record[0 ];
10061015 return rooms[];
10071016 }
10081017
0 commit comments