2015-07-10 16:16 GMT+02:00 Shulgin, Oleksandr <oleksandr.shul...@zalando.de> :
> On Fri, Jul 10, 2015 at 4:04 PM, Pavel Stehule <pavel.steh...@gmail.com> > wrote: > >> >>> >>>> 2. why you did indirect call via JsonOutContext? >>>>> >>>>> What is benefit >>>>> >>>>> dst.value(&dst, (Datum) 0, JSONTYPE_NULL, InvalidOid, InvalidOid, >>>>> false); >>>>> >>>>> instead >>>>> >>>>> json_out_value(&dst, ....) >>>>> >>>> >>> For consistency. Even though we initialize the output context >>> ourselves, there might be some code introduced between >>> json_out_init_context() and dst.value() calls that replaces some of the >>> callbacks, and then there would be a difference. >>> >> >> with this consistency? I didn't see this style everywhere in Postgres? >> Isn't it premature optimization? >> > > Well, one could call it premature pessimization due to dynamic call > overhead. > > IMO, the fact that json_out_init_context() sets the value callback to > json_out_value is an implementation detail, the other parts of code should > not rely on. And for the Explain output, there definitely going to be > *some* code between context initialization and output callbacks: these are > done in a number of different functions. > Again - it is necessary? Postgres still use modular code, not OOP code. I can understand the using of this technique, when I need a possibility to change behave. But these function are used for printing JSON, not printing any others. Pavel > > -- > Alex > >