From d6199b3f13939877e9b1e66c52b46c74131e9eac Mon Sep 17 00:00:00 2001 From: Teodor Sigaev Date: Thu, 21 May 2009 20:09:36 +0000 Subject: [PATCH] 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. --- src/backend/utils/adt/tsvector.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/backend/utils/adt/tsvector.c b/src/backend/utils/adt/tsvector.c index e7a20d5b70..c9c432b9a9 100644 --- a/src/backend/utils/adt/tsvector.c +++ b/src/backend/utils/adt/tsvector.c @@ -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); } -- 2.39.5