citusdata / citusdata/citus

Check for maximum number of arguments allowed in a function should work like pg standard

Open
#4,939 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
C
Stars
12.8k
Forks
794
Avg merge
2d 14h
Merged PRs (30d)
31

Description

Postgres (in this case I'm using PG13) allows the creation of functions with [FUNC_MAX_ARGS] input arguments (default 100). Output arguments do not count against that number. After loading the citus extension, the argument count check seems to count both input and output arguments combined against FUNC_MAX_ARGS, preventing the creation of functions you've been able to create without citus.

In the exampe below (on an new/empty PG database) we're able to successfully create a function with 100 input args and 1 output. Then we load the citus extension and repeat the function creation. It fails as long as the combined argument count of input and output args is larger than FUNC_MAX_ARGS. The expected behavior would be the same as without citus extension.

```
-- Check that FUNC_MAX_ARGS is at default (100)
show max_function_args;

-- Create function with 100 input args and 1 output arg
CREATE OR REPLACE FUNCTION args_test_function(
IN in1 integer, IN in2 integer, IN in3 integer, IN in4 integer, IN in5 integer, IN in6 integer, IN in7 integer, IN in8 integer, IN in9 integer, IN in10 integer,
IN in11 integer, IN in12 integer, IN in13 integer, IN in14 integer, IN in15 integer, IN in16 integer, IN in17 integer, IN in18 integer, IN in19 integer, IN in20 integer,
IN in21 integer, IN in22 integer, IN in23 integer, IN in24 integer, IN in25 integer, IN in26 integer, IN in27 integer, IN in28 integer, IN in29 integer, IN in30 integer,
IN in31 integer, IN in32 integer, IN in33 integer, IN in34 integer, IN in35 integer, IN in36 integer, IN in37 integer, IN in38 integer, IN in39 integer, IN in40 integer,
IN in41 integer, IN in42 integer, IN in43 integer, IN in44 integer, IN in45 integer, IN in46 integer, IN in47 integer, IN in48 integer, IN in49 integer, IN in50 integer,
IN in51 integer, IN in52 integer, IN in53 integer, IN in54 integer, IN in55 integer, IN in56 integer, IN in57 integer, IN in58 integer, IN in59 integer, IN in60 integer,
IN in61 integer, IN in62 integer, IN in63 integer, IN in64 integer, IN in65 integer, IN in66 integer, IN in67 integer, IN in68 integer, IN in69 integer, IN in70 integer,
IN in71 integer, IN in72 integer, IN in73 integer, IN in74 integer, IN in75 integer, IN in76 integer, IN in77 integer, IN in78 integer, IN in79 integer, IN in80 integer,
IN in81 integer, IN in82 integer, IN in83 integer, IN in84 integer, IN in85 integer, IN in86 integer, IN in87 integer, IN in88 integer, IN in89 integer, IN in90 integer,
IN in91 integer, IN in92 integer, IN in93 integer, IN in94 integer, IN in95 integer, IN in96 integer, IN in97 integer, IN in98 integer, IN in99 integer, IN in100 integer,
OUT out1 integer)
LANGUAGE 'plpgsql'
AS $BODY$
begin
out1 = 1;
end $BODY$;

-- Drop function for second test
DROP FUNCTION args_test_function;

-- Load citus extension
CREATE EXTENSION citus;

-- Create function with 100 input args and 1 output arg (same as above)
CREATE OR REPLACE FUNCTION args_test_function(
IN in1 integer, IN in2 integer, IN in3 integer, IN in4 integer, IN in5 integer, IN in6 integer, IN in7 integer, IN in8 integer, IN in9 integer, IN in10 integer,
IN in11 integer, IN in12 integer, IN in13 integer, IN in14 integer, IN in15 integer, IN in16 integer, IN in17 integer, IN in18 integer, IN in19 integer, IN in20 integer,
IN in21 integer, IN in22 integer, IN in23 integer, IN in24 integer, IN in25 integer, IN in26 integer, IN in27 integer, IN in28 integer, IN in29 integer, IN in30 integer,
IN in31 integer, IN in32 integer, IN in33 integer, IN in34 integer, IN in35 integer, IN in36 integer, IN in37 integer, IN in38 integer, IN in39 integer, IN in40 integer,
IN in41 integer, IN in42 integer, IN in43 integer, IN in44 integer, IN in45 integer, IN in46 integer, IN in47 integer, IN in48 integer, IN in49 integer, IN in50 integer,
IN in51 integer, IN in52 integer, IN in53 integer, IN in54 integer, IN in55 integer, IN in56 integer, IN in57 integer, IN in58 integer, IN in59 integer, IN in60 integer,
IN in61 integer, IN in62 integer, IN in63 integer, IN in64 integer, IN in65 integer, IN in66 integer, IN in67 integer, IN in68 integer, IN in69 integer, IN in70 integer,
IN in71 integer, IN in72 integer, IN in73 integer, IN in74 integer, IN in75 integer, IN in76 integer, IN in77 integer, IN in78 integer, IN in79 integer, IN in80 integer,
IN in81 integer, IN in82 integer, IN in83 integer, IN in84 integer, IN in85 integer, IN in86 integer, IN in87 integer, IN in88 integer, IN in89 integer, IN in90 integer,
IN in91 integer, IN in92 integer, IN in93 integer, IN in94 integer, IN in95 integer, IN in96 integer, IN in97 integer, IN in98 integer, IN in99 integer, IN in100 integer,
OUT out1 integer)
LANGUAGE 'plpgsql'
AS $BODY$
begin
out1 = 1;
end $BODY$;
```

Result of the last statement:

```
ERROR: functions cannot have more than 100 arguments
SQL state: 54023
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.