If you want to return whether any password has been changed, you can just return the special variable FOUND
in a plpgsql function like this (simplified with input from @Pavel):
CREATE OR REPLACE FUNCTION database."changePassword"(
username character varying
,newpassword character varying
,oldpassword character varying
) RETURNS boolean AS
$func$
BEGIN
UPDATE database.users
SET hash = MD5($2)
WHERE username = $1
AND hash = MD5($3);
RETURN FOUND;
END
$func$
LANGUAGE plpgsql VOLATILE NOT LEAKPROOF;
Or simpler, use the RETURNING
clause. That would work in a plain sql function as well:
CREATE OR REPLACE FUNCTION database."changePassword"(
username character varying
,newpassword character varying
,oldpassword character varying
) RETURNS boolean AS
$func$
UPDATE database.users
SET hash = MD5($2)
WHERE username = $1
AND hash = MD5($3)
RETURNING TRUE;
$func$
LANGUAGE sql VOLATILE NOT LEAKPROOF;
If no row is updated, nothing is returned. Else, you get TRUE
.