From 575c905437bbf22c020768396ed1a91788344c59 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 22 Sep 2025 14:47:48 +0200 Subject: [PATCH 12/23] C11 anonymous unions [tsearch ParsedWord] --- src/backend/tsearch/to_tsany.c | 60 +++++++++++++++++----------------- src/backend/tsearch/ts_parse.c | 2 +- src/include/tsearch/ts_utils.h | 2 +- 3 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/backend/tsearch/to_tsany.c b/src/backend/tsearch/to_tsany.c index 4dfcc2cd3bd..49a4da46908 100644 --- a/src/backend/tsearch/to_tsany.c +++ b/src/backend/tsearch/to_tsany.c @@ -64,10 +64,10 @@ compareWORD(const void *a, const void *b) if (res == 0) { - if (((const ParsedWord *) a)->pos.pos == ((const ParsedWord *) b)->pos.pos) + if (((const ParsedWord *) a)->pos == ((const ParsedWord *) b)->pos) return 0; - res = (((const ParsedWord *) a)->pos.pos > ((const ParsedWord *) b)->pos.pos) ? 1 : -1; + res = (((const ParsedWord *) a)->pos > ((const ParsedWord *) b)->pos) ? 1 : -1; } return res; @@ -82,11 +82,11 @@ uniqueWORD(ParsedWord *a, int32 l) if (l == 1) { - tmppos = LIMITPOS(a->pos.pos); + tmppos = LIMITPOS(a->pos); a->alen = 2; - a->pos.apos = (uint16 *) palloc(sizeof(uint16) * a->alen); - a->pos.apos[0] = 1; - a->pos.apos[1] = tmppos; + a->apos = (uint16 *) palloc(sizeof(uint16) * a->alen); + a->apos[0] = 1; + a->apos[1] = tmppos; return l; } @@ -101,11 +101,11 @@ uniqueWORD(ParsedWord *a, int32 l) /* * Initialize first word and its first position */ - tmppos = LIMITPOS(a->pos.pos); + tmppos = LIMITPOS(a->pos); a->alen = 2; - a->pos.apos = (uint16 *) palloc(sizeof(uint16) * a->alen); - a->pos.apos[0] = 1; - a->pos.apos[1] = tmppos; + a->apos = (uint16 *) palloc(sizeof(uint16) * a->alen); + a->apos[0] = 1; + a->apos[1] = tmppos; /* * Summarize position information for each word @@ -121,11 +121,11 @@ uniqueWORD(ParsedWord *a, int32 l) res++; res->len = ptr->len; res->word = ptr->word; - tmppos = LIMITPOS(ptr->pos.pos); + tmppos = LIMITPOS(ptr->pos); res->alen = 2; - res->pos.apos = (uint16 *) palloc(sizeof(uint16) * res->alen); - res->pos.apos[0] = 1; - res->pos.apos[1] = tmppos; + res->apos = (uint16 *) palloc(sizeof(uint16) * res->alen); + res->apos[0] = 1; + res->apos[1] = tmppos; } else { @@ -135,18 +135,18 @@ uniqueWORD(ParsedWord *a, int32 l) * value for position and uniqueness of position */ pfree(ptr->word); - if (res->pos.apos[0] < MAXNUMPOS - 1 && res->pos.apos[res->pos.apos[0]] != MAXENTRYPOS - 1 && - res->pos.apos[res->pos.apos[0]] != LIMITPOS(ptr->pos.pos)) + if (res->apos[0] < MAXNUMPOS - 1 && res->apos[res->apos[0]] != MAXENTRYPOS - 1 && + res->apos[res->apos[0]] != LIMITPOS(ptr->pos)) { - if (res->pos.apos[0] + 1 >= res->alen) + if (res->apos[0] + 1 >= res->alen) { res->alen *= 2; - res->pos.apos = (uint16 *) repalloc(res->pos.apos, sizeof(uint16) * res->alen); + res->apos = (uint16 *) repalloc(res->apos, sizeof(uint16) * res->alen); } - if (res->pos.apos[0] == 0 || res->pos.apos[res->pos.apos[0]] != LIMITPOS(ptr->pos.pos)) + if (res->apos[0] == 0 || res->apos[res->apos[0]] != LIMITPOS(ptr->pos)) { - res->pos.apos[res->pos.apos[0] + 1] = LIMITPOS(ptr->pos.pos); - res->pos.apos[0]++; + res->apos[res->apos[0] + 1] = LIMITPOS(ptr->pos); + res->apos[0]++; } } } @@ -184,7 +184,7 @@ make_tsvector(ParsedText *prs) if (prs->words[i].alen) { lenstr = SHORTALIGN(lenstr); - lenstr += sizeof(uint16) + prs->words[i].pos.apos[0] * sizeof(WordEntryPos); + lenstr += sizeof(uint16) + prs->words[i].apos[0] * sizeof(WordEntryPos); } } @@ -210,7 +210,7 @@ make_tsvector(ParsedText *prs) pfree(prs->words[i].word); if (prs->words[i].alen) { - int k = prs->words[i].pos.apos[0]; + int k = prs->words[i].apos[0]; WordEntryPos *wptr; if (k > 0xFFFF) @@ -223,10 +223,10 @@ make_tsvector(ParsedText *prs) for (j = 0; j < k; j++) { WEP_SETWEIGHT(wptr[j], 0); - WEP_SETPOS(wptr[j], prs->words[i].pos.apos[j + 1]); + WEP_SETPOS(wptr[j], prs->words[i].apos[j + 1]); } stroff += sizeof(uint16) + k * sizeof(WordEntryPos); - pfree(prs->words[i].pos.apos); + pfree(prs->words[i].apos); } else ptr->haspos = 0; @@ -515,9 +515,9 @@ pushval_morph(Datum opaque, TSQueryParserState state, char *strval, int lenval, * Were any stop words removed? If so, fill empty positions with * placeholders linked by an appropriate operator. */ - if (pos > 0 && pos + 1 < prs.words[count].pos.pos) + if (pos > 0 && pos + 1 < prs.words[count].pos) { - while (pos + 1 < prs.words[count].pos.pos) + while (pos + 1 < prs.words[count].pos) { /* put placeholders for each missing stop word */ pushStop(state); @@ -529,18 +529,18 @@ pushval_morph(Datum opaque, TSQueryParserState state, char *strval, int lenval, } /* save current word's position */ - pos = prs.words[count].pos.pos; + pos = prs.words[count].pos; /* Go through all variants obtained from this token */ cntvar = 0; - while (count < prs.curwords && pos == prs.words[count].pos.pos) + while (count < prs.curwords && pos == prs.words[count].pos) { variant = prs.words[count].nvariant; /* Push all words belonging to the same variant */ cnt = 0; while (count < prs.curwords && - pos == prs.words[count].pos.pos && + pos == prs.words[count].pos && variant == prs.words[count].nvariant) { pushValue(state, diff --git a/src/backend/tsearch/ts_parse.c b/src/backend/tsearch/ts_parse.c index cba421892bf..aed007679e2 100644 --- a/src/backend/tsearch/ts_parse.c +++ b/src/backend/tsearch/ts_parse.c @@ -420,7 +420,7 @@ parsetext(Oid cfgId, ParsedText *prs, char *buf, int buflen) prs->words[prs->curwords].nvariant = ptr->nvariant; prs->words[prs->curwords].flags = ptr->flags & TSL_PREFIX; prs->words[prs->curwords].alen = 0; - prs->words[prs->curwords].pos.pos = LIMITPOS(prs->pos); + prs->words[prs->curwords].pos = LIMITPOS(prs->pos); ptr++; prs->curwords++; } diff --git a/src/include/tsearch/ts_utils.h b/src/include/tsearch/ts_utils.h index 7debc85ed80..9ec665be99e 100644 --- a/src/include/tsearch/ts_utils.h +++ b/src/include/tsearch/ts_utils.h @@ -95,7 +95,7 @@ typedef struct * array. We do not allow more than MAXNUMPOS array elements. */ uint16 *apos; - } pos; + }; char *word; } ParsedWord; -- 2.51.0