> On 27 Sep 2024, at 12:45 PM, David E. Wheeler <da...@justatheory.com> wrote:
>
> On Sep 26, 2024, at 13:59, Florents Tselai <florents.tse...@gmail.com> wrote:
>
>> Speaking of extensible: the jsonpath standard does mention function
>> extensions [1] ,
>> so it looks like we're covered by the standard, and the mutability aspect is
>> an implementation detail. No?
>
> That’s not the standard used for Postgres jsonpath. Postgres follows the
> SQL/JSON standard in the SQL standard, which is not publicly available, but a
> few people on the list have copies they’ve purchased and so could provide
> some context.
>
> In a previous post I wondered if the SQL standard had some facility for
> function extensions, but I suspect not. Maybe in the next iteration?
>
>> And having said that, the whole jsonb/jsonpath parser/executor
>> infrastructure is extremely powerful
>> and kinda under-utilized if we use it "only" for jsonpath.
>> Tbh, I can see it supporting more specific DSLs and even offering hooks for
>> extensions.
>> And I know for certain I'm not the only one thinking about this.
>> See [2] for example where they've lifted, shifted and renamed the
>> jsonb/jsonpath infra to build a separate language for graphs
>
> I’m all for extensibility, though jsonpath does need to continue to comply
> with the SQL standard. Do you have some idea of the sorts of hooks that would
> allow extension authors to use some of that underlying capability?
Re-tracing what I had to do
1. Define a new JsonPathItemType jpiMyExtType and map it to a JsonPathKeyword
2. Add a new JsonPathKeyword and make the lexer and parser aware of that,
3. Tell the main executor executeItemOptUnwrapTarget what to do when the new
type is matched.
I think 1, 2 are the trickiest because they require hooks to jsonpath_scan.l
and parser jsonpath_gram.y
3. is the meat of a potential hook, which would be something like
extern JsonPathExecResult executeOnMyJsonpathItem(JsonPathExecContext *cxt,
JsonbValue *jb, JsonValueList *found);
This should be called by the main executor executeItemOptUnwrapTarget when it
encounters case jpiMyExtType
It looks like quite an endeavor, to be honest.