#ifndef __QUERY_H__ #define __QUERY_H__ /* #define BS_DEBUG */ #include "ts_locale.h" /* * 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 { int32 vl_len_; /* varlena header (do not touch directly!) */ int4 size; char data[1]; } QUERYTYPE; #define HDRSIZEQT ( VARHDRSZ + 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) ( pg_mblen(x)==1 && ( *(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