]> granicus.if.org Git - postgresql/commitdiff
Fix crash when using CALL on an aggregate
authorPeter Eisentraut <peter_e@gmx.net>
Wed, 13 Dec 2017 15:37:48 +0000 (10:37 -0500)
committerPeter Eisentraut <peter_e@gmx.net>
Wed, 13 Dec 2017 15:37:48 +0000 (10:37 -0500)
Author: Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>
Reported-by: Rushabh Lathia <rushabh.lathia@gmail.com>
src/backend/parser/parse_func.c
src/test/regress/expected/create_procedure.out
src/test/regress/sql/create_procedure.sql

index 2f20516e766515fbd122634df460c73bc421a0fa..e6b085637b26911ecb653d41e4492e996c448515 100644 (file)
@@ -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);
index 5538ef2f2be71c08f1482cd9ce14eee249cc9d11..e627d8ebbcfb299e98c88f68e47ad6bf330fd7b9 100644 (file)
@@ -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...
index f09ba2ad30c4834c734e6a2412ed7ff93df6bfee..8c47b7e9ef9a159afef0b64d9765ee209da66dd3 100644 (file)
@@ -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') $$;