PostgreSQL Source Code: src/include/funcapi.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#ifndef FUNCAPI_H
18#define FUNCAPI_H
19
24
25
26
27
28
29
30
31
32
33
34
36{
37
39
40
42
43
45
46
49
50
51
52
53
54
55
56
58{
59
60
61
62
63
64
66
67
68
69
70
71
72
73
75
76
77
78
79
80
81
83
84
85
86
87
88
89
90
92
93
94
95
96
97
98
99
100
102
103
104
105
106
107
108
109
110
111
113
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
147{
154
156 Oid *resultTypeId,
159 Oid *resultTypeId,
162 Oid *resultTypeId,
164
166
168 char *argmodes,
169 Node *call_expr);
170
172 Oid **p_argtypes, char ***p_argnames,
173 char **p_argmodes);
174
176 char ***arg_names);
177
180
182 Datum proallargtypes,
183 Datum proargmodes,
184 Datum proargnames);
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
222
223
228
229static inline Datum
231{
233}
234
235
236#define TupleGetDatum(_slot, _tuple) HeapTupleGetDatum(_tuple)
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296#define MAT_SRF_USE_EXPECTED_DESC 0x01
297#define MAT_SRF_BLESS 0x02
298
300
305#define SRF_IS_FIRSTCALL() (fcinfo->flinfo->fn_extra == NULL)
307#define SRF_FIRSTCALL_INIT() init_MultiFuncCall(fcinfo)
309#define SRF_PERCALL_SETUP() per_MultiFuncCall(fcinfo)
311#define SRF_RETURN_NEXT(_funcctx, _result) \
312 do { \
313 ReturnSetInfo *rsi; \
314 (_funcctx)->call_cntr++; \
315 rsi = (ReturnSetInfo *) fcinfo->resultinfo; \
316 rsi->isDone = ExprMultipleResult; \
317 PG_RETURN_DATUM(_result); \
318 } while (0)
320#define SRF_RETURN_NEXT_NULL(_funcctx) \
321 do { \
322 ReturnSetInfo *rsi; \
323 (_funcctx)->call_cntr++; \
324 rsi = (ReturnSetInfo *) fcinfo->resultinfo; \
325 rsi->isDone = ExprMultipleResult; \
326 PG_RETURN_NULL(); \
327 } while (0)
329#define SRF_RETURN_DONE(_funcctx) \
330 do { \
331 ReturnSetInfo *rsi; \
332 end_MultiFuncCall(fcinfo, _funcctx); \
333 rsi = (ReturnSetInfo *) fcinfo->resultinfo; \
334 rsi->isDone = ExprEndResult; \
335 PG_RETURN_NULL(); \
336 } while (0)
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
357 bool convert_unknown, Datum **args,
359
360#endif
static Datum values[MAXATTR]
TupleDesc BlessTupleDesc(TupleDesc tupdesc)
void InitMaterializedSRF(FunctionCallInfo fcinfo, bits32 flags)
HeapTuple BuildTupleFromCStrings(AttInMetadata *attinmeta, char **values)
int get_func_trftypes(HeapTuple procTup, Oid **p_trftypes)
@ TYPEFUNC_COMPOSITE_DOMAIN
struct AttInMetadata AttInMetadata
TupleDesc build_function_result_tupdesc_t(HeapTuple procTuple)
char * get_func_result_name(Oid functionId)
TupleDesc build_function_result_tupdesc_d(char prokind, Datum proallargtypes, Datum proargmodes, Datum proargnames)
Datum HeapTupleHeaderGetDatum(HeapTupleHeader tuple)
bool resolve_polymorphic_argtypes(int numargs, Oid *argtypes, char *argmodes, Node *call_expr)
struct FuncCallContext FuncCallContext
void end_MultiFuncCall(PG_FUNCTION_ARGS, FuncCallContext *funcctx)
int get_func_input_arg_names(Datum proargnames, Datum proargmodes, char ***arg_names)
int get_func_arg_info(HeapTuple procTup, Oid **p_argtypes, char ***p_argnames, char **p_argmodes)
FuncCallContext * per_MultiFuncCall(PG_FUNCTION_ARGS)
FuncCallContext * init_MultiFuncCall(PG_FUNCTION_ARGS)
TupleDesc RelationNameGetTupleDesc(const char *relname)
TypeFuncClass get_call_result_type(FunctionCallInfo fcinfo, Oid *resultTypeId, TupleDesc *resultTupleDesc)
static Datum HeapTupleGetDatum(const HeapTupleData *tuple)
int extract_variadic_args(FunctionCallInfo fcinfo, int variadic_start, bool convert_unknown, Datum **args, Oid **types, bool **nulls)
TupleDesc get_expr_result_tupdesc(Node *expr, bool noError)
AttInMetadata * TupleDescGetAttInMetadata(TupleDesc tupdesc)
TupleDesc TypeGetTupleDesc(Oid typeoid, List *colaliases)
TypeFuncClass get_func_result_type(Oid functionId, Oid *resultTypeId, TupleDesc *resultTupleDesc)
TypeFuncClass get_expr_result_type(Node *expr, Oid *resultTypeId, TupleDesc *resultTupleDesc)
AttInMetadata * attinmeta
MemoryContext multi_call_memory_ctx