diff --git a/src/pl/plpgsql/src/pl_comp.c b/src/pl/plpgsql/src/pl_comp.c index 028013f..1bec949 100644 --- a/src/pl/plpgsql/src/pl_comp.c +++ b/src/pl/plpgsql/src/pl_comp.c @@ -424,10 +424,6 @@ do_compile(FunctionCallInfo fcinfo, if (argvariable->dtype == PLPGSQL_DTYPE_VAR) { argitemtype = PLPGSQL_NSTYPE_VAR; - /* input argument vars are forced to be CONSTANT */ - if (argmode == PROARGMODE_IN || - argmode == PROARGMODE_VARIADIC) - ((PLpgSQL_var *) argvariable)->isconst = true; } else { diff --git a/src/test/regress/expected/plpgsql.out b/src/test/regress/expected/plpgsql.out index 0446f51..e4109d8 100644 --- a/src/test/regress/expected/plpgsql.out +++ b/src/test/regress/expected/plpgsql.out @@ -3808,3 +3808,24 @@ NOTICE: foo\bar!baz (1 row) drop function strtest(); +create or replace function param_assign_test(a int, val int) returns void as $$ +begin + a := val; +end +$$ language plpgsql; +create or replace function param_assign_test2() returns void as $$ +declare a int := 1; +begin + perform param_assign_test(a, 2); + raise notice '% should be 1', a; +end +$$ language plpgsql; +select param_assign_test2(); +NOTICE: 1 should be 1 + param_assign_test2 +-------------------- + +(1 row) + +drop function param_assign_test(int, int); +drop function param_assign_test2(); diff --git a/src/test/regress/sql/plpgsql.sql b/src/test/regress/sql/plpgsql.sql index 3dcfc9e..1b982a9 100644 --- a/src/test/regress/sql/plpgsql.sql +++ b/src/test/regress/sql/plpgsql.sql @@ -3049,3 +3049,22 @@ $$ language plpgsql; select strtest(); drop function strtest(); + +create or replace function param_assign_test(a int, val int) returns void as $$ +begin + a := val; +end +$$ language plpgsql; + +create or replace function param_assign_test2() returns void as $$ +declare a int := 1; +begin + perform param_assign_test(a, 2); + raise notice '% should be 1', a; +end +$$ language plpgsql; + +select param_assign_test2(); + +drop function param_assign_test(int, int); +drop function param_assign_test2();