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:
13
src/json.c
13
src/json.c
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user