pgsql: Clean up the Simple-8b encoder code.

Поиск
Список
Период
Сортировка
От Heikki Linnakangas
Тема pgsql: Clean up the Simple-8b encoder code.
Дата
Msg-id E1h8M5I-0002Lw-Hq@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Clean up the Simple-8b encoder code.

Coverity complained that simple8b_encode() might read beyond the end of
the 'diffs' array, in the loop to encode the integers. That was a false
positive, because we never get into the loop in modes 0 or 1, and the
array is large enough for all the other modes. But I admit it's very
subtle, so it's not surprising that Coverity didn't see it, and it's not
very obvious to humans either. Refactor it, so that the second loop
re-computes the differences, instead of carrying them over from the first
loop in the 'diffs' array. This way, the 'diffs' array is not needed
anymore. It makes no measurable difference in performance, and seems more
straightforward this way.

Also, improve the comments in simple8b_encode(): fix the comment about its
return value that was flat-out wrong, and explain the condition when it
returns EMPTY_CODEWORD better.

In the passing, move the 'selector' from the codeword's low bits to the
high bits. It doesn't matter much, but looking at the original paper, and
googling around for other Simple-8b implementations, that's how it's
usually done.

Per Coverity, and Tom Lane's report off-list.

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/d303122eab616ccbcfb0bab0fc674bf625d17a7b

Modified Files
--------------
src/backend/lib/integerset.c                       | 52 +++++++++++++---------
src/test/modules/test_integerset/test_integerset.c | 17 ++++---
2 files changed, 41 insertions(+), 28 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Peter Eisentraut
Дата:
Сообщение: pgsql: Align timestamps in pg_regress output
Следующее
От: Alexander Korotkov
Дата:
Сообщение: pgsql: Get rid of backtracking in jsonpath_scan.l