aboutsummaryrefslogtreecommitdiff
path: root/contrib/tsearch2/wparser.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/tsearch2/wparser.c')
-rw-r--r--contrib/tsearch2/wparser.c614
1 files changed, 333 insertions, 281 deletions
diff --git a/contrib/tsearch2/wparser.c b/contrib/tsearch2/wparser.c
index deff94ce904..b7e45e51885 100644
--- a/contrib/tsearch2/wparser.c
+++ b/contrib/tsearch2/wparser.c
@@ -1,5 +1,5 @@
-/*
- * interface functions to parser
+/*
+ * interface functions to parser
* Teodor Sigaev <teodor@sigaev.ru>
*/
#include <errno.h>
@@ -21,154 +21,171 @@
/*********top interface**********/
-static void *plan_getparser=NULL;
-static Oid current_parser_id=InvalidOid;
+static void *plan_getparser = NULL;
+static Oid current_parser_id = InvalidOid;
void
-init_prs(Oid id, WParserInfo *prs) {
- Oid arg[1]={ OIDOID };
- bool isnull;
- Datum pars[1]={ ObjectIdGetDatum(id) };
- int stat;
-
- memset(prs,0,sizeof(WParserInfo));
+init_prs(Oid id, WParserInfo * prs)
+{
+ Oid arg[1] = {OIDOID};
+ bool isnull;
+ Datum pars[1] = {ObjectIdGetDatum(id)};
+ int stat;
+
+ memset(prs, 0, sizeof(WParserInfo));
SPI_connect();
- if ( !plan_getparser ) {
- plan_getparser = SPI_saveplan( SPI_prepare( "select prs_start, prs_nexttoken, prs_end, prs_lextype, prs_headline from pg_ts_parser where oid = $1" , 1, arg ) );
- if ( !plan_getparser )
+ if (!plan_getparser)
+ {
+ plan_getparser = SPI_saveplan(SPI_prepare("select prs_start, prs_nexttoken, prs_end, prs_lextype, prs_headline from pg_ts_parser where oid = $1", 1, arg));
+ if (!plan_getparser)
ts_error(ERROR, "SPI_prepare() failed");
}
stat = SPI_execp(plan_getparser, pars, " ", 1);
- if ( stat < 0 )
- ts_error (ERROR, "SPI_execp return %d", stat);
- if ( SPI_processed > 0 ) {
- Oid oid=InvalidOid;
- oid=DatumGetObjectId( SPI_getbinval(SPI_tuptable->vals[0], SPI_tuptable->tupdesc, 1, &isnull) );
+ if (stat < 0)
+ ts_error(ERROR, "SPI_execp return %d", stat);
+ if (SPI_processed > 0)
+ {
+ Oid oid = InvalidOid;
+
+ oid = DatumGetObjectId(SPI_getbinval(SPI_tuptable->vals[0], SPI_tuptable->tupdesc, 1, &isnull));
fmgr_info_cxt(oid, &(prs->start_info), TopMemoryContext);
- oid=DatumGetObjectId( SPI_getbinval(SPI_tuptable->vals[0], SPI_tuptable->tupdesc, 2, &isnull) );
+ oid = DatumGetObjectId(SPI_getbinval(SPI_tuptable->vals[0], SPI_tuptable->tupdesc, 2, &isnull));
fmgr_info_cxt(oid, &(prs->getlexeme_info), TopMemoryContext);
- oid=DatumGetObjectId( SPI_getbinval(SPI_tuptable->vals[0], SPI_tuptable->tupdesc, 3, &isnull) );
+ oid = DatumGetObjectId(SPI_getbinval(SPI_tuptable->vals[0], SPI_tuptable->tupdesc, 3, &isnull));
fmgr_info_cxt(oid, &(prs->end_info), TopMemoryContext);
- prs->lextype=DatumGetObjectId( SPI_getbinval(SPI_tuptable->vals[0], SPI_tuptable->tupdesc, 4, &isnull) );
- oid=DatumGetObjectId( SPI_getbinval(SPI_tuptable->vals[0], SPI_tuptable->tupdesc, 5, &isnull) );
+ prs->lextype = DatumGetObjectId(SPI_getbinval(SPI_tuptable->vals[0], SPI_tuptable->tupdesc, 4, &isnull));
+ oid = DatumGetObjectId(SPI_getbinval(SPI_tuptable->vals[0], SPI_tuptable->tupdesc, 5, &isnull));
fmgr_info_cxt(oid, &(prs->headline_info), TopMemoryContext);
- prs->prs_id=id;
- } else
+ prs->prs_id = id;
+ }
+ else
ts_error(ERROR, "No parser with id %d", id);
SPI_finish();
}
-typedef struct {
- WParserInfo *last_prs;
- int len;
- int reallen;
- WParserInfo *list;
+typedef struct
+{
+ WParserInfo *last_prs;
+ int len;
+ int reallen;
+ WParserInfo *list;
SNMap name2id_map;
-} PrsList;
+} PrsList;
-static PrsList PList = {NULL,0,0,NULL,{0,0,NULL}};
+static PrsList PList = {NULL, 0, 0, NULL, {0, 0, NULL}};
-void
-reset_prs(void) {
- freeSNMap( &(PList.name2id_map) );
- if ( PList.list )
+void
+reset_prs(void)
+{
+ freeSNMap(&(PList.name2id_map));
+ if (PList.list)
free(PList.list);
- memset(&PList,0,sizeof(PrsList));
+ memset(&PList, 0, sizeof(PrsList));
}
static int
-compareprs(const void *a, const void *b) {
- return ((WParserInfo*)a)->prs_id - ((WParserInfo*)b)->prs_id;
+compareprs(const void *a, const void *b)
+{
+ return ((WParserInfo *) a)->prs_id - ((WParserInfo *) b)->prs_id;
}
WParserInfo *
-findprs(Oid id) {
+findprs(Oid id)
+{
/* last used prs */
- if ( PList.last_prs && PList.last_prs->prs_id==id )
+ if (PList.last_prs && PList.last_prs->prs_id == id)
return PList.last_prs;
/* already used prs */
- if ( PList.len != 0 ) {
+ if (PList.len != 0)
+ {
WParserInfo key;
- key.prs_id=id;
+
+ key.prs_id = id;
PList.last_prs = bsearch(&key, PList.list, PList.len, sizeof(WParserInfo), compareprs);
- if ( PList.last_prs != NULL )
+ if (PList.last_prs != NULL)
return PList.last_prs;
}
/* last chance */
- if ( PList.len==PList.reallen ) {
+ if (PList.len == PList.reallen)
+ {
WParserInfo *tmp;
- int reallen = ( PList.reallen ) ? 2*PList.reallen : 16;
- tmp=(WParserInfo*)realloc(PList.list,sizeof(WParserInfo)*reallen);
- if ( !tmp )
- ts_error(ERROR,"No memory");
- PList.reallen=reallen;
- PList.list=tmp;
+ int reallen = (PList.reallen) ? 2 * PList.reallen : 16;
+
+ tmp = (WParserInfo *) realloc(PList.list, sizeof(WParserInfo) * reallen);
+ if (!tmp)
+ ts_error(ERROR, "No memory");
+ PList.reallen = reallen;
+ PList.list = tmp;
}
- PList.last_prs=&(PList.list[PList.len]);
+ PList.last_prs = &(PList.list[PList.len]);
init_prs(id, PList.last_prs);
PList.len++;
qsort(PList.list, PList.len, sizeof(WParserInfo), compareprs);
- return findprs(id); /* qsort changed order!! */;
+ return findprs(id); /* qsort changed order!! */ ;
}
-static void *plan_name2id=NULL;
+static void *plan_name2id = NULL;
Oid
-name2id_prs(text *name) {
- Oid arg[1]={ TEXTOID };
- bool isnull;
- Datum pars[1]={ PointerGetDatum(name) };
- int stat;
- Oid id=findSNMap_t( &(PList.name2id_map), name );
-
- if ( id )
+name2id_prs(text *name)
+{
+ Oid arg[1] = {TEXTOID};
+ bool isnull;
+ Datum pars[1] = {PointerGetDatum(name)};
+ int stat;
+ Oid id = findSNMap_t(&(PList.name2id_map), name);
+
+ if (id)
return id;
-
+
SPI_connect();
- if ( !plan_name2id ) {
- plan_name2id = SPI_saveplan( SPI_prepare( "select oid from pg_ts_parser where prs_name = $1" , 1, arg ) );
- if ( !plan_name2id )
+ if (!plan_name2id)
+ {
+ plan_name2id = SPI_saveplan(SPI_prepare("select oid from pg_ts_parser where prs_name = $1", 1, arg));
+ if (!plan_name2id)
ts_error(ERROR, "SPI_prepare() failed");
}
stat = SPI_execp(plan_name2id, pars, " ", 1);
- if ( stat < 0 )
- ts_error (ERROR, "SPI_execp return %d", stat);
- if ( SPI_processed > 0 )
- id=DatumGetObjectId( SPI_getbinval(SPI_tuptable->vals[0], SPI_tuptable->tupdesc, 1, &isnull) );
- else
+ if (stat < 0)
+ ts_error(ERROR, "SPI_execp return %d", stat);
+ if (SPI_processed > 0)
+ id = DatumGetObjectId(SPI_getbinval(SPI_tuptable->vals[0], SPI_tuptable->tupdesc, 1, &isnull));
+ else
ts_error(ERROR, "No parser '%s'", text2char(name));
SPI_finish();
- addSNMap_t( &(PList.name2id_map), name, id );
+ addSNMap_t(&(PList.name2id_map), name, id);
return id;
}
/******sql-level interface******/
-typedef struct {
- int cur;
- LexDescr *list;
-} TypeStorage;
+typedef struct
+{
+ int cur;
+ LexDescr *list;
+} TypeStorage;
static void
-setup_firstcall(FuncCallContext *funcctx, Oid prsid) {
- TupleDesc tupdesc;
- MemoryContext oldcontext;
- TypeStorage *st;
- WParserInfo *prs = findprs(prsid);
+setup_firstcall(FuncCallContext *funcctx, Oid prsid)
+{
+ TupleDesc tupdesc;
+ MemoryContext oldcontext;
+ TypeStorage *st;
+ WParserInfo *prs = findprs(prsid);
oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
- st=(TypeStorage*)palloc( sizeof(TypeStorage) );
- st->cur=0;
- st->list = (LexDescr*)DatumGetPointer(
- OidFunctionCall1( prs->lextype, PointerGetDatum(prs->prs) )
- );
- funcctx->user_fctx = (void*)st;
+ st = (TypeStorage *) palloc(sizeof(TypeStorage));
+ st->cur = 0;
+ st->list = (LexDescr *) DatumGetPointer(
+ OidFunctionCall1(prs->lextype, PointerGetDatum(prs->prs))
+ );
+ funcctx->user_fctx = (void *) st;
tupdesc = RelationNameGetTupleDesc("tokentype");
funcctx->slot = TupleDescGetSlot(tupdesc);
funcctx->attinmeta = TupleDescGetAttInMetadata(tupdesc);
@@ -176,20 +193,22 @@ setup_firstcall(FuncCallContext *funcctx, Oid prsid) {
}
static Datum
-process_call(FuncCallContext *funcctx) {
- TypeStorage *st;
-
- st=(TypeStorage*)funcctx->user_fctx;
- if ( st->list && st->list[st->cur].lexid ) {
- Datum result;
- char* values[3];
- char txtid[16];
- HeapTuple tuple;
-
- values[0]=txtid;
- sprintf(txtid,"%d",st->list[st->cur].lexid);
- values[1]=st->list[st->cur].alias;
- values[2]=st->list[st->cur].descr;
+process_call(FuncCallContext *funcctx)
+{
+ TypeStorage *st;
+
+ st = (TypeStorage *) funcctx->user_fctx;
+ if (st->list && st->list[st->cur].lexid)
+ {
+ Datum result;
+ char *values[3];
+ char txtid[16];
+ HeapTuple tuple;
+
+ values[0] = txtid;
+ sprintf(txtid, "%d", st->list[st->cur].lexid);
+ values[1] = st->list[st->cur].alias;
+ values[2] = st->list[st->cur].descr;
tuple = BuildTupleFromCStrings(funcctx->attinmeta, values);
result = TupleGetDatum(funcctx->slot, tuple);
@@ -198,161 +217,179 @@ process_call(FuncCallContext *funcctx) {
pfree(values[2]);
st->cur++;
return result;
- } else {
- if ( st->list ) pfree(st->list);
+ }
+ else
+ {
+ if (st->list)
+ pfree(st->list);
pfree(st);
}
- return (Datum)0;
+ return (Datum) 0;
}
PG_FUNCTION_INFO_V1(token_type);
-Datum token_type(PG_FUNCTION_ARGS);
+Datum token_type(PG_FUNCTION_ARGS);
Datum
-token_type(PG_FUNCTION_ARGS) {
- FuncCallContext *funcctx;
- Datum result;
+token_type(PG_FUNCTION_ARGS)
+{
+ FuncCallContext *funcctx;
+ Datum result;
- if (SRF_IS_FIRSTCALL()) {
+ if (SRF_IS_FIRSTCALL())
+ {
funcctx = SRF_FIRSTCALL_INIT();
- setup_firstcall(funcctx, PG_GETARG_OID(0) );
+ setup_firstcall(funcctx, PG_GETARG_OID(0));
}
funcctx = SRF_PERCALL_SETUP();
- if ( (result=process_call(funcctx)) != (Datum)0 )
+ if ((result = process_call(funcctx)) != (Datum) 0)
SRF_RETURN_NEXT(funcctx, result);
SRF_RETURN_DONE(funcctx);
}
PG_FUNCTION_INFO_V1(token_type_byname);
-Datum token_type_byname(PG_FUNCTION_ARGS);
+Datum token_type_byname(PG_FUNCTION_ARGS);
Datum
-token_type_byname(PG_FUNCTION_ARGS) {
- FuncCallContext *funcctx;
- Datum result;
+token_type_byname(PG_FUNCTION_ARGS)
+{
+ FuncCallContext *funcctx;
+ Datum result;
+
+ if (SRF_IS_FIRSTCALL())
+ {
+ text *name = PG_GETARG_TEXT_P(0);
- if (SRF_IS_FIRSTCALL()) {
- text *name = PG_GETARG_TEXT_P(0);
funcctx = SRF_FIRSTCALL_INIT();
- setup_firstcall(funcctx, name2id_prs( name ) );
- PG_FREE_IF_COPY(name,0);
+ setup_firstcall(funcctx, name2id_prs(name));
+ PG_FREE_IF_COPY(name, 0);
}
funcctx = SRF_PERCALL_SETUP();
- if ( (result=process_call(funcctx)) != (Datum)0 )
+ if ((result = process_call(funcctx)) != (Datum) 0)
SRF_RETURN_NEXT(funcctx, result);
SRF_RETURN_DONE(funcctx);
}
PG_FUNCTION_INFO_V1(token_type_current);
-Datum token_type_current(PG_FUNCTION_ARGS);
+Datum token_type_current(PG_FUNCTION_ARGS);
Datum
-token_type_current(PG_FUNCTION_ARGS) {
- FuncCallContext *funcctx;
- Datum result;
+token_type_current(PG_FUNCTION_ARGS)
+{
+ FuncCallContext *funcctx;
+ Datum result;
- if (SRF_IS_FIRSTCALL()) {
+ if (SRF_IS_FIRSTCALL())
+ {
funcctx = SRF_FIRSTCALL_INIT();
- if ( current_parser_id==InvalidOid )
- current_parser_id = name2id_prs( char2text("default") );
- setup_firstcall(funcctx, current_parser_id );
+ if (current_parser_id == InvalidOid)
+ current_parser_id = name2id_prs(char2text("default"));
+ setup_firstcall(funcctx, current_parser_id);
}
funcctx = SRF_PERCALL_SETUP();
- if ( (result=process_call(funcctx)) != (Datum)0 )
+ if ((result = process_call(funcctx)) != (Datum) 0)
SRF_RETURN_NEXT(funcctx, result);
SRF_RETURN_DONE(funcctx);
}
PG_FUNCTION_INFO_V1(set_curprs);
-Datum set_curprs(PG_FUNCTION_ARGS);
+Datum set_curprs(PG_FUNCTION_ARGS);
Datum
-set_curprs(PG_FUNCTION_ARGS) {
- findprs(PG_GETARG_OID(0));
- current_parser_id=PG_GETARG_OID(0);
- PG_RETURN_VOID();
+set_curprs(PG_FUNCTION_ARGS)
+{
+ findprs(PG_GETARG_OID(0));
+ current_parser_id = PG_GETARG_OID(0);
+ PG_RETURN_VOID();
}
PG_FUNCTION_INFO_V1(set_curprs_byname);
-Datum set_curprs_byname(PG_FUNCTION_ARGS);
+Datum set_curprs_byname(PG_FUNCTION_ARGS);
Datum
-set_curprs_byname(PG_FUNCTION_ARGS) {
- text *name=PG_GETARG_TEXT_P(0);
-
- DirectFunctionCall1(
- set_curprs,
- ObjectIdGetDatum( name2id_prs(name) )
- );
- PG_FREE_IF_COPY(name, 0);
- PG_RETURN_VOID();
+set_curprs_byname(PG_FUNCTION_ARGS)
+{
+ text *name = PG_GETARG_TEXT_P(0);
+
+ DirectFunctionCall1(
+ set_curprs,
+ ObjectIdGetDatum(name2id_prs(name))
+ );
+ PG_FREE_IF_COPY(name, 0);
+ PG_RETURN_VOID();
}
-typedef struct {
- int type;
- char *lexem;
-} LexemEntry;
+typedef struct
+{
+ int type;
+ char *lexem;
+} LexemEntry;
+
+typedef struct
+{
+ int cur;
+ int len;
+ LexemEntry *list;
+} PrsStorage;
-typedef struct {
- int cur;
- int len;
- LexemEntry *list;
-} PrsStorage;
-
static void
-prs_setup_firstcall(FuncCallContext *funcctx, int prsid, text *txt) {
- TupleDesc tupdesc;
- MemoryContext oldcontext;
- PrsStorage *st;
- WParserInfo *prs = findprs(prsid);
- char *lex=NULL;
- int llen=0, type=0;
+prs_setup_firstcall(FuncCallContext *funcctx, int prsid, text *txt)
+{
+ TupleDesc tupdesc;
+ MemoryContext oldcontext;
+ PrsStorage *st;
+ WParserInfo *prs = findprs(prsid);
+ char *lex = NULL;
+ int llen = 0,
+ type = 0;
oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
- st=(PrsStorage*)palloc( sizeof(PrsStorage) );
- st->cur=0;
- st->len=16;
- st->list=(LexemEntry*)palloc( sizeof(LexemEntry)*st->len );
-
- prs->prs = (void*)DatumGetPointer(
- FunctionCall2(
- &(prs->start_info),
- PointerGetDatum(VARDATA(txt)),
- Int32GetDatum(VARSIZE(txt)-VARHDRSZ)
- )
- );
-
- while( ( type=DatumGetInt32(FunctionCall3(
- &(prs->getlexeme_info),
- PointerGetDatum(prs->prs),
- PointerGetDatum(&lex),
- PointerGetDatum(&llen))) ) != 0 ) {
-
- if ( st->cur>=st->len ) {
- st->len=2*st->len;
- st->list=(LexemEntry*)repalloc(st->list, sizeof(LexemEntry)*st->len);
+ st = (PrsStorage *) palloc(sizeof(PrsStorage));
+ st->cur = 0;
+ st->len = 16;
+ st->list = (LexemEntry *) palloc(sizeof(LexemEntry) * st->len);
+
+ prs->prs = (void *) DatumGetPointer(
+ FunctionCall2(
+ &(prs->start_info),
+ PointerGetDatum(VARDATA(txt)),
+ Int32GetDatum(VARSIZE(txt) - VARHDRSZ)
+ )
+ );
+
+ while ((type = DatumGetInt32(FunctionCall3(
+ &(prs->getlexeme_info),
+ PointerGetDatum(prs->prs),
+ PointerGetDatum(&lex),
+ PointerGetDatum(&llen)))) != 0)
+ {
+
+ if (st->cur >= st->len)
+ {
+ st->len = 2 * st->len;
+ st->list = (LexemEntry *) repalloc(st->list, sizeof(LexemEntry) * st->len);
}
- st->list[st->cur].lexem = palloc(llen+1);
- memcpy( st->list[st->cur].lexem, lex, llen);
- st->list[st->cur].lexem[llen]='\0';
- st->list[st->cur].type=type;
+ st->list[st->cur].lexem = palloc(llen + 1);
+ memcpy(st->list[st->cur].lexem, lex, llen);
+ st->list[st->cur].lexem[llen] = '\0';
+ st->list[st->cur].type = type;
st->cur++;
}
-
+
FunctionCall1(
- &(prs->end_info),
- PointerGetDatum(prs->prs)
- );
+ &(prs->end_info),
+ PointerGetDatum(prs->prs)
+ );
- st->len=st->cur;
- st->cur=0;
-
- funcctx->user_fctx = (void*)st;
+ st->len = st->cur;
+ st->cur = 0;
+
+ funcctx->user_fctx = (void *) st;
tupdesc = RelationNameGetTupleDesc("tokenout");
funcctx->slot = TupleDescGetSlot(tupdesc);
funcctx->attinmeta = TupleDescGetAttInMetadata(tupdesc);
@@ -360,132 +397,148 @@ prs_setup_firstcall(FuncCallContext *funcctx, int prsid, text *txt) {
}
static Datum
-prs_process_call(FuncCallContext *funcctx) {
- PrsStorage *st;
-
- st=(PrsStorage*)funcctx->user_fctx;
- if ( st->cur < st->len ) {
- Datum result;
- char* values[2];
- char tid[16];
- HeapTuple tuple;
-
- values[0]=tid;
- sprintf(tid,"%d",st->list[st->cur].type);
- values[1]=st->list[st->cur].lexem;
+prs_process_call(FuncCallContext *funcctx)
+{
+ PrsStorage *st;
+
+ st = (PrsStorage *) funcctx->user_fctx;
+ if (st->cur < st->len)
+ {
+ Datum result;
+ char *values[2];
+ char tid[16];
+ HeapTuple tuple;
+
+ values[0] = tid;
+ sprintf(tid, "%d", st->list[st->cur].type);
+ values[1] = st->list[st->cur].lexem;
tuple = BuildTupleFromCStrings(funcctx->attinmeta, values);
result = TupleGetDatum(funcctx->slot, tuple);
pfree(values[1]);
st->cur++;
return result;
- } else {
- if ( st->list ) pfree(st->list);
+ }
+ else
+ {
+ if (st->list)
+ pfree(st->list);
pfree(st);
}
- return (Datum)0;
+ return (Datum) 0;
}
-
+
PG_FUNCTION_INFO_V1(parse);
-Datum parse(PG_FUNCTION_ARGS);
+Datum parse(PG_FUNCTION_ARGS);
Datum
-parse(PG_FUNCTION_ARGS) {
- FuncCallContext *funcctx;
- Datum result;
+parse(PG_FUNCTION_ARGS)
+{
+ FuncCallContext *funcctx;
+ Datum result;
+
+ if (SRF_IS_FIRSTCALL())
+ {
+ text *txt = PG_GETARG_TEXT_P(1);
- if (SRF_IS_FIRSTCALL()) {
- text *txt = PG_GETARG_TEXT_P(1);
funcctx = SRF_FIRSTCALL_INIT();
- prs_setup_firstcall(funcctx, PG_GETARG_OID(0),txt );
- PG_FREE_IF_COPY(txt,1);
+ prs_setup_firstcall(funcctx, PG_GETARG_OID(0), txt);
+ PG_FREE_IF_COPY(txt, 1);
}
funcctx = SRF_PERCALL_SETUP();
- if ( (result=prs_process_call(funcctx)) != (Datum)0 )
+ if ((result = prs_process_call(funcctx)) != (Datum) 0)
SRF_RETURN_NEXT(funcctx, result);
SRF_RETURN_DONE(funcctx);
}
PG_FUNCTION_INFO_V1(parse_byname);
-Datum parse_byname(PG_FUNCTION_ARGS);
+Datum parse_byname(PG_FUNCTION_ARGS);
Datum
-parse_byname(PG_FUNCTION_ARGS) {
- FuncCallContext *funcctx;
- Datum result;
+parse_byname(PG_FUNCTION_ARGS)
+{
+ FuncCallContext *funcctx;
+ Datum result;
+
+ if (SRF_IS_FIRSTCALL())
+ {
+ text *name = PG_GETARG_TEXT_P(0);
+ text *txt = PG_GETARG_TEXT_P(1);
- if (SRF_IS_FIRSTCALL()) {
- text *name = PG_GETARG_TEXT_P(0);
- text *txt = PG_GETARG_TEXT_P(1);
funcctx = SRF_FIRSTCALL_INIT();
- prs_setup_firstcall(funcctx, name2id_prs( name ),txt );
- PG_FREE_IF_COPY(name,0);
- PG_FREE_IF_COPY(txt,1);
+ prs_setup_firstcall(funcctx, name2id_prs(name), txt);
+ PG_FREE_IF_COPY(name, 0);
+ PG_FREE_IF_COPY(txt, 1);
}
funcctx = SRF_PERCALL_SETUP();
- if ( (result=prs_process_call(funcctx)) != (Datum)0 )
+ if ((result = prs_process_call(funcctx)) != (Datum) 0)
SRF_RETURN_NEXT(funcctx, result);
SRF_RETURN_DONE(funcctx);
}
PG_FUNCTION_INFO_V1(parse_current);
-Datum parse_current(PG_FUNCTION_ARGS);
+Datum parse_current(PG_FUNCTION_ARGS);
Datum
-parse_current(PG_FUNCTION_ARGS) {
- FuncCallContext *funcctx;
- Datum result;
+parse_current(PG_FUNCTION_ARGS)
+{
+ FuncCallContext *funcctx;
+ Datum result;
+
+ if (SRF_IS_FIRSTCALL())
+ {
+ text *txt = PG_GETARG_TEXT_P(0);
- if (SRF_IS_FIRSTCALL()) {
- text *txt = PG_GETARG_TEXT_P(0);
funcctx = SRF_FIRSTCALL_INIT();
- if ( current_parser_id==InvalidOid )
- current_parser_id = name2id_prs( char2text("default") );
- prs_setup_firstcall(funcctx, current_parser_id,txt );
- PG_FREE_IF_COPY(txt,0);
+ if (current_parser_id == InvalidOid)
+ current_parser_id = name2id_prs(char2text("default"));
+ prs_setup_firstcall(funcctx, current_parser_id, txt);
+ PG_FREE_IF_COPY(txt, 0);
}
funcctx = SRF_PERCALL_SETUP();
- if ( (result=prs_process_call(funcctx)) != (Datum)0 )
+ if ((result = prs_process_call(funcctx)) != (Datum) 0)
SRF_RETURN_NEXT(funcctx, result);
SRF_RETURN_DONE(funcctx);
}
PG_FUNCTION_INFO_V1(headline);
-Datum headline(PG_FUNCTION_ARGS);
+Datum headline(PG_FUNCTION_ARGS);
Datum
-headline(PG_FUNCTION_ARGS) {
- TSCfgInfo *cfg=findcfg(PG_GETARG_OID(0));
- text *in = PG_GETARG_TEXT_P(1);
+headline(PG_FUNCTION_ARGS)
+{
+ TSCfgInfo *cfg = findcfg(PG_GETARG_OID(0));
+ text *in = PG_GETARG_TEXT_P(1);
QUERYTYPE *query = (QUERYTYPE *) DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(2)));
- text *opt=( PG_NARGS()>3 && PG_GETARG_POINTER(3) ) ? PG_GETARG_TEXT_P(3) : NULL;
+ text *opt = (PG_NARGS() > 3 && PG_GETARG_POINTER(3)) ? PG_GETARG_TEXT_P(3) : NULL;
HLPRSTEXT prs;
- text *out;
+ text *out;
WParserInfo *prsobj = findprs(cfg->prs_id);
- memset(&prs,0,sizeof(HLPRSTEXT));
+ memset(&prs, 0, sizeof(HLPRSTEXT));
prs.lenwords = 32;
prs.words = (HLWORD *) palloc(sizeof(HLWORD) * prs.lenwords);
hlparsetext(cfg, &prs, query, VARDATA(in), VARSIZE(in) - VARHDRSZ);
FunctionCall3(
- &(prsobj->headline_info),
- PointerGetDatum(&prs),
- PointerGetDatum(opt),
- PointerGetDatum(query)
- );
+ &(prsobj->headline_info),
+ PointerGetDatum(&prs),
+ PointerGetDatum(opt),
+ PointerGetDatum(query)
+ );
out = genhl(&prs);
- PG_FREE_IF_COPY(in,1);
- PG_FREE_IF_COPY(query,2);
- if ( opt ) PG_FREE_IF_COPY(opt,3);
+ PG_FREE_IF_COPY(in, 1);
+ PG_FREE_IF_COPY(query, 2);
+ if (opt)
+ PG_FREE_IF_COPY(opt, 3);
pfree(prs.words);
pfree(prs.startsel);
pfree(prs.stopsel);
@@ -495,35 +548,34 @@ headline(PG_FUNCTION_ARGS) {
PG_FUNCTION_INFO_V1(headline_byname);
-Datum headline_byname(PG_FUNCTION_ARGS);
+Datum headline_byname(PG_FUNCTION_ARGS);
Datum
-headline_byname(PG_FUNCTION_ARGS) {
- text *cfg=PG_GETARG_TEXT_P(0);
-
- Datum out=DirectFunctionCall4(
- headline,
- ObjectIdGetDatum(name2id_cfg( cfg ) ),
- PG_GETARG_DATUM(1),
- PG_GETARG_DATUM(2),
- ( PG_NARGS()>3 ) ? PG_GETARG_DATUM(3) : PointerGetDatum(NULL)
+headline_byname(PG_FUNCTION_ARGS)
+{
+ text *cfg = PG_GETARG_TEXT_P(0);
+
+ Datum out = DirectFunctionCall4(
+ headline,
+ ObjectIdGetDatum(name2id_cfg(cfg)),
+ PG_GETARG_DATUM(1),
+ PG_GETARG_DATUM(2),
+ (PG_NARGS() > 3) ? PG_GETARG_DATUM(3) : PointerGetDatum(NULL)
);
- PG_FREE_IF_COPY(cfg,0);
- PG_RETURN_DATUM(out);
+ PG_FREE_IF_COPY(cfg, 0);
+ PG_RETURN_DATUM(out);
}
PG_FUNCTION_INFO_V1(headline_current);
-Datum headline_current(PG_FUNCTION_ARGS);
+Datum headline_current(PG_FUNCTION_ARGS);
Datum
-headline_current(PG_FUNCTION_ARGS) {
+headline_current(PG_FUNCTION_ARGS)
+{
PG_RETURN_DATUM(DirectFunctionCall4(
- headline,
- ObjectIdGetDatum(get_currcfg()),
- PG_GETARG_DATUM(0),
- PG_GETARG_DATUM(1),
- ( PG_NARGS()>2 ) ? PG_GETARG_DATUM(2) : PointerGetDatum(NULL)
- ));
+ headline,
+ ObjectIdGetDatum(get_currcfg()),
+ PG_GETARG_DATUM(0),
+ PG_GETARG_DATUM(1),
+ (PG_NARGS() > 2) ? PG_GETARG_DATUM(2) : PointerGetDatum(NULL)
+ ));
}
-
-
-