diff options
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/tsearch/wparser_def.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/backend/tsearch/wparser_def.c b/src/backend/tsearch/wparser_def.c index 840a44ec007..23e4e9d98a9 100644 --- a/src/backend/tsearch/wparser_def.c +++ b/src/backend/tsearch/wparser_def.c @@ -2417,7 +2417,8 @@ mark_hl_fragments(HeadlineParsedText *prs, TSQuery query, List *locations, /* show the first min_words words if we have not marked anything */ if (num_f <= 0) { - startpos = endpos = curlen = 0; + startpos = curlen = 0; + endpos = -1; for (i = 0; i < prs->curwords && curlen < min_words; i++) { if (!NONWORDTOKEN(prs->words[i].type)) @@ -2571,7 +2572,7 @@ mark_hl_words(HeadlineParsedText *prs, TSQuery query, List *locations, if (bestlen < 0) { curlen = 0; - pose = 0; + pose = -1; for (i = 0; i < prs->curwords && curlen < min_words; i++) { if (!NONWORDTOKEN(prs->words[i].type)) @@ -2601,7 +2602,6 @@ prsd_headline(PG_FUNCTION_ARGS) HeadlineParsedText *prs = (HeadlineParsedText *) PG_GETARG_POINTER(0); List *prsoptions = (List *) PG_GETARG_POINTER(1); TSQuery query = PG_GETARG_TSQUERY(2); - hlCheck ch; List *locations; /* default option values: */ @@ -2671,10 +2671,17 @@ prsd_headline(PG_FUNCTION_ARGS) } /* Locate words and phrases matching the query */ - ch.words = prs->words; - ch.len = prs->curwords; - locations = TS_execute_locations(GETQUERY(query), &ch, TS_EXEC_EMPTY, - checkcondition_HL); + if (query->size > 0) + { + hlCheck ch; + + ch.words = prs->words; + ch.len = prs->curwords; + locations = TS_execute_locations(GETQUERY(query), &ch, TS_EXEC_EMPTY, + checkcondition_HL); + } + else + locations = NIL; /* empty query matches nothing */ /* Apply appropriate headline selector */ if (max_fragments == 0) |