Thread

Commits

  1. plpgsql: report proper line number for errors in variable initialization.

  2. Test and document the behavior of initialization cross-refs in plpgsql.

  1. Better localization of errors in plpgsql variable initialization

    Tom Lane <tgl@sss.pgh.pa.us> — 2021-10-29T18:00:14Z

    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.
    
    Any objections?
    
    			regards, tom lane
    
    
  2. Re: Better localization of errors in plpgsql variable initialization

    Pavel Stehule <pavel.stehule@gmail.com> — 2021-10-29T18:09:21Z

    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
    >
    >