Re: Better localization of errors in plpgsql variable initialization
Pavel Stehule <pavel.stehule@gmail.com>
From: Pavel Stehule <pavel.stehule@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2021-10-29T18:09:21Z
Lists: pgsql-hackers
pá 29. 10. 2021 v 20:00 odesílatel Tom Lane <tgl@sss.pgh.pa.us> napsal: > While preparing commit a2a731d6c, I chanced to notice what seemed > like an off-by-one error in the line number reported for an error > occurring while we initialize a plpgsql variable. For instance > > regression=# do $$ declare x int := 1/0; > regression$# begin end $$; > ERROR: division by zero > CONTEXT: SQL expression "1/0" > PL/pgSQL function inline_code_block line 2 during statement block local > variable initialization > > After tracking it down, it's not that. It's that we're pointing > at the BEGIN keyword, because that's what determines the lineno > associated with the PLpgSQL_stmt_block struct. > > This seems like it could be quite confusing in a block with many > variables, so here's a proposed patch that improves the reported > line number to match the specific variable. > > The only downside that I can see here is the one additional store > per variable to set err_var; but it's pretty hard to believe that > that'd be measurable in context. > > +1 Regards Pavel Any objections? > > regards, tom lane > >
Commits
-
plpgsql: report proper line number for errors in variable initialization.
- acb2d7d5d230 15.0 landed
-
Test and document the behavior of initialization cross-refs in plpgsql.
- a2a731d6c9db 15.0 cited