aboutsummaryrefslogtreecommitdiff
path: root/src/json.c
diff options
context:
space:
mode:
authordrh <>2023-10-07 11:36:16 +0000
committerdrh <>2023-10-07 11:36:16 +0000
commitbae197c175d8e58bfccd873e29d3c2d722f6b2ae (patch)
tree8453ff90be1b2678ab948537631ca1b9a45c0d28 /src/json.c
parent522e880bc263a2b7afa3234fe473532cc054348c (diff)
downloadsqlite-bae197c175d8e58bfccd873e29d3c2d722f6b2ae.tar.gz
sqlite-bae197c175d8e58bfccd873e29d3c2d722f6b2ae.zip
Improved error messages from search on JSONB.
FossilOrigin-Name: 96cfdc31e305406123f6ef1b920423f71902dc4b34381c3efb720274343d37cc
Diffstat (limited to 'src/json.c')
-rw-r--r--src/json.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/json.c b/src/json.c
index 3c2af6e84..fdc7df41b 100644
--- a/src/json.c
+++ b/src/json.c
@@ -3716,8 +3716,8 @@ static u32 jsonLookupBlobStep(
if( zPath[i] ){
i++;
}else{
- *pzErr = zPath;
- return 0;
+ *pzErr = "unterminated \"";
+ return JSON_BLOB_PATHERROR;
}
testcase( nKey==0 );
}else{
@@ -3778,11 +3778,11 @@ static u32 jsonLookupBlobStep(
k -= nn;
}
if( zPath[i]!=']' ){
- *pzErr = zPath;
+ *pzErr = "unterminated [";
return JSON_BLOB_PATHERROR;
}
}else{
- *pzErr = zPath;
+ *pzErr = "bad argument to []";
return JSON_BLOB_PATHERROR;
}
}
@@ -3799,7 +3799,7 @@ static u32 jsonLookupBlobStep(
}
if( j>iEnd ) return JSON_BLOB_ERROR;
}else{
- *pzErr = zPath;
+ *pzErr = "syntax error";
return JSON_BLOB_PATHERROR;
}
return JSON_BLOB_NOTFOUND;
@@ -4056,6 +4056,11 @@ static void jsonExtractFromBlob(
return; /* Return NULL if not found */
}else if( i==JSON_BLOB_ERROR ){
sqlite3_result_error(ctx, "malformed JSON", -1);
+ }else if( i==JSON_BLOB_PATHERROR ){
+ char *zMsg = sqlite3_mprintf("in JSON path '%s': %s",
+ sqlite3_value_text(pPath), zErr);
+ sqlite3_result_error(ctx, zMsg, -1);
+ sqlite3_free(zMsg);
}else{
sqlite3_result_error(ctx, zErr, -1);
}