xref: /sqlite-3.40.0/src/json.c (revision 875912c2)
1 /*
2 ** 2015-08-12
3 **
4 ** The author disclaims copyright to this source code.  In place of
5 ** a legal notice, here is a blessing:
6 **
7 **    May you do good and not evil.
8 **    May you find forgiveness for yourself and forgive others.
9 **    May you share freely, never taking more than you give.
10 **
11 ******************************************************************************
12 **
13 ** This SQLite JSON functions.
14 **
15 ** This file began as an extension in ext/misc/json1.c in 2015.  That
16 ** extension proved so useful that it has now been moved into the core.
17 **
18 ** For the time being, all JSON is stored as pure text.  (We might add
19 ** a JSONB type in the future which stores a binary encoding of JSON in
20 ** a BLOB, but there is no support for JSONB in the current implementation.
21 ** This implementation parses JSON text at 250 MB/s, so it is hard to see
22 ** how JSONB might improve on that.)
23 */
24 #ifndef SQLITE_OMIT_JSON
25 #include "sqliteInt.h"
26 
27 /*
28 ** Growing our own isspace() routine this way is twice as fast as
29 ** the library isspace() function, resulting in a 7% overall performance
30 ** increase for the parser.  (Ubuntu14.10 gcc 4.8.4 x64 with -Os).
31 */
32 static const char jsonIsSpace[] = {
33   0, 0, 0, 0, 0, 0, 0, 0,     0, 1, 1, 0, 0, 1, 0, 0,
34   0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
35   1, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
36   0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
37   0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
38   0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
39   0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
40   0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
41   0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
42   0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
43   0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
44   0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
45   0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
46   0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
47   0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
48   0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
49 };
50 #define fast_isspace(x) (jsonIsSpace[(unsigned char)x])
51 
52 #if !defined(SQLITE_DEBUG) && !defined(SQLITE_COVERAGE_TEST)
53 #  define VVA(X)
54 #else
55 #  define VVA(X) X
56 #endif
57 
58 /* Objects */
59 typedef struct JsonString JsonString;
60 typedef struct JsonNode JsonNode;
61 typedef struct JsonParse JsonParse;
62 
63 /* An instance of this object represents a JSON string
64 ** under construction.  Really, this is a generic string accumulator
65 ** that can be and is used to create strings other than JSON.
66 */
67 struct JsonString {
68   sqlite3_context *pCtx;   /* Function context - put error messages here */
69   char *zBuf;              /* Append JSON content here */
70   u64 nAlloc;              /* Bytes of storage available in zBuf[] */
71   u64 nUsed;               /* Bytes of zBuf[] currently used */
72   u8 bStatic;              /* True if zBuf is static space */
73   u8 bErr;                 /* True if an error has been encountered */
74   char zSpace[100];        /* Initial static space */
75 };
76 
77 /* JSON type values
78 */
79 #define JSON_NULL     0
80 #define JSON_TRUE     1
81 #define JSON_FALSE    2
82 #define JSON_INT      3
83 #define JSON_REAL     4
84 #define JSON_STRING   5
85 #define JSON_ARRAY    6
86 #define JSON_OBJECT   7
87 
88 /* The "subtype" set for JSON values */
89 #define JSON_SUBTYPE  74    /* Ascii for "J" */
90 
91 /*
92 ** Names of the various JSON types:
93 */
94 static const char * const jsonType[] = {
95   "null", "true", "false", "integer", "real", "text", "array", "object"
96 };
97 
98 /* Bit values for the JsonNode.jnFlag field
99 */
100 #define JNODE_RAW     0x01         /* Content is raw, not JSON encoded */
101 #define JNODE_ESCAPE  0x02         /* Content is text with \ escapes */
102 #define JNODE_REMOVE  0x04         /* Do not output */
103 #define JNODE_REPLACE 0x08         /* Replace with JsonNode.u.iReplace */
104 #define JNODE_PATCH   0x10         /* Patch with JsonNode.u.pPatch */
105 #define JNODE_APPEND  0x20         /* More ARRAY/OBJECT entries at u.iAppend */
106 #define JNODE_LABEL   0x40         /* Is a label of an object */
107 
108 
109 /* A single node of parsed JSON
110 */
111 struct JsonNode {
112   u8 eType;              /* One of the JSON_ type values */
113   u8 jnFlags;            /* JNODE flags */
114   u8 eU;                 /* Which union element to use */
115   u32 n;                 /* Bytes of content, or number of sub-nodes */
116   union {
117     const char *zJContent; /* 1: Content for INT, REAL, and STRING */
118     u32 iAppend;           /* 2: More terms for ARRAY and OBJECT */
119     u32 iKey;              /* 3: Key for ARRAY objects in json_tree() */
120     u32 iReplace;          /* 4: Replacement content for JNODE_REPLACE */
121     JsonNode *pPatch;      /* 5: Node chain of patch for JNODE_PATCH */
122   } u;
123 };
124 
125 /* A completely parsed JSON string
126 */
127 struct JsonParse {
128   u32 nNode;         /* Number of slots of aNode[] used */
129   u32 nAlloc;        /* Number of slots of aNode[] allocated */
130   JsonNode *aNode;   /* Array of nodes containing the parse */
131   const char *zJson; /* Original JSON string */
132   u32 *aUp;          /* Index of parent of each node */
133   u8 oom;            /* Set to true if out of memory */
134   u8 nErr;           /* Number of errors seen */
135   u16 iDepth;        /* Nesting depth */
136   int nJson;         /* Length of the zJson string in bytes */
137   u32 iHold;         /* Replace cache line with the lowest iHold value */
138 };
139 
140 /*
141 ** Maximum nesting depth of JSON for this implementation.
142 **
143 ** This limit is needed to avoid a stack overflow in the recursive
144 ** descent parser.  A depth of 2000 is far deeper than any sane JSON
145 ** should go.
146 */
147 #define JSON_MAX_DEPTH  2000
148 
149 /**************************************************************************
150 ** Utility routines for dealing with JsonString objects
151 **************************************************************************/
152 
153 /* Set the JsonString object to an empty string
154 */
155 static void jsonZero(JsonString *p){
156   p->zBuf = p->zSpace;
157   p->nAlloc = sizeof(p->zSpace);
158   p->nUsed = 0;
159   p->bStatic = 1;
160 }
161 
162 /* Initialize the JsonString object
163 */
164 static void jsonInit(JsonString *p, sqlite3_context *pCtx){
165   p->pCtx = pCtx;
166   p->bErr = 0;
167   jsonZero(p);
168 }
169 
170 
171 /* Free all allocated memory and reset the JsonString object back to its
172 ** initial state.
173 */
174 static void jsonReset(JsonString *p){
175   if( !p->bStatic ) sqlite3_free(p->zBuf);
176   jsonZero(p);
177 }
178 
179 
180 /* Report an out-of-memory (OOM) condition
181 */
182 static void jsonOom(JsonString *p){
183   p->bErr = 1;
184   sqlite3_result_error_nomem(p->pCtx);
185   jsonReset(p);
186 }
187 
188 /* Enlarge pJson->zBuf so that it can hold at least N more bytes.
189 ** Return zero on success.  Return non-zero on an OOM error
190 */
191 static int jsonGrow(JsonString *p, u32 N){
192   u64 nTotal = N<p->nAlloc ? p->nAlloc*2 : p->nAlloc+N+10;
193   char *zNew;
194   if( p->bStatic ){
195     if( p->bErr ) return 1;
196     zNew = sqlite3_malloc64(nTotal);
197     if( zNew==0 ){
198       jsonOom(p);
199       return SQLITE_NOMEM;
200     }
201     memcpy(zNew, p->zBuf, (size_t)p->nUsed);
202     p->zBuf = zNew;
203     p->bStatic = 0;
204   }else{
205     zNew = sqlite3_realloc64(p->zBuf, nTotal);
206     if( zNew==0 ){
207       jsonOom(p);
208       return SQLITE_NOMEM;
209     }
210     p->zBuf = zNew;
211   }
212   p->nAlloc = nTotal;
213   return SQLITE_OK;
214 }
215 
216 /* Append N bytes from zIn onto the end of the JsonString string.
217 */
218 static void jsonAppendRaw(JsonString *p, const char *zIn, u32 N){
219   if( N==0 ) return;
220   if( (N+p->nUsed >= p->nAlloc) && jsonGrow(p,N)!=0 ) return;
221   memcpy(p->zBuf+p->nUsed, zIn, N);
222   p->nUsed += N;
223 }
224 
225 /* Append formatted text (not to exceed N bytes) to the JsonString.
226 */
227 static void jsonPrintf(int N, JsonString *p, const char *zFormat, ...){
228   va_list ap;
229   if( (p->nUsed + N >= p->nAlloc) && jsonGrow(p, N) ) return;
230   va_start(ap, zFormat);
231   sqlite3_vsnprintf(N, p->zBuf+p->nUsed, zFormat, ap);
232   va_end(ap);
233   p->nUsed += (int)strlen(p->zBuf+p->nUsed);
234 }
235 
236 /* Append a single character
237 */
238 static void jsonAppendChar(JsonString *p, char c){
239   if( p->nUsed>=p->nAlloc && jsonGrow(p,1)!=0 ) return;
240   p->zBuf[p->nUsed++] = c;
241 }
242 
243 /* Append a comma separator to the output buffer, if the previous
244 ** character is not '[' or '{'.
245 */
246 static void jsonAppendSeparator(JsonString *p){
247   char c;
248   if( p->nUsed==0 ) return;
249   c = p->zBuf[p->nUsed-1];
250   if( c!='[' && c!='{' ) jsonAppendChar(p, ',');
251 }
252 
253 /* Append the N-byte string in zIn to the end of the JsonString string
254 ** under construction.  Enclose the string in "..." and escape
255 ** any double-quotes or backslash characters contained within the
256 ** string.
257 */
258 static void jsonAppendString(JsonString *p, const char *zIn, u32 N){
259   u32 i;
260   if( zIn==0 || ((N+p->nUsed+2 >= p->nAlloc) && jsonGrow(p,N+2)!=0) ) return;
261   p->zBuf[p->nUsed++] = '"';
262   for(i=0; i<N; i++){
263     unsigned char c = ((unsigned const char*)zIn)[i];
264     if( c=='"' || c=='\\' ){
265       json_simple_escape:
266       if( (p->nUsed+N+3-i > p->nAlloc) && jsonGrow(p,N+3-i)!=0 ) return;
267       p->zBuf[p->nUsed++] = '\\';
268     }else if( c<=0x1f ){
269       static const char aSpecial[] = {
270          0, 0, 0, 0, 0, 0, 0, 0, 'b', 't', 'n', 0, 'f', 'r', 0, 0,
271          0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0, 0,   0,   0, 0, 0
272       };
273       assert( sizeof(aSpecial)==32 );
274       assert( aSpecial['\b']=='b' );
275       assert( aSpecial['\f']=='f' );
276       assert( aSpecial['\n']=='n' );
277       assert( aSpecial['\r']=='r' );
278       assert( aSpecial['\t']=='t' );
279       if( aSpecial[c] ){
280         c = aSpecial[c];
281         goto json_simple_escape;
282       }
283       if( (p->nUsed+N+7+i > p->nAlloc) && jsonGrow(p,N+7-i)!=0 ) return;
284       p->zBuf[p->nUsed++] = '\\';
285       p->zBuf[p->nUsed++] = 'u';
286       p->zBuf[p->nUsed++] = '0';
287       p->zBuf[p->nUsed++] = '0';
288       p->zBuf[p->nUsed++] = '0' + (c>>4);
289       c = "0123456789abcdef"[c&0xf];
290     }
291     p->zBuf[p->nUsed++] = c;
292   }
293   p->zBuf[p->nUsed++] = '"';
294   assert( p->nUsed<p->nAlloc );
295 }
296 
297 /*
298 ** Append a function parameter value to the JSON string under
299 ** construction.
300 */
301 static void jsonAppendValue(
302   JsonString *p,                 /* Append to this JSON string */
303   sqlite3_value *pValue          /* Value to append */
304 ){
305   switch( sqlite3_value_type(pValue) ){
306     case SQLITE_NULL: {
307       jsonAppendRaw(p, "null", 4);
308       break;
309     }
310     case SQLITE_INTEGER:
311     case SQLITE_FLOAT: {
312       const char *z = (const char*)sqlite3_value_text(pValue);
313       u32 n = (u32)sqlite3_value_bytes(pValue);
314       jsonAppendRaw(p, z, n);
315       break;
316     }
317     case SQLITE_TEXT: {
318       const char *z = (const char*)sqlite3_value_text(pValue);
319       u32 n = (u32)sqlite3_value_bytes(pValue);
320       if( sqlite3_value_subtype(pValue)==JSON_SUBTYPE ){
321         jsonAppendRaw(p, z, n);
322       }else{
323         jsonAppendString(p, z, n);
324       }
325       break;
326     }
327     default: {
328       if( p->bErr==0 ){
329         sqlite3_result_error(p->pCtx, "JSON cannot hold BLOB values", -1);
330         p->bErr = 2;
331         jsonReset(p);
332       }
333       break;
334     }
335   }
336 }
337 
338 
339 /* Make the JSON in p the result of the SQL function.
340 */
341 static void jsonResult(JsonString *p){
342   if( p->bErr==0 ){
343     sqlite3_result_text64(p->pCtx, p->zBuf, p->nUsed,
344                           p->bStatic ? SQLITE_TRANSIENT : sqlite3_free,
345                           SQLITE_UTF8);
346     jsonZero(p);
347   }
348   assert( p->bStatic );
349 }
350 
351 /**************************************************************************
352 ** Utility routines for dealing with JsonNode and JsonParse objects
353 **************************************************************************/
354 
355 /*
356 ** Return the number of consecutive JsonNode slots need to represent
357 ** the parsed JSON at pNode.  The minimum answer is 1.  For ARRAY and
358 ** OBJECT types, the number might be larger.
359 **
360 ** Appended elements are not counted.  The value returned is the number
361 ** by which the JsonNode counter should increment in order to go to the
362 ** next peer value.
363 */
364 static u32 jsonNodeSize(JsonNode *pNode){
365   return pNode->eType>=JSON_ARRAY ? pNode->n+1 : 1;
366 }
367 
368 /*
369 ** Reclaim all memory allocated by a JsonParse object.  But do not
370 ** delete the JsonParse object itself.
371 */
372 static void jsonParseReset(JsonParse *pParse){
373   sqlite3_free(pParse->aNode);
374   pParse->aNode = 0;
375   pParse->nNode = 0;
376   pParse->nAlloc = 0;
377   sqlite3_free(pParse->aUp);
378   pParse->aUp = 0;
379 }
380 
381 /*
382 ** Free a JsonParse object that was obtained from sqlite3_malloc().
383 */
384 static void jsonParseFree(JsonParse *pParse){
385   jsonParseReset(pParse);
386   sqlite3_free(pParse);
387 }
388 
389 /*
390 ** Convert the JsonNode pNode into a pure JSON string and
391 ** append to pOut.  Subsubstructure is also included.  Return
392 ** the number of JsonNode objects that are encoded.
393 */
394 static void jsonRenderNode(
395   JsonNode *pNode,               /* The node to render */
396   JsonString *pOut,              /* Write JSON here */
397   sqlite3_value **aReplace       /* Replacement values */
398 ){
399   assert( pNode!=0 );
400   if( pNode->jnFlags & (JNODE_REPLACE|JNODE_PATCH) ){
401     if( (pNode->jnFlags & JNODE_REPLACE)!=0 && ALWAYS(aReplace!=0) ){
402       assert( pNode->eU==4 );
403       jsonAppendValue(pOut, aReplace[pNode->u.iReplace]);
404       return;
405     }
406     assert( pNode->eU==5 );
407     pNode = pNode->u.pPatch;
408   }
409   switch( pNode->eType ){
410     default: {
411       assert( pNode->eType==JSON_NULL );
412       jsonAppendRaw(pOut, "null", 4);
413       break;
414     }
415     case JSON_TRUE: {
416       jsonAppendRaw(pOut, "true", 4);
417       break;
418     }
419     case JSON_FALSE: {
420       jsonAppendRaw(pOut, "false", 5);
421       break;
422     }
423     case JSON_STRING: {
424       if( pNode->jnFlags & JNODE_RAW ){
425         assert( pNode->eU==1 );
426         jsonAppendString(pOut, pNode->u.zJContent, pNode->n);
427         break;
428       }
429       /* no break */ deliberate_fall_through
430     }
431     case JSON_REAL:
432     case JSON_INT: {
433       assert( pNode->eU==1 );
434       jsonAppendRaw(pOut, pNode->u.zJContent, pNode->n);
435       break;
436     }
437     case JSON_ARRAY: {
438       u32 j = 1;
439       jsonAppendChar(pOut, '[');
440       for(;;){
441         while( j<=pNode->n ){
442           if( (pNode[j].jnFlags & JNODE_REMOVE)==0 ){
443             jsonAppendSeparator(pOut);
444             jsonRenderNode(&pNode[j], pOut, aReplace);
445           }
446           j += jsonNodeSize(&pNode[j]);
447         }
448         if( (pNode->jnFlags & JNODE_APPEND)==0 ) break;
449         assert( pNode->eU==2 );
450         pNode = &pNode[pNode->u.iAppend];
451         j = 1;
452       }
453       jsonAppendChar(pOut, ']');
454       break;
455     }
456     case JSON_OBJECT: {
457       u32 j = 1;
458       jsonAppendChar(pOut, '{');
459       for(;;){
460         while( j<=pNode->n ){
461           if( (pNode[j+1].jnFlags & JNODE_REMOVE)==0 ){
462             jsonAppendSeparator(pOut);
463             jsonRenderNode(&pNode[j], pOut, aReplace);
464             jsonAppendChar(pOut, ':');
465             jsonRenderNode(&pNode[j+1], pOut, aReplace);
466           }
467           j += 1 + jsonNodeSize(&pNode[j+1]);
468         }
469         if( (pNode->jnFlags & JNODE_APPEND)==0 ) break;
470         assert( pNode->eU==2 );
471         pNode = &pNode[pNode->u.iAppend];
472         j = 1;
473       }
474       jsonAppendChar(pOut, '}');
475       break;
476     }
477   }
478 }
479 
480 /*
481 ** Return a JsonNode and all its descendents as a JSON string.
482 */
483 static void jsonReturnJson(
484   JsonNode *pNode,            /* Node to return */
485   sqlite3_context *pCtx,      /* Return value for this function */
486   sqlite3_value **aReplace    /* Array of replacement values */
487 ){
488   JsonString s;
489   jsonInit(&s, pCtx);
490   jsonRenderNode(pNode, &s, aReplace);
491   jsonResult(&s);
492   sqlite3_result_subtype(pCtx, JSON_SUBTYPE);
493 }
494 
495 /*
496 ** Translate a single byte of Hex into an integer.
497 ** This routine only works if h really is a valid hexadecimal
498 ** character:  0..9a..fA..F
499 */
500 static u8 jsonHexToInt(int h){
501   assert( (h>='0' && h<='9') ||  (h>='a' && h<='f') ||  (h>='A' && h<='F') );
502 #ifdef SQLITE_EBCDIC
503   h += 9*(1&~(h>>4));
504 #else
505   h += 9*(1&(h>>6));
506 #endif
507   return (u8)(h & 0xf);
508 }
509 
510 /*
511 ** Convert a 4-byte hex string into an integer
512 */
513 static u32 jsonHexToInt4(const char *z){
514   u32 v;
515   assert( sqlite3Isxdigit(z[0]) );
516   assert( sqlite3Isxdigit(z[1]) );
517   assert( sqlite3Isxdigit(z[2]) );
518   assert( sqlite3Isxdigit(z[3]) );
519   v = (jsonHexToInt(z[0])<<12)
520     + (jsonHexToInt(z[1])<<8)
521     + (jsonHexToInt(z[2])<<4)
522     + jsonHexToInt(z[3]);
523   return v;
524 }
525 
526 /*
527 ** Make the JsonNode the return value of the function.
528 */
529 static void jsonReturn(
530   JsonNode *pNode,            /* Node to return */
531   sqlite3_context *pCtx,      /* Return value for this function */
532   sqlite3_value **aReplace    /* Array of replacement values */
533 ){
534   switch( pNode->eType ){
535     default: {
536       assert( pNode->eType==JSON_NULL );
537       sqlite3_result_null(pCtx);
538       break;
539     }
540     case JSON_TRUE: {
541       sqlite3_result_int(pCtx, 1);
542       break;
543     }
544     case JSON_FALSE: {
545       sqlite3_result_int(pCtx, 0);
546       break;
547     }
548     case JSON_INT: {
549       sqlite3_int64 i = 0;
550       const char *z;
551       assert( pNode->eU==1 );
552       z = pNode->u.zJContent;
553       if( z[0]=='-' ){ z++; }
554       while( z[0]>='0' && z[0]<='9' ){
555         unsigned v = *(z++) - '0';
556         if( i>=LARGEST_INT64/10 ){
557           if( i>LARGEST_INT64/10 ) goto int_as_real;
558           if( z[0]>='0' && z[0]<='9' ) goto int_as_real;
559           if( v==9 ) goto int_as_real;
560           if( v==8 ){
561             if( pNode->u.zJContent[0]=='-' ){
562               sqlite3_result_int64(pCtx, SMALLEST_INT64);
563               goto int_done;
564             }else{
565               goto int_as_real;
566             }
567           }
568         }
569         i = i*10 + v;
570       }
571       if( pNode->u.zJContent[0]=='-' ){ i = -i; }
572       sqlite3_result_int64(pCtx, i);
573       int_done:
574       break;
575       int_as_real: ; /* no break */ deliberate_fall_through
576     }
577     case JSON_REAL: {
578       double r;
579 #ifdef SQLITE_AMALGAMATION
580       const char *z;
581       assert( pNode->eU==1 );
582       z = pNode->u.zJContent;
583       sqlite3AtoF(z, &r, sqlite3Strlen30(z), SQLITE_UTF8);
584 #else
585       assert( pNode->eU==1 );
586       r = strtod(pNode->u.zJContent, 0);
587 #endif
588       sqlite3_result_double(pCtx, r);
589       break;
590     }
591     case JSON_STRING: {
592 #if 0 /* Never happens because JNODE_RAW is only set by json_set(),
593       ** json_insert() and json_replace() and those routines do not
594       ** call jsonReturn() */
595       if( pNode->jnFlags & JNODE_RAW ){
596         assert( pNode->eU==1 );
597         sqlite3_result_text(pCtx, pNode->u.zJContent, pNode->n,
598                             SQLITE_TRANSIENT);
599       }else
600 #endif
601       assert( (pNode->jnFlags & JNODE_RAW)==0 );
602       if( (pNode->jnFlags & JNODE_ESCAPE)==0 ){
603         /* JSON formatted without any backslash-escapes */
604         assert( pNode->eU==1 );
605         sqlite3_result_text(pCtx, pNode->u.zJContent+1, pNode->n-2,
606                             SQLITE_TRANSIENT);
607       }else{
608         /* Translate JSON formatted string into raw text */
609         u32 i;
610         u32 n = pNode->n;
611         const char *z;
612         char *zOut;
613         u32 j;
614         assert( pNode->eU==1 );
615         z = pNode->u.zJContent;
616         zOut = sqlite3_malloc( n+1 );
617         if( zOut==0 ){
618           sqlite3_result_error_nomem(pCtx);
619           break;
620         }
621         for(i=1, j=0; i<n-1; i++){
622           char c = z[i];
623           if( c!='\\' ){
624             zOut[j++] = c;
625           }else{
626             c = z[++i];
627             if( c=='u' ){
628               u32 v = jsonHexToInt4(z+i+1);
629               i += 4;
630               if( v==0 ) break;
631               if( v<=0x7f ){
632                 zOut[j++] = (char)v;
633               }else if( v<=0x7ff ){
634                 zOut[j++] = (char)(0xc0 | (v>>6));
635                 zOut[j++] = 0x80 | (v&0x3f);
636               }else{
637                 u32 vlo;
638                 if( (v&0xfc00)==0xd800
639                   && i<n-6
640                   && z[i+1]=='\\'
641                   && z[i+2]=='u'
642                   && ((vlo = jsonHexToInt4(z+i+3))&0xfc00)==0xdc00
643                 ){
644                   /* We have a surrogate pair */
645                   v = ((v&0x3ff)<<10) + (vlo&0x3ff) + 0x10000;
646                   i += 6;
647                   zOut[j++] = 0xf0 | (v>>18);
648                   zOut[j++] = 0x80 | ((v>>12)&0x3f);
649                   zOut[j++] = 0x80 | ((v>>6)&0x3f);
650                   zOut[j++] = 0x80 | (v&0x3f);
651                 }else{
652                   zOut[j++] = 0xe0 | (v>>12);
653                   zOut[j++] = 0x80 | ((v>>6)&0x3f);
654                   zOut[j++] = 0x80 | (v&0x3f);
655                 }
656               }
657             }else{
658               if( c=='b' ){
659                 c = '\b';
660               }else if( c=='f' ){
661                 c = '\f';
662               }else if( c=='n' ){
663                 c = '\n';
664               }else if( c=='r' ){
665                 c = '\r';
666               }else if( c=='t' ){
667                 c = '\t';
668               }
669               zOut[j++] = c;
670             }
671           }
672         }
673         zOut[j] = 0;
674         sqlite3_result_text(pCtx, zOut, j, sqlite3_free);
675       }
676       break;
677     }
678     case JSON_ARRAY:
679     case JSON_OBJECT: {
680       jsonReturnJson(pNode, pCtx, aReplace);
681       break;
682     }
683   }
684 }
685 
686 /* Forward reference */
687 static int jsonParseAddNode(JsonParse*,u32,u32,const char*);
688 
689 /*
690 ** A macro to hint to the compiler that a function should not be
691 ** inlined.
692 */
693 #if defined(__GNUC__)
694 #  define JSON_NOINLINE  __attribute__((noinline))
695 #elif defined(_MSC_VER) && _MSC_VER>=1310
696 #  define JSON_NOINLINE  __declspec(noinline)
697 #else
698 #  define JSON_NOINLINE
699 #endif
700 
701 
702 static JSON_NOINLINE int jsonParseAddNodeExpand(
703   JsonParse *pParse,        /* Append the node to this object */
704   u32 eType,                /* Node type */
705   u32 n,                    /* Content size or sub-node count */
706   const char *zContent      /* Content */
707 ){
708   u32 nNew;
709   JsonNode *pNew;
710   assert( pParse->nNode>=pParse->nAlloc );
711   if( pParse->oom ) return -1;
712   nNew = pParse->nAlloc*2 + 10;
713   pNew = sqlite3_realloc64(pParse->aNode, sizeof(JsonNode)*nNew);
714   if( pNew==0 ){
715     pParse->oom = 1;
716     return -1;
717   }
718   pParse->nAlloc = nNew;
719   pParse->aNode = pNew;
720   assert( pParse->nNode<pParse->nAlloc );
721   return jsonParseAddNode(pParse, eType, n, zContent);
722 }
723 
724 /*
725 ** Create a new JsonNode instance based on the arguments and append that
726 ** instance to the JsonParse.  Return the index in pParse->aNode[] of the
727 ** new node, or -1 if a memory allocation fails.
728 */
729 static int jsonParseAddNode(
730   JsonParse *pParse,        /* Append the node to this object */
731   u32 eType,                /* Node type */
732   u32 n,                    /* Content size or sub-node count */
733   const char *zContent      /* Content */
734 ){
735   JsonNode *p;
736   if( pParse->aNode==0 || pParse->nNode>=pParse->nAlloc ){
737     return jsonParseAddNodeExpand(pParse, eType, n, zContent);
738   }
739   p = &pParse->aNode[pParse->nNode];
740   p->eType = (u8)eType;
741   p->jnFlags = 0;
742   VVA( p->eU = zContent ? 1 : 0 );
743   p->n = n;
744   p->u.zJContent = zContent;
745   return pParse->nNode++;
746 }
747 
748 /*
749 ** Return true if z[] begins with 4 (or more) hexadecimal digits
750 */
751 static int jsonIs4Hex(const char *z){
752   int i;
753   for(i=0; i<4; i++) if( !sqlite3Isxdigit(z[i]) ) return 0;
754   return 1;
755 }
756 
757 /*
758 ** Parse a single JSON value which begins at pParse->zJson[i].  Return the
759 ** index of the first character past the end of the value parsed.
760 **
761 ** Return negative for a syntax error.  Special cases:  return -2 if the
762 ** first non-whitespace character is '}' and return -3 if the first
763 ** non-whitespace character is ']'.
764 */
765 static int jsonParseValue(JsonParse *pParse, u32 i){
766   char c;
767   u32 j;
768   int iThis;
769   int x;
770   JsonNode *pNode;
771   const char *z = pParse->zJson;
772   while( fast_isspace(z[i]) ){ i++; }
773   if( (c = z[i])=='{' ){
774     /* Parse object */
775     iThis = jsonParseAddNode(pParse, JSON_OBJECT, 0, 0);
776     if( iThis<0 ) return -1;
777     for(j=i+1;;j++){
778       while( fast_isspace(z[j]) ){ j++; }
779       if( ++pParse->iDepth > JSON_MAX_DEPTH ) return -1;
780       x = jsonParseValue(pParse, j);
781       if( x<0 ){
782         pParse->iDepth--;
783         if( x==(-2) && pParse->nNode==(u32)iThis+1 ) return j+1;
784         return -1;
785       }
786       if( pParse->oom ) return -1;
787       pNode = &pParse->aNode[pParse->nNode-1];
788       if( pNode->eType!=JSON_STRING ) return -1;
789       pNode->jnFlags |= JNODE_LABEL;
790       j = x;
791       while( fast_isspace(z[j]) ){ j++; }
792       if( z[j]!=':' ) return -1;
793       j++;
794       x = jsonParseValue(pParse, j);
795       pParse->iDepth--;
796       if( x<0 ) return -1;
797       j = x;
798       while( fast_isspace(z[j]) ){ j++; }
799       c = z[j];
800       if( c==',' ) continue;
801       if( c!='}' ) return -1;
802       break;
803     }
804     pParse->aNode[iThis].n = pParse->nNode - (u32)iThis - 1;
805     return j+1;
806   }else if( c=='[' ){
807     /* Parse array */
808     iThis = jsonParseAddNode(pParse, JSON_ARRAY, 0, 0);
809     if( iThis<0 ) return -1;
810     memset(&pParse->aNode[iThis].u, 0, sizeof(pParse->aNode[iThis].u));
811     for(j=i+1;;j++){
812       while( fast_isspace(z[j]) ){ j++; }
813       if( ++pParse->iDepth > JSON_MAX_DEPTH ) return -1;
814       x = jsonParseValue(pParse, j);
815       pParse->iDepth--;
816       if( x<0 ){
817         if( x==(-3) && pParse->nNode==(u32)iThis+1 ) return j+1;
818         return -1;
819       }
820       j = x;
821       while( fast_isspace(z[j]) ){ j++; }
822       c = z[j];
823       if( c==',' ) continue;
824       if( c!=']' ) return -1;
825       break;
826     }
827     pParse->aNode[iThis].n = pParse->nNode - (u32)iThis - 1;
828     return j+1;
829   }else if( c=='"' ){
830     /* Parse string */
831     u8 jnFlags = 0;
832     j = i+1;
833     for(;;){
834       c = z[j];
835       if( (c & ~0x1f)==0 ){
836         /* Control characters are not allowed in strings */
837         return -1;
838       }
839       if( c=='\\' ){
840         c = z[++j];
841         if( c=='"' || c=='\\' || c=='/' || c=='b' || c=='f'
842            || c=='n' || c=='r' || c=='t'
843            || (c=='u' && jsonIs4Hex(z+j+1)) ){
844           jnFlags = JNODE_ESCAPE;
845         }else{
846           return -1;
847         }
848       }else if( c=='"' ){
849         break;
850       }
851       j++;
852     }
853     jsonParseAddNode(pParse, JSON_STRING, j+1-i, &z[i]);
854     if( !pParse->oom ) pParse->aNode[pParse->nNode-1].jnFlags = jnFlags;
855     return j+1;
856   }else if( c=='n'
857          && strncmp(z+i,"null",4)==0
858          && !sqlite3Isalnum(z[i+4]) ){
859     jsonParseAddNode(pParse, JSON_NULL, 0, 0);
860     return i+4;
861   }else if( c=='t'
862          && strncmp(z+i,"true",4)==0
863          && !sqlite3Isalnum(z[i+4]) ){
864     jsonParseAddNode(pParse, JSON_TRUE, 0, 0);
865     return i+4;
866   }else if( c=='f'
867          && strncmp(z+i,"false",5)==0
868          && !sqlite3Isalnum(z[i+5]) ){
869     jsonParseAddNode(pParse, JSON_FALSE, 0, 0);
870     return i+5;
871   }else if( c=='-' || (c>='0' && c<='9') ){
872     /* Parse number */
873     u8 seenDP = 0;
874     u8 seenE = 0;
875     assert( '-' < '0' );
876     if( c<='0' ){
877       j = c=='-' ? i+1 : i;
878       if( z[j]=='0' && z[j+1]>='0' && z[j+1]<='9' ) return -1;
879     }
880     j = i+1;
881     for(;; j++){
882       c = z[j];
883       if( c>='0' && c<='9' ) continue;
884       if( c=='.' ){
885         if( z[j-1]=='-' ) return -1;
886         if( seenDP ) return -1;
887         seenDP = 1;
888         continue;
889       }
890       if( c=='e' || c=='E' ){
891         if( z[j-1]<'0' ) return -1;
892         if( seenE ) return -1;
893         seenDP = seenE = 1;
894         c = z[j+1];
895         if( c=='+' || c=='-' ){
896           j++;
897           c = z[j+1];
898         }
899         if( c<'0' || c>'9' ) return -1;
900         continue;
901       }
902       break;
903     }
904     if( z[j-1]<'0' ) return -1;
905     jsonParseAddNode(pParse, seenDP ? JSON_REAL : JSON_INT,
906                         j - i, &z[i]);
907     return j;
908   }else if( c=='}' ){
909     return -2;  /* End of {...} */
910   }else if( c==']' ){
911     return -3;  /* End of [...] */
912   }else if( c==0 ){
913     return 0;   /* End of file */
914   }else{
915     return -1;  /* Syntax error */
916   }
917 }
918 
919 /*
920 ** Parse a complete JSON string.  Return 0 on success or non-zero if there
921 ** are any errors.  If an error occurs, free all memory associated with
922 ** pParse.
923 **
924 ** pParse is uninitialized when this routine is called.
925 */
926 static int jsonParse(
927   JsonParse *pParse,           /* Initialize and fill this JsonParse object */
928   sqlite3_context *pCtx,       /* Report errors here */
929   const char *zJson            /* Input JSON text to be parsed */
930 ){
931   int i;
932   memset(pParse, 0, sizeof(*pParse));
933   if( zJson==0 ) return 1;
934   pParse->zJson = zJson;
935   i = jsonParseValue(pParse, 0);
936   if( pParse->oom ) i = -1;
937   if( i>0 ){
938     assert( pParse->iDepth==0 );
939     while( fast_isspace(zJson[i]) ) i++;
940     if( zJson[i] ) i = -1;
941   }
942   if( i<=0 ){
943     if( pCtx!=0 ){
944       if( pParse->oom ){
945         sqlite3_result_error_nomem(pCtx);
946       }else{
947         sqlite3_result_error(pCtx, "malformed JSON", -1);
948       }
949     }
950     jsonParseReset(pParse);
951     return 1;
952   }
953   return 0;
954 }
955 
956 /* Mark node i of pParse as being a child of iParent.  Call recursively
957 ** to fill in all the descendants of node i.
958 */
959 static void jsonParseFillInParentage(JsonParse *pParse, u32 i, u32 iParent){
960   JsonNode *pNode = &pParse->aNode[i];
961   u32 j;
962   pParse->aUp[i] = iParent;
963   switch( pNode->eType ){
964     case JSON_ARRAY: {
965       for(j=1; j<=pNode->n; j += jsonNodeSize(pNode+j)){
966         jsonParseFillInParentage(pParse, i+j, i);
967       }
968       break;
969     }
970     case JSON_OBJECT: {
971       for(j=1; j<=pNode->n; j += jsonNodeSize(pNode+j+1)+1){
972         pParse->aUp[i+j] = i;
973         jsonParseFillInParentage(pParse, i+j+1, i);
974       }
975       break;
976     }
977     default: {
978       break;
979     }
980   }
981 }
982 
983 /*
984 ** Compute the parentage of all nodes in a completed parse.
985 */
986 static int jsonParseFindParents(JsonParse *pParse){
987   u32 *aUp;
988   assert( pParse->aUp==0 );
989   aUp = pParse->aUp = sqlite3_malloc64( sizeof(u32)*pParse->nNode );
990   if( aUp==0 ){
991     pParse->oom = 1;
992     return SQLITE_NOMEM;
993   }
994   jsonParseFillInParentage(pParse, 0, 0);
995   return SQLITE_OK;
996 }
997 
998 /*
999 ** Magic number used for the JSON parse cache in sqlite3_get_auxdata()
1000 */
1001 #define JSON_CACHE_ID  (-429938)  /* First cache entry */
1002 #define JSON_CACHE_SZ  4          /* Max number of cache entries */
1003 
1004 /*
1005 ** Obtain a complete parse of the JSON found in the first argument
1006 ** of the argv array.  Use the sqlite3_get_auxdata() cache for this
1007 ** parse if it is available.  If the cache is not available or if it
1008 ** is no longer valid, parse the JSON again and return the new parse,
1009 ** and also register the new parse so that it will be available for
1010 ** future sqlite3_get_auxdata() calls.
1011 */
1012 static JsonParse *jsonParseCached(
1013   sqlite3_context *pCtx,
1014   sqlite3_value **argv,
1015   sqlite3_context *pErrCtx
1016 ){
1017   const char *zJson = (const char*)sqlite3_value_text(argv[0]);
1018   int nJson = sqlite3_value_bytes(argv[0]);
1019   JsonParse *p;
1020   JsonParse *pMatch = 0;
1021   int iKey;
1022   int iMinKey = 0;
1023   u32 iMinHold = 0xffffffff;
1024   u32 iMaxHold = 0;
1025   if( zJson==0 ) return 0;
1026   for(iKey=0; iKey<JSON_CACHE_SZ; iKey++){
1027     p = (JsonParse*)sqlite3_get_auxdata(pCtx, JSON_CACHE_ID+iKey);
1028     if( p==0 ){
1029       iMinKey = iKey;
1030       break;
1031     }
1032     if( pMatch==0
1033      && p->nJson==nJson
1034      && memcmp(p->zJson,zJson,nJson)==0
1035     ){
1036       p->nErr = 0;
1037       pMatch = p;
1038     }else if( p->iHold<iMinHold ){
1039       iMinHold = p->iHold;
1040       iMinKey = iKey;
1041     }
1042     if( p->iHold>iMaxHold ){
1043       iMaxHold = p->iHold;
1044     }
1045   }
1046   if( pMatch ){
1047     pMatch->nErr = 0;
1048     pMatch->iHold = iMaxHold+1;
1049     return pMatch;
1050   }
1051   p = sqlite3_malloc64( sizeof(*p) + nJson + 1 );
1052   if( p==0 ){
1053     sqlite3_result_error_nomem(pCtx);
1054     return 0;
1055   }
1056   memset(p, 0, sizeof(*p));
1057   p->zJson = (char*)&p[1];
1058   memcpy((char*)p->zJson, zJson, nJson+1);
1059   if( jsonParse(p, pErrCtx, p->zJson) ){
1060     sqlite3_free(p);
1061     return 0;
1062   }
1063   p->nJson = nJson;
1064   p->iHold = iMaxHold+1;
1065   sqlite3_set_auxdata(pCtx, JSON_CACHE_ID+iMinKey, p,
1066                       (void(*)(void*))jsonParseFree);
1067   return (JsonParse*)sqlite3_get_auxdata(pCtx, JSON_CACHE_ID+iMinKey);
1068 }
1069 
1070 /*
1071 ** Compare the OBJECT label at pNode against zKey,nKey.  Return true on
1072 ** a match.
1073 */
1074 static int jsonLabelCompare(JsonNode *pNode, const char *zKey, u32 nKey){
1075   assert( pNode->eU==1 );
1076   if( pNode->jnFlags & JNODE_RAW ){
1077     if( pNode->n!=nKey ) return 0;
1078     return strncmp(pNode->u.zJContent, zKey, nKey)==0;
1079   }else{
1080     if( pNode->n!=nKey+2 ) return 0;
1081     return strncmp(pNode->u.zJContent+1, zKey, nKey)==0;
1082   }
1083 }
1084 
1085 /* forward declaration */
1086 static JsonNode *jsonLookupAppend(JsonParse*,const char*,int*,const char**);
1087 
1088 /*
1089 ** Search along zPath to find the node specified.  Return a pointer
1090 ** to that node, or NULL if zPath is malformed or if there is no such
1091 ** node.
1092 **
1093 ** If pApnd!=0, then try to append new nodes to complete zPath if it is
1094 ** possible to do so and if no existing node corresponds to zPath.  If
1095 ** new nodes are appended *pApnd is set to 1.
1096 */
1097 static JsonNode *jsonLookupStep(
1098   JsonParse *pParse,      /* The JSON to search */
1099   u32 iRoot,              /* Begin the search at this node */
1100   const char *zPath,      /* The path to search */
1101   int *pApnd,             /* Append nodes to complete path if not NULL */
1102   const char **pzErr      /* Make *pzErr point to any syntax error in zPath */
1103 ){
1104   u32 i, j, nKey;
1105   const char *zKey;
1106   JsonNode *pRoot = &pParse->aNode[iRoot];
1107   if( zPath[0]==0 ) return pRoot;
1108   if( pRoot->jnFlags & JNODE_REPLACE ) return 0;
1109   if( zPath[0]=='.' ){
1110     if( pRoot->eType!=JSON_OBJECT ) return 0;
1111     zPath++;
1112     if( zPath[0]=='"' ){
1113       zKey = zPath + 1;
1114       for(i=1; zPath[i] && zPath[i]!='"'; i++){}
1115       nKey = i-1;
1116       if( zPath[i] ){
1117         i++;
1118       }else{
1119         *pzErr = zPath;
1120         return 0;
1121       }
1122     }else{
1123       zKey = zPath;
1124       for(i=0; zPath[i] && zPath[i]!='.' && zPath[i]!='['; i++){}
1125       nKey = i;
1126     }
1127     if( nKey==0 ){
1128       *pzErr = zPath;
1129       return 0;
1130     }
1131     j = 1;
1132     for(;;){
1133       while( j<=pRoot->n ){
1134         if( jsonLabelCompare(pRoot+j, zKey, nKey) ){
1135           return jsonLookupStep(pParse, iRoot+j+1, &zPath[i], pApnd, pzErr);
1136         }
1137         j++;
1138         j += jsonNodeSize(&pRoot[j]);
1139       }
1140       if( (pRoot->jnFlags & JNODE_APPEND)==0 ) break;
1141       assert( pRoot->eU==2 );
1142       iRoot += pRoot->u.iAppend;
1143       pRoot = &pParse->aNode[iRoot];
1144       j = 1;
1145     }
1146     if( pApnd ){
1147       u32 iStart, iLabel;
1148       JsonNode *pNode;
1149       iStart = jsonParseAddNode(pParse, JSON_OBJECT, 2, 0);
1150       iLabel = jsonParseAddNode(pParse, JSON_STRING, nKey, zKey);
1151       zPath += i;
1152       pNode = jsonLookupAppend(pParse, zPath, pApnd, pzErr);
1153       if( pParse->oom ) return 0;
1154       if( pNode ){
1155         pRoot = &pParse->aNode[iRoot];
1156         assert( pRoot->eU==0 );
1157         pRoot->u.iAppend = iStart - iRoot;
1158         pRoot->jnFlags |= JNODE_APPEND;
1159         VVA( pRoot->eU = 2 );
1160         pParse->aNode[iLabel].jnFlags |= JNODE_RAW;
1161       }
1162       return pNode;
1163     }
1164   }else if( zPath[0]=='[' ){
1165     i = 0;
1166     j = 1;
1167     while( sqlite3Isdigit(zPath[j]) ){
1168       i = i*10 + zPath[j] - '0';
1169       j++;
1170     }
1171     if( j<2 || zPath[j]!=']' ){
1172       if( zPath[1]=='#' ){
1173         JsonNode *pBase = pRoot;
1174         int iBase = iRoot;
1175         if( pRoot->eType!=JSON_ARRAY ) return 0;
1176         for(;;){
1177           while( j<=pBase->n ){
1178             if( (pBase[j].jnFlags & JNODE_REMOVE)==0 ) i++;
1179             j += jsonNodeSize(&pBase[j]);
1180           }
1181           if( (pBase->jnFlags & JNODE_APPEND)==0 ) break;
1182           assert( pBase->eU==2 );
1183           iBase += pBase->u.iAppend;
1184           pBase = &pParse->aNode[iBase];
1185           j = 1;
1186         }
1187         j = 2;
1188         if( zPath[2]=='-' && sqlite3Isdigit(zPath[3]) ){
1189           unsigned int x = 0;
1190           j = 3;
1191           do{
1192             x = x*10 + zPath[j] - '0';
1193             j++;
1194           }while( sqlite3Isdigit(zPath[j]) );
1195           if( x>i ) return 0;
1196           i -= x;
1197         }
1198         if( zPath[j]!=']' ){
1199           *pzErr = zPath;
1200           return 0;
1201         }
1202       }else{
1203         *pzErr = zPath;
1204         return 0;
1205       }
1206     }
1207     if( pRoot->eType!=JSON_ARRAY ) return 0;
1208     zPath += j + 1;
1209     j = 1;
1210     for(;;){
1211       while( j<=pRoot->n && (i>0 || (pRoot[j].jnFlags & JNODE_REMOVE)!=0) ){
1212         if( (pRoot[j].jnFlags & JNODE_REMOVE)==0 ) i--;
1213         j += jsonNodeSize(&pRoot[j]);
1214       }
1215       if( (pRoot->jnFlags & JNODE_APPEND)==0 ) break;
1216       assert( pRoot->eU==2 );
1217       iRoot += pRoot->u.iAppend;
1218       pRoot = &pParse->aNode[iRoot];
1219       j = 1;
1220     }
1221     if( j<=pRoot->n ){
1222       return jsonLookupStep(pParse, iRoot+j, zPath, pApnd, pzErr);
1223     }
1224     if( i==0 && pApnd ){
1225       u32 iStart;
1226       JsonNode *pNode;
1227       iStart = jsonParseAddNode(pParse, JSON_ARRAY, 1, 0);
1228       pNode = jsonLookupAppend(pParse, zPath, pApnd, pzErr);
1229       if( pParse->oom ) return 0;
1230       if( pNode ){
1231         pRoot = &pParse->aNode[iRoot];
1232         assert( pRoot->eU==0 );
1233         pRoot->u.iAppend = iStart - iRoot;
1234         pRoot->jnFlags |= JNODE_APPEND;
1235         VVA( pRoot->eU = 2 );
1236       }
1237       return pNode;
1238     }
1239   }else{
1240     *pzErr = zPath;
1241   }
1242   return 0;
1243 }
1244 
1245 /*
1246 ** Append content to pParse that will complete zPath.  Return a pointer
1247 ** to the inserted node, or return NULL if the append fails.
1248 */
1249 static JsonNode *jsonLookupAppend(
1250   JsonParse *pParse,     /* Append content to the JSON parse */
1251   const char *zPath,     /* Description of content to append */
1252   int *pApnd,            /* Set this flag to 1 */
1253   const char **pzErr     /* Make this point to any syntax error */
1254 ){
1255   *pApnd = 1;
1256   if( zPath[0]==0 ){
1257     jsonParseAddNode(pParse, JSON_NULL, 0, 0);
1258     return pParse->oom ? 0 : &pParse->aNode[pParse->nNode-1];
1259   }
1260   if( zPath[0]=='.' ){
1261     jsonParseAddNode(pParse, JSON_OBJECT, 0, 0);
1262   }else if( strncmp(zPath,"[0]",3)==0 ){
1263     jsonParseAddNode(pParse, JSON_ARRAY, 0, 0);
1264   }else{
1265     return 0;
1266   }
1267   if( pParse->oom ) return 0;
1268   return jsonLookupStep(pParse, pParse->nNode-1, zPath, pApnd, pzErr);
1269 }
1270 
1271 /*
1272 ** Return the text of a syntax error message on a JSON path.  Space is
1273 ** obtained from sqlite3_malloc().
1274 */
1275 static char *jsonPathSyntaxError(const char *zErr){
1276   return sqlite3_mprintf("JSON path error near '%q'", zErr);
1277 }
1278 
1279 /*
1280 ** Do a node lookup using zPath.  Return a pointer to the node on success.
1281 ** Return NULL if not found or if there is an error.
1282 **
1283 ** On an error, write an error message into pCtx and increment the
1284 ** pParse->nErr counter.
1285 **
1286 ** If pApnd!=NULL then try to append missing nodes and set *pApnd = 1 if
1287 ** nodes are appended.
1288 */
1289 static JsonNode *jsonLookup(
1290   JsonParse *pParse,      /* The JSON to search */
1291   const char *zPath,      /* The path to search */
1292   int *pApnd,             /* Append nodes to complete path if not NULL */
1293   sqlite3_context *pCtx   /* Report errors here, if not NULL */
1294 ){
1295   const char *zErr = 0;
1296   JsonNode *pNode = 0;
1297   char *zMsg;
1298 
1299   if( zPath==0 ) return 0;
1300   if( zPath[0]!='$' ){
1301     zErr = zPath;
1302     goto lookup_err;
1303   }
1304   zPath++;
1305   pNode = jsonLookupStep(pParse, 0, zPath, pApnd, &zErr);
1306   if( zErr==0 ) return pNode;
1307 
1308 lookup_err:
1309   pParse->nErr++;
1310   assert( zErr!=0 && pCtx!=0 );
1311   zMsg = jsonPathSyntaxError(zErr);
1312   if( zMsg ){
1313     sqlite3_result_error(pCtx, zMsg, -1);
1314     sqlite3_free(zMsg);
1315   }else{
1316     sqlite3_result_error_nomem(pCtx);
1317   }
1318   return 0;
1319 }
1320 
1321 
1322 /*
1323 ** Report the wrong number of arguments for json_insert(), json_replace()
1324 ** or json_set().
1325 */
1326 static void jsonWrongNumArgs(
1327   sqlite3_context *pCtx,
1328   const char *zFuncName
1329 ){
1330   char *zMsg = sqlite3_mprintf("json_%s() needs an odd number of arguments",
1331                                zFuncName);
1332   sqlite3_result_error(pCtx, zMsg, -1);
1333   sqlite3_free(zMsg);
1334 }
1335 
1336 /*
1337 ** Mark all NULL entries in the Object passed in as JNODE_REMOVE.
1338 */
1339 static void jsonRemoveAllNulls(JsonNode *pNode){
1340   int i, n;
1341   assert( pNode->eType==JSON_OBJECT );
1342   n = pNode->n;
1343   for(i=2; i<=n; i += jsonNodeSize(&pNode[i])+1){
1344     switch( pNode[i].eType ){
1345       case JSON_NULL:
1346         pNode[i].jnFlags |= JNODE_REMOVE;
1347         break;
1348       case JSON_OBJECT:
1349         jsonRemoveAllNulls(&pNode[i]);
1350         break;
1351     }
1352   }
1353 }
1354 
1355 
1356 /****************************************************************************
1357 ** SQL functions used for testing and debugging
1358 ****************************************************************************/
1359 
1360 #ifdef SQLITE_DEBUG
1361 /*
1362 ** The json_parse(JSON) function returns a string which describes
1363 ** a parse of the JSON provided.  Or it returns NULL if JSON is not
1364 ** well-formed.
1365 */
1366 static void jsonParseFunc(
1367   sqlite3_context *ctx,
1368   int argc,
1369   sqlite3_value **argv
1370 ){
1371   JsonString s;       /* Output string - not real JSON */
1372   JsonParse x;        /* The parse */
1373   u32 i;
1374 
1375   assert( argc==1 );
1376   if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return;
1377   jsonParseFindParents(&x);
1378   jsonInit(&s, ctx);
1379   for(i=0; i<x.nNode; i++){
1380     const char *zType;
1381     if( x.aNode[i].jnFlags & JNODE_LABEL ){
1382       assert( x.aNode[i].eType==JSON_STRING );
1383       zType = "label";
1384     }else{
1385       zType = jsonType[x.aNode[i].eType];
1386     }
1387     jsonPrintf(100, &s,"node %3u: %7s n=%-4d up=%-4d",
1388                i, zType, x.aNode[i].n, x.aUp[i]);
1389     assert( x.aNode[i].eU==0 || x.aNode[i].eU==1 );
1390     if( x.aNode[i].u.zJContent!=0 ){
1391       assert( x.aNode[i].eU==1 );
1392       jsonAppendRaw(&s, " ", 1);
1393       jsonAppendRaw(&s, x.aNode[i].u.zJContent, x.aNode[i].n);
1394     }else{
1395       assert( x.aNode[i].eU==0 );
1396     }
1397     jsonAppendRaw(&s, "\n", 1);
1398   }
1399   jsonParseReset(&x);
1400   jsonResult(&s);
1401 }
1402 
1403 /*
1404 ** The json_test1(JSON) function return true (1) if the input is JSON
1405 ** text generated by another json function.  It returns (0) if the input
1406 ** is not known to be JSON.
1407 */
1408 static void jsonTest1Func(
1409   sqlite3_context *ctx,
1410   int argc,
1411   sqlite3_value **argv
1412 ){
1413   UNUSED_PARAMETER(argc);
1414   sqlite3_result_int(ctx, sqlite3_value_subtype(argv[0])==JSON_SUBTYPE);
1415 }
1416 #endif /* SQLITE_DEBUG */
1417 
1418 /****************************************************************************
1419 ** Scalar SQL function implementations
1420 ****************************************************************************/
1421 
1422 /*
1423 ** Implementation of the json_QUOTE(VALUE) function.  Return a JSON value
1424 ** corresponding to the SQL value input.  Mostly this means putting
1425 ** double-quotes around strings and returning the unquoted string "null"
1426 ** when given a NULL input.
1427 */
1428 static void jsonQuoteFunc(
1429   sqlite3_context *ctx,
1430   int argc,
1431   sqlite3_value **argv
1432 ){
1433   JsonString jx;
1434   UNUSED_PARAMETER(argc);
1435 
1436   jsonInit(&jx, ctx);
1437   jsonAppendValue(&jx, argv[0]);
1438   jsonResult(&jx);
1439   sqlite3_result_subtype(ctx, JSON_SUBTYPE);
1440 }
1441 
1442 /*
1443 ** Implementation of the json_array(VALUE,...) function.  Return a JSON
1444 ** array that contains all values given in arguments.  Or if any argument
1445 ** is a BLOB, throw an error.
1446 */
1447 static void jsonArrayFunc(
1448   sqlite3_context *ctx,
1449   int argc,
1450   sqlite3_value **argv
1451 ){
1452   int i;
1453   JsonString jx;
1454 
1455   jsonInit(&jx, ctx);
1456   jsonAppendChar(&jx, '[');
1457   for(i=0; i<argc; i++){
1458     jsonAppendSeparator(&jx);
1459     jsonAppendValue(&jx, argv[i]);
1460   }
1461   jsonAppendChar(&jx, ']');
1462   jsonResult(&jx);
1463   sqlite3_result_subtype(ctx, JSON_SUBTYPE);
1464 }
1465 
1466 
1467 /*
1468 ** json_array_length(JSON)
1469 ** json_array_length(JSON, PATH)
1470 **
1471 ** Return the number of elements in the top-level JSON array.
1472 ** Return 0 if the input is not a well-formed JSON array.
1473 */
1474 static void jsonArrayLengthFunc(
1475   sqlite3_context *ctx,
1476   int argc,
1477   sqlite3_value **argv
1478 ){
1479   JsonParse *p;          /* The parse */
1480   sqlite3_int64 n = 0;
1481   u32 i;
1482   JsonNode *pNode;
1483 
1484   p = jsonParseCached(ctx, argv, ctx);
1485   if( p==0 ) return;
1486   assert( p->nNode );
1487   if( argc==2 ){
1488     const char *zPath = (const char*)sqlite3_value_text(argv[1]);
1489     pNode = jsonLookup(p, zPath, 0, ctx);
1490   }else{
1491     pNode = p->aNode;
1492   }
1493   if( pNode==0 ){
1494     return;
1495   }
1496   if( pNode->eType==JSON_ARRAY ){
1497     assert( (pNode->jnFlags & JNODE_APPEND)==0 );
1498     for(i=1; i<=pNode->n; n++){
1499       i += jsonNodeSize(&pNode[i]);
1500     }
1501   }
1502   sqlite3_result_int64(ctx, n);
1503 }
1504 
1505 /*
1506 ** Bit values for the flags passed into jsonExtractFunc() or
1507 ** jsonSetFunc() via the user-data value.
1508 */
1509 #define JSON_JSON      0x01        /* Result is always JSON */
1510 #define JSON_SQL       0x02        /* Result is always SQL */
1511 #define JSON_ABPATH    0x03        /* Allow abbreviated JSON path specs */
1512 #define JSON_ISSET     0x04        /* json_set(), not json_insert() */
1513 
1514 /*
1515 ** json_extract(JSON, PATH, ...)
1516 ** "->"(JSON,PATH)
1517 ** "->>"(JSON,PATH)
1518 **
1519 ** Return the element described by PATH.  Return NULL if that PATH element
1520 ** is not found.
1521 **
1522 ** If JSON_JSON is set or if more that one PATH argument is supplied then
1523 ** always return a JSON representation of the result.  If JSON_SQL is set,
1524 ** then always return an SQL representation of the result.  If neither flag
1525 ** is present and argc==2, then return JSON for objects and arrays and SQL
1526 ** for all other values.
1527 **
1528 ** When multiple PATH arguments are supplied, the result is a JSON array
1529 ** containing the result of each PATH.
1530 **
1531 ** Abbreviated JSON path expressions are allows if JSON_ABPATH, for
1532 ** compatibility with PG.
1533 */
1534 static void jsonExtractFunc(
1535   sqlite3_context *ctx,
1536   int argc,
1537   sqlite3_value **argv
1538 ){
1539   JsonParse *p;          /* The parse */
1540   JsonNode *pNode;
1541   const char *zPath;
1542   int flags = SQLITE_PTR_TO_INT(sqlite3_user_data(ctx));
1543   JsonString jx;
1544 
1545   if( argc<2 ) return;
1546   p = jsonParseCached(ctx, argv, ctx);
1547   if( p==0 ) return;
1548   if( argc==2 ){
1549     /* With a single PATH argument */
1550     zPath = (const char*)sqlite3_value_text(argv[1]);
1551     if( zPath==0 ) return;
1552     if( zPath[0]!='$' && (flags & JSON_ABPATH)!=0 ){
1553       /* The -> and ->> operators accept abbreviated PATH arguments.  This
1554       ** is mostly for compatibility with PostgreSQL, but also for convenience.
1555       **
1556       **     NUMBER   ==>  $[NUMBER]     // PG compatible
1557       **     LABEL    ==>  $.LABEL       // PG compatible
1558       **     [NUMBER] ==>  $[NUMBER]     // Not PG.  Purely for convenience
1559       */
1560       jsonInit(&jx, ctx);
1561       if( sqlite3Isdigit(zPath[0]) ){
1562         jsonAppendRaw(&jx, "$[", 2);
1563         jsonAppendRaw(&jx, zPath, (int)strlen(zPath));
1564         jsonAppendRaw(&jx, "]", 2);
1565       }else{
1566         jsonAppendRaw(&jx, "$.", 1 + (zPath[0]!='['));
1567         jsonAppendRaw(&jx, zPath, (int)strlen(zPath));
1568         jsonAppendChar(&jx, 0);
1569       }
1570       if( jx.bErr==0 ){
1571         pNode = jsonLookup(p, jx.zBuf, 0, ctx);
1572         if( pNode==0 ){
1573           /* No-op.  jsonLookup will have left an error for us */
1574         }else if( flags & JSON_JSON ){
1575           jsonReturnJson(pNode, ctx, 0);
1576         }else{
1577           jsonReturn(pNode, ctx, 0);
1578           sqlite3_result_subtype(ctx, 0);
1579         }
1580       }
1581       jsonReset(&jx);
1582     }else{
1583       pNode = jsonLookup(p, zPath, 0, ctx);
1584       if( p->nErr==0 && pNode ) jsonReturn(pNode, ctx, 0);
1585     }
1586   }else{
1587     /* Two or more PATH arguments results in a JSON array with each
1588     ** element of the array being the value selected by one of the PATHs */
1589     int i;
1590     jsonInit(&jx, ctx);
1591     jsonAppendChar(&jx, '[');
1592     for(i=1; i<argc; i++){
1593       zPath = (const char*)sqlite3_value_text(argv[i]);
1594       pNode = jsonLookup(p, zPath, 0, ctx);
1595       if( p->nErr ) break;
1596       jsonAppendSeparator(&jx);
1597       if( pNode ){
1598         jsonRenderNode(pNode, &jx, 0);
1599       }else{
1600         jsonAppendRaw(&jx, "null", 4);
1601       }
1602     }
1603     if( i==argc ){
1604       jsonAppendChar(&jx, ']');
1605       jsonResult(&jx);
1606       sqlite3_result_subtype(ctx, JSON_SUBTYPE);
1607     }
1608     jsonReset(&jx);
1609   }
1610 }
1611 
1612 /* This is the RFC 7396 MergePatch algorithm.
1613 */
1614 static JsonNode *jsonMergePatch(
1615   JsonParse *pParse,   /* The JSON parser that contains the TARGET */
1616   u32 iTarget,         /* Node of the TARGET in pParse */
1617   JsonNode *pPatch     /* The PATCH */
1618 ){
1619   u32 i, j;
1620   u32 iRoot;
1621   JsonNode *pTarget;
1622   if( pPatch->eType!=JSON_OBJECT ){
1623     return pPatch;
1624   }
1625   assert( iTarget>=0 && iTarget<pParse->nNode );
1626   pTarget = &pParse->aNode[iTarget];
1627   assert( (pPatch->jnFlags & JNODE_APPEND)==0 );
1628   if( pTarget->eType!=JSON_OBJECT ){
1629     jsonRemoveAllNulls(pPatch);
1630     return pPatch;
1631   }
1632   iRoot = iTarget;
1633   for(i=1; i<pPatch->n; i += jsonNodeSize(&pPatch[i+1])+1){
1634     u32 nKey;
1635     const char *zKey;
1636     assert( pPatch[i].eType==JSON_STRING );
1637     assert( pPatch[i].jnFlags & JNODE_LABEL );
1638     assert( pPatch[i].eU==1 );
1639     nKey = pPatch[i].n;
1640     zKey = pPatch[i].u.zJContent;
1641     assert( (pPatch[i].jnFlags & JNODE_RAW)==0 );
1642     for(j=1; j<pTarget->n; j += jsonNodeSize(&pTarget[j+1])+1 ){
1643       assert( pTarget[j].eType==JSON_STRING );
1644       assert( pTarget[j].jnFlags & JNODE_LABEL );
1645       assert( (pPatch[i].jnFlags & JNODE_RAW)==0 );
1646       if( pTarget[j].n==nKey && strncmp(pTarget[j].u.zJContent,zKey,nKey)==0 ){
1647         if( pTarget[j+1].jnFlags & (JNODE_REMOVE|JNODE_PATCH) ) break;
1648         if( pPatch[i+1].eType==JSON_NULL ){
1649           pTarget[j+1].jnFlags |= JNODE_REMOVE;
1650         }else{
1651           JsonNode *pNew = jsonMergePatch(pParse, iTarget+j+1, &pPatch[i+1]);
1652           if( pNew==0 ) return 0;
1653           pTarget = &pParse->aNode[iTarget];
1654           if( pNew!=&pTarget[j+1] ){
1655             assert( pTarget[j+1].eU==0
1656                  || pTarget[j+1].eU==1
1657                  || pTarget[j+1].eU==2 );
1658             testcase( pTarget[j+1].eU==1 );
1659             testcase( pTarget[j+1].eU==2 );
1660             VVA( pTarget[j+1].eU = 5 );
1661             pTarget[j+1].u.pPatch = pNew;
1662             pTarget[j+1].jnFlags |= JNODE_PATCH;
1663           }
1664         }
1665         break;
1666       }
1667     }
1668     if( j>=pTarget->n && pPatch[i+1].eType!=JSON_NULL ){
1669       int iStart, iPatch;
1670       iStart = jsonParseAddNode(pParse, JSON_OBJECT, 2, 0);
1671       jsonParseAddNode(pParse, JSON_STRING, nKey, zKey);
1672       iPatch = jsonParseAddNode(pParse, JSON_TRUE, 0, 0);
1673       if( pParse->oom ) return 0;
1674       jsonRemoveAllNulls(pPatch);
1675       pTarget = &pParse->aNode[iTarget];
1676       assert( pParse->aNode[iRoot].eU==0 || pParse->aNode[iRoot].eU==2 );
1677       testcase( pParse->aNode[iRoot].eU==2 );
1678       pParse->aNode[iRoot].jnFlags |= JNODE_APPEND;
1679       VVA( pParse->aNode[iRoot].eU = 2 );
1680       pParse->aNode[iRoot].u.iAppend = iStart - iRoot;
1681       iRoot = iStart;
1682       assert( pParse->aNode[iPatch].eU==0 );
1683       VVA( pParse->aNode[iPatch].eU = 5 );
1684       pParse->aNode[iPatch].jnFlags |= JNODE_PATCH;
1685       pParse->aNode[iPatch].u.pPatch = &pPatch[i+1];
1686     }
1687   }
1688   return pTarget;
1689 }
1690 
1691 /*
1692 ** Implementation of the json_mergepatch(JSON1,JSON2) function.  Return a JSON
1693 ** object that is the result of running the RFC 7396 MergePatch() algorithm
1694 ** on the two arguments.
1695 */
1696 static void jsonPatchFunc(
1697   sqlite3_context *ctx,
1698   int argc,
1699   sqlite3_value **argv
1700 ){
1701   JsonParse x;     /* The JSON that is being patched */
1702   JsonParse y;     /* The patch */
1703   JsonNode *pResult;   /* The result of the merge */
1704 
1705   UNUSED_PARAMETER(argc);
1706   if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return;
1707   if( jsonParse(&y, ctx, (const char*)sqlite3_value_text(argv[1])) ){
1708     jsonParseReset(&x);
1709     return;
1710   }
1711   pResult = jsonMergePatch(&x, 0, y.aNode);
1712   assert( pResult!=0 || x.oom );
1713   if( pResult ){
1714     jsonReturnJson(pResult, ctx, 0);
1715   }else{
1716     sqlite3_result_error_nomem(ctx);
1717   }
1718   jsonParseReset(&x);
1719   jsonParseReset(&y);
1720 }
1721 
1722 
1723 /*
1724 ** Implementation of the json_object(NAME,VALUE,...) function.  Return a JSON
1725 ** object that contains all name/value given in arguments.  Or if any name
1726 ** is not a string or if any value is a BLOB, throw an error.
1727 */
1728 static void jsonObjectFunc(
1729   sqlite3_context *ctx,
1730   int argc,
1731   sqlite3_value **argv
1732 ){
1733   int i;
1734   JsonString jx;
1735   const char *z;
1736   u32 n;
1737 
1738   if( argc&1 ){
1739     sqlite3_result_error(ctx, "json_object() requires an even number "
1740                                   "of arguments", -1);
1741     return;
1742   }
1743   jsonInit(&jx, ctx);
1744   jsonAppendChar(&jx, '{');
1745   for(i=0; i<argc; i+=2){
1746     if( sqlite3_value_type(argv[i])!=SQLITE_TEXT ){
1747       sqlite3_result_error(ctx, "json_object() labels must be TEXT", -1);
1748       jsonReset(&jx);
1749       return;
1750     }
1751     jsonAppendSeparator(&jx);
1752     z = (const char*)sqlite3_value_text(argv[i]);
1753     n = (u32)sqlite3_value_bytes(argv[i]);
1754     jsonAppendString(&jx, z, n);
1755     jsonAppendChar(&jx, ':');
1756     jsonAppendValue(&jx, argv[i+1]);
1757   }
1758   jsonAppendChar(&jx, '}');
1759   jsonResult(&jx);
1760   sqlite3_result_subtype(ctx, JSON_SUBTYPE);
1761 }
1762 
1763 
1764 /*
1765 ** json_remove(JSON, PATH, ...)
1766 **
1767 ** Remove the named elements from JSON and return the result.  malformed
1768 ** JSON or PATH arguments result in an error.
1769 */
1770 static void jsonRemoveFunc(
1771   sqlite3_context *ctx,
1772   int argc,
1773   sqlite3_value **argv
1774 ){
1775   JsonParse x;          /* The parse */
1776   JsonNode *pNode;
1777   const char *zPath;
1778   u32 i;
1779 
1780   if( argc<1 ) return;
1781   if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return;
1782   assert( x.nNode );
1783   for(i=1; i<(u32)argc; i++){
1784     zPath = (const char*)sqlite3_value_text(argv[i]);
1785     if( zPath==0 ) goto remove_done;
1786     pNode = jsonLookup(&x, zPath, 0, ctx);
1787     if( x.nErr ) goto remove_done;
1788     if( pNode ) pNode->jnFlags |= JNODE_REMOVE;
1789   }
1790   if( (x.aNode[0].jnFlags & JNODE_REMOVE)==0 ){
1791     jsonReturnJson(x.aNode, ctx, 0);
1792   }
1793 remove_done:
1794   jsonParseReset(&x);
1795 }
1796 
1797 /*
1798 ** json_replace(JSON, PATH, VALUE, ...)
1799 **
1800 ** Replace the value at PATH with VALUE.  If PATH does not already exist,
1801 ** this routine is a no-op.  If JSON or PATH is malformed, throw an error.
1802 */
1803 static void jsonReplaceFunc(
1804   sqlite3_context *ctx,
1805   int argc,
1806   sqlite3_value **argv
1807 ){
1808   JsonParse x;          /* The parse */
1809   JsonNode *pNode;
1810   const char *zPath;
1811   u32 i;
1812 
1813   if( argc<1 ) return;
1814   if( (argc&1)==0 ) {
1815     jsonWrongNumArgs(ctx, "replace");
1816     return;
1817   }
1818   if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return;
1819   assert( x.nNode );
1820   for(i=1; i<(u32)argc; i+=2){
1821     zPath = (const char*)sqlite3_value_text(argv[i]);
1822     pNode = jsonLookup(&x, zPath, 0, ctx);
1823     if( x.nErr ) goto replace_err;
1824     if( pNode ){
1825       assert( pNode->eU==0 || pNode->eU==1 || pNode->eU==4 );
1826       testcase( pNode->eU!=0 && pNode->eU!=1 );
1827       pNode->jnFlags |= (u8)JNODE_REPLACE;
1828       VVA( pNode->eU =  4 );
1829       pNode->u.iReplace = i + 1;
1830     }
1831   }
1832   if( x.aNode[0].jnFlags & JNODE_REPLACE ){
1833     assert( x.aNode[0].eU==4 );
1834     sqlite3_result_value(ctx, argv[x.aNode[0].u.iReplace]);
1835   }else{
1836     jsonReturnJson(x.aNode, ctx, argv);
1837   }
1838 replace_err:
1839   jsonParseReset(&x);
1840 }
1841 
1842 
1843 /*
1844 ** json_set(JSON, PATH, VALUE, ...)
1845 **
1846 ** Set the value at PATH to VALUE.  Create the PATH if it does not already
1847 ** exist.  Overwrite existing values that do exist.
1848 ** If JSON or PATH is malformed, throw an error.
1849 **
1850 ** json_insert(JSON, PATH, VALUE, ...)
1851 **
1852 ** Create PATH and initialize it to VALUE.  If PATH already exists, this
1853 ** routine is a no-op.  If JSON or PATH is malformed, throw an error.
1854 */
1855 static void jsonSetFunc(
1856   sqlite3_context *ctx,
1857   int argc,
1858   sqlite3_value **argv
1859 ){
1860   JsonParse x;          /* The parse */
1861   JsonNode *pNode;
1862   const char *zPath;
1863   u32 i;
1864   int bApnd;
1865   int bIsSet = sqlite3_user_data(ctx)!=0;
1866 
1867   if( argc<1 ) return;
1868   if( (argc&1)==0 ) {
1869     jsonWrongNumArgs(ctx, bIsSet ? "set" : "insert");
1870     return;
1871   }
1872   if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return;
1873   assert( x.nNode );
1874   for(i=1; i<(u32)argc; i+=2){
1875     zPath = (const char*)sqlite3_value_text(argv[i]);
1876     bApnd = 0;
1877     pNode = jsonLookup(&x, zPath, &bApnd, ctx);
1878     if( x.oom ){
1879       sqlite3_result_error_nomem(ctx);
1880       goto jsonSetDone;
1881     }else if( x.nErr ){
1882       goto jsonSetDone;
1883     }else if( pNode && (bApnd || bIsSet) ){
1884       testcase( pNode->eU!=0 && pNode->eU!=1 && pNode->eU!=4 );
1885       assert( pNode->eU!=3 || pNode->eU!=5 );
1886       VVA( pNode->eU = 4 );
1887       pNode->jnFlags |= (u8)JNODE_REPLACE;
1888       pNode->u.iReplace = i + 1;
1889     }
1890   }
1891   if( x.aNode[0].jnFlags & JNODE_REPLACE ){
1892     assert( x.aNode[0].eU==4 );
1893     sqlite3_result_value(ctx, argv[x.aNode[0].u.iReplace]);
1894   }else{
1895     jsonReturnJson(x.aNode, ctx, argv);
1896   }
1897 jsonSetDone:
1898   jsonParseReset(&x);
1899 }
1900 
1901 /*
1902 ** json_type(JSON)
1903 ** json_ntype(JSON)
1904 ** json_type(JSON, PATH)
1905 **
1906 ** Return the top-level "type" of a JSON string.  json_type() raises an
1907 ** error if either the JSON or PATH inputs are not well-formed.  json_ntype()
1908 ** works like the one-argument version of json_type() except that it
1909 ** returns NULL if the JSON argument is not well-formed.
1910 */
1911 static void jsonTypeFunc(
1912   sqlite3_context *ctx,
1913   int argc,
1914   sqlite3_value **argv
1915 ){
1916   JsonParse *p;          /* The parse */
1917   const char *zPath;
1918   JsonNode *pNode;
1919 
1920   p = jsonParseCached(ctx, argv, sqlite3_user_data(ctx)!=0 ? 0 : ctx);
1921   if( p==0 ) return;
1922   if( argc==2 ){
1923     zPath = (const char*)sqlite3_value_text(argv[1]);
1924     pNode = jsonLookup(p, zPath, 0, ctx);
1925   }else{
1926     pNode = p->aNode;
1927   }
1928   if( pNode ){
1929     sqlite3_result_text(ctx, jsonType[pNode->eType], -1, SQLITE_STATIC);
1930   }
1931 }
1932 
1933 /*
1934 ** json_valid(JSON)
1935 **
1936 ** Return 1 if JSON is a well-formed JSON string according to RFC-7159.
1937 ** Return 0 otherwise.
1938 */
1939 static void jsonValidFunc(
1940   sqlite3_context *ctx,
1941   int argc,
1942   sqlite3_value **argv
1943 ){
1944   JsonParse *p;          /* The parse */
1945   UNUSED_PARAMETER(argc);
1946   p = jsonParseCached(ctx, argv, 0);
1947   sqlite3_result_int(ctx, p!=0);
1948 }
1949 
1950 
1951 /****************************************************************************
1952 ** Aggregate SQL function implementations
1953 ****************************************************************************/
1954 /*
1955 ** json_group_array(VALUE)
1956 **
1957 ** Return a JSON array composed of all values in the aggregate.
1958 */
1959 static void jsonArrayStep(
1960   sqlite3_context *ctx,
1961   int argc,
1962   sqlite3_value **argv
1963 ){
1964   JsonString *pStr;
1965   UNUSED_PARAMETER(argc);
1966   pStr = (JsonString*)sqlite3_aggregate_context(ctx, sizeof(*pStr));
1967   if( pStr ){
1968     if( pStr->zBuf==0 ){
1969       jsonInit(pStr, ctx);
1970       jsonAppendChar(pStr, '[');
1971     }else if( pStr->nUsed>1 ){
1972       jsonAppendChar(pStr, ',');
1973     }
1974     pStr->pCtx = ctx;
1975     jsonAppendValue(pStr, argv[0]);
1976   }
1977 }
1978 static void jsonArrayCompute(sqlite3_context *ctx, int isFinal){
1979   JsonString *pStr;
1980   pStr = (JsonString*)sqlite3_aggregate_context(ctx, 0);
1981   if( pStr ){
1982     pStr->pCtx = ctx;
1983     jsonAppendChar(pStr, ']');
1984     if( pStr->bErr ){
1985       if( pStr->bErr==1 ) sqlite3_result_error_nomem(ctx);
1986       assert( pStr->bStatic );
1987     }else if( isFinal ){
1988       sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed,
1989                           pStr->bStatic ? SQLITE_TRANSIENT : sqlite3_free);
1990       pStr->bStatic = 1;
1991     }else{
1992       sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, SQLITE_TRANSIENT);
1993       pStr->nUsed--;
1994     }
1995   }else{
1996     sqlite3_result_text(ctx, "[]", 2, SQLITE_STATIC);
1997   }
1998   sqlite3_result_subtype(ctx, JSON_SUBTYPE);
1999 }
2000 static void jsonArrayValue(sqlite3_context *ctx){
2001   jsonArrayCompute(ctx, 0);
2002 }
2003 static void jsonArrayFinal(sqlite3_context *ctx){
2004   jsonArrayCompute(ctx, 1);
2005 }
2006 
2007 #ifndef SQLITE_OMIT_WINDOWFUNC
2008 /*
2009 ** This method works for both json_group_array() and json_group_object().
2010 ** It works by removing the first element of the group by searching forward
2011 ** to the first comma (",") that is not within a string and deleting all
2012 ** text through that comma.
2013 */
2014 static void jsonGroupInverse(
2015   sqlite3_context *ctx,
2016   int argc,
2017   sqlite3_value **argv
2018 ){
2019   unsigned int i;
2020   int inStr = 0;
2021   int nNest = 0;
2022   char *z;
2023   char c;
2024   JsonString *pStr;
2025   UNUSED_PARAMETER(argc);
2026   UNUSED_PARAMETER(argv);
2027   pStr = (JsonString*)sqlite3_aggregate_context(ctx, 0);
2028 #ifdef NEVER
2029   /* pStr is always non-NULL since jsonArrayStep() or jsonObjectStep() will
2030   ** always have been called to initalize it */
2031   if( NEVER(!pStr) ) return;
2032 #endif
2033   z = pStr->zBuf;
2034   for(i=1; i<pStr->nUsed && ((c = z[i])!=',' || inStr || nNest); i++){
2035     if( c=='"' ){
2036       inStr = !inStr;
2037     }else if( c=='\\' ){
2038       i++;
2039     }else if( !inStr ){
2040       if( c=='{' || c=='[' ) nNest++;
2041       if( c=='}' || c==']' ) nNest--;
2042     }
2043   }
2044   if( i<pStr->nUsed ){
2045     pStr->nUsed -= i;
2046     memmove(&z[1], &z[i+1], (size_t)pStr->nUsed-1);
2047     z[pStr->nUsed] = 0;
2048   }else{
2049     pStr->nUsed = 1;
2050   }
2051 }
2052 #else
2053 # define jsonGroupInverse 0
2054 #endif
2055 
2056 
2057 /*
2058 ** json_group_obj(NAME,VALUE)
2059 **
2060 ** Return a JSON object composed of all names and values in the aggregate.
2061 */
2062 static void jsonObjectStep(
2063   sqlite3_context *ctx,
2064   int argc,
2065   sqlite3_value **argv
2066 ){
2067   JsonString *pStr;
2068   const char *z;
2069   u32 n;
2070   UNUSED_PARAMETER(argc);
2071   pStr = (JsonString*)sqlite3_aggregate_context(ctx, sizeof(*pStr));
2072   if( pStr ){
2073     if( pStr->zBuf==0 ){
2074       jsonInit(pStr, ctx);
2075       jsonAppendChar(pStr, '{');
2076     }else if( pStr->nUsed>1 ){
2077       jsonAppendChar(pStr, ',');
2078     }
2079     pStr->pCtx = ctx;
2080     z = (const char*)sqlite3_value_text(argv[0]);
2081     n = (u32)sqlite3_value_bytes(argv[0]);
2082     jsonAppendString(pStr, z, n);
2083     jsonAppendChar(pStr, ':');
2084     jsonAppendValue(pStr, argv[1]);
2085   }
2086 }
2087 static void jsonObjectCompute(sqlite3_context *ctx, int isFinal){
2088   JsonString *pStr;
2089   pStr = (JsonString*)sqlite3_aggregate_context(ctx, 0);
2090   if( pStr ){
2091     jsonAppendChar(pStr, '}');
2092     if( pStr->bErr ){
2093       if( pStr->bErr==1 ) sqlite3_result_error_nomem(ctx);
2094       assert( pStr->bStatic );
2095     }else if( isFinal ){
2096       sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed,
2097                           pStr->bStatic ? SQLITE_TRANSIENT : sqlite3_free);
2098       pStr->bStatic = 1;
2099     }else{
2100       sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, SQLITE_TRANSIENT);
2101       pStr->nUsed--;
2102     }
2103   }else{
2104     sqlite3_result_text(ctx, "{}", 2, SQLITE_STATIC);
2105   }
2106   sqlite3_result_subtype(ctx, JSON_SUBTYPE);
2107 }
2108 static void jsonObjectValue(sqlite3_context *ctx){
2109   jsonObjectCompute(ctx, 0);
2110 }
2111 static void jsonObjectFinal(sqlite3_context *ctx){
2112   jsonObjectCompute(ctx, 1);
2113 }
2114 
2115 
2116 
2117 #ifndef SQLITE_OMIT_VIRTUALTABLE
2118 /****************************************************************************
2119 ** The json_each virtual table
2120 ****************************************************************************/
2121 typedef struct JsonEachCursor JsonEachCursor;
2122 struct JsonEachCursor {
2123   sqlite3_vtab_cursor base;  /* Base class - must be first */
2124   u32 iRowid;                /* The rowid */
2125   u32 iBegin;                /* The first node of the scan */
2126   u32 i;                     /* Index in sParse.aNode[] of current row */
2127   u32 iEnd;                  /* EOF when i equals or exceeds this value */
2128   u8 eType;                  /* Type of top-level element */
2129   u8 bRecursive;             /* True for json_tree().  False for json_each() */
2130   char *zJson;               /* Input JSON */
2131   char *zRoot;               /* Path by which to filter zJson */
2132   JsonParse sParse;          /* Parse of the input JSON */
2133 };
2134 
2135 /* Constructor for the json_each virtual table */
2136 static int jsonEachConnect(
2137   sqlite3 *db,
2138   void *pAux,
2139   int argc, const char *const*argv,
2140   sqlite3_vtab **ppVtab,
2141   char **pzErr
2142 ){
2143   sqlite3_vtab *pNew;
2144   int rc;
2145 
2146 /* Column numbers */
2147 #define JEACH_KEY     0
2148 #define JEACH_VALUE   1
2149 #define JEACH_TYPE    2
2150 #define JEACH_ATOM    3
2151 #define JEACH_ID      4
2152 #define JEACH_PARENT  5
2153 #define JEACH_FULLKEY 6
2154 #define JEACH_PATH    7
2155 /* The xBestIndex method assumes that the JSON and ROOT columns are
2156 ** the last two columns in the table.  Should this ever changes, be
2157 ** sure to update the xBestIndex method. */
2158 #define JEACH_JSON    8
2159 #define JEACH_ROOT    9
2160 
2161   UNUSED_PARAMETER(pzErr);
2162   UNUSED_PARAMETER(argv);
2163   UNUSED_PARAMETER(argc);
2164   UNUSED_PARAMETER(pAux);
2165   rc = sqlite3_declare_vtab(db,
2166      "CREATE TABLE x(key,value,type,atom,id,parent,fullkey,path,"
2167                     "json HIDDEN,root HIDDEN)");
2168   if( rc==SQLITE_OK ){
2169     pNew = *ppVtab = sqlite3_malloc( sizeof(*pNew) );
2170     if( pNew==0 ) return SQLITE_NOMEM;
2171     memset(pNew, 0, sizeof(*pNew));
2172     sqlite3_vtab_config(db, SQLITE_VTAB_INNOCUOUS);
2173   }
2174   return rc;
2175 }
2176 
2177 /* destructor for json_each virtual table */
2178 static int jsonEachDisconnect(sqlite3_vtab *pVtab){
2179   sqlite3_free(pVtab);
2180   return SQLITE_OK;
2181 }
2182 
2183 /* constructor for a JsonEachCursor object for json_each(). */
2184 static int jsonEachOpenEach(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){
2185   JsonEachCursor *pCur;
2186 
2187   UNUSED_PARAMETER(p);
2188   pCur = sqlite3_malloc( sizeof(*pCur) );
2189   if( pCur==0 ) return SQLITE_NOMEM;
2190   memset(pCur, 0, sizeof(*pCur));
2191   *ppCursor = &pCur->base;
2192   return SQLITE_OK;
2193 }
2194 
2195 /* constructor for a JsonEachCursor object for json_tree(). */
2196 static int jsonEachOpenTree(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){
2197   int rc = jsonEachOpenEach(p, ppCursor);
2198   if( rc==SQLITE_OK ){
2199     JsonEachCursor *pCur = (JsonEachCursor*)*ppCursor;
2200     pCur->bRecursive = 1;
2201   }
2202   return rc;
2203 }
2204 
2205 /* Reset a JsonEachCursor back to its original state.  Free any memory
2206 ** held. */
2207 static void jsonEachCursorReset(JsonEachCursor *p){
2208   sqlite3_free(p->zJson);
2209   sqlite3_free(p->zRoot);
2210   jsonParseReset(&p->sParse);
2211   p->iRowid = 0;
2212   p->i = 0;
2213   p->iEnd = 0;
2214   p->eType = 0;
2215   p->zJson = 0;
2216   p->zRoot = 0;
2217 }
2218 
2219 /* Destructor for a jsonEachCursor object */
2220 static int jsonEachClose(sqlite3_vtab_cursor *cur){
2221   JsonEachCursor *p = (JsonEachCursor*)cur;
2222   jsonEachCursorReset(p);
2223   sqlite3_free(cur);
2224   return SQLITE_OK;
2225 }
2226 
2227 /* Return TRUE if the jsonEachCursor object has been advanced off the end
2228 ** of the JSON object */
2229 static int jsonEachEof(sqlite3_vtab_cursor *cur){
2230   JsonEachCursor *p = (JsonEachCursor*)cur;
2231   return p->i >= p->iEnd;
2232 }
2233 
2234 /* Advance the cursor to the next element for json_tree() */
2235 static int jsonEachNext(sqlite3_vtab_cursor *cur){
2236   JsonEachCursor *p = (JsonEachCursor*)cur;
2237   if( p->bRecursive ){
2238     if( p->sParse.aNode[p->i].jnFlags & JNODE_LABEL ) p->i++;
2239     p->i++;
2240     p->iRowid++;
2241     if( p->i<p->iEnd ){
2242       u32 iUp = p->sParse.aUp[p->i];
2243       JsonNode *pUp = &p->sParse.aNode[iUp];
2244       p->eType = pUp->eType;
2245       if( pUp->eType==JSON_ARRAY ){
2246         assert( pUp->eU==0 || pUp->eU==3 );
2247         testcase( pUp->eU==3 );
2248         VVA( pUp->eU = 3 );
2249         if( iUp==p->i-1 ){
2250           pUp->u.iKey = 0;
2251         }else{
2252           pUp->u.iKey++;
2253         }
2254       }
2255     }
2256   }else{
2257     switch( p->eType ){
2258       case JSON_ARRAY: {
2259         p->i += jsonNodeSize(&p->sParse.aNode[p->i]);
2260         p->iRowid++;
2261         break;
2262       }
2263       case JSON_OBJECT: {
2264         p->i += 1 + jsonNodeSize(&p->sParse.aNode[p->i+1]);
2265         p->iRowid++;
2266         break;
2267       }
2268       default: {
2269         p->i = p->iEnd;
2270         break;
2271       }
2272     }
2273   }
2274   return SQLITE_OK;
2275 }
2276 
2277 /* Append the name of the path for element i to pStr
2278 */
2279 static void jsonEachComputePath(
2280   JsonEachCursor *p,       /* The cursor */
2281   JsonString *pStr,        /* Write the path here */
2282   u32 i                    /* Path to this element */
2283 ){
2284   JsonNode *pNode, *pUp;
2285   u32 iUp;
2286   if( i==0 ){
2287     jsonAppendChar(pStr, '$');
2288     return;
2289   }
2290   iUp = p->sParse.aUp[i];
2291   jsonEachComputePath(p, pStr, iUp);
2292   pNode = &p->sParse.aNode[i];
2293   pUp = &p->sParse.aNode[iUp];
2294   if( pUp->eType==JSON_ARRAY ){
2295     assert( pUp->eU==3 || (pUp->eU==0 && pUp->u.iKey==0) );
2296     testcase( pUp->eU==0 );
2297     jsonPrintf(30, pStr, "[%d]", pUp->u.iKey);
2298   }else{
2299     assert( pUp->eType==JSON_OBJECT );
2300     if( (pNode->jnFlags & JNODE_LABEL)==0 ) pNode--;
2301     assert( pNode->eType==JSON_STRING );
2302     assert( pNode->jnFlags & JNODE_LABEL );
2303     assert( pNode->eU==1 );
2304     jsonPrintf(pNode->n+1, pStr, ".%.*s", pNode->n-2, pNode->u.zJContent+1);
2305   }
2306 }
2307 
2308 /* Return the value of a column */
2309 static int jsonEachColumn(
2310   sqlite3_vtab_cursor *cur,   /* The cursor */
2311   sqlite3_context *ctx,       /* First argument to sqlite3_result_...() */
2312   int i                       /* Which column to return */
2313 ){
2314   JsonEachCursor *p = (JsonEachCursor*)cur;
2315   JsonNode *pThis = &p->sParse.aNode[p->i];
2316   switch( i ){
2317     case JEACH_KEY: {
2318       if( p->i==0 ) break;
2319       if( p->eType==JSON_OBJECT ){
2320         jsonReturn(pThis, ctx, 0);
2321       }else if( p->eType==JSON_ARRAY ){
2322         u32 iKey;
2323         if( p->bRecursive ){
2324           if( p->iRowid==0 ) break;
2325           assert( p->sParse.aNode[p->sParse.aUp[p->i]].eU==3 );
2326           iKey = p->sParse.aNode[p->sParse.aUp[p->i]].u.iKey;
2327         }else{
2328           iKey = p->iRowid;
2329         }
2330         sqlite3_result_int64(ctx, (sqlite3_int64)iKey);
2331       }
2332       break;
2333     }
2334     case JEACH_VALUE: {
2335       if( pThis->jnFlags & JNODE_LABEL ) pThis++;
2336       jsonReturn(pThis, ctx, 0);
2337       break;
2338     }
2339     case JEACH_TYPE: {
2340       if( pThis->jnFlags & JNODE_LABEL ) pThis++;
2341       sqlite3_result_text(ctx, jsonType[pThis->eType], -1, SQLITE_STATIC);
2342       break;
2343     }
2344     case JEACH_ATOM: {
2345       if( pThis->jnFlags & JNODE_LABEL ) pThis++;
2346       if( pThis->eType>=JSON_ARRAY ) break;
2347       jsonReturn(pThis, ctx, 0);
2348       break;
2349     }
2350     case JEACH_ID: {
2351       sqlite3_result_int64(ctx,
2352          (sqlite3_int64)p->i + ((pThis->jnFlags & JNODE_LABEL)!=0));
2353       break;
2354     }
2355     case JEACH_PARENT: {
2356       if( p->i>p->iBegin && p->bRecursive ){
2357         sqlite3_result_int64(ctx, (sqlite3_int64)p->sParse.aUp[p->i]);
2358       }
2359       break;
2360     }
2361     case JEACH_FULLKEY: {
2362       JsonString x;
2363       jsonInit(&x, ctx);
2364       if( p->bRecursive ){
2365         jsonEachComputePath(p, &x, p->i);
2366       }else{
2367         if( p->zRoot ){
2368           jsonAppendRaw(&x, p->zRoot, (int)strlen(p->zRoot));
2369         }else{
2370           jsonAppendChar(&x, '$');
2371         }
2372         if( p->eType==JSON_ARRAY ){
2373           jsonPrintf(30, &x, "[%d]", p->iRowid);
2374         }else if( p->eType==JSON_OBJECT ){
2375           assert( pThis->eU==1 );
2376           jsonPrintf(pThis->n, &x, ".%.*s", pThis->n-2, pThis->u.zJContent+1);
2377         }
2378       }
2379       jsonResult(&x);
2380       break;
2381     }
2382     case JEACH_PATH: {
2383       if( p->bRecursive ){
2384         JsonString x;
2385         jsonInit(&x, ctx);
2386         jsonEachComputePath(p, &x, p->sParse.aUp[p->i]);
2387         jsonResult(&x);
2388         break;
2389       }
2390       /* For json_each() path and root are the same so fall through
2391       ** into the root case */
2392       /* no break */ deliberate_fall_through
2393     }
2394     default: {
2395       const char *zRoot = p->zRoot;
2396       if( zRoot==0 ) zRoot = "$";
2397       sqlite3_result_text(ctx, zRoot, -1, SQLITE_STATIC);
2398       break;
2399     }
2400     case JEACH_JSON: {
2401       assert( i==JEACH_JSON );
2402       sqlite3_result_text(ctx, p->sParse.zJson, -1, SQLITE_STATIC);
2403       break;
2404     }
2405   }
2406   return SQLITE_OK;
2407 }
2408 
2409 /* Return the current rowid value */
2410 static int jsonEachRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){
2411   JsonEachCursor *p = (JsonEachCursor*)cur;
2412   *pRowid = p->iRowid;
2413   return SQLITE_OK;
2414 }
2415 
2416 /* The query strategy is to look for an equality constraint on the json
2417 ** column.  Without such a constraint, the table cannot operate.  idxNum is
2418 ** 1 if the constraint is found, 3 if the constraint and zRoot are found,
2419 ** and 0 otherwise.
2420 */
2421 static int jsonEachBestIndex(
2422   sqlite3_vtab *tab,
2423   sqlite3_index_info *pIdxInfo
2424 ){
2425   int i;                     /* Loop counter or computed array index */
2426   int aIdx[2];               /* Index of constraints for JSON and ROOT */
2427   int unusableMask = 0;      /* Mask of unusable JSON and ROOT constraints */
2428   int idxMask = 0;           /* Mask of usable == constraints JSON and ROOT */
2429   const struct sqlite3_index_constraint *pConstraint;
2430 
2431   /* This implementation assumes that JSON and ROOT are the last two
2432   ** columns in the table */
2433   assert( JEACH_ROOT == JEACH_JSON+1 );
2434   UNUSED_PARAMETER(tab);
2435   aIdx[0] = aIdx[1] = -1;
2436   pConstraint = pIdxInfo->aConstraint;
2437   for(i=0; i<pIdxInfo->nConstraint; i++, pConstraint++){
2438     int iCol;
2439     int iMask;
2440     if( pConstraint->iColumn < JEACH_JSON ) continue;
2441     iCol = pConstraint->iColumn - JEACH_JSON;
2442     assert( iCol==0 || iCol==1 );
2443     testcase( iCol==0 );
2444     iMask = 1 << iCol;
2445     if( pConstraint->usable==0 ){
2446       unusableMask |= iMask;
2447     }else if( pConstraint->op==SQLITE_INDEX_CONSTRAINT_EQ ){
2448       aIdx[iCol] = i;
2449       idxMask |= iMask;
2450     }
2451   }
2452   if( (unusableMask & ~idxMask)!=0 ){
2453     /* If there are any unusable constraints on JSON or ROOT, then reject
2454     ** this entire plan */
2455     return SQLITE_CONSTRAINT;
2456   }
2457   if( aIdx[0]<0 ){
2458     /* No JSON input.  Leave estimatedCost at the huge value that it was
2459     ** initialized to to discourage the query planner from selecting this
2460     ** plan. */
2461     pIdxInfo->idxNum = 0;
2462   }else{
2463     pIdxInfo->estimatedCost = 1.0;
2464     i = aIdx[0];
2465     pIdxInfo->aConstraintUsage[i].argvIndex = 1;
2466     pIdxInfo->aConstraintUsage[i].omit = 1;
2467     if( aIdx[1]<0 ){
2468       pIdxInfo->idxNum = 1;  /* Only JSON supplied.  Plan 1 */
2469     }else{
2470       i = aIdx[1];
2471       pIdxInfo->aConstraintUsage[i].argvIndex = 2;
2472       pIdxInfo->aConstraintUsage[i].omit = 1;
2473       pIdxInfo->idxNum = 3;  /* Both JSON and ROOT are supplied.  Plan 3 */
2474     }
2475   }
2476   return SQLITE_OK;
2477 }
2478 
2479 /* Start a search on a new JSON string */
2480 static int jsonEachFilter(
2481   sqlite3_vtab_cursor *cur,
2482   int idxNum, const char *idxStr,
2483   int argc, sqlite3_value **argv
2484 ){
2485   JsonEachCursor *p = (JsonEachCursor*)cur;
2486   const char *z;
2487   const char *zRoot = 0;
2488   sqlite3_int64 n;
2489 
2490   UNUSED_PARAMETER(idxStr);
2491   UNUSED_PARAMETER(argc);
2492   jsonEachCursorReset(p);
2493   if( idxNum==0 ) return SQLITE_OK;
2494   z = (const char*)sqlite3_value_text(argv[0]);
2495   if( z==0 ) return SQLITE_OK;
2496   n = sqlite3_value_bytes(argv[0]);
2497   p->zJson = sqlite3_malloc64( n+1 );
2498   if( p->zJson==0 ) return SQLITE_NOMEM;
2499   memcpy(p->zJson, z, (size_t)n+1);
2500   if( jsonParse(&p->sParse, 0, p->zJson) ){
2501     int rc = SQLITE_NOMEM;
2502     if( p->sParse.oom==0 ){
2503       sqlite3_free(cur->pVtab->zErrMsg);
2504       cur->pVtab->zErrMsg = sqlite3_mprintf("malformed JSON");
2505       if( cur->pVtab->zErrMsg ) rc = SQLITE_ERROR;
2506     }
2507     jsonEachCursorReset(p);
2508     return rc;
2509   }else if( p->bRecursive && jsonParseFindParents(&p->sParse) ){
2510     jsonEachCursorReset(p);
2511     return SQLITE_NOMEM;
2512   }else{
2513     JsonNode *pNode = 0;
2514     if( idxNum==3 ){
2515       const char *zErr = 0;
2516       zRoot = (const char*)sqlite3_value_text(argv[1]);
2517       if( zRoot==0 ) return SQLITE_OK;
2518       n = sqlite3_value_bytes(argv[1]);
2519       p->zRoot = sqlite3_malloc64( n+1 );
2520       if( p->zRoot==0 ) return SQLITE_NOMEM;
2521       memcpy(p->zRoot, zRoot, (size_t)n+1);
2522       if( zRoot[0]!='$' ){
2523         zErr = zRoot;
2524       }else{
2525         pNode = jsonLookupStep(&p->sParse, 0, p->zRoot+1, 0, &zErr);
2526       }
2527       if( zErr ){
2528         sqlite3_free(cur->pVtab->zErrMsg);
2529         cur->pVtab->zErrMsg = jsonPathSyntaxError(zErr);
2530         jsonEachCursorReset(p);
2531         return cur->pVtab->zErrMsg ? SQLITE_ERROR : SQLITE_NOMEM;
2532       }else if( pNode==0 ){
2533         return SQLITE_OK;
2534       }
2535     }else{
2536       pNode = p->sParse.aNode;
2537     }
2538     p->iBegin = p->i = (int)(pNode - p->sParse.aNode);
2539     p->eType = pNode->eType;
2540     if( p->eType>=JSON_ARRAY ){
2541       assert( pNode->eU==0 );
2542       VVA( pNode->eU = 3 );
2543       pNode->u.iKey = 0;
2544       p->iEnd = p->i + pNode->n + 1;
2545       if( p->bRecursive ){
2546         p->eType = p->sParse.aNode[p->sParse.aUp[p->i]].eType;
2547         if( p->i>0 && (p->sParse.aNode[p->i-1].jnFlags & JNODE_LABEL)!=0 ){
2548           p->i--;
2549         }
2550       }else{
2551         p->i++;
2552       }
2553     }else{
2554       p->iEnd = p->i+1;
2555     }
2556   }
2557   return SQLITE_OK;
2558 }
2559 
2560 /* The methods of the json_each virtual table */
2561 static sqlite3_module jsonEachModule = {
2562   0,                         /* iVersion */
2563   0,                         /* xCreate */
2564   jsonEachConnect,           /* xConnect */
2565   jsonEachBestIndex,         /* xBestIndex */
2566   jsonEachDisconnect,        /* xDisconnect */
2567   0,                         /* xDestroy */
2568   jsonEachOpenEach,          /* xOpen - open a cursor */
2569   jsonEachClose,             /* xClose - close a cursor */
2570   jsonEachFilter,            /* xFilter - configure scan constraints */
2571   jsonEachNext,              /* xNext - advance a cursor */
2572   jsonEachEof,               /* xEof - check for end of scan */
2573   jsonEachColumn,            /* xColumn - read data */
2574   jsonEachRowid,             /* xRowid - read data */
2575   0,                         /* xUpdate */
2576   0,                         /* xBegin */
2577   0,                         /* xSync */
2578   0,                         /* xCommit */
2579   0,                         /* xRollback */
2580   0,                         /* xFindMethod */
2581   0,                         /* xRename */
2582   0,                         /* xSavepoint */
2583   0,                         /* xRelease */
2584   0,                         /* xRollbackTo */
2585   0                          /* xShadowName */
2586 };
2587 
2588 /* The methods of the json_tree virtual table. */
2589 static sqlite3_module jsonTreeModule = {
2590   0,                         /* iVersion */
2591   0,                         /* xCreate */
2592   jsonEachConnect,           /* xConnect */
2593   jsonEachBestIndex,         /* xBestIndex */
2594   jsonEachDisconnect,        /* xDisconnect */
2595   0,                         /* xDestroy */
2596   jsonEachOpenTree,          /* xOpen - open a cursor */
2597   jsonEachClose,             /* xClose - close a cursor */
2598   jsonEachFilter,            /* xFilter - configure scan constraints */
2599   jsonEachNext,              /* xNext - advance a cursor */
2600   jsonEachEof,               /* xEof - check for end of scan */
2601   jsonEachColumn,            /* xColumn - read data */
2602   jsonEachRowid,             /* xRowid - read data */
2603   0,                         /* xUpdate */
2604   0,                         /* xBegin */
2605   0,                         /* xSync */
2606   0,                         /* xCommit */
2607   0,                         /* xRollback */
2608   0,                         /* xFindMethod */
2609   0,                         /* xRename */
2610   0,                         /* xSavepoint */
2611   0,                         /* xRelease */
2612   0,                         /* xRollbackTo */
2613   0                          /* xShadowName */
2614 };
2615 #endif /* SQLITE_OMIT_VIRTUALTABLE */
2616 #endif /* !defined(SQLITE_OMIT_JSON) */
2617 
2618 /*
2619 ** Register JSON functions.
2620 */
2621 void sqlite3RegisterJsonFunctions(void){
2622 #ifndef SQLITE_OMIT_JSON
2623   static FuncDef aJsonFunc[] = {
2624     JFUNCTION(json,               1, 0,  jsonRemoveFunc),
2625     JFUNCTION(json_array,        -1, 0,  jsonArrayFunc),
2626     JFUNCTION(json_array_length,  1, 0,  jsonArrayLengthFunc),
2627     JFUNCTION(json_array_length,  2, 0,  jsonArrayLengthFunc),
2628     JFUNCTION(json_extract,      -1, 0,  jsonExtractFunc),
2629     JFUNCTION(->,                 2, JSON_JSON, jsonExtractFunc),
2630     JFUNCTION(->>,                2, JSON_SQL, jsonExtractFunc),
2631     JFUNCTION(json_insert,       -1, 0,  jsonSetFunc),
2632     JFUNCTION(json_object,       -1, 0,  jsonObjectFunc),
2633     JFUNCTION(json_patch,         2, 0,  jsonPatchFunc),
2634     JFUNCTION(json_quote,         1, 0,  jsonQuoteFunc),
2635     JFUNCTION(json_remove,       -1, 0,  jsonRemoveFunc),
2636     JFUNCTION(json_replace,      -1, 0,  jsonReplaceFunc),
2637     JFUNCTION(json_set,          -1, JSON_ISSET,  jsonSetFunc),
2638     JFUNCTION(json_type,          1, 0,  jsonTypeFunc),
2639     JFUNCTION(json_type,          2, 0,  jsonTypeFunc),
2640     JFUNCTION(json_valid,         1, 0,  jsonValidFunc),
2641 #if SQLITE_DEBUG
2642     JFUNCTION(json_parse,         1, 0,  jsonParseFunc),
2643     JFUNCTION(json_test1,         1, 0,  jsonTest1Func),
2644 #endif
2645     WAGGREGATE(json_group_array,  1, 0, 0,
2646        jsonArrayStep, jsonArrayFinal, jsonArrayValue, jsonGroupInverse,
2647        SQLITE_SUBTYPE|SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS),
2648     WAGGREGATE(json_group_object, 2, 0, 0,
2649        jsonObjectStep, jsonObjectFinal, jsonObjectValue, jsonGroupInverse,
2650        SQLITE_SUBTYPE|SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS)
2651   };
2652   sqlite3InsertBuiltinFuncs(aJsonFunc, ArraySize(aJsonFunc));
2653 #endif
2654 }
2655 
2656 #if  !defined(SQLITE_OMIT_VIRTUALTABLE) && !defined(SQLITE_OMIT_JSON)
2657 /*
2658 ** Register the JSON table-valued functions
2659 */
2660 int sqlite3JsonTableFunctions(sqlite3 *db){
2661   int rc = SQLITE_OK;
2662   static const struct {
2663     const char *zName;
2664     sqlite3_module *pModule;
2665   } aMod[] = {
2666     { "json_each",            &jsonEachModule               },
2667     { "json_tree",            &jsonTreeModule               },
2668   };
2669   int i;
2670   for(i=0; i<sizeof(aMod)/sizeof(aMod[0]) && rc==SQLITE_OK; i++){
2671     rc = sqlite3_create_module(db, aMod[i].zName, aMod[i].pModule, 0);
2672   }
2673   return rc;
2674 }
2675 #endif /* !defined(SQLITE_OMIT_VIRTUALTABLE) && !defined(SQLITE_OMIT_JSON) */
2676