diff options
Diffstat (limited to 'contrib/tsearch2/query_util.h')
-rw-r--r-- | contrib/tsearch2/query_util.h | 44 |
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 |