aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/typecmds.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2024-05-09 11:01:42 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2024-05-09 11:01:50 -0400
commitc7be3c015bfe518d0624029e640252248a3c8615 (patch)
tree6a57dc169d0300d09b62a14f8340e59cc65a4e6b /src/backend/commands/typecmds.c
parente2d5508c501a3cfd47df49ce88669bec7df2e426 (diff)
downloadpostgresql-c7be3c015bfe518d0624029e640252248a3c8615.tar.gz
postgresql-c7be3c015bfe518d0624029e640252248a3c8615.zip
Make left-join removal safe under -DREALLOCATE_BITMAPSETS.
The initial building of RestrictInfos and SpecialJoinInfos tends to create structures that share relid sets (such as syn_lefthand and outer_relids). There's nothing wrong with that in itself, but when we modify those relid sets during join removal, we have to be sure not to corrupt the values that other structures are pointing at. remove_rel_from_query() was careless about this. It accidentally worked anyway because (1) we'd never be reducing the sets to empty, so they wouldn't get pfree'd; and (2) the in-place modification is the same one that we did or will apply to the other struct's relid set, so that there wasn't visible corruption at the end of the process. While there's no live bug in a standard build, of course this is way too fragile to accept going forward. (Maybe we should back-patch this change too for safety, but I've refrained for now.) This bug was exposed by the recent invention of REALLOCATE_BITMAPSETS. Commit e0477837c had installed a fix, but that went away with the reversion of SJE, so now we need to fix it again. David Rowley and Tom Lane Discussion: https://postgr.es/m/CACJufxFVQmr4=JWHAOSLuKA5Zy9H26nY6tVrRFBOekHoALyCkQ@mail.gmail.com
Diffstat (limited to 'src/backend/commands/typecmds.c')
0 files changed, 0 insertions, 0 deletions