pgsql: Track typmods in plpgsql expression evaluation and assignment.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Track typmods in plpgsql expression evaluation and assignment.
Date: 2015-02-28 19:34:42
Message-ID: E1YRn9u-0008No-7n@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Track typmods in plpgsql expression evaluation and assignment.

The main value of this change is to avoid expensive I/O conversions when
assigning to a variable that has a typmod specification, if the value
to be assigned is already known to have the right typmod. This is
particularly valuable for arrays with typmod specifications; formerly,
in an assignment to an array element the entire array would invariably
get put through double I/O conversion to check the typmod, to absolutely
no purpose since we'd already properly coerced the new element value.

Extracted from my "expanded arrays" patch; this seems worth committing
separately, whatever becomes of that patch, since it's really an
independent issue.

As long as we're changing the function signatures, take the opportunity
to rationalize the argument lists of exec_assign_value, exec_cast_value,
and exec_simple_cast_value; that is, put the arguments into a saner order,
and get rid of the bizarre choice to pass exec_assign_value's isNull flag
by reference.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/e524cbdc45ec6d677b1dd49ee64dd403959eda0f

Modified Files
--------------
src/pl/plpgsql/src/pl_exec.c | 284 ++++++++++++++++++++++++------------------
src/pl/plpgsql/src/plpgsql.h | 1 +
2 files changed, 165 insertions(+), 120 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Alvaro Herrera 2015-03-01 14:58:46 pgsql: Fix intermittent failure in event_trigger test
Previous Message Tom Lane 2015-02-28 17:43:20 pgsql: Fix planning of star-schema-style queries.