diff --git a/src/backend/tsearch/to_tsany.c b/src/backend/tsearch/to_tsany.c index 5c954fa4316..dbcfe814306 100644 --- a/src/backend/tsearch/to_tsany.c +++ b/src/backend/tsearch/to_tsany.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/tsearch/to_tsany.c,v 1.8 2008/01/01 19:45:52 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/tsearch/to_tsany.c,v 1.8.2.1 2008/03/07 15:29:27 teodor Exp $ * *------------------------------------------------------------------------- */ @@ -350,6 +350,18 @@ to_tsquery_byid(PG_FUNCTION_ARGS) PG_RETURN_POINTER(query); } memcpy((void *) GETQUERY(query), (void *) res, len * sizeof(QueryItem)); + + if ( len != query->size ) { + char *oldoperand = GETOPERAND(query); + int4 lenoperand = VARSIZE(query) - (oldoperand - (char*)query); + + Assert( len < query->size ); + + query->size = len; + memcpy((void *) GETOPERAND(query), oldoperand, VARSIZE(query) - (oldoperand - (char*)query) ); + SET_VARSIZE(query, COMPUTESIZE( len, lenoperand )); + } + pfree(res); PG_RETURN_TSQUERY(query); } @@ -388,6 +400,18 @@ plainto_tsquery_byid(PG_FUNCTION_ARGS) PG_RETURN_POINTER(query); } memcpy((void *) GETQUERY(query), (void *) res, len * sizeof(QueryItem)); + + if ( len != query->size ) { + char *oldoperand = GETOPERAND(query); + int4 lenoperand = VARSIZE(query) - (oldoperand - (char*)query); + + Assert( len < query->size ); + + query->size = len; + memcpy((void *) GETOPERAND(query), oldoperand, lenoperand ); + SET_VARSIZE(query, COMPUTESIZE( len, lenoperand )); + } + pfree(res); PG_RETURN_POINTER(query); } diff --git a/src/backend/utils/adt/tsquery_op.c b/src/backend/utils/adt/tsquery_op.c index bf50b9d4c31..3e5b8d30057 100644 --- a/src/backend/utils/adt/tsquery_op.c +++ b/src/backend/utils/adt/tsquery_op.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/tsquery_op.c,v 1.3 2008/01/01 19:45:53 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/tsquery_op.c,v 1.3.2.1 2008/03/07 15:29:27 teodor Exp $ * *------------------------------------------------------------------------- */ @@ -141,27 +141,14 @@ tsquery_not(PG_FUNCTION_ARGS) static int CompareTSQ(TSQuery a, TSQuery b) { - if (a->size != b->size) - { - return (a->size < b->size) ? -1 : 1; - } - else if (VARSIZE(a) != VARSIZE(b)) - { - return (VARSIZE(a) < VARSIZE(b)) ? -1 : 1; - } - else - { - QTNode *an = QT2QTN(GETQUERY(a), GETOPERAND(a)); - QTNode *bn = QT2QTN(GETQUERY(b), GETOPERAND(b)); - int res = QTNodeCompare(an, bn); + QTNode *an = QT2QTN(GETQUERY(a), GETOPERAND(a)); + QTNode *bn = QT2QTN(GETQUERY(b), GETOPERAND(b)); + int res = QTNodeCompare(an, bn); - QTNFree(an); - QTNFree(bn); + QTNFree(an); + QTNFree(bn); - return res; - } - - return 0; + return res; } Datum