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

From Tom Lane
Subject pgsql: Fix bogus tree-flattening logic in QTNTernary().
Date
Msg-id E1c0vj6-0005ND-FP@gemulon.postgresql.org
Whole thread Raw
List 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_2_STABLE

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

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 by date:

Previous
From: Tom Lane
Date:
Subject: pgsql: Improve speed of aggregates that use array_append as transition
Next
From: Tom Lane
Date:
Subject: pgsql: Fix bogus tree-flattening logic in QTNTernary().