Hi, On 2022-08-11 13:08:27 -0400, Jonathan S. Katz wrote: > On 8/10/22 9:27 AM, Amit Langote wrote: > > On Wed, Aug 10, 2022 at 3:57 AM Andres Freund <and...@anarazel.de> wrote: > > > One way this code could be drastically simplified is to force all > > > type-coercions to go through the "io coercion" path, which could be > > > implemented as a single execution step (which thus could trivially > > > start/finish a subtransaction) and would remove a lot of the complicated > > > code > > > around coercions. > > > > Could you please clarify how you think we might do the io coercion > > wrapped with a subtransaction all as a single execution step? I > > would've thought that we couldn't do the sub-transaction without > > leaving ExecInterpExpr() anyway, so maybe you meant the io coercion > > itself was done using some code outside ExecInterpExpr()? > > > > The current JsonExpr code does it by recursively calling > > ExecInterpExpr() using the nested ExprState expressly for the > > coercion.
The basic idea is to rip out all the type-dependent stuff out and replace it with a single JSON_IOCERCE step, which has a parameter about whether to wrap things in a subtransaction or not. That step would always perform the coercion by calling the text output function of the input and the text input function of the output. > With RMT hat on, Andres do you have any thoughts on this? I think I need to prototype how it'd look like to give a more detailed answer. I have a bunch of meetings over the next few hours, but after that I can give it a shot. Greetings, Andres Freund