pgsql: Fix bogus tree-flattening logic in QTNTernary().

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Fix bogus tree-flattening logic in QTNTernary().
Дата
Msg-id E1c0vj6-0005N7-FC@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix bogus tree-flattening logic in QTNTernary().

QTNTernary() contains logic to flatten, eg, '(a & b) & c' into 'a & b & c',
which is all well and good, but it tries to do that to NOT nodes as well,
so that '!!a' gets changed to '!a'.  Explicitly restrict the conversion to
be done only on AND and OR nodes, and add a test case illustrating the bug.

In passing, provide some comments for the sadly naked functions in
tsquery_util.c, and simplify some baroque logic in QTNFree(), which
I think may have been leaking some items it intended to free.

Noted while investigating a complaint from Andreas Seltenreich.
Back-patch to all supported versions.

Branch
------
REL9_5_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/de7387604bb695ab9f688f6cdaeb3efd3a221006

Modified Files
--------------
src/backend/utils/adt/tsquery_util.c  | 81 ++++++++++++++++++++++++++---------
src/test/regress/expected/tsearch.out |  7 +++
src/test/regress/sql/tsearch.sql      |  2 +
3 files changed, 69 insertions(+), 21 deletions(-)


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

Предыдущее
От: Tom Lane
Дата:
Сообщение: pgsql: Fix bogus tree-flattening logic in QTNTernary().
Следующее
От: Tom Lane
Дата:
Сообщение: pgsql: Fix bogus tree-flattening logic in QTNTernary().