On Fri, Nov 5, 2021 at 12:48 PM Andres Freund <and...@anarazel.de> wrote: > I don't see how that works - the same expression can be evaluated multiple > times at once, recursively. So you can't have things like FunctionCallInfoData > shared. One key point of separating out the mutable data into something that > can be relocated is precisely so that every execution can have its own > "mutable" data area, without needing to change anything else.
Oh. That makes it harder. > > Or another option would be: instead of having one giant allocation in which > > we have to place data of every different type, have one allocation per kind > > of thing. Figure out how many FunctionCallInfo objects we need and make an > > array of them. Figure out how many NullableDatum objects we need and make a > > separate array of those. And so on. Then just use pointers. > > Without the relative pointer thing you'd still have pointers into those arrays > of objects. Which then would make the thing non-shareable. Well, I guess you could store indexes into the individual arrays, but then I guess you're not gaining much of anything. It's a pretty annoying problem, really. Somehow it's hard to shake the feeling that there ought to be a better approach than relative pointers. -- Robert Haas EDB: http://www.enterprisedb.com