
comment line where output as too long, and update typedefs for /lib directory. Also fix case where identifiers were used as variable names in the backend, but as typedefs in ecpg (favor the backend for indenting). Backpatch to 8.1.X.
55 lines
1.1 KiB
C
55 lines
1.1 KiB
C
#ifndef __QUERY_H__
|
|
#define __QUERY_H__
|
|
/*
|
|
#define BS_DEBUG
|
|
*/
|
|
|
|
|
|
/*
|
|
* item in polish notation with back link
|
|
* to left operand
|
|
*/
|
|
typedef struct ITEM
|
|
{
|
|
int8 type;
|
|
int8 weight;
|
|
int2 left;
|
|
int4 val;
|
|
/* user-friendly value, must correlate with WordEntry */
|
|
uint32
|
|
istrue:1, /* use for ranking in Cover */
|
|
length:11,
|
|
distance:20;
|
|
} ITEM;
|
|
|
|
/*
|
|
*Storage:
|
|
* (len)(size)(array of ITEM)(array of operand in user-friendly form)
|
|
*/
|
|
typedef struct
|
|
{
|
|
int4 len;
|
|
int4 size;
|
|
char data[1];
|
|
} QUERYTYPE;
|
|
|
|
#define HDRSIZEQT ( 2 * sizeof(int4) )
|
|
#define COMPUTESIZE(size,lenofoperand) ( HDRSIZEQT + (size) * sizeof(ITEM) + (lenofoperand) )
|
|
#define GETQUERY(x) (ITEM*)( (char*)(x)+HDRSIZEQT )
|
|
#define GETOPERAND(x) ( (char*)GETQUERY(x) + ((QUERYTYPE*)(x))->size * sizeof(ITEM) )
|
|
|
|
#define ISOPERATOR(x) ( (x)=='!' || (x)=='&' || (x)=='|' || (x)=='(' || (x)==')' )
|
|
|
|
#define END 0
|
|
#define ERR 1
|
|
#define VAL 2
|
|
#define OPR 3
|
|
#define OPEN 4
|
|
#define CLOSE 5
|
|
#define VALSTOP 6 /* for stop words */
|
|
|
|
bool TS_execute(ITEM * curitem, void *checkval,
|
|
bool calcnot, bool (*chkcond) (void *checkval, ITEM * val));
|
|
|
|
#endif
|