MCPcopy Create free account
hub / github.com/ByConity/ByConity / updateExtremes

Method updateExtremes

src/DataStreams/IBlockInputStream.cpp:189–252  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

187
188
189void IBlockInputStream::updateExtremes(Block & block)
190{
191 size_t num_columns = block.columns();
192
193 if (!extremes)
194 {
195 MutableColumns extremes_columns(num_columns);
196
197 for (size_t i = 0; i < num_columns; ++i)
198 {
199 const ColumnPtr & src = block.safeGetByPosition(i).column;
200
201 if (isColumnConst(*src))
202 {
203 /// Equal min and max.
204 extremes_columns[i] = src->cloneResized(2);
205 }
206 else
207 {
208 Field min_value;
209 Field max_value;
210
211 src->getExtremes(min_value, max_value);
212
213 extremes_columns[i] = src->cloneEmpty();
214
215 extremes_columns[i]->insert(min_value);
216 extremes_columns[i]->insert(max_value);
217 }
218 }
219
220 extremes = block.cloneWithColumns(std::move(extremes_columns));
221 }
222 else
223 {
224 for (size_t i = 0; i < num_columns; ++i)
225 {
226 ColumnPtr & old_extremes = extremes.safeGetByPosition(i).column;
227
228 if (isColumnConst(*old_extremes))
229 continue;
230
231 Field min_value = (*old_extremes)[0];
232 Field max_value = (*old_extremes)[1];
233
234 Field cur_min_value;
235 Field cur_max_value;
236
237 block.safeGetByPosition(i).column->getExtremes(cur_min_value, cur_max_value);
238
239 if (cur_min_value < min_value)
240 min_value = cur_min_value;
241 if (cur_max_value > max_value)
242 max_value = cur_max_value;
243
244 MutableColumnPtr new_extremes = old_extremes->cloneEmpty();
245
246 new_extremes->insert(min_value);

Callers

nothing calls this directly

Calls 7

isColumnConstFunction · 0.85
columnsMethod · 0.80
cloneWithColumnsMethod · 0.80
cloneResizedMethod · 0.45
getExtremesMethod · 0.45
cloneEmptyMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected