diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2017-12-13 10:37:48 -0500 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2017-12-13 10:37:48 -0500 |
commit | 3d8874224ff25de3ca4f9da8ce3118391bd6609e (patch) | |
tree | 0033e373cf7c69ebc6308a21a33c1f27b303de0d /src | |
parent | 8e211f5391465bddda79e17e63c79dbc8c70e6d1 (diff) | |
download | postgresql-3d8874224ff25de3ca4f9da8ce3118391bd6609e.tar.gz postgresql-3d8874224ff25de3ca4f9da8ce3118391bd6609e.zip |
Fix crash when using CALL on an aggregate
Author: Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>
Reported-by: Rushabh Lathia <rushabh.lathia@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/parser/parse_func.c | 9 | ||||
-rw-r--r-- | src/test/regress/expected/create_procedure.out | 9 | ||||
-rw-r--r-- | src/test/regress/sql/create_procedure.sql | 3 |
3 files changed, 21 insertions, 0 deletions
diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c index 2f20516e766..e6b085637b2 100644 --- a/src/backend/parser/parse_func.c +++ b/src/backend/parser/parse_func.c @@ -336,6 +336,15 @@ ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs, Form_pg_aggregate classForm; int catDirectArgs; + if (proc_call) + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_FUNCTION), + errmsg("%s is not a procedure", + func_signature_string(funcname, nargs, + argnames, + actual_arg_types)), + parser_errposition(pstate, location))); + tup = SearchSysCache1(AGGFNOID, ObjectIdGetDatum(funcid)); if (!HeapTupleIsValid(tup)) /* should not happen */ elog(ERROR, "cache lookup failed for aggregate %u", funcid); diff --git a/src/test/regress/expected/create_procedure.out b/src/test/regress/expected/create_procedure.out index 5538ef2f2be..e627d8ebbcf 100644 --- a/src/test/regress/expected/create_procedure.out +++ b/src/test/regress/expected/create_procedure.out @@ -41,6 +41,15 @@ SELECT 5; $$; CALL ptest2(); -- various error cases +CALL version(); -- error: not a procedure +ERROR: version() is not a procedure +LINE 1: CALL version(); + ^ +HINT: To call a function, use SELECT. +CALL sum(1); -- error: not a procedure +ERROR: sum(integer) is not a procedure +LINE 1: CALL sum(1); + ^ CREATE PROCEDURE ptestx() LANGUAGE SQL WINDOW AS $$ INSERT INTO cp_test VALUES (1, 'a') $$; ERROR: invalid attribute in procedure definition LINE 1: CREATE PROCEDURE ptestx() LANGUAGE SQL WINDOW AS $$ INSERT I... diff --git a/src/test/regress/sql/create_procedure.sql b/src/test/regress/sql/create_procedure.sql index f09ba2ad30c..8c47b7e9ef9 100644 --- a/src/test/regress/sql/create_procedure.sql +++ b/src/test/regress/sql/create_procedure.sql @@ -30,6 +30,9 @@ CALL ptest2(); -- various error cases +CALL version(); -- error: not a procedure +CALL sum(1); -- error: not a procedure + CREATE PROCEDURE ptestx() LANGUAGE SQL WINDOW AS $$ INSERT INTO cp_test VALUES (1, 'a') $$; CREATE PROCEDURE ptestx() LANGUAGE SQL STRICT AS $$ INSERT INTO cp_test VALUES (1, 'a') $$; CREATE PROCEDURE ptestx(OUT a int) LANGUAGE SQL AS $$ INSERT INTO cp_test VALUES (1, 'a') $$; |