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; |