21#define IGNORE_LONGLEXEME 1
66 ld->towork.head =
ld->towork.tail =
ld->curSub =
NULL;
67 ld->waste.head =
ld->waste.tail =
NULL;
77 list->tail->next =
newpl;
81 list->head = list->tail =
newpl;
91 list->head = list->head->next;
93 if (list->head ==
NULL)
106 newpl->lenlemm = lenlemm;
108 ld->curSub =
ld->towork.tail;
129 *ptr =
ld->waste.head;
138 ld->waste.head =
ld->waste.tail =
NULL;
146 while (
ld->towork.head &&
go)
148 if (
ld->towork.head == stop)
164 for (ptr =
ld->tmpRes; ptr->
lexeme; ptr++)
187 while (
ld->towork.head)
202 for (
i =
ld->posDict;
i < map->
len;
i++)
206 ld->dictState.isend =
ld->dictState.getnext =
false;
207 ld->dictState.private_state =
NULL;
214 if (
ld->dictState.getnext)
265 if (
curVal->type >=
ld->cfg->lenmap || map->
len == 0)
292 ld->dictState.isend = (
curVal->type == 0);
293 ld->dictState.getnext =
false;
301 if (
ld->dictState.getnext)
310 if (res ||
ld->tmpRes)
384#ifdef IGNORE_LONGLEXEME
387 errmsg(
"word is too long to be indexed"),
388 errdetail(
"Words longer than %d characters are ignored.",
394 errmsg(
"word is too long to be indexed"),
395 errdetail(
"Words longer than %d characters are ignored.",
478 for (
i = 0;
i < query->
size;
i++)
512 while (ptr && ptr->
lexeme)
570#ifdef IGNORE_LONGLEXEME
573 errmsg(
"word is too long to be indexed"),
574 errdetail(
"Words longer than %d characters are ignored.",
580 errmsg(
"word is too long to be indexed"),
581 errdetail(
"Words longer than %d characters are ignored.",
624 int dist = ptr - ((
char *) out);
628 ptr = ((
char *) out) +
dist;
631 if (
wrd->in && !
wrd->repeated)
667 else if (!
wrd->repeated)
int errdetail(const char *fmt,...)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
#define palloc_object(type)
#define FunctionCall4(flinfo, arg1, arg2, arg3, arg4)
#define FunctionCall1(flinfo, arg1)
#define FunctionCall2(flinfo, arg1, arg2)
#define FunctionCall3(flinfo, arg1, arg2, arg3)
void * repalloc(void *pointer, Size size)
void pfree(void *pointer)
static char buf[DEFAULT_XLOG_SEG_SIZE]
static Datum PointerGetDatum(const void *X)
static Pointer DatumGetPointer(Datum X)
static Datum Int32GetDatum(int32 X)
static int32 DatumGetInt32(Datum X)
static void word(struct vars *v, int dir, struct state *lp, struct state *rp)
HeadlineWordEntry * words
TSConfigCacheEntry * lookup_ts_config_cache(Oid cfgId)
TSParserCacheEntry * lookup_ts_parser_cache(Oid prsId)
TSDictionaryCacheEntry * lookup_ts_dictionary_cache(Oid dictId)
static void hlfinditem(HeadlineParsedText *prs, TSQuery query, int32 pos, char *buf, int buflen)
static void setNewTmpRes(LexizeData *ld, ParsedLex *lex, TSLexeme *res)
text * generateHeadline(HeadlineParsedText *prs)
static void RemoveHead(LexizeData *ld)
static void setCorrLex(LexizeData *ld, ParsedLex **correspondLexem)
void parsetext(Oid cfgId, ParsedText *prs, char *buf, int buflen)
void hlparsetext(Oid cfgId, HeadlineParsedText *prs, TSQuery query, char *buf, int buflen)
static void hladdword(HeadlineParsedText *prs, char *buf, int buflen, int type)
static TSLexeme * LexizeExec(LexizeData *ld, ParsedLex **correspondLexem)
static void LPLAddTail(ListParsedLex *list, ParsedLex *newpl)
static void moveToWaste(LexizeData *ld, ParsedLex *stop)
static ParsedLex * LPLRemoveHead(ListParsedLex *list)
static void addHLParsedLex(HeadlineParsedText *prs, TSQuery query, ParsedLex *lexs, TSLexeme *norms)
static void LexizeAddLemm(LexizeData *ld, int type, char *lemm, int lenlemm)
static void LexizeInit(LexizeData *ld, TSConfigCacheEntry *cfg)
int32 tsCompareString(char *a, int lena, char *b, int lenb, bool prefix)
static void SET_VARSIZE(void *PTR, Size len)