Commitce8d5fe0efailed to think hard enough about the case where we're forced to replan the expression and it becomes no longer simple. The code produced the right expression result, but its handling of FOUND and ROW_COUNT was too simplistic since we might have obtained zero rows. To fix, don't use exec_eval_expr, but go directly to exec_eval_simple_expr, and if that reports failure then fall through to the full SPI code path. Another thinko ince8d5fe0eis that it added if (expr->plan == NULL) exec_prepare_plan(estate, expr, 0); which is quite useless since we cannot reach here without having planned the expression at least once. (If the call were reachable it'd likely be wrong, since it's not passing the same flags as either the preceding call or the one inside exec_eval_expr.) Author: shihao zhong <zhong950419@gmail.com> Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://postgr.es/m/CAGRkXqQB_aqWU9OeVPGvATBVZ7c9EYrNXJyHG0jKXW0FGAy2-g@mail.gmail.com Backpatch-through: 19
PostgreSQL Database Management System
This directory contains the source code distribution of the PostgreSQL database management system.
PostgreSQL is an advanced object-relational database management system that supports an extended subset of the SQL standard, including transactions, foreign keys, subqueries, triggers, user-defined types and functions. This distribution also contains C language bindings.
Copyright and license information can be found in the file COPYRIGHT.
General documentation about this version of PostgreSQL can be found at https://www.postgresql.org/docs/devel/. In particular, information about building PostgreSQL from the source code can be found at https://www.postgresql.org/docs/devel/installation.html.
The latest version of this software, and related software, may be obtained at https://www.postgresql.org/download/. For more information look at our web site located at https://www.postgresql.org/.