mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-21 08:29:39 +08:00
436a2956d8
comment line where output as too long, and update typedefs for /lib directory. Also fix case where identifiers were used as variable names in the backend, but as typedefs in ecpg (favor the backend for indenting). Backpatch to 8.1.X.
47 lines
1.0 KiB
C
47 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
|