Re: websearch_to_tsquery() returns queries that don't match to_tsvector()

Alexander Korotkov <aekorotkov@gmail.com>

From: Alexander Korotkov <aekorotkov@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>, Teodor Sigaev <teodor@postgrespro.ru>, Oleg Bartunov <obartunov@postgrespro.ru>
Date: 2021-05-02T18:12:11Z
Lists: pgsql-bugs, pgsql-hackers

Attachments

On Sun, May 2, 2021 at 9:04 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Alexander Korotkov <aekorotkov@gmail.com> writes:
> > Ooops, I've included this by oversight.  The next revision is attached.
> > Anything besides that?
>
> Some quick eyeball review:
>
> +                    /* Everything is quotes is processed as a single token */
>
> Should read "Everything in quotes ..."
>
> -                    /* or else gettoken_tsvector() will raise an error */
> +                    /* or else ƒtsvector() will raise an error */
>
> Looks like an unintentional change?

Thank you for catching this!

> @@ -846,7 +812,6 @@ parse_tsquery(char *buf,
>         state.buffer = buf;
>         state.buf = buf;
>         state.count = 0;
> -       state.in_quotes = false;
>         state.state = WAITFIRSTOPERAND;
>         state.polstr = NIL;
>
> This change seems wrong/unsafe too.

It seems OK, because this patch removes in_quotes field altogether.
We don't have to know whether we in quotes in the state, since we
process everything in quotes as a single token.

------
Regards,
Alexander Korotkov

Commits

  1. Make websearch_to_tsquery() parse text in quotes as a single token