Re: remaining sql/json patches - Mailing list pgsql-hackers
From | Alvaro Herrera |
---|---|
Subject | Re: remaining sql/json patches |
Date | |
Msg-id | 202309061501.xcwpfa2jjj5n@alvherre.pgsql Whole thread Raw |
In response to | Re: remaining sql/json patches (Amit Langote <amitlangote09@gmail.com>) |
Responses |
Re: remaining sql/json patches
Re: remaining sql/json patches |
List | pgsql-hackers |
0001 is quite mysterious to me. I've been reading it but I'm not sure I grok it, so I don't have anything too intelligent to say about it at this point. But here are my thoughts anyway. Assert()ing that a pointer is not null, and in the next line dereferencing that pointer, is useless: the process would crash anyway at the time of dereference, so the Assert() adds no value. Better to leave the assert out. (This appears both in ExecExprEnableErrorSafe and ExecExprDisableErrorSafe). Is it not a problem to set just the node type, and not reset the contents of the node to zeroes, in ExecExprEnableErrorSafe? I'm not sure if it's possible to enable error-safe on a node two times with an error reported in between; would that result in the escontext filled with junk the second time around? That might be dangerous. Maybe a simple cross-check is to verify (assert) in ExecExprEnableErrorSafe() that the struct is already all-zeroes, so that if this happens, we'll get reports about it. (After all, there are very few nodes that handle the SOFT_ERROR_OCCURRED case). Do we need to have the ->details_wanted flag turned on? Maybe if we're having ExecExprEnableErrorSafe() as a generic tool, it should receive the boolean to use as an argument. Why palloc the escontext always, and not just when ExecExprEnableErrorSafe is called? (At Disable time, just memset it to zero, and next time it is enabled for that node, we don't need to allocate it again, just set the nodetype.) ExecExprEnableErrorSafe() is a strange name for this operation. Maybe you mean ExecExprEnableSoftErrors()? Maybe it'd be better to leave it as NULL initially, so that for the majority of cases we don't even allocate it. In 0002 you're adding soft-error support for a bunch of existing operations, in addition to introducing SQL/JSON query functions. Maybe the soft-error stuff should be done separately in a preparatory patch. I think functions such as populate_array_element() that can now save soft errors and which currently do not have a return value, should acquire a convention to let caller know that things failed: maybe return false if SOFT_ERROR_OCCURRED(). Otherwise it appears that, for instance populate_array_dim_jsonb() can return happily if an error occurs when parsing the last element in the array. Splitting 0002 to have a preparatory patch where all such soft-error-saving changes are introduced separately would help review that this is indeed being handled by all their callers. -- Álvaro Herrera Breisgau, Deutschland — https://www.EnterpriseDB.com/ "Por suerte hoy explotó el califont porque si no me habría muerto de aburrido" (Papelucho)
pgsql-hackers by date: