9.1rc1_max_parsed_words.patch
text/x-patch
Filename: 9.1rc1_max_parsed_words.patch
Type: text/x-patch
Part: 0
diff -ru postgresql-9.1rc1/src/backend/tsearch/ts_parse.c postgresql-9.1rc1-dev/src/backend/tsearch/ts_parse.c
--- postgresql-9.1rc1/src/backend/tsearch/ts_parse.c 2011-08-19 02:53:13.000000000 +0530
+++ postgresql-9.1rc1-dev/src/backend/tsearch/ts_parse.c 2011-08-23 21:27:10.000000000 +0530
@@ -525,10 +525,11 @@
}
void
-hlparsetext(Oid cfgId, HeadlineParsedText *prs, TSQuery query, char *buf, int buflen)
+hlparsetext(Oid cfgId, HeadlineParsedText *prs, TSQuery query, char *buf, int buflen, int max_parsed_words)
{
int type,
- lenlemm;
+ lenlemm,
+ numparsed = 0;
char *lemm = NULL;
LexizeData ldata;
TSLexeme *norms;
@@ -580,8 +581,8 @@
else
addHLParsedLex(prs, query, lexs, NULL);
} while (norms);
-
- } while (type > 0);
+ numparsed += 1;
+ } while (type > 0 && (max_parsed_words < 0 || numparsed < max_parsed_words));
FunctionCall1(&(prsobj->prsend), PointerGetDatum(prsdata));
}
--- postgresql-9.1rc1/src/backend/tsearch/wparser.c 2011-08-19 02:53:13.000000000 +0530
+++ postgresql-9.1rc1-dev/src/backend/tsearch/wparser.c 2011-08-23 21:30:12.000000000 +0530
@@ -304,6 +304,8 @@
text *out;
TSConfigCacheEntry *cfg;
TSParserCacheEntry *prsobj;
+ ListCell *l;
+ int max_parsed_words = -1;
cfg = lookup_ts_config_cache(PG_GETARG_OID(0));
prsobj = lookup_ts_parser_cache(cfg->prsId);
@@ -317,13 +319,21 @@
prs.lenwords = 32;
prs.words = (HeadlineWordEntry *) palloc(sizeof(HeadlineWordEntry) * prs.lenwords);
- hlparsetext(cfg->cfgId, &prs, query, VARDATA(in), VARSIZE(in) - VARHDRSZ);
if (opt)
prsoptions = deserialize_deflist(PointerGetDatum(opt));
else
prsoptions = NIL;
+ foreach(l, prsoptions)
+ {
+ DefElem *defel = (DefElem *) lfirst(l);
+ char *val = defGetString(defel);
+ if (pg_strcasecmp(defel->defname, "MaxParsedWords") == 0)
+ max_parsed_words = pg_atoi(val, sizeof(int32), 0);
+ }
+
+ hlparsetext(cfg->cfgId, &prs, query, VARDATA(in), VARSIZE(in) - VARHDRSZ, max_parsed_words);
FunctionCall3(&(prsobj->prsheadline),
PointerGetDatum(&prs),
PointerGetDatum(prsoptions),
diff -ru postgresql-9.1rc1/src/include/tsearch/ts_utils.h postgresql-9.1rc1-dev/src/include/tsearch/ts_utils.h
--- postgresql-9.1rc1/src/include/tsearch/ts_utils.h 2011-08-19 02:53:13.000000000 +0530
+++ postgresql-9.1rc1-dev/src/include/tsearch/ts_utils.h 2011-08-23 21:04:14.000000000 +0530
@@ -98,7 +98,7 @@
*/
extern void hlparsetext(Oid cfgId, HeadlineParsedText *prs, TSQuery query,
- char *buf, int4 buflen);
+ char *buf, int4 buflen, int max_parsed_words);
extern text *generateHeadline(HeadlineParsedText *prs);
/*