#include "postgres.h"#include "fmgr.h"
Go to the source code of this file.
Data Structures | |
| struct | ParserState |
| struct | LexDescr |
Functions | |
| PG_FUNCTION_INFO_V1 (testprs_start) | |
| Datum | testprs_start (PG_FUNCTION_ARGS) |
| PG_FUNCTION_INFO_V1 (testprs_getlexeme) | |
| Datum | testprs_getlexeme (PG_FUNCTION_ARGS) |
| PG_FUNCTION_INFO_V1 (testprs_end) | |
| Datum | testprs_end (PG_FUNCTION_ARGS) |
| PG_FUNCTION_INFO_V1 (testprs_lextype) | |
| Datum | testprs_lextype (PG_FUNCTION_ARGS) |
Variables | |
| PG_MODULE_MAGIC | |
| PG_FUNCTION_INFO_V1 | ( | testprs_start | ) |
| PG_FUNCTION_INFO_V1 | ( | testprs_end | ) |
| PG_FUNCTION_INFO_V1 | ( | testprs_lextype | ) |
| PG_FUNCTION_INFO_V1 | ( | testprs_getlexeme | ) |
| Datum testprs_end | ( | PG_FUNCTION_ARGS | ) |
Definition at line 111 of file test_parser.c.
References pfree(), PG_GETARG_POINTER, and PG_RETURN_VOID.
{
ParserState *pst = (ParserState *) PG_GETARG_POINTER(0);
pfree(pst);
PG_RETURN_VOID();
}
| Datum testprs_getlexeme | ( | PG_FUNCTION_ARGS | ) |
Definition at line 71 of file test_parser.c.
References ParserState::buffer, ParserState::len, PG_GETARG_POINTER, PG_RETURN_INT32, and ParserState::pos.
{
ParserState *pst = (ParserState *) PG_GETARG_POINTER(0);
char **t = (char **) PG_GETARG_POINTER(1);
int *tlen = (int *) PG_GETARG_POINTER(2);
int startpos = pst->pos;
int type;
*t = pst->buffer + pst->pos;
if (pst->pos < pst->len &&
(pst->buffer)[pst->pos] == ' ')
{
/* blank type */
type = 12;
/* go to the next non-space character */
while (pst->pos < pst->len &&
(pst->buffer)[pst->pos] == ' ')
(pst->pos)++;
}
else
{
/* word type */
type = 3;
/* go to the next space character */
while (pst->pos < pst->len &&
(pst->buffer)[pst->pos] != ' ')
(pst->pos)++;
}
*tlen = pst->pos - startpos;
/* we are finished if (*tlen == 0) */
if (*tlen == 0)
type = 0;
PG_RETURN_INT32(type);
}
| Datum testprs_lextype | ( | PG_FUNCTION_ARGS | ) |
Definition at line 120 of file test_parser.c.
References LexDescr::alias, LexDescr::descr, LexDescr::lexid, palloc(), PG_RETURN_POINTER, and pstrdup().
{
/*
* Remarks: - we have to return the blanks for headline reason - we use
* the same lexids like Teodor in the default word parser; in this way we
* can reuse the headline function of the default word parser.
*/
LexDescr *descr = (LexDescr *) palloc(sizeof(LexDescr) * (2 + 1));
/* there are only two types in this parser */
descr[0].lexid = 3;
descr[0].alias = pstrdup("word");
descr[0].descr = pstrdup("Word");
descr[1].lexid = 12;
descr[1].alias = pstrdup("blank");
descr[1].descr = pstrdup("Space symbols");
descr[2].lexid = 0;
PG_RETURN_POINTER(descr);
}
| Datum testprs_start | ( | PG_FUNCTION_ARGS | ) |
Definition at line 59 of file test_parser.c.
References ParserState::buffer, ParserState::len, palloc0(), PG_GETARG_INT32, PG_GETARG_POINTER, PG_RETURN_POINTER, and ParserState::pos.
{
ParserState *pst = (ParserState *) palloc0(sizeof(ParserState));
pst->buffer = (char *) PG_GETARG_POINTER(0);
pst->len = PG_GETARG_INT32(1);
pst->pos = 0;
PG_RETURN_POINTER(pst);
}
Definition at line 17 of file test_parser.c.
1.7.1