|
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 | }
|