Skip to content

Commit 0bdd0cd

Browse files
committed
Update fmgr to allow 32 arguments.
1 parent 8a093d0 commit 0bdd0cd

File tree

2 files changed

+248
-3
lines changed

2 files changed

+248
-3
lines changed

src/backend/utils/fmgr/fmgr.c

Lines changed: 242 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.34 2000/01/10 17:14:39 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.35 2000/01/10 18:18:30 momjian Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -233,6 +233,238 @@ fmgr_c(FmgrInfo *finfo,
233233
values->data[14], values->data[15]);
234234
break;
235235
case 17:
236+
returnValue = (*user_fn) (values->data[0], values->data[1],
237+
values->data[2], values->data[3],
238+
values->data[4], values->data[5],
239+
values->data[6], values->data[7],
240+
values->data[8], values->data[9],
241+
values->data[10], values->data[11],
242+
values->data[12], values->data[13],
243+
values->data[14], values->data[15],
244+
values->data[16]);
245+
break;
246+
case 18:
247+
returnValue = (*user_fn) (values->data[0], values->data[1],
248+
values->data[2], values->data[3],
249+
values->data[4], values->data[5],
250+
values->data[6], values->data[7],
251+
values->data[8], values->data[9],
252+
values->data[10], values->data[11],
253+
values->data[12], values->data[13],
254+
values->data[14], values->data[15],
255+
values->data[16], values->data[17]);
256+
break;
257+
case 19:
258+
returnValue = (*user_fn) (values->data[0], values->data[1],
259+
values->data[2], values->data[3],
260+
values->data[4], values->data[5],
261+
values->data[6], values->data[7],
262+
values->data[8], values->data[9],
263+
values->data[10], values->data[11],
264+
values->data[12], values->data[13],
265+
values->data[14], values->data[15],
266+
values->data[16], values->data[17],
267+
values->data[18]);
268+
break;
269+
case 20:
270+
returnValue = (*user_fn) (values->data[0], values->data[1],
271+
values->data[2], values->data[3],
272+
values->data[4], values->data[5],
273+
values->data[6], values->data[7],
274+
values->data[8], values->data[9],
275+
values->data[10], values->data[11],
276+
values->data[12], values->data[13],
277+
values->data[14], values->data[15],
278+
values->data[16], values->data[17],
279+
values->data[18], values->data[19]);
280+
break;
281+
case 21:
282+
returnValue = (*user_fn) (values->data[0], values->data[1],
283+
values->data[2], values->data[3],
284+
values->data[4], values->data[5],
285+
values->data[6], values->data[7],
286+
values->data[8], values->data[9],
287+
values->data[10], values->data[11],
288+
values->data[12], values->data[13],
289+
values->data[14], values->data[15],
290+
values->data[16], values->data[17],
291+
values->data[18], values->data[19],
292+
values->data[20]);
293+
break;
294+
case 22:
295+
returnValue = (*user_fn) (values->data[0], values->data[1],
296+
values->data[2], values->data[3],
297+
values->data[4], values->data[5],
298+
values->data[6], values->data[7],
299+
values->data[8], values->data[9],
300+
values->data[10], values->data[11],
301+
values->data[12], values->data[13],
302+
values->data[14], values->data[15],
303+
values->data[16], values->data[17],
304+
values->data[18], values->data[19],
305+
values->data[20], values->data[21]);
306+
break;
307+
case 23:
308+
returnValue = (*user_fn) (values->data[0], values->data[1],
309+
values->data[2], values->data[3],
310+
values->data[4], values->data[5],
311+
values->data[6], values->data[7],
312+
values->data[8], values->data[9],
313+
values->data[10], values->data[11],
314+
values->data[12], values->data[13],
315+
values->data[14], values->data[15],
316+
values->data[16], values->data[17],
317+
values->data[18], values->data[19],
318+
values->data[20], values->data[21],
319+
values->data[22]);
320+
break;
321+
case 24:
322+
returnValue = (*user_fn) (values->data[0], values->data[1],
323+
values->data[2], values->data[3],
324+
values->data[4], values->data[5],
325+
values->data[6], values->data[7],
326+
values->data[8], values->data[9],
327+
values->data[10], values->data[11],
328+
values->data[12], values->data[13],
329+
values->data[14], values->data[15],
330+
values->data[16], values->data[17],
331+
values->data[18], values->data[19],
332+
values->data[20], values->data[21],
333+
values->data[22], values->data[23]);
334+
break;
335+
case 25:
336+
returnValue = (*user_fn) (values->data[0], values->data[1],
337+
values->data[2], values->data[3],
338+
values->data[4], values->data[5],
339+
values->data[6], values->data[7],
340+
values->data[8], values->data[9],
341+
values->data[10], values->data[11],
342+
values->data[12], values->data[13],
343+
values->data[14], values->data[15],
344+
values->data[16], values->data[17],
345+
values->data[18], values->data[19],
346+
values->data[20], values->data[21],
347+
values->data[22], values->data[23],
348+
values->data[24]);
349+
break;
350+
case 26:
351+
returnValue = (*user_fn) (values->data[0], values->data[1],
352+
values->data[2], values->data[3],
353+
values->data[4], values->data[5],
354+
values->data[6], values->data[7],
355+
values->data[8], values->data[9],
356+
values->data[10], values->data[11],
357+
values->data[12], values->data[13],
358+
values->data[14], values->data[15],
359+
values->data[16], values->data[17],
360+
values->data[18], values->data[19],
361+
values->data[20], values->data[21],
362+
values->data[22], values->data[23],
363+
values->data[24], values->data[25]);
364+
break;
365+
case 27:
366+
returnValue = (*user_fn) (values->data[0], values->data[1],
367+
values->data[2], values->data[3],
368+
values->data[4], values->data[5],
369+
values->data[6], values->data[7],
370+
values->data[8], values->data[9],
371+
values->data[10], values->data[11],
372+
values->data[12], values->data[13],
373+
values->data[14], values->data[15],
374+
values->data[16], values->data[17],
375+
values->data[18], values->data[19],
376+
values->data[20], values->data[21],
377+
values->data[22], values->data[23],
378+
values->data[24], values->data[25],
379+
values->data[26]);
380+
break;
381+
case 28:
382+
returnValue = (*user_fn) (values->data[0], values->data[1],
383+
values->data[2], values->data[3],
384+
values->data[4], values->data[5],
385+
values->data[6], values->data[7],
386+
values->data[8], values->data[9],
387+
values->data[10], values->data[11],
388+
values->data[12], values->data[13],
389+
values->data[14], values->data[15],
390+
values->data[16], values->data[17],
391+
values->data[18], values->data[19],
392+
values->data[20], values->data[21],
393+
values->data[22], values->data[23],
394+
values->data[24], values->data[25],
395+
values->data[26], values->data[27]);
396+
break;
397+
case 29:
398+
returnValue = (*user_fn) (values->data[0], values->data[1],
399+
values->data[2], values->data[3],
400+
values->data[4], values->data[5],
401+
values->data[6], values->data[7],
402+
values->data[8], values->data[9],
403+
values->data[10], values->data[11],
404+
values->data[12], values->data[13],
405+
values->data[14], values->data[15],
406+
values->data[16], values->data[17],
407+
values->data[18], values->data[19],
408+
values->data[20], values->data[21],
409+
values->data[22], values->data[23],
410+
values->data[24], values->data[25],
411+
values->data[26], values->data[27],
412+
values->data[28]);
413+
break;
414+
case 30:
415+
returnValue = (*user_fn) (values->data[0], values->data[1],
416+
values->data[2], values->data[3],
417+
values->data[4], values->data[5],
418+
values->data[6], values->data[7],
419+
values->data[8], values->data[9],
420+
values->data[10], values->data[11],
421+
values->data[12], values->data[13],
422+
values->data[14], values->data[15],
423+
values->data[16], values->data[17],
424+
values->data[18], values->data[19],
425+
values->data[20], values->data[21],
426+
values->data[22], values->data[23],
427+
values->data[24], values->data[25],
428+
values->data[26], values->data[27],
429+
values->data[28], values->data[29]);
430+
break;
431+
case 31:
432+
returnValue = (*user_fn) (values->data[0], values->data[1],
433+
values->data[2], values->data[3],
434+
values->data[4], values->data[5],
435+
values->data[6], values->data[7],
436+
values->data[8], values->data[9],
437+
values->data[10], values->data[11],
438+
values->data[12], values->data[13],
439+
values->data[14], values->data[15],
440+
values->data[16], values->data[17],
441+
values->data[18], values->data[19],
442+
values->data[20], values->data[21],
443+
values->data[22], values->data[23],
444+
values->data[24], values->data[25],
445+
values->data[26], values->data[27],
446+
values->data[28], values->data[29],
447+
values->data[30]);
448+
break;
449+
case 32:
450+
returnValue = (*user_fn) (values->data[0], values->data[1],
451+
values->data[2], values->data[3],
452+
values->data[4], values->data[5],
453+
values->data[6], values->data[7],
454+
values->data[8], values->data[9],
455+
values->data[10], values->data[11],
456+
values->data[12], values->data[13],
457+
values->data[14], values->data[15],
458+
values->data[16], values->data[17],
459+
values->data[18], values->data[19],
460+
values->data[20], values->data[21],
461+
values->data[22], values->data[23],
462+
values->data[24], values->data[25],
463+
values->data[26], values->data[27],
464+
values->data[28], values->data[29],
465+
values->data[30], values->data[31]);
466+
break;
467+
default:
236468

237469
/*
238470
* XXX Note that functions with >FUNC_MAX_ARGS arguments can only be
@@ -247,7 +479,15 @@ fmgr_c(FmgrInfo *finfo,
247479
values->data[8], values->data[9],
248480
values->data[10], values->data[11],
249481
values->data[12], values->data[13],
250-
values->data[14], values->data[15]);
482+
values->data[14], values->data[15],
483+
values->data[16], values->data[17],
484+
values->data[18], values->data[19],
485+
values->data[20], values->data[21],
486+
values->data[22], values->data[23],
487+
values->data[24], values->data[25],
488+
values->data[26], values->data[27],
489+
values->data[28], values->data[29],
490+
values->data[30], values->data[31]);
251491
break;
252492
default:
253493
elog(ERROR, "fmgr_c: function %u: too many arguments (%d > %d)",

src/include/config.h.in

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,13 @@
9393
#define INDEXSCAN_PATCH
9494

9595
/*
96-
* Maximum number of columns in an index and maximum number of args
96+
* Maximum number of columns in an index and maximum number of arguments
9797
* to a function. They must be the same value.
98+
*
99+
* There is no maximum value, though if you want to pass more than 32
100+
* arguments to a function, you will have to modify
101+
* pgsql/src/backend/utils/fmgr/fmgr.c and add additional entries
102+
* to the 'case' statement for the additional arguments.
98103
*/
99104
#define INDEX_MAX_KEYS 8
100105
#define FUNC_MAX_ARGS INDEX_MAX_KEYS

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy