|
7 | 7 | * |
8 | 8 | * |
9 | 9 | * IDENTIFICATION |
10 | | - * $PostgreSQL: pgsql/src/backend/utils/adt/tsvector.c,v 1.16 2009/05/2112:54:27 meskes Exp $ |
| 10 | + * $PostgreSQL: pgsql/src/backend/utils/adt/tsvector.c,v 1.17 2009/05/2120:09:36 teodor Exp $ |
11 | 11 | * |
12 | 12 | *------------------------------------------------------------------------- |
13 | 13 | */ |
@@ -451,6 +451,7 @@ tsvectorrecv(PG_FUNCTION_ARGS) |
451 | 451 | * WordEntries */ |
452 | 452 | Sizehdrlen; |
453 | 453 | Sizelen;/* allocated size of vec */ |
| 454 | +boolneedSort= false; |
454 | 455 |
|
455 | 456 | nentries=pq_getmsgint(buf,sizeof(int32)); |
456 | 457 | if (nentries<0||nentries> (MaxAllocSize /sizeof(WordEntry))) |
@@ -507,7 +508,7 @@ tsvectorrecv(PG_FUNCTION_ARGS) |
507 | 508 | if (i>0&&WordEntryCMP(&vec->entries[i], |
508 | 509 | &vec->entries[i-1], |
509 | 510 | STRPTR(vec)) <=0) |
510 | | -elog(ERROR,"lexemes are misordered"); |
| 511 | +needSort= true; |
511 | 512 |
|
512 | 513 | /* Receive positions */ |
513 | 514 | if (npos>0) |
@@ -542,5 +543,9 @@ tsvectorrecv(PG_FUNCTION_ARGS) |
542 | 543 |
|
543 | 544 | SET_VARSIZE(vec,hdrlen+datalen); |
544 | 545 |
|
| 546 | +if (needSort) |
| 547 | +qsort_arg((void*)ARRPTR(vec),vec->size,sizeof(WordEntry), |
| 548 | +compareentry, (void*)STRPTR(vec)); |
| 549 | + |
545 | 550 | PG_RETURN_TSVECTOR(vec); |
546 | 551 | } |