summaryrefslogtreecommitdiff
path: root/contrib/tsearch2/query_util.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/tsearch2/query_util.h')
-rw-r--r--contrib/tsearch2/query_util.h44
1 files changed, 44 insertions, 0 deletions
diff --git a/contrib/tsearch2/query_util.h b/contrib/tsearch2/query_util.h
new file mode 100644
index 00000000000..cf3900925a4
--- /dev/null
+++ b/contrib/tsearch2/query_util.h
@@ -0,0 +1,44 @@
+#ifndef __QUERY_UTIL_H__
+#define __QUERY_UTIL_H__
+
+#include "postgres.h"
+#include "utils/memutils.h"
+
+#include "query.h"
+
+typedef struct QTNode {
+ ITEM *valnode;
+ uint32 flags;
+ int4 nchild;
+ char *word;
+ uint32 sign;
+ struct QTNode **child;
+} QTNode;
+
+#define QTN_NEEDFREE 0x01
+#define QTN_NOCHANGE 0x02
+#define QTN_WORDFREE 0x04
+
+typedef enum {
+ PlainMemory,
+ SPIMemory,
+ AggMemory
+} MemoryType;
+
+QTNode* QT2QTN( ITEM *in, char *operand );
+QUERYTYPE* QTN2QT( QTNode* in, MemoryType memtype );
+void QTNFree( QTNode* in );
+void QTNSort( QTNode* in );
+void QTNTernary( QTNode* in );
+void QTNBinary( QTNode* in );
+int QTNodeCompare( QTNode *an, QTNode *bn );
+QTNode* QTNCopy( QTNode* in, MemoryType memtype);
+bool QTNEq( QTNode* a, QTNode* b );
+
+
+extern MemoryContext AggregateContext;
+
+#define MEMALLOC(us, s) ( ((us)==SPIMemory) ? SPI_palloc(s) : ( ( (us)==PlainMemory ) ? palloc(s) : MemoryContextAlloc(AggregateContext, (s)) ) )
+#define MEMFREE(us, p) ( ((us)==SPIMemory) ? SPI_pfree(p) : pfree(p) )
+
+#endif