summaryrefslogtreecommitdiff
path: root/contrib/tsearch2/query.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/tsearch2/query.h')
-rw-r--r--contrib/tsearch2/query.h55
1 files changed, 55 insertions, 0 deletions
diff --git a/contrib/tsearch2/query.h b/contrib/tsearch2/query.h
new file mode 100644
index 00000000000..c0715a2a037
--- /dev/null
+++ b/contrib/tsearch2/query.h
@@ -0,0 +1,55 @@
+#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
+ unused:1,
+ 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 VALTRUE 6 /* for stop words */
+#define VALFALSE 7
+
+bool TS_execute(ITEM * curitem, void *checkval,
+ bool calcnot, bool (*chkcond) (void *checkval, ITEM * val));
+
+#endif