mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-08-22 13:33:23 +02:00
65 lines
2.3 KiB
C
65 lines
2.3 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* windowapi.h
|
|
* API for window functions to extract data from their window
|
|
*
|
|
* A window function does not receive its arguments in the normal way
|
|
* (and therefore the concept of strictness is irrelevant). Instead it
|
|
* receives a "WindowObject", which it can fetch with PG_WINDOW_OBJECT()
|
|
* (note V1 calling convention must be used). Correct call context can
|
|
* be tested with WindowObjectIsValid(). Although argument values are
|
|
* not passed, the call is correctly set up so that PG_NARGS() can be
|
|
* used and argument type information can be obtained with
|
|
* get_fn_expr_argtype(), get_fn_expr_arg_stable(), etc.
|
|
*
|
|
* Operations on the WindowObject allow the window function to find out
|
|
* the current row number, total number of rows in the partition, etc
|
|
* and to evaluate its argument expression(s) at various rows in the
|
|
* window partition. See the header comments for each WindowObject API
|
|
* function in nodeWindowAgg.c for details.
|
|
*
|
|
*
|
|
* Portions Copyright (c) 2000-2012, PostgreSQL Global Development Group
|
|
*
|
|
* src/include/windowapi.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef WINDOWAPI_H
|
|
#define WINDOWAPI_H
|
|
|
|
/* values of "seektype" */
|
|
#define WINDOW_SEEK_CURRENT 0
|
|
#define WINDOW_SEEK_HEAD 1
|
|
#define WINDOW_SEEK_TAIL 2
|
|
|
|
/* this struct is private in nodeWindowAgg.c */
|
|
typedef struct WindowObjectData *WindowObject;
|
|
|
|
#define PG_WINDOW_OBJECT() ((WindowObject) fcinfo->context)
|
|
|
|
#define WindowObjectIsValid(winobj) \
|
|
((winobj) != NULL && IsA(winobj, WindowObjectData))
|
|
|
|
extern void *WinGetPartitionLocalMemory(WindowObject winobj, Size sz);
|
|
|
|
extern int64 WinGetCurrentPosition(WindowObject winobj);
|
|
extern int64 WinGetPartitionRowCount(WindowObject winobj);
|
|
|
|
extern void WinSetMarkPosition(WindowObject winobj, int64 markpos);
|
|
|
|
extern bool WinRowsArePeers(WindowObject winobj, int64 pos1, int64 pos2);
|
|
|
|
extern Datum WinGetFuncArgInPartition(WindowObject winobj, int argno,
|
|
int relpos, int seektype, bool set_mark,
|
|
bool *isnull, bool *isout);
|
|
|
|
extern Datum WinGetFuncArgInFrame(WindowObject winobj, int argno,
|
|
int relpos, int seektype, bool set_mark,
|
|
bool *isnull, bool *isout);
|
|
|
|
extern Datum WinGetFuncArgCurrent(WindowObject winobj, int argno,
|
|
bool *isnull);
|
|
|
|
#endif /* WINDOWAPI_H */
|