@@ -12,41 +12,112 @@ interface MessageDao {
1212 @Query(" SELECT * FROM messages WHERE chatId = :chatId ORDER BY date DESC" )
1313 fun getMessagesForChat (chatId : Long ): Flow <List <MessageEntity >>
1414
15- @Query(" SELECT * FROM messages WHERE chatId = :chatId AND id < :fromMessageId ORDER BY date DESC LIMIT :limit" )
16- suspend fun getMessagesOlder (chatId : Long , fromMessageId : Long , limit : Int ): List <MessageEntity >
15+ @Query(
16+ " SELECT * FROM messages WHERE chatId = :chatId AND threadId IS NULL AND id < :fromMessageId ORDER BY date DESC LIMIT :limit"
17+ )
18+ suspend fun getMainChatMessagesOlder (
19+ chatId : Long ,
20+ fromMessageId : Long ,
21+ limit : Int
22+ ): List <MessageEntity >
1723
18- @Query(" SELECT * FROM messages WHERE chatId = :chatId AND id > :fromMessageId ORDER BY date ASC LIMIT :limit" )
19- suspend fun getMessagesNewer (chatId : Long , fromMessageId : Long , limit : Int ): List <MessageEntity >
24+ @Query(
25+ " SELECT * FROM messages WHERE chatId = :chatId AND threadId = :threadId AND id < :fromMessageId ORDER BY date DESC LIMIT :limit"
26+ )
27+ suspend fun getThreadMessagesOlder (
28+ chatId : Long ,
29+ threadId : Long ,
30+ fromMessageId : Long ,
31+ limit : Int
32+ ): List <MessageEntity >
33+
34+ @Query(
35+ " SELECT * FROM messages WHERE chatId = :chatId AND threadId IS NULL AND id > :fromMessageId ORDER BY date ASC LIMIT :limit"
36+ )
37+ suspend fun getMainChatMessagesNewer (
38+ chatId : Long ,
39+ fromMessageId : Long ,
40+ limit : Int
41+ ): List <MessageEntity >
42+
43+ @Query(
44+ " SELECT * FROM messages WHERE chatId = :chatId AND threadId = :threadId AND id > :fromMessageId ORDER BY date ASC LIMIT :limit"
45+ )
46+ suspend fun getThreadMessagesNewer (
47+ chatId : Long ,
48+ threadId : Long ,
49+ fromMessageId : Long ,
50+ limit : Int
51+ ): List <MessageEntity >
2052
2153 @Query(
2254 """
2355 SELECT * FROM messages
2456 WHERE chatId = :chatId
57+ AND threadId IS NULL
2558 AND id IN (
2659 SELECT id FROM messages
27- WHERE chatId = :chatId AND id <= :messageId
60+ WHERE chatId = :chatId AND threadId IS NULL AND id <= :messageId
2861 ORDER BY date DESC LIMIT :olderLimit
2962 )
3063 UNION
3164 SELECT * FROM messages
3265 WHERE chatId = :chatId
66+ AND threadId IS NULL
3367 AND id IN (
3468 SELECT id FROM messages
35- WHERE chatId = :chatId AND id > :messageId
69+ WHERE chatId = :chatId AND threadId IS NULL AND id > :messageId
3670 ORDER BY date ASC LIMIT :newerLimit
3771 )
3872 ORDER BY date DESC
3973 """
4074 )
41- suspend fun getMessagesAround (
75+ suspend fun getMainChatMessagesAround (
4276 chatId : Long ,
4377 messageId : Long ,
4478 olderLimit : Int ,
4579 newerLimit : Int
4680 ): List <MessageEntity >
4781
48- @Query(" SELECT * FROM messages WHERE chatId = :chatId ORDER BY date DESC LIMIT :limit" )
49- suspend fun getLatestMessages (chatId : Long , limit : Int ): List <MessageEntity >
82+ @Query(
83+ """
84+ SELECT * FROM messages
85+ WHERE chatId = :chatId
86+ AND threadId = :threadId
87+ AND id IN (
88+ SELECT id FROM messages
89+ WHERE chatId = :chatId AND threadId = :threadId AND id <= :messageId
90+ ORDER BY date DESC LIMIT :olderLimit
91+ )
92+ UNION
93+ SELECT * FROM messages
94+ WHERE chatId = :chatId
95+ AND threadId = :threadId
96+ AND id IN (
97+ SELECT id FROM messages
98+ WHERE chatId = :chatId AND threadId = :threadId AND id > :messageId
99+ ORDER BY date ASC LIMIT :newerLimit
100+ )
101+ ORDER BY date DESC
102+ """
103+ )
104+ suspend fun getThreadMessagesAround (
105+ chatId : Long ,
106+ threadId : Long ,
107+ messageId : Long ,
108+ olderLimit : Int ,
109+ newerLimit : Int
110+ ): List <MessageEntity >
111+
112+ @Query(" SELECT * FROM messages WHERE chatId = :chatId AND threadId IS NULL ORDER BY date DESC LIMIT :limit" )
113+ suspend fun getMainChatLatestMessages (chatId : Long , limit : Int ): List <MessageEntity >
114+
115+ @Query(" SELECT * FROM messages WHERE chatId = :chatId AND threadId = :threadId ORDER BY date DESC LIMIT :limit" )
116+ suspend fun getThreadLatestMessages (
117+ chatId : Long ,
118+ threadId : Long ,
119+ limit : Int
120+ ): List <MessageEntity >
50121
51122 @Query(" SELECT * FROM messages WHERE chatId = :chatId AND id IN (:messageIds)" )
52123 suspend fun getMessagesByIds (chatId : Long , messageIds : List <Long >): List <MessageEntity >
0 commit comments