mirror of
https://github.com/sqlite/sqlite.git
synced 2026-10-23 21:49:02 +03:00
Fix json_tree() when it is given a root that ends with an array index so
that it returns the correct "key" for the first root. This was broken by check-in [858b76a00e8ff552] and in version 3.45.0. Problem reported by [forum:/info/2026-10-14T08:42:26Z|Forum post 2026-10-14T08:42:26Z]. FossilOrigin-Name: eaf646e376a5a3e10a874ed1c07ca1382f0ccb7cdf1cc963697638a54b98c779
This commit is contained in:
16
manifest
16
manifest
@@ -1,5 +1,5 @@
|
||||
C Have\stestrunner.tcl\sunset\senvironment\svariable\sDEBUGINFOD_URLS.\sLeaving\sit\sset\sslows\sdown\ssome\ssanitizer\srelease\stests.
|
||||
D 2026-10-14T17:52:21.757
|
||||
C Fix\sjson_tree()\swhen\sit\sis\sgiven\sa\sroot\sthat\sends\swith\san\sarray\sindex\sso\nthat\sit\sreturns\sthe\scorrect\s"key"\sfor\sthe\sfirst\sroot.\s\sThis\swas\sbroken\nby\scheck-in\s[858b76a00e8ff552]\sand\sin\sversion\s3.45.0.\s\sProblem\sreported\nby\s[forum:/info/2026-10-14T08:42:26Z|Forum\spost\s2026-10-14T08:42:26Z].
|
||||
D 2026-10-14T17:52:44.574
|
||||
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
@@ -765,7 +765,7 @@ F src/hash.h 46b92795a95bfefb210f52f0c316e9d7cdbcdd7e7fcfb0d8be796d3a5767cddf
|
||||
F src/hwtime.h 5cb15147c8583d0fc4748e1c12ea6f38c9deaeefa147a4d8d379fd9bc81fee9a
|
||||
F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71
|
||||
F src/insert.c 482d853c980f4765f045bbea3ab095067a52cd57f47e357f9f17aa7c7fff793f
|
||||
F src/json.c c3ba268dda607a377f210dcf84603bb3d282f9833c8aa0abfb0c8951aefc40be
|
||||
F src/json.c 7d28da4a3740941eab5fa3361276160bb7698bf87218c9d30be7c10b894b6115
|
||||
F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa
|
||||
F src/loadext.c 5cd4cd7ec6e1a46416806899086363fbf95eecd3bfb9a388b436c9a77243c902
|
||||
F src/main.c a32bcae6e3bfd9209d922b02c28ba796fa628322c3c4be0c5a76c418be793d13
|
||||
@@ -1445,7 +1445,7 @@ F test/json106.test 4aed3afd16549045d198a8d9cea00deea96e1f2ecf55864dce96cac558b8
|
||||
F test/json107.test 59054e815c8f6b67d634d44ace421cf975828fb5651c4460aa66015c8e19d562
|
||||
F test/json108.test eab1859b19138ee03acd4415751308fc3849943c669a06b515bba658b96b55c3
|
||||
F test/json109.test 441cea5d73c24a1a34d284101740dfae5a082237c048c8a66b03aeebe5e3643e
|
||||
F test/json501.test b95e2d14988b682a5cadf079dd6162f0f85fb74cd59c6b1f1624110104a974eb
|
||||
F test/json501.test 25e3ffd0e1e70efb3328e823dbad304687f1340e5b337bebef6e9a3e641d12de
|
||||
F test/json502.test 4ef68e4f272dfb083d4cbceb4e9e51d67ec1186a185e0c13637c50a4dc2f9796
|
||||
F test/jsonb01.test 42419c8080af5660cdfd3fddec322d28bdbc244d9800ee9569091d455f1c0dea
|
||||
F test/keyword1.test 37ef6bba5d2ed5b07ecdd6810571de2956599dff
|
||||
@@ -2289,8 +2289,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
|
||||
F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
|
||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
|
||||
P dabff5c1cde60883f23d41f713f44a5942ae229c3abe280778dc2df41c894907
|
||||
R 4b5be89660c013e09134f29cfb5bd25f
|
||||
U dan
|
||||
Z 5c757519b05c9f98504f3f397cdcd79c
|
||||
P b7ebfea1c1fd4a4d70f1e429c4ad5d21502e10ab28f90bdb7ae1da2df417cf8b
|
||||
R 3f1448a6708915bf4329e06e60d98963
|
||||
U drh
|
||||
Z f9f5896078163a8ca87e19dbd687eb77
|
||||
# Remove this line to create a well-formed Fossil manifest.
|
||||
|
||||
@@ -1 +1 @@
|
||||
b7ebfea1c1fd4a4d70f1e429c4ad5d21502e10ab28f90bdb7ae1da2df417cf8b
|
||||
eaf646e376a5a3e10a874ed1c07ca1382f0ccb7cdf1cc963697638a54b98c779
|
||||
|
||||
@@ -5512,17 +5512,16 @@ static int jsonEachPathLength(JsonEachCursor *p){
|
||||
u32 n = p->path.nUsed;
|
||||
char *z = p->path.zBuf;
|
||||
if( p->iRowid==0 && p->bRecursive && n>=2 ){
|
||||
while( n>1 ){
|
||||
while( ALWAYS(n>1) ){
|
||||
n--;
|
||||
if( z[n]=='[' || z[n]=='.' ){
|
||||
u32 x, sz = 0;
|
||||
u32 x;
|
||||
char cSaved = z[n];
|
||||
z[n] = 0;
|
||||
assert( p->sParse.eEdit==0 );
|
||||
x = jsonLookupStep(&p->sParse, 0, z+1, 0);
|
||||
z[n] = cSaved;
|
||||
if( JSON_LOOKUP_ISERROR(x) ) continue;
|
||||
if( x + jsonbPayloadSize(&p->sParse, x, &sz) == p->i ) break;
|
||||
if( !JSON_LOOKUP_ISERROR(x) ) break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -332,5 +332,16 @@ for {set c 1} {$c<=0x1f} {incr c} {
|
||||
} "{{\"label\":\"abc${e}xyz\"}}"
|
||||
}
|
||||
|
||||
# Forum post 2026-10-14T08:42:26Z
|
||||
#
|
||||
do_execsql_test 15.0 {
|
||||
WITH json(jid,jx) AS (VALUES
|
||||
(1,'{"a":"text","b":123,"c":[1,2,3,"t",{"cc":99,"dd":100}],"d":null}'),
|
||||
(2,'[1,"a",{"aa":11,"bb":[9,8,7]},null]')
|
||||
), paths(pid,px) AS (VALUES(1,'$.c[4]'),(2,'$.c'),(3,'$[2].bb'),(4,'$[2]'))
|
||||
SELECT jj.key, typeof(jj.key) FROM json, paths, json_tree(jx,px) AS jj
|
||||
WHERE parent IS NULL
|
||||
ORDER BY jid, pid;
|
||||
} {4 integer c text bb text 2 integer}
|
||||
|
||||
finish_test
|
||||
|
||||
Reference in New Issue
Block a user