(Tom, thank you for the fixup in 75240f65!) Off-list, Andrew suggested an alternative approach to the one I'd been taking: let the client choose whether it wants to take token ownership to begin with. v3 adds a new flag (and associated API) which will allow libpq to refuse ownership of those tokens. The lexer is then free to clean everything up during parse failures.
Usually I'm not a fan of "do the right thing" flags, but in this case, libpq really is the outlier. And it's nice that existing clients (potentially including extensions) don't have to worry about an API change. At the moment, we have a test matrix consisting of "standard frontend" and "shlib frontend" tests for the incremental parser. I'm planning for the v4 patch to extend that with a "owned/not owned" dimension; any objections? Thanks, --Jacob
v3-0001-jsonapi-add-lexer-option-to-keep-token-ownership.patch
Description: Binary data