Re: boolean short-circuiting in plpgsql

Поиск
Список
Период
Сортировка
Искать
От
Kevin Field
Тема
Re: boolean short-circuiting in plpgsql
Дата
Msg-id
2447358484-BeMail@CPE0040caab50b8-CM001a66710216
Ответ на
Список
Дерево обсуждения
boolean short-circuiting in plpgsql Kev <kevinjamesfield@gmail.com>
Re: boolean short-circuiting in plpgsql Tom Lane <tgl@sss.pgh.pa.us>
Re: boolean short-circuiting in plpgsql "Kevin Field" <kev@brantaero.com>
> Kev  writes:
> > ...because the case should force it to only evaluate 'old' when 
> > TG_OP
> > =  'UPDATE' and otherwise ('INSERT') skip through to 't'.  But this
> > causes the same error on insert.  I suspect it's because the select
> > query gets parameterized and at that point the 'old' is missing,
> > before the case even gets to be parsed.
> 
> Got it in one.

Thanks.  Shouldn't there be some way around this then?

> > How do I get around this
> > without having two 'perform' statements?
> 
> What you need is two nested IF statements.  The PERFORM in your 
> example
> is not relevant to the problem.
> 
> 			regards, tom lane

Well, sure, in one sense, but I am actually trying to make it look 
neater.  Unless I'm missing something (quite possible...) the two 
nested IF statements end up having two PERFORM statements:

if TG_OP = 'INSERT' then
	perform recalc_sortnumpath(new.id);
else
	if (new.sortnum != old.sortnum or new.parent != old.parent) then
		perform recalc_sortnumpath(new.id);
	end if;
end if;

...is there some way to boil this down using nested IF statements that 
only has one PERFORM?  (I mean, besides inverting it and having three 
return statements and one perform.)

Thanks,
Kev
В списке pgsql-general по дате отправления
От: Rob Richardson
Дата:
От: hubert depesz lubaczewski
Дата:
FAQ