Skip to content

Json Each and Json Tree #1088

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 10 commits into from
Closed

Conversation

pedrocarlo
Copy link
Contributor

@pedrocarlo pedrocarlo commented Mar 4, 2025

This PR implements Json Each and Json Tree. My implementation almost matches the one with sqlite. It is different in two ways: in the assigning of arbitrary ids and in assigning path locators (which is believe is slightly buggy in sqlite). The arbitrary id assignment would not affect users of these functions are they are relative to each other, as what matters is that each item has a unique id assigned to them.

With regards to the path locators, I believe it is buggy as can be seen in the following screenshot:
Pasted Graphic

As you can see, in the last two json_tree queries their path and fullkey values are equal where they should differ in their array locators. It seems that when you pass a path containing an array locator to json_tree, it will then substitute it with a [0] instead.

I would like some guidance on how to proceed. Should I try to hack my implementation to accommodate with the way ids are incremented and with this path irregularity? Or should we stick with my implementation for now?

After a response, I intend to add and modify the tests depending on the direction we wish to take, as currently they won't pass due to this divergence in implementation.

Also, this PR depends on #1054 to be merged to be able to return Json instead of Text for the value column.

@penberg
Copy link
Collaborator

penberg commented Apr 5, 2025

This pull request has been marked as stale due to inactivity. It will be closed in 7 days if no further activity occurs.

@penberg penberg added the Stale label Apr 5, 2025
@penberg
Copy link
Collaborator

penberg commented Apr 12, 2025

This pull request has been closed due to inactivity. Please feel free to reopen it if you have further updates.

@penberg penberg closed this Apr 12, 2025
penberg added a commit that referenced this pull request Jun 4, 2025
This PR adds support for table-valued functions for PRAGMAs (see the
[PRAGMA functions section](https://www.sqlite.org/pragma.html)).
Additionally, it introduces built-in table-valued functions. I
considered using extensions for this, but there are several reasons in
favor of a dedicated mechanism:
* It simplifies the use of internal functions, structs, etc. For
example, when implementing `json_each` and `json_tree`, direct access to
internals was necessary:
#1088
* It avoids FFI overhead. [Benchmarks](https://github.com/piotrrzysko/li
mbo/blob/pragma_vtabs_bench/core/benches/pragma_benchmarks.rs) on my
hardware show that `pragma_table_info()` implemented as an extension is
2.5× slower than the built-in version.

Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com>

Closes #1642
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants