Skip to content
Snippets Groups Projects
Select Git revision
  • benchmark-tools
  • postgres-lambda
  • master default
  • REL9_4_25
  • REL9_5_20
  • REL9_6_16
  • REL_10_11
  • REL_11_6
  • REL_12_1
  • REL_12_0
  • REL_12_RC1
  • REL_12_BETA4
  • REL9_4_24
  • REL9_5_19
  • REL9_6_15
  • REL_10_10
  • REL_11_5
  • REL_12_BETA3
  • REL9_4_23
  • REL9_5_18
  • REL9_6_14
  • REL_10_9
  • REL_11_4
23 results

windowapi.h

Blame
  • windowapi.h 2.32 KiB
    /*-------------------------------------------------------------------------
     *
     * 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 */