mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-13 16:57:59 +02:00
45 lines
1.0 KiB
C
45 lines
1.0 KiB
C
|
#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
|