mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 00:03:57 -04:00 
			
		
		
		
	regression=# select to_tsquery( '\'fotballklubber\'');
                   to_tsquery
------------------------------------------------
 'fotball' & 'klubb' | 'fot' & 'ball' & 'klubb'
(1 row)
So, changed interface to dictionaries, lexize method of dictionary shoud return
pointer to aray of TSLexeme structs instead of char**. Last element should
have TSLexeme->lexeme == NULL.
typedef struct {
        /* number of variant of split word , for example
                Word 'fotballklubber' (norwegian) has two varian to split:
                ( fotball, klubb ) and ( fot, ball, klubb ). So, dictionary
                should return:
                nvariant        lexeme
                1               fotball
                1               klubb
                2               fot
                2               ball
                2               klubb
        */
        uint16  nvariant;
        /* currently unused */
        uint16  flags;
        /* C-string */
        char    *lexeme;
} TSLexeme;
		
	
			
		
			
				
	
	
		
			79 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef __TS_CFG_H__
 | |
| #define __TS_CFG_H__
 | |
| 
 | |
| #include "postgres.h"
 | |
| #include "query.h"
 | |
| 
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
| 	int			len;
 | |
| 	Datum	   *dict_id;
 | |
| }	ListDictionary;
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
| 	Oid			id;
 | |
| 	Oid			prs_id;
 | |
| 	int			len;
 | |
| 	ListDictionary *map;
 | |
| }	TSCfgInfo;
 | |
| 
 | |
| Oid			name2id_cfg(text *name);
 | |
| TSCfgInfo  *findcfg(Oid id);
 | |
| void		init_cfg(Oid id, TSCfgInfo * cfg);
 | |
| void		reset_cfg(void);
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
| 	uint16		len;
 | |
| 	uint16		nvariant;
 | |
| 	union
 | |
| 	{
 | |
| 		uint16		pos;
 | |
| 		uint16	   *apos;
 | |
| 	}			pos;
 | |
| 	char	   *word;
 | |
| 	uint32		alen;
 | |
| }	TSWORD;
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
| 	TSWORD	   *words;
 | |
| 	int4		lenwords;
 | |
| 	int4		curwords;
 | |
| 	int4		pos;
 | |
| }	PRSTEXT;
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
| 	uint32		selected:1,
 | |
| 				in:1,
 | |
| 				replace:1,
 | |
| 				repeated:1,
 | |
| 				unused:4,
 | |
| 				type:8,
 | |
| 				len:16;
 | |
| 	char	   *word;
 | |
| 	ITEM	   *item;
 | |
| }	HLWORD;
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
| 	HLWORD	   *words;
 | |
| 	int4		lenwords;
 | |
| 	int4		curwords;
 | |
| 	char	   *startsel;
 | |
| 	char	   *stopsel;
 | |
| 	int2		startsellen;
 | |
| 	int2		stopsellen;
 | |
| }	HLPRSTEXT;
 | |
| 
 | |
| void		hlparsetext(TSCfgInfo * cfg, HLPRSTEXT * prs, QUERYTYPE * query, char *buf, int4 buflen);
 | |
| text	   *genhl(HLPRSTEXT * prs);
 | |
| 
 | |
| void		parsetext_v2(TSCfgInfo * cfg, PRSTEXT * prs, char *buf, int4 buflen);
 | |
| int			get_currcfg(void);
 | |
| 
 | |
| #endif
 |