mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-29 22:49:41 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			48 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef __QUERY_UTIL_H__
 | |
| #define __QUERY_UTIL_H__
 | |
| 
 | |
| #include "postgres.h"
 | |
| #include "utils/memutils.h"
 | |
| 
 | |
| #include "query.h"
 | |
| #include "executor/spi.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
 |