diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2020-04-09 15:38:43 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2020-04-09 15:39:02 -0400 |
commit | 9be664d715ebcb7265c6f3e2bdba89de2b45d66c (patch) | |
tree | 6f36f34f3da74500b5e050dcd4b7e9302e2187f4 | |
parent | 2971180929b6d3902ea31b3274929955b05e2f5e (diff) | |
download | postgresql-9be664d715ebcb7265c6f3e2bdba89de2b45d66c.tar.gz postgresql-9be664d715ebcb7265c6f3e2bdba89de2b45d66c.zip |
Further cleanup of ts_headline code.
Suppress a probably-meaningless uninitialized-variable warning
(induced by my previous patch, I'm sorry to say).
Improve mark_hl_fragments()'s test for overlapping cover strings:
it failed to consider the possibility that the current string is
strictly within another one. That's unlikely given the preceding
splitting into MaxWords fragments, but I don't think it's impossible.
Discussion: https://postgr.es/m/16345-2e0cf5cddbdcd3b4@postgresql.org
-rw-r--r-- | src/backend/tsearch/wparser_def.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/backend/tsearch/wparser_def.c b/src/backend/tsearch/wparser_def.c index d9bf1e3e1bc..8fecfd4f6f8 100644 --- a/src/backend/tsearch/wparser_def.c +++ b/src/backend/tsearch/wparser_def.c @@ -2434,22 +2434,24 @@ mark_hl_fragments(HeadlineParsedText *prs, TSQuery query, bool highlightall, /* Mark the chosen fragments (covers) */ mark_fragment(prs, highlightall, startpos, endpos); num_f++; - /* exclude overlapping covers */ + /* Exclude covers overlapping this one from future consideration */ for (i = 0; i < numcovers; i++) { if (i != minI && - ((covers[i].startpos >= covers[minI].startpos && - covers[i].startpos <= covers[minI].endpos) || - (covers[i].endpos >= covers[minI].startpos && - covers[i].endpos <= covers[minI].endpos))) + ((covers[i].startpos >= startpos && + covers[i].startpos <= endpos) || + (covers[i].endpos >= startpos && + covers[i].endpos <= endpos) || + (covers[i].startpos < startpos && + covers[i].endpos > endpos))) covers[i].excluded = true; } } else - break; + break; /* no selectable covers remain */ } - /* show at least min_words if we have not marked anything */ + /* show the first min_words words if we have not marked anything */ if (num_f <= 0) { startpos = endpos = curlen = 0; @@ -2607,6 +2609,7 @@ mark_hl_words(HeadlineParsedText *prs, TSQuery query, bool highlightall, if (bestlen < 0) { curlen = 0; + pose = 0; for (i = 0; i < prs->curwords && curlen < min_words; i++) { if (!NONWORDTOKEN(prs->words[i].type)) |