diff options
author | drh <> | 2023-10-07 11:36:16 +0000 |
---|---|---|
committer | drh <> | 2023-10-07 11:36:16 +0000 |
commit | bae197c175d8e58bfccd873e29d3c2d722f6b2ae (patch) | |
tree | 8453ff90be1b2678ab948537631ca1b9a45c0d28 /src/json.c | |
parent | 522e880bc263a2b7afa3234fe473532cc054348c (diff) | |
download | sqlite-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.c | 15 |
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); } |