SQLite Forum

json_set bug (3.43.2)

json_set bug (3.43.2)

(1) By UnderKoen on 2023-10-17 12:10:32 [source]

The following query has an output that is not logical.

select json, json -> 0, json -> 1 from (select json_set(json_set('[]','$[#]',0),'$[#]',1) json);

It outputs

[0,1] | 1 | 1

Where it should output:

[0,1] | 0 | 1

(2) By Richard Hipp (drh) on 2023-10-17 13:54:08 in reply to 1 [link] [source]

Thanks for the bug report.

A simple one-line fix to the code is now available at https://sqlite.org/src/info/e5099c549a1d8959.

The problem was introduced in version 3.43.0, specifically by the check-in at https://sqlite.org/src/timeline?c=df099ad713011b67&y=ci&n=39. That check-in was a set of optimizations that helps JSON run much faster. Seems like it is always the optimizations that introduce bugs. As you can see for the details of that check-in, this is the third problem found (so far) associated with that optimization.

The patch is also available on the tip of branch-3.43. You can download a source tarball and recompile from that if you need a quick fix. Or just make the one-line patch to whatever version of SQLite you are currently using.