rfc9394v4.txt   rfc9394.txt 
Internet Engineering Task Force (IETF) A. Melnikov Internet Engineering Task Force (IETF) A. Melnikov
Request for Comments: 9394 Isode Request for Comments: 9394 Isode
Updates: 4731, 5267 A. P. Achuthan Updates: 4731, 5267 A. P. Achuthan
Category: Standards Track V. Nagulakonda Category: Standards Track V. Nagulakonda
ISSN: 2070-1721 Yahoo! ISSN: 2070-1721 Yahoo!
L. Alves L. Alves
May 2023 June 2023
IMAP PARTIAL Extension for Paged SEARCH and FETCH IMAP PARTIAL Extension for Paged SEARCH and FETCH
Abstract Abstract
The PARTIAL extension of the Internet Message Access Protocol (see The PARTIAL extension of the Internet Message Access Protocol (see
RFCs 3501 and 9051) allows clients to limit the number of SEARCH RFCs 3501 and 9051) allows clients to limit the number of SEARCH
results returned, as well as to perform incremental (paged) searches. results returned, as well as to perform incremental (paged) searches.
This also helps servers to optimize resource usage when performing This also helps servers to optimize resource usage when performing
searches. searches.
skipping to change at line 171 skipping to change at line 171
Clients need not request PARTIAL results in any particular order. Clients need not request PARTIAL results in any particular order.
Because mailboxes may change, clients might wish to use PARTIAL in Because mailboxes may change, clients might wish to use PARTIAL in
combination with UPDATE (see [RFC5267]) if the server also advertises combination with UPDATE (see [RFC5267]) if the server also advertises
the "CONTEXT=SEARCH" capability, especially if the intent is to walk the "CONTEXT=SEARCH" capability, especially if the intent is to walk
a large set of results; however, these return options do not interact a large set of results; however, these return options do not interact
-- the UPDATE will provide notifications for all matching results. -- the UPDATE will provide notifications for all matching results.
// Let's assume that the A01 SEARCH without PARTIAL would return // Let's assume that the A01 SEARCH without PARTIAL would return
// 23764 results. // 23764 results.
C: A01 UID SEARCH RETURN (PARTIAL -1:-100) UNDELETED C: A01 UID SEARCH RETURN (PARTIAL -1:-100) UNDELETED
UNKEYWORD $Junk UNKEYWORD $Junk
S: * ESEARCH (TAG "A01") UID PARTIAL (-1:-100 ...) S: * ESEARCH (TAG "A01") UID PARTIAL (-1:-100 ...)
// 100 most recent results in set syntax elided. // 100 most recent results in set syntax elided.
S: A01 OK Completed. S: A01 OK Completed.
// Let's assume that the A02 SEARCH without PARTIAL would return // Let's assume that the A02 SEARCH without PARTIAL would return
// 23764 results. // 23764 results.
C: A02 UID SEARCH RETURN (PARTIAL 23500:24000) UNDELETED C: A02 UID SEARCH RETURN (PARTIAL 23500:24000) UNDELETED
UNKEYWORD $Junk UNKEYWORD $Junk
C: A03 UID SEARCH RETURN (PARTIAL 1:500) UNDELETED C: A03 UID SEARCH RETURN (PARTIAL 1:500) UNDELETED
UNKEYWORD $Junk UNKEYWORD $Junk
C: A04 UID SEARCH RETURN (PARTIAL 24000:24500) UNDELETED C: A04 UID SEARCH RETURN (PARTIAL 24000:24500) UNDELETED
UNKEYWORD $Junk UNKEYWORD $Junk
S: * ESEARCH (TAG "A02") UID PARTIAL (23500:24000 ...) S: * ESEARCH (TAG "A02") UID PARTIAL (23500:24000 ...)
// 264 results in set syntax elided; // 264 results in set syntax elided;
// this spans the end of the results. // this spans the end of the results.
S: A02 OK Completed. S: A02 OK Completed.
S: * ESEARCH (TAG "A03") UID PARTIAL (1:500 ...) S: * ESEARCH (TAG "A03") UID PARTIAL (1:500 ...)
// 500 results in set syntax elided. // 500 results in set syntax elided.
S: A03 OK Completed. S: A03 OK Completed.
S: * ESEARCH (TAG "A04") UID PARTIAL (24000:24500 NIL) S: * ESEARCH (TAG "A04") UID PARTIAL (24000:24500 NIL)
// No results are present; this is beyond the end of the results. // No results are present; this is beyond the end of the results.
S: A04 OK Completed. S: A04 OK Completed.
skipping to change at line 289 skipping to change at line 289
3.4. Use of "PARTIAL" and "CONDSTORE" IMAP Extensions Together 3.4. Use of "PARTIAL" and "CONDSTORE" IMAP Extensions Together
This section is informative. This section is informative.
The PARTIAL FETCH modifier can be combined with the CHANGEDSINCE The PARTIAL FETCH modifier can be combined with the CHANGEDSINCE
FETCH modifier [RFC7162]. FETCH modifier [RFC7162].
// Returning information for the last 30 messages in the UID range // Returning information for the last 30 messages in the UID range
// that have any flags/keywords modified since MODSEQ 98305 // that have any flags/keywords modified since MODSEQ 98305
C: 101 UID FETCH 25900:26600 (UID FLAGS C: 101 UID FETCH 25900:26600 (UID FLAGS
) (PARTIAL -1:-30 CHANGEDSINCE 98305) ) (PARTIAL -1:-30 CHANGEDSINCE 98305)
S: * 12888 FETCH (FLAGS (\Flagged \Answered S: * 12888 FETCH (FLAGS (\Flagged \Answered
) MODSEQ (98306) UID 25997) ) MODSEQ (98306) UID 25997)
S: * 12890 FETCH (FLAGS () MODSEQ (98312) UID 26600) S: * 12890 FETCH (FLAGS () MODSEQ (98312) UID 26600)
S: 101 OK FETCH completed S: 101 OK FETCH completed
The above example causes the server to first select the last 30 The above example causes the server to first select the last 30
messages and then only return flag changes for a subset of those messages and then only return flag changes for a subset of those
messages that have MODSEQ higher than 98305. messages that have MODSEQ higher than 98305.
Note that the order of PARTIAL and CHANGEDSINCE FETCH modifiers in Note that the order of PARTIAL and CHANGEDSINCE FETCH modifiers in
 End of changes. 6 change blocks. 
6 lines changed or deleted 6 lines changed or added

This html diff was produced by rfcdiff 1.48.