Why do OLD and NEW have special internal names?
От | Tom Lane |
---|---|
Тема | Why do OLD and NEW have special internal names? |
Дата | |
Msg-id | 1808.1257456787@sss.pgh.pa.us обсуждение исходный текст |
Ответы |
Re: Why do OLD and NEW have special internal names?
Re: Why do OLD and NEW have special internal names? Re: Why do OLD and NEW have special internal names? Re: Why do OLD and NEW have special internal names? Re: Why do OLD and NEW have special internal names? Re: Why do OLD and NEW have special internal names? |
Список | pgsql-hackers |
So I was testing the next step of plpgsql modification, namely actually letting the parser hooks do something, and it promptly blew up in trigger functions, like so: + ERROR: OLD used in query that is not in a rule + LINE 1: SELECT OLD + ^ + QUERY: SELECT OLD + CONTEXT: SQL statement in PL/PgSQL function "trigger_data" near line 35 The reason is that because plpgsql is no longer translating references to its names into Params before letting the core parser see them, the kluge in gram.y that changes "OLD" to "*OLD*" and "NEW" to "*NEW*" kicks in, or actually decides to throw an error instead of kicking in. I am wondering what is the point at all of having that kluge. It certainly doesn't manage to make OLD/NEW not act like reserved words, in fact rather more the opposite, as shown here. If we just made those names be ordinary table alias names in rule queries, wouldn't things work as well or better? BTW, this brings up another point, which is that up to now it's often been possible to use plpgsql variable names that conflict with core-parser reserved words, so long as you didn't need to use the reserved word with its special meaning. That will stop working when this patch goes in. Doesn't bother me any, but if anyone thinks it's a serious problem, speak now. regards, tom lane
В списке pgsql-hackers по дате отправления: