Mercurial > prosody-modules
comparison mod_storage_xmlarchive/mod_storage_xmlarchive.lua @ 3587:c24d43ababc6
mod_storage_xmlarchive: Try harder to limit range of time to check
Fixes read of entire index in case where the time range is outside the
range present in the archive.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Tue, 07 May 2019 17:10:07 +0200 |
| parents | ddf109d58eff |
| children | bb18a1f5e9d7 |
comparison
equal
deleted
inserted
replaced
| 3586:796b29911747 | 3587:c24d43ababc6 |
|---|---|
| 107 local start_day, step, last_day = 1, 1, #dates; | 107 local start_day, step, last_day = 1, 1, #dates; |
| 108 local count = 0; | 108 local count = 0; |
| 109 local rev = query.reverse; | 109 local rev = query.reverse; |
| 110 if query.start then | 110 if query.start then |
| 111 local d = dt.date(query.start); | 111 local d = dt.date(query.start); |
| 112 for i = 1, #dates do | 112 for i = start_day, last_day, step do |
| 113 if dates[i] >= d then | 113 if dates[i] < d then |
| 114 start_day = i + 1; | |
| 115 elseif dates[i] >= d then | |
| 114 start_day = i; break; | 116 start_day = i; break; |
| 115 end | 117 end |
| 116 end | 118 end |
| 117 end | 119 end |
| 118 if query["end"] then | 120 if query["end"] then |
| 119 local d = dt.date(query["end"]); | 121 local d = dt.date(query["end"]); |
| 120 for i = #dates, 1, -1 do | 122 for i = last_day, start_day, -step do |
| 121 if dates[i] <= d then | 123 if dates[i] > d then |
| 124 last_day = i - 1; | |
| 125 elseif dates[i] <= d then | |
| 122 last_day = i; break; | 126 last_day = i; break; |
| 123 end | 127 end |
| 124 end | 128 end |
| 125 end | 129 end |
| 126 local items; | 130 local items; |
