simple "select / if found" isn't

From: Gary Stainburn <gary(dot)stainburn(at)ringways(dot)co(dot)uk>
To: pgsql-sql(at)postgresql(dot)org
Subject: simple "select / if found" isn't
Date: 2016-12-16 11:02:37
Message-ID: 201612161102.37559.gary.stainburn@ringways.co.uk
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

I'm creating a simple function that must have been done millions of times
before, but I can't get it to work. In this case, I'm checking a user ID and
password against previously used passwords:

All I want to do is return 'found' based on the select but I can't get it to
work.

If I run

select 1 from user_previous_passwords
where u_id=25 and
crypt('MyPaSSword',u_previous_password) = u_previous_password;

then it returns the matching row(s)

If I run my function

create or replace function check_previous_passwords (ID int4, PASS varchar)
returns boolean as $$
DECLARE
UID int4;
BEGIN
return exists(select 1 from user_previous_passwords
where u_id=ID and crypt(PASS,u_previous_password) = PASS);
END;
$$ LANGUAGE plpgsql;

I always get false;

I've tried things like

if exist(....) then ....
select 1 into UID
select count(u_id) into UID

update .....set u_id=u_id ......
if found then

but I never get the correct result, so I think I must me doing something much
more fundamentally wrong.

Can someone spot it please?

Gary

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Karsten Hilbert 2016-12-16 11:12:13 Re: simple "select / if found" isn't
Previous Message Stephen Frost 2016-12-08 13:54:00 Re: RLS for superuser