PostgreSQL Source Code git master
Loading...
Searching...
No Matches
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-2026, 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 */
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
39
40 res = (TSLexeme *) DatumGetPointer(FunctionCall4(&dict->lexize,
41 PointerGetDatum(dict->dictData),
45
46 if (dstate.getnext)
47 {
48 dstate.isend = true;
49 ptr = (TSLexeme *) DatumGetPointer(FunctionCall4(&dict->lexize,
50 PointerGetDatum(dict->dictData),
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_array(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)
#define CStringGetTextDatum(s)
Definition builtins.h:97
Datum ts_lexize(PG_FUNCTION_ARGS)
Definition dict.c:27
#define palloc_array(type, count)
Definition fe_memutils.h:76
#define PG_GETARG_OID(n)
Definition fmgr.h:275
#define PG_GETARG_TEXT_PP(n)
Definition fmgr.h:310
#define PG_RETURN_NULL()
Definition fmgr.h:346
#define FunctionCall4(flinfo, arg1, arg2, arg3, arg4)
Definition fmgr.h:708
#define PG_RETURN_POINTER(x)
Definition fmgr.h:363
#define PG_FUNCTION_ARGS
Definition fmgr.h:193
int a
Definition isn.c:73
void pfree(void *pointer)
Definition mcxt.c:1616
static Datum PointerGetDatum(const void *X)
Definition postgres.h:352
uint64_t Datum
Definition postgres.h:70
static Pointer DatumGetPointer(Datum X)
Definition postgres.h:342
static Datum Int32GetDatum(int32 X)
Definition postgres.h:222
unsigned int Oid
static int fb(int x)
char * lexeme
Definition ts_public.h:138
Definition c.h:706
TSDictionaryCacheEntry * lookup_ts_dictionary_cache(Oid dictId)
Definition ts_cache.c:208
static Size VARSIZE_ANY_EXHDR(const void *PTR)
Definition varatt.h:472
static char * VARDATA_ANY(const void *PTR)
Definition varatt.h:486