Resort tsvector's lexemes in tsvectorrecv instead of emmiting an error.

Basically, it's needed to support binary dump from 8.3 because ordering rule
was changed.

Per discussion with Bruce.
REL8_5_ALPHA1_BRANCH
Teodor Sigaev 17 years ago
parent ab9981ccc6
commit c6c458e24d
  1. 9
      src/backend/utils/adt/tsvector.c

@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/adt/tsvector.c,v 1.16 2009/05/21 12:54:27 meskes Exp $
* $PostgreSQL: pgsql/src/backend/utils/adt/tsvector.c,v 1.17 2009/05/21 20:09:36 teodor Exp $
*
*-------------------------------------------------------------------------
*/
@ -451,6 +451,7 @@ tsvectorrecv(PG_FUNCTION_ARGS)
* WordEntries */
Size hdrlen;
Size len; /* allocated size of vec */
bool needSort = false;
nentries = pq_getmsgint(buf, sizeof(int32));
if (nentries < 0 || nentries > (MaxAllocSize / sizeof(WordEntry)))
@ -507,7 +508,7 @@ tsvectorrecv(PG_FUNCTION_ARGS)
if (i > 0 && WordEntryCMP(&vec->entries[i],
&vec->entries[i - 1],
STRPTR(vec)) <= 0)
elog(ERROR, "lexemes are misordered");
needSort = true;
/* Receive positions */
if (npos > 0)
@ -542,5 +543,9 @@ tsvectorrecv(PG_FUNCTION_ARGS)
SET_VARSIZE(vec, hdrlen + datalen);
if (needSort)
qsort_arg((void *) ARRPTR(vec), vec->size, sizeof(WordEntry),
compareentry, (void*)STRPTR(vec));
PG_RETURN_TSVECTOR(vec);
}

Loading…
Cancel
Save