PostgreSQL Source Code  git master
dict.c
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * dict.c
4  * Standard interface to dictionary
5  *
6  * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
7  *
8  *
9  * IDENTIFICATION
10  * src/backend/tsearch/dict.c
11  *
12  *-------------------------------------------------------------------------
13  */
14 #include "postgres.h"
15 
16 #include "catalog/pg_type.h"
17 #include "tsearch/ts_cache.h"
18 #include "tsearch/ts_public.h"
19 #include "utils/array.h"
20 #include "utils/builtins.h"
21 
22 
23 /*
24  * Lexize one word by dictionary, mostly debug function
25  */
26 Datum
28 {
29  Oid dictId = PG_GETARG_OID(0);
30  text *in = PG_GETARG_TEXT_PP(1);
31  ArrayType *a;
33  TSLexeme *res,
34  *ptr;
35  Datum *da;
36  DictSubState dstate = {false, false, NULL};
37 
38  dict = lookup_ts_dictionary_cache(dictId);
39 
44  PointerGetDatum(&dstate)));
45 
46  if (dstate.getnext)
47  {
48  dstate.isend = true;
53  PointerGetDatum(&dstate)));
54  if (ptr != NULL)
55  res = ptr;
56  }
57 
58  if (!res)
60 
61  ptr = res;
62  while (ptr->lexeme)
63  ptr++;
64  da = (Datum *) palloc(sizeof(Datum) * (ptr - res));
65  ptr = res;
66  while (ptr->lexeme)
67  {
68  da[ptr - res] = CStringGetTextDatum(ptr->lexeme);
69  ptr++;
70  }
71 
72  a = construct_array_builtin(da, ptr - res, TEXTOID);
73 
74  ptr = res;
75  while (ptr->lexeme)
76  {
77  pfree(DatumGetPointer(da[ptr - res]));
78  pfree(ptr->lexeme);
79  ptr++;
80  }
81  pfree(res);
82  pfree(da);
83 
85 }
ArrayType * construct_array_builtin(Datum *elems, int nelems, Oid elmtype)
Definition: arrayfuncs.c:3374
#define CStringGetTextDatum(s)
Definition: builtins.h:97
Datum ts_lexize(PG_FUNCTION_ARGS)
Definition: dict.c:27
#define PG_GETARG_OID(n)
Definition: fmgr.h:275
#define PG_GETARG_TEXT_PP(n)
Definition: fmgr.h:309
#define PG_RETURN_NULL()
Definition: fmgr.h:345
#define FunctionCall4(flinfo, arg1, arg2, arg3, arg4)
Definition: fmgr.h:666
#define PG_RETURN_POINTER(x)
Definition: fmgr.h:361
#define PG_FUNCTION_ARGS
Definition: fmgr.h:193
int a
Definition: isn.c:69
void pfree(void *pointer)
Definition: mcxt.c:1508
void * palloc(Size size)
Definition: mcxt.c:1304
static Datum PointerGetDatum(const void *X)
Definition: postgres.h:322
uintptr_t Datum
Definition: postgres.h:64
static Pointer DatumGetPointer(Datum X)
Definition: postgres.h:312
static Datum Int32GetDatum(int32 X)
Definition: postgres.h:212
unsigned int Oid
Definition: postgres_ext.h:31
bool getnext
Definition: ts_public.h:154
char * lexeme
Definition: ts_public.h:138
Definition: c.h:674
TSDictionaryCacheEntry * lookup_ts_dictionary_cache(Oid dictId)
Definition: ts_cache.c:208
#define VARDATA_ANY(PTR)
Definition: varatt.h:324
#define VARSIZE_ANY_EXHDR(PTR)
Definition: varatt.h:317