mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-29 08:01:23 +03:00
Fix json_set() so that it can overwrite a value that was previously overwritten
during the same call. FossilOrigin-Name: 0f16041647993975c316203c7e11f06e27640136
This commit is contained in:
@ -807,6 +807,20 @@ static int jsonParseFindParents(JsonParse *pParse){
|
||||
return SQLITE_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
** Compare the OBJECT label at pNode against zKey,nKey. Return true on
|
||||
** a match.
|
||||
*/
|
||||
static int jsonLabelCompare(JsonNode *pNode, const char *zKey, int nKey){
|
||||
if( pNode->jnFlags & JNODE_RAW ){
|
||||
if( pNode->n!=nKey ) return 0;
|
||||
return strncmp(pNode->u.zJContent, zKey, nKey)==0;
|
||||
}else{
|
||||
if( pNode->n!=nKey+2 ) return 0;
|
||||
return strncmp(pNode->u.zJContent+1, zKey, nKey)==0;
|
||||
}
|
||||
}
|
||||
|
||||
/* forward declaration */
|
||||
static JsonNode *jsonLookupAppend(JsonParse*,const char*,int*,const char**);
|
||||
|
||||
@ -855,9 +869,7 @@ static JsonNode *jsonLookupStep(
|
||||
j = 1;
|
||||
for(;;){
|
||||
while( j<=pRoot->n ){
|
||||
if( pRoot[j].n==nKey+2
|
||||
&& strncmp(&pRoot[j].u.zJContent[1],zKey,nKey)==0
|
||||
){
|
||||
if( jsonLabelCompare(pRoot+j, zKey, nKey) ){
|
||||
return jsonLookupStep(pParse, iRoot+j+1, &zPath[i], pApnd, pzErr);
|
||||
}
|
||||
j++;
|
||||
|
Reference in New Issue
Block a user