aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor/nodeFunctionscan.c
diff options
context:
space:
mode:
authorDavid Rowley <drowley@postgresql.org>2023-10-12 19:52:31 +1300
committerDavid Rowley <drowley@postgresql.org>2023-10-12 19:52:31 +1300
commitcd15bff4814bbc785116f2cffe840b527f7d6cb9 (patch)
tree8428d9329d87105c1dcd27cd23984cd6101fe9d4 /src/backend/executor/nodeFunctionscan.c
parent40049edfeb15f7bbce1c9d2dd9c98575ba0cb759 (diff)
downloadpostgresql-cd15bff4814bbc785116f2cffe840b527f7d6cb9.tar.gz
postgresql-cd15bff4814bbc785116f2cffe840b527f7d6cb9.zip
Fix incorrect step generation in HASH partition pruning
get_steps_using_prefix_recurse() incorrectly assumed that it could stop recursive processing of the 'prefix' list when cur_keyno was one before the step_lastkeyno. Since hash partition pruning can prune using IS NULL quals, and these IS NULL quals are not present in the 'prefix' list, then that logic could cause more levels of recursion than what is needed and lead to there being no more items in the 'prefix' list to process. This would manifest itself as a crash in some code that expected the 'start' ListCell not to be NULL. Here we adjust the logic so that instead of stopping recursion at 1 key before the step_lastkeyno, we just look at the llast(prefix) item and ensure we only recursively process up until just before whichever the last key is. This effectively allows keys to be missing in the 'prefix' list. This change does mean that step_lastkeyno is no longer needed, so we remove that from the static functions. I also spent quite some time reading this code and testing it to try to convince myself that there are no other issues. That resulted in the irresistible temptation of rewriting some comments, many of which were just not true or inconcise. Reported-by: Sergei Glukhov Reviewed-by: Sergei Glukhov, tender wang Discussion: https://postgr.es/m/2f09ce72-315e-2a33-589a-8519ada8df61@postgrespro.ru Backpatch-through: 11, where partition pruning was introduced.
Diffstat (limited to 'src/backend/executor/nodeFunctionscan.c')
0 files changed, 0 insertions, 0 deletions