1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-11 01:42:22 +03:00

Update json_each() and json_tree() so that they work with JSONB inputs.

FossilOrigin-Name: bb5e50ff56dff95d954aacdd4c5461790f953cef8d7b89da000d8d587fcdf9b8
This commit is contained in:
drh
2023-09-29 22:37:18 +00:00
parent ee50aad865
commit 5736ba5ac3
3 changed files with 18 additions and 9 deletions

View File

@@ -5402,12 +5402,19 @@ static int jsonEachFilter(
const char *z;
const char *zRoot = 0;
sqlite3_int64 n;
int isBinary;
UNUSED_PARAMETER(idxStr);
UNUSED_PARAMETER(argc);
jsonEachCursorReset(p);
if( idxNum==0 ) return SQLITE_OK;
z = (const char*)sqlite3_value_text(argv[0]);
if( jsonFuncArgMightBeBinary(argv[0]) ){
z = (const char*)sqlite3_value_blob(argv[0]);
isBinary = 1;
}else{
z = (const char*)sqlite3_value_text(argv[0]);
isBinary = 0;
}
if( z==0 ) return SQLITE_OK;
memset(&p->sParse, 0, sizeof(p->sParse));
p->sParse.nJPRef = 1;
@@ -5417,9 +5424,11 @@ static int jsonEachFilter(
n = sqlite3_value_bytes(argv[0]);
p->sParse.zJson = sqlite3RCStrNew( n+1 );
if( p->sParse.zJson==0 ) return SQLITE_NOMEM;
memcpy(p->sParse.zJson, z, (size_t)n+1);
memcpy(p->sParse.zJson, z, (size_t)n+(isBinary==0));
p->sParse.nJson = n;
}
p->sParse.bJsonIsRCStr = 1;
p->sParse.isBinary = isBinary;
p->zJson = p->sParse.zJson;
if( jsonParse(&p->sParse, 0) ){
int rc = SQLITE_NOMEM;