| 1 | /*------------------------------------------------------------------------- |
| 2 | * |
| 3 | * tablefunc.h |
| 4 | * interface for TableFunc executor node |
| 5 | * |
| 6 | * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group |
| 7 | * Portions Copyright (c) 1994, Regents of the University of California |
| 8 | * |
| 9 | * src/include/executor/tablefunc.h |
| 10 | * |
| 11 | *------------------------------------------------------------------------- |
| 12 | */ |
| 13 | #ifndef _TABLEFUNC_H |
| 14 | #define _TABLEFUNC_H |
| 15 | |
| 16 | /* Forward-declare this to avoid including execnodes.h here */ |
| 17 | struct TableFuncScanState; |
| 18 | |
| 19 | /* |
| 20 | * TableFuncRoutine holds function pointers used for generating content of |
| 21 | * table-producer functions, such as XMLTABLE. |
| 22 | * |
| 23 | * InitBuilder initialize table builder private objects. The output tuple |
| 24 | * descriptor, input functions for the columns, and typioparams are passed |
| 25 | * from executor state. |
| 26 | * |
| 27 | * SetDoc is called to define the input document. The table builder may |
| 28 | * apply additional transformations not exposed outside the table builder |
| 29 | * context. |
| 30 | * |
| 31 | * SetNamespace is called to pass namespace declarations from the table |
| 32 | * expression. This function may be NULL if namespaces are not supported by |
| 33 | * the table builder. Namespaces must be given before setting the row and |
| 34 | * column filters. If the name is given as NULL, the entry shall be for the |
| 35 | * default namespace. |
| 36 | * |
| 37 | * SetRowFilter is called do define the row-generating filter, which shall be |
| 38 | * used to extract each row from the input document. |
| 39 | * |
| 40 | * SetColumnFilter is called once for each column, to define the column- |
| 41 | * generating filter for the given column. |
| 42 | * |
| 43 | * FetchRow shall be called repeatedly until it returns that no more rows are |
| 44 | * found in the document. On each invocation it shall set state in the table |
| 45 | * builder context such that each subsequent GetValue call returns the values |
| 46 | * for the indicated column for the row being processed. |
| 47 | * |
| 48 | * DestroyBuilder shall release all resources associated with a table builder |
| 49 | * context. It may be called either because all rows have been consumed, or |
| 50 | * because an error occurred while processing the table expression. |
| 51 | */ |
| 52 | typedef struct TableFuncRoutine |
| 53 | { |
| 54 | void (*InitOpaque) (struct TableFuncScanState *state, int natts); |
| 55 | void (*SetDocument) (struct TableFuncScanState *state, Datum value); |
| 56 | void (*SetNamespace) (struct TableFuncScanState *state, const char *name, |
| 57 | const char *uri); |
| 58 | void (*SetRowFilter) (struct TableFuncScanState *state, const char *path); |
| 59 | void (*SetColumnFilter) (struct TableFuncScanState *state, |
| 60 | const char *path, int colnum); |
| 61 | bool (*FetchRow) (struct TableFuncScanState *state); |
| 62 | Datum (*GetValue) (struct TableFuncScanState *state, int colnum, |
| 63 | Oid typid, int32 typmod, bool *isnull); |
| 64 | void (*DestroyOpaque) (struct TableFuncScanState *state); |
| 65 | } TableFuncRoutine; |
| 66 | |
| 67 | #endif /* _TABLEFUNC_H */ |
| 68 | |