xref: /sqlite-3.40.0/src/json.c (revision aa97b57b)
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( flags & JSON_ABPATH ){
1553       if( zPath[0]!='$' ){
1554         /* The -> and ->> operators accept abbreviated PATH arguments.  This
1555         ** is mostly for compatibility with PostgreSQL, but also for
1556         ** convenience.
1557         **
1558         **     NUMBER   ==>  $[NUMBER]     // PG compatible
1559         **     LABEL    ==>  $.LABEL       // PG compatible
1560         **     [NUMBER] ==>  $[NUMBER]     // Not PG.  Purely for convenience
1561         */
1562         jsonInit(&jx, ctx);
1563         if( sqlite3Isdigit(zPath[0]) ){
1564           jsonAppendRaw(&jx, "$[", 2);
1565           jsonAppendRaw(&jx, zPath, (int)strlen(zPath));
1566           jsonAppendRaw(&jx, "]", 2);
1567         }else{
1568           jsonAppendRaw(&jx, "$.", 1 + (zPath[0]!='['));
1569           jsonAppendRaw(&jx, zPath, (int)strlen(zPath));
1570           jsonAppendChar(&jx, 0);
1571         }
1572         pNode = jx.bErr ? 0 : jsonLookup(p, jx.zBuf, 0, ctx);
1573         jsonReset(&jx);
1574       }else{
1575         pNode = jsonLookup(p, zPath, 0, ctx);
1576       }
1577       if( pNode ){
1578         if( flags & JSON_JSON ){
1579           jsonReturnJson(pNode, ctx, 0);
1580         }else{
1581           jsonReturn(pNode, ctx, 0);
1582           sqlite3_result_subtype(ctx, 0);
1583         }
1584       }
1585     }else{
1586       pNode = jsonLookup(p, zPath, 0, ctx);
1587       if( p->nErr==0 && pNode ) jsonReturn(pNode, ctx, 0);
1588     }
1589   }else{
1590     /* Two or more PATH arguments results in a JSON array with each
1591     ** element of the array being the value selected by one of the PATHs */
1592     int i;
1593     jsonInit(&jx, ctx);
1594     jsonAppendChar(&jx, '[');
1595     for(i=1; i<argc; i++){
1596       zPath = (const char*)sqlite3_value_text(argv[i]);
1597       pNode = jsonLookup(p, zPath, 0, ctx);
1598       if( p->nErr ) break;
1599       jsonAppendSeparator(&jx);
1600       if( pNode ){
1601         jsonRenderNode(pNode, &jx, 0);
1602       }else{
1603         jsonAppendRaw(&jx, "null", 4);
1604       }
1605     }
1606     if( i==argc ){
1607       jsonAppendChar(&jx, ']');
1608       jsonResult(&jx);
1609       sqlite3_result_subtype(ctx, JSON_SUBTYPE);
1610     }
1611     jsonReset(&jx);
1612   }
1613 }
1614 
1615 /* This is the RFC 7396 MergePatch algorithm.
1616 */
1617 static JsonNode *jsonMergePatch(
1618   JsonParse *pParse,   /* The JSON parser that contains the TARGET */
1619   u32 iTarget,         /* Node of the TARGET in pParse */
1620   JsonNode *pPatch     /* The PATCH */
1621 ){
1622   u32 i, j;
1623   u32 iRoot;
1624   JsonNode *pTarget;
1625   if( pPatch->eType!=JSON_OBJECT ){
1626     return pPatch;
1627   }
1628   assert( iTarget>=0 && iTarget<pParse->nNode );
1629   pTarget = &pParse->aNode[iTarget];
1630   assert( (pPatch->jnFlags & JNODE_APPEND)==0 );
1631   if( pTarget->eType!=JSON_OBJECT ){
1632     jsonRemoveAllNulls(pPatch);
1633     return pPatch;
1634   }
1635   iRoot = iTarget;
1636   for(i=1; i<pPatch->n; i += jsonNodeSize(&pPatch[i+1])+1){
1637     u32 nKey;
1638     const char *zKey;
1639     assert( pPatch[i].eType==JSON_STRING );
1640     assert( pPatch[i].jnFlags & JNODE_LABEL );
1641     assert( pPatch[i].eU==1 );
1642     nKey = pPatch[i].n;
1643     zKey = pPatch[i].u.zJContent;
1644     assert( (pPatch[i].jnFlags & JNODE_RAW)==0 );
1645     for(j=1; j<pTarget->n; j += jsonNodeSize(&pTarget[j+1])+1 ){
1646       assert( pTarget[j].eType==JSON_STRING );
1647       assert( pTarget[j].jnFlags & JNODE_LABEL );
1648       assert( (pPatch[i].jnFlags & JNODE_RAW)==0 );
1649       if( pTarget[j].n==nKey && strncmp(pTarget[j].u.zJContent,zKey,nKey)==0 ){
1650         if( pTarget[j+1].jnFlags & (JNODE_REMOVE|JNODE_PATCH) ) break;
1651         if( pPatch[i+1].eType==JSON_NULL ){
1652           pTarget[j+1].jnFlags |= JNODE_REMOVE;
1653         }else{
1654           JsonNode *pNew = jsonMergePatch(pParse, iTarget+j+1, &pPatch[i+1]);
1655           if( pNew==0 ) return 0;
1656           pTarget = &pParse->aNode[iTarget];
1657           if( pNew!=&pTarget[j+1] ){
1658             assert( pTarget[j+1].eU==0
1659                  || pTarget[j+1].eU==1
1660                  || pTarget[j+1].eU==2 );
1661             testcase( pTarget[j+1].eU==1 );
1662             testcase( pTarget[j+1].eU==2 );
1663             VVA( pTarget[j+1].eU = 5 );
1664             pTarget[j+1].u.pPatch = pNew;
1665             pTarget[j+1].jnFlags |= JNODE_PATCH;
1666           }
1667         }
1668         break;
1669       }
1670     }
1671     if( j>=pTarget->n && pPatch[i+1].eType!=JSON_NULL ){
1672       int iStart, iPatch;
1673       iStart = jsonParseAddNode(pParse, JSON_OBJECT, 2, 0);
1674       jsonParseAddNode(pParse, JSON_STRING, nKey, zKey);
1675       iPatch = jsonParseAddNode(pParse, JSON_TRUE, 0, 0);
1676       if( pParse->oom ) return 0;
1677       jsonRemoveAllNulls(pPatch);
1678       pTarget = &pParse->aNode[iTarget];
1679       assert( pParse->aNode[iRoot].eU==0 || pParse->aNode[iRoot].eU==2 );
1680       testcase( pParse->aNode[iRoot].eU==2 );
1681       pParse->aNode[iRoot].jnFlags |= JNODE_APPEND;
1682       VVA( pParse->aNode[iRoot].eU = 2 );
1683       pParse->aNode[iRoot].u.iAppend = iStart - iRoot;
1684       iRoot = iStart;
1685       assert( pParse->aNode[iPatch].eU==0 );
1686       VVA( pParse->aNode[iPatch].eU = 5 );
1687       pParse->aNode[iPatch].jnFlags |= JNODE_PATCH;
1688       pParse->aNode[iPatch].u.pPatch = &pPatch[i+1];
1689     }
1690   }
1691   return pTarget;
1692 }
1693 
1694 /*
1695 ** Implementation of the json_mergepatch(JSON1,JSON2) function.  Return a JSON
1696 ** object that is the result of running the RFC 7396 MergePatch() algorithm
1697 ** on the two arguments.
1698 */
1699 static void jsonPatchFunc(
1700   sqlite3_context *ctx,
1701   int argc,
1702   sqlite3_value **argv
1703 ){
1704   JsonParse x;     /* The JSON that is being patched */
1705   JsonParse y;     /* The patch */
1706   JsonNode *pResult;   /* The result of the merge */
1707 
1708   UNUSED_PARAMETER(argc);
1709   if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return;
1710   if( jsonParse(&y, ctx, (const char*)sqlite3_value_text(argv[1])) ){
1711     jsonParseReset(&x);
1712     return;
1713   }
1714   pResult = jsonMergePatch(&x, 0, y.aNode);
1715   assert( pResult!=0 || x.oom );
1716   if( pResult ){
1717     jsonReturnJson(pResult, ctx, 0);
1718   }else{
1719     sqlite3_result_error_nomem(ctx);
1720   }
1721   jsonParseReset(&x);
1722   jsonParseReset(&y);
1723 }
1724 
1725 
1726 /*
1727 ** Implementation of the json_object(NAME,VALUE,...) function.  Return a JSON
1728 ** object that contains all name/value given in arguments.  Or if any name
1729 ** is not a string or if any value is a BLOB, throw an error.
1730 */
1731 static void jsonObjectFunc(
1732   sqlite3_context *ctx,
1733   int argc,
1734   sqlite3_value **argv
1735 ){
1736   int i;
1737   JsonString jx;
1738   const char *z;
1739   u32 n;
1740 
1741   if( argc&1 ){
1742     sqlite3_result_error(ctx, "json_object() requires an even number "
1743                                   "of arguments", -1);
1744     return;
1745   }
1746   jsonInit(&jx, ctx);
1747   jsonAppendChar(&jx, '{');
1748   for(i=0; i<argc; i+=2){
1749     if( sqlite3_value_type(argv[i])!=SQLITE_TEXT ){
1750       sqlite3_result_error(ctx, "json_object() labels must be TEXT", -1);
1751       jsonReset(&jx);
1752       return;
1753     }
1754     jsonAppendSeparator(&jx);
1755     z = (const char*)sqlite3_value_text(argv[i]);
1756     n = (u32)sqlite3_value_bytes(argv[i]);
1757     jsonAppendString(&jx, z, n);
1758     jsonAppendChar(&jx, ':');
1759     jsonAppendValue(&jx, argv[i+1]);
1760   }
1761   jsonAppendChar(&jx, '}');
1762   jsonResult(&jx);
1763   sqlite3_result_subtype(ctx, JSON_SUBTYPE);
1764 }
1765 
1766 
1767 /*
1768 ** json_remove(JSON, PATH, ...)
1769 **
1770 ** Remove the named elements from JSON and return the result.  malformed
1771 ** JSON or PATH arguments result in an error.
1772 */
1773 static void jsonRemoveFunc(
1774   sqlite3_context *ctx,
1775   int argc,
1776   sqlite3_value **argv
1777 ){
1778   JsonParse x;          /* The parse */
1779   JsonNode *pNode;
1780   const char *zPath;
1781   u32 i;
1782 
1783   if( argc<1 ) return;
1784   if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return;
1785   assert( x.nNode );
1786   for(i=1; i<(u32)argc; i++){
1787     zPath = (const char*)sqlite3_value_text(argv[i]);
1788     if( zPath==0 ) goto remove_done;
1789     pNode = jsonLookup(&x, zPath, 0, ctx);
1790     if( x.nErr ) goto remove_done;
1791     if( pNode ) pNode->jnFlags |= JNODE_REMOVE;
1792   }
1793   if( (x.aNode[0].jnFlags & JNODE_REMOVE)==0 ){
1794     jsonReturnJson(x.aNode, ctx, 0);
1795   }
1796 remove_done:
1797   jsonParseReset(&x);
1798 }
1799 
1800 /*
1801 ** json_replace(JSON, PATH, VALUE, ...)
1802 **
1803 ** Replace the value at PATH with VALUE.  If PATH does not already exist,
1804 ** this routine is a no-op.  If JSON or PATH is malformed, throw an error.
1805 */
1806 static void jsonReplaceFunc(
1807   sqlite3_context *ctx,
1808   int argc,
1809   sqlite3_value **argv
1810 ){
1811   JsonParse x;          /* The parse */
1812   JsonNode *pNode;
1813   const char *zPath;
1814   u32 i;
1815 
1816   if( argc<1 ) return;
1817   if( (argc&1)==0 ) {
1818     jsonWrongNumArgs(ctx, "replace");
1819     return;
1820   }
1821   if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return;
1822   assert( x.nNode );
1823   for(i=1; i<(u32)argc; i+=2){
1824     zPath = (const char*)sqlite3_value_text(argv[i]);
1825     pNode = jsonLookup(&x, zPath, 0, ctx);
1826     if( x.nErr ) goto replace_err;
1827     if( pNode ){
1828       assert( pNode->eU==0 || pNode->eU==1 || pNode->eU==4 );
1829       testcase( pNode->eU!=0 && pNode->eU!=1 );
1830       pNode->jnFlags |= (u8)JNODE_REPLACE;
1831       VVA( pNode->eU =  4 );
1832       pNode->u.iReplace = i + 1;
1833     }
1834   }
1835   if( x.aNode[0].jnFlags & JNODE_REPLACE ){
1836     assert( x.aNode[0].eU==4 );
1837     sqlite3_result_value(ctx, argv[x.aNode[0].u.iReplace]);
1838   }else{
1839     jsonReturnJson(x.aNode, ctx, argv);
1840   }
1841 replace_err:
1842   jsonParseReset(&x);
1843 }
1844 
1845 
1846 /*
1847 ** json_set(JSON, PATH, VALUE, ...)
1848 **
1849 ** Set the value at PATH to VALUE.  Create the PATH if it does not already
1850 ** exist.  Overwrite existing values that do exist.
1851 ** If JSON or PATH is malformed, throw an error.
1852 **
1853 ** json_insert(JSON, PATH, VALUE, ...)
1854 **
1855 ** Create PATH and initialize it to VALUE.  If PATH already exists, this
1856 ** routine is a no-op.  If JSON or PATH is malformed, throw an error.
1857 */
1858 static void jsonSetFunc(
1859   sqlite3_context *ctx,
1860   int argc,
1861   sqlite3_value **argv
1862 ){
1863   JsonParse x;          /* The parse */
1864   JsonNode *pNode;
1865   const char *zPath;
1866   u32 i;
1867   int bApnd;
1868   int bIsSet = sqlite3_user_data(ctx)!=0;
1869 
1870   if( argc<1 ) return;
1871   if( (argc&1)==0 ) {
1872     jsonWrongNumArgs(ctx, bIsSet ? "set" : "insert");
1873     return;
1874   }
1875   if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return;
1876   assert( x.nNode );
1877   for(i=1; i<(u32)argc; i+=2){
1878     zPath = (const char*)sqlite3_value_text(argv[i]);
1879     bApnd = 0;
1880     pNode = jsonLookup(&x, zPath, &bApnd, ctx);
1881     if( x.oom ){
1882       sqlite3_result_error_nomem(ctx);
1883       goto jsonSetDone;
1884     }else if( x.nErr ){
1885       goto jsonSetDone;
1886     }else if( pNode && (bApnd || bIsSet) ){
1887       testcase( pNode->eU!=0 && pNode->eU!=1 && pNode->eU!=4 );
1888       assert( pNode->eU!=3 || pNode->eU!=5 );
1889       VVA( pNode->eU = 4 );
1890       pNode->jnFlags |= (u8)JNODE_REPLACE;
1891       pNode->u.iReplace = i + 1;
1892     }
1893   }
1894   if( x.aNode[0].jnFlags & JNODE_REPLACE ){
1895     assert( x.aNode[0].eU==4 );
1896     sqlite3_result_value(ctx, argv[x.aNode[0].u.iReplace]);
1897   }else{
1898     jsonReturnJson(x.aNode, ctx, argv);
1899   }
1900 jsonSetDone:
1901   jsonParseReset(&x);
1902 }
1903 
1904 /*
1905 ** json_type(JSON)
1906 ** json_ntype(JSON)
1907 ** json_type(JSON, PATH)
1908 **
1909 ** Return the top-level "type" of a JSON string.  json_type() raises an
1910 ** error if either the JSON or PATH inputs are not well-formed.  json_ntype()
1911 ** works like the one-argument version of json_type() except that it
1912 ** returns NULL if the JSON argument is not well-formed.
1913 */
1914 static void jsonTypeFunc(
1915   sqlite3_context *ctx,
1916   int argc,
1917   sqlite3_value **argv
1918 ){
1919   JsonParse *p;          /* The parse */
1920   const char *zPath;
1921   JsonNode *pNode;
1922 
1923   p = jsonParseCached(ctx, argv, sqlite3_user_data(ctx)!=0 ? 0 : ctx);
1924   if( p==0 ) return;
1925   if( argc==2 ){
1926     zPath = (const char*)sqlite3_value_text(argv[1]);
1927     pNode = jsonLookup(p, zPath, 0, ctx);
1928   }else{
1929     pNode = p->aNode;
1930   }
1931   if( pNode ){
1932     sqlite3_result_text(ctx, jsonType[pNode->eType], -1, SQLITE_STATIC);
1933   }
1934 }
1935 
1936 /*
1937 ** json_valid(JSON)
1938 **
1939 ** Return 1 if JSON is a well-formed JSON string according to RFC-7159.
1940 ** Return 0 otherwise.
1941 */
1942 static void jsonValidFunc(
1943   sqlite3_context *ctx,
1944   int argc,
1945   sqlite3_value **argv
1946 ){
1947   JsonParse *p;          /* The parse */
1948   UNUSED_PARAMETER(argc);
1949   p = jsonParseCached(ctx, argv, 0);
1950   sqlite3_result_int(ctx, p!=0);
1951 }
1952 
1953 
1954 /****************************************************************************
1955 ** Aggregate SQL function implementations
1956 ****************************************************************************/
1957 /*
1958 ** json_group_array(VALUE)
1959 **
1960 ** Return a JSON array composed of all values in the aggregate.
1961 */
1962 static void jsonArrayStep(
1963   sqlite3_context *ctx,
1964   int argc,
1965   sqlite3_value **argv
1966 ){
1967   JsonString *pStr;
1968   UNUSED_PARAMETER(argc);
1969   pStr = (JsonString*)sqlite3_aggregate_context(ctx, sizeof(*pStr));
1970   if( pStr ){
1971     if( pStr->zBuf==0 ){
1972       jsonInit(pStr, ctx);
1973       jsonAppendChar(pStr, '[');
1974     }else if( pStr->nUsed>1 ){
1975       jsonAppendChar(pStr, ',');
1976     }
1977     pStr->pCtx = ctx;
1978     jsonAppendValue(pStr, argv[0]);
1979   }
1980 }
1981 static void jsonArrayCompute(sqlite3_context *ctx, int isFinal){
1982   JsonString *pStr;
1983   pStr = (JsonString*)sqlite3_aggregate_context(ctx, 0);
1984   if( pStr ){
1985     pStr->pCtx = ctx;
1986     jsonAppendChar(pStr, ']');
1987     if( pStr->bErr ){
1988       if( pStr->bErr==1 ) sqlite3_result_error_nomem(ctx);
1989       assert( pStr->bStatic );
1990     }else if( isFinal ){
1991       sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed,
1992                           pStr->bStatic ? SQLITE_TRANSIENT : sqlite3_free);
1993       pStr->bStatic = 1;
1994     }else{
1995       sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, SQLITE_TRANSIENT);
1996       pStr->nUsed--;
1997     }
1998   }else{
1999     sqlite3_result_text(ctx, "[]", 2, SQLITE_STATIC);
2000   }
2001   sqlite3_result_subtype(ctx, JSON_SUBTYPE);
2002 }
2003 static void jsonArrayValue(sqlite3_context *ctx){
2004   jsonArrayCompute(ctx, 0);
2005 }
2006 static void jsonArrayFinal(sqlite3_context *ctx){
2007   jsonArrayCompute(ctx, 1);
2008 }
2009 
2010 #ifndef SQLITE_OMIT_WINDOWFUNC
2011 /*
2012 ** This method works for both json_group_array() and json_group_object().
2013 ** It works by removing the first element of the group by searching forward
2014 ** to the first comma (",") that is not within a string and deleting all
2015 ** text through that comma.
2016 */
2017 static void jsonGroupInverse(
2018   sqlite3_context *ctx,
2019   int argc,
2020   sqlite3_value **argv
2021 ){
2022   unsigned int i;
2023   int inStr = 0;
2024   int nNest = 0;
2025   char *z;
2026   char c;
2027   JsonString *pStr;
2028   UNUSED_PARAMETER(argc);
2029   UNUSED_PARAMETER(argv);
2030   pStr = (JsonString*)sqlite3_aggregate_context(ctx, 0);
2031 #ifdef NEVER
2032   /* pStr is always non-NULL since jsonArrayStep() or jsonObjectStep() will
2033   ** always have been called to initalize it */
2034   if( NEVER(!pStr) ) return;
2035 #endif
2036   z = pStr->zBuf;
2037   for(i=1; i<pStr->nUsed && ((c = z[i])!=',' || inStr || nNest); i++){
2038     if( c=='"' ){
2039       inStr = !inStr;
2040     }else if( c=='\\' ){
2041       i++;
2042     }else if( !inStr ){
2043       if( c=='{' || c=='[' ) nNest++;
2044       if( c=='}' || c==']' ) nNest--;
2045     }
2046   }
2047   if( i<pStr->nUsed ){
2048     pStr->nUsed -= i;
2049     memmove(&z[1], &z[i+1], (size_t)pStr->nUsed-1);
2050     z[pStr->nUsed] = 0;
2051   }else{
2052     pStr->nUsed = 1;
2053   }
2054 }
2055 #else
2056 # define jsonGroupInverse 0
2057 #endif
2058 
2059 
2060 /*
2061 ** json_group_obj(NAME,VALUE)
2062 **
2063 ** Return a JSON object composed of all names and values in the aggregate.
2064 */
2065 static void jsonObjectStep(
2066   sqlite3_context *ctx,
2067   int argc,
2068   sqlite3_value **argv
2069 ){
2070   JsonString *pStr;
2071   const char *z;
2072   u32 n;
2073   UNUSED_PARAMETER(argc);
2074   pStr = (JsonString*)sqlite3_aggregate_context(ctx, sizeof(*pStr));
2075   if( pStr ){
2076     if( pStr->zBuf==0 ){
2077       jsonInit(pStr, ctx);
2078       jsonAppendChar(pStr, '{');
2079     }else if( pStr->nUsed>1 ){
2080       jsonAppendChar(pStr, ',');
2081     }
2082     pStr->pCtx = ctx;
2083     z = (const char*)sqlite3_value_text(argv[0]);
2084     n = (u32)sqlite3_value_bytes(argv[0]);
2085     jsonAppendString(pStr, z, n);
2086     jsonAppendChar(pStr, ':');
2087     jsonAppendValue(pStr, argv[1]);
2088   }
2089 }
2090 static void jsonObjectCompute(sqlite3_context *ctx, int isFinal){
2091   JsonString *pStr;
2092   pStr = (JsonString*)sqlite3_aggregate_context(ctx, 0);
2093   if( pStr ){
2094     jsonAppendChar(pStr, '}');
2095     if( pStr->bErr ){
2096       if( pStr->bErr==1 ) sqlite3_result_error_nomem(ctx);
2097       assert( pStr->bStatic );
2098     }else if( isFinal ){
2099       sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed,
2100                           pStr->bStatic ? SQLITE_TRANSIENT : sqlite3_free);
2101       pStr->bStatic = 1;
2102     }else{
2103       sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, SQLITE_TRANSIENT);
2104       pStr->nUsed--;
2105     }
2106   }else{
2107     sqlite3_result_text(ctx, "{}", 2, SQLITE_STATIC);
2108   }
2109   sqlite3_result_subtype(ctx, JSON_SUBTYPE);
2110 }
2111 static void jsonObjectValue(sqlite3_context *ctx){
2112   jsonObjectCompute(ctx, 0);
2113 }
2114 static void jsonObjectFinal(sqlite3_context *ctx){
2115   jsonObjectCompute(ctx, 1);
2116 }
2117 
2118 
2119 
2120 #ifndef SQLITE_OMIT_VIRTUALTABLE
2121 /****************************************************************************
2122 ** The json_each virtual table
2123 ****************************************************************************/
2124 typedef struct JsonEachCursor JsonEachCursor;
2125 struct JsonEachCursor {
2126   sqlite3_vtab_cursor base;  /* Base class - must be first */
2127   u32 iRowid;                /* The rowid */
2128   u32 iBegin;                /* The first node of the scan */
2129   u32 i;                     /* Index in sParse.aNode[] of current row */
2130   u32 iEnd;                  /* EOF when i equals or exceeds this value */
2131   u8 eType;                  /* Type of top-level element */
2132   u8 bRecursive;             /* True for json_tree().  False for json_each() */
2133   char *zJson;               /* Input JSON */
2134   char *zRoot;               /* Path by which to filter zJson */
2135   JsonParse sParse;          /* Parse of the input JSON */
2136 };
2137 
2138 /* Constructor for the json_each virtual table */
2139 static int jsonEachConnect(
2140   sqlite3 *db,
2141   void *pAux,
2142   int argc, const char *const*argv,
2143   sqlite3_vtab **ppVtab,
2144   char **pzErr
2145 ){
2146   sqlite3_vtab *pNew;
2147   int rc;
2148 
2149 /* Column numbers */
2150 #define JEACH_KEY     0
2151 #define JEACH_VALUE   1
2152 #define JEACH_TYPE    2
2153 #define JEACH_ATOM    3
2154 #define JEACH_ID      4
2155 #define JEACH_PARENT  5
2156 #define JEACH_FULLKEY 6
2157 #define JEACH_PATH    7
2158 /* The xBestIndex method assumes that the JSON and ROOT columns are
2159 ** the last two columns in the table.  Should this ever changes, be
2160 ** sure to update the xBestIndex method. */
2161 #define JEACH_JSON    8
2162 #define JEACH_ROOT    9
2163 
2164   UNUSED_PARAMETER(pzErr);
2165   UNUSED_PARAMETER(argv);
2166   UNUSED_PARAMETER(argc);
2167   UNUSED_PARAMETER(pAux);
2168   rc = sqlite3_declare_vtab(db,
2169      "CREATE TABLE x(key,value,type,atom,id,parent,fullkey,path,"
2170                     "json HIDDEN,root HIDDEN)");
2171   if( rc==SQLITE_OK ){
2172     pNew = *ppVtab = sqlite3_malloc( sizeof(*pNew) );
2173     if( pNew==0 ) return SQLITE_NOMEM;
2174     memset(pNew, 0, sizeof(*pNew));
2175     sqlite3_vtab_config(db, SQLITE_VTAB_INNOCUOUS);
2176   }
2177   return rc;
2178 }
2179 
2180 /* destructor for json_each virtual table */
2181 static int jsonEachDisconnect(sqlite3_vtab *pVtab){
2182   sqlite3_free(pVtab);
2183   return SQLITE_OK;
2184 }
2185 
2186 /* constructor for a JsonEachCursor object for json_each(). */
2187 static int jsonEachOpenEach(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){
2188   JsonEachCursor *pCur;
2189 
2190   UNUSED_PARAMETER(p);
2191   pCur = sqlite3_malloc( sizeof(*pCur) );
2192   if( pCur==0 ) return SQLITE_NOMEM;
2193   memset(pCur, 0, sizeof(*pCur));
2194   *ppCursor = &pCur->base;
2195   return SQLITE_OK;
2196 }
2197 
2198 /* constructor for a JsonEachCursor object for json_tree(). */
2199 static int jsonEachOpenTree(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){
2200   int rc = jsonEachOpenEach(p, ppCursor);
2201   if( rc==SQLITE_OK ){
2202     JsonEachCursor *pCur = (JsonEachCursor*)*ppCursor;
2203     pCur->bRecursive = 1;
2204   }
2205   return rc;
2206 }
2207 
2208 /* Reset a JsonEachCursor back to its original state.  Free any memory
2209 ** held. */
2210 static void jsonEachCursorReset(JsonEachCursor *p){
2211   sqlite3_free(p->zJson);
2212   sqlite3_free(p->zRoot);
2213   jsonParseReset(&p->sParse);
2214   p->iRowid = 0;
2215   p->i = 0;
2216   p->iEnd = 0;
2217   p->eType = 0;
2218   p->zJson = 0;
2219   p->zRoot = 0;
2220 }
2221 
2222 /* Destructor for a jsonEachCursor object */
2223 static int jsonEachClose(sqlite3_vtab_cursor *cur){
2224   JsonEachCursor *p = (JsonEachCursor*)cur;
2225   jsonEachCursorReset(p);
2226   sqlite3_free(cur);
2227   return SQLITE_OK;
2228 }
2229 
2230 /* Return TRUE if the jsonEachCursor object has been advanced off the end
2231 ** of the JSON object */
2232 static int jsonEachEof(sqlite3_vtab_cursor *cur){
2233   JsonEachCursor *p = (JsonEachCursor*)cur;
2234   return p->i >= p->iEnd;
2235 }
2236 
2237 /* Advance the cursor to the next element for json_tree() */
2238 static int jsonEachNext(sqlite3_vtab_cursor *cur){
2239   JsonEachCursor *p = (JsonEachCursor*)cur;
2240   if( p->bRecursive ){
2241     if( p->sParse.aNode[p->i].jnFlags & JNODE_LABEL ) p->i++;
2242     p->i++;
2243     p->iRowid++;
2244     if( p->i<p->iEnd ){
2245       u32 iUp = p->sParse.aUp[p->i];
2246       JsonNode *pUp = &p->sParse.aNode[iUp];
2247       p->eType = pUp->eType;
2248       if( pUp->eType==JSON_ARRAY ){
2249         assert( pUp->eU==0 || pUp->eU==3 );
2250         testcase( pUp->eU==3 );
2251         VVA( pUp->eU = 3 );
2252         if( iUp==p->i-1 ){
2253           pUp->u.iKey = 0;
2254         }else{
2255           pUp->u.iKey++;
2256         }
2257       }
2258     }
2259   }else{
2260     switch( p->eType ){
2261       case JSON_ARRAY: {
2262         p->i += jsonNodeSize(&p->sParse.aNode[p->i]);
2263         p->iRowid++;
2264         break;
2265       }
2266       case JSON_OBJECT: {
2267         p->i += 1 + jsonNodeSize(&p->sParse.aNode[p->i+1]);
2268         p->iRowid++;
2269         break;
2270       }
2271       default: {
2272         p->i = p->iEnd;
2273         break;
2274       }
2275     }
2276   }
2277   return SQLITE_OK;
2278 }
2279 
2280 /* Append the name of the path for element i to pStr
2281 */
2282 static void jsonEachComputePath(
2283   JsonEachCursor *p,       /* The cursor */
2284   JsonString *pStr,        /* Write the path here */
2285   u32 i                    /* Path to this element */
2286 ){
2287   JsonNode *pNode, *pUp;
2288   u32 iUp;
2289   if( i==0 ){
2290     jsonAppendChar(pStr, '$');
2291     return;
2292   }
2293   iUp = p->sParse.aUp[i];
2294   jsonEachComputePath(p, pStr, iUp);
2295   pNode = &p->sParse.aNode[i];
2296   pUp = &p->sParse.aNode[iUp];
2297   if( pUp->eType==JSON_ARRAY ){
2298     assert( pUp->eU==3 || (pUp->eU==0 && pUp->u.iKey==0) );
2299     testcase( pUp->eU==0 );
2300     jsonPrintf(30, pStr, "[%d]", pUp->u.iKey);
2301   }else{
2302     assert( pUp->eType==JSON_OBJECT );
2303     if( (pNode->jnFlags & JNODE_LABEL)==0 ) pNode--;
2304     assert( pNode->eType==JSON_STRING );
2305     assert( pNode->jnFlags & JNODE_LABEL );
2306     assert( pNode->eU==1 );
2307     jsonPrintf(pNode->n+1, pStr, ".%.*s", pNode->n-2, pNode->u.zJContent+1);
2308   }
2309 }
2310 
2311 /* Return the value of a column */
2312 static int jsonEachColumn(
2313   sqlite3_vtab_cursor *cur,   /* The cursor */
2314   sqlite3_context *ctx,       /* First argument to sqlite3_result_...() */
2315   int i                       /* Which column to return */
2316 ){
2317   JsonEachCursor *p = (JsonEachCursor*)cur;
2318   JsonNode *pThis = &p->sParse.aNode[p->i];
2319   switch( i ){
2320     case JEACH_KEY: {
2321       if( p->i==0 ) break;
2322       if( p->eType==JSON_OBJECT ){
2323         jsonReturn(pThis, ctx, 0);
2324       }else if( p->eType==JSON_ARRAY ){
2325         u32 iKey;
2326         if( p->bRecursive ){
2327           if( p->iRowid==0 ) break;
2328           assert( p->sParse.aNode[p->sParse.aUp[p->i]].eU==3 );
2329           iKey = p->sParse.aNode[p->sParse.aUp[p->i]].u.iKey;
2330         }else{
2331           iKey = p->iRowid;
2332         }
2333         sqlite3_result_int64(ctx, (sqlite3_int64)iKey);
2334       }
2335       break;
2336     }
2337     case JEACH_VALUE: {
2338       if( pThis->jnFlags & JNODE_LABEL ) pThis++;
2339       jsonReturn(pThis, ctx, 0);
2340       break;
2341     }
2342     case JEACH_TYPE: {
2343       if( pThis->jnFlags & JNODE_LABEL ) pThis++;
2344       sqlite3_result_text(ctx, jsonType[pThis->eType], -1, SQLITE_STATIC);
2345       break;
2346     }
2347     case JEACH_ATOM: {
2348       if( pThis->jnFlags & JNODE_LABEL ) pThis++;
2349       if( pThis->eType>=JSON_ARRAY ) break;
2350       jsonReturn(pThis, ctx, 0);
2351       break;
2352     }
2353     case JEACH_ID: {
2354       sqlite3_result_int64(ctx,
2355          (sqlite3_int64)p->i + ((pThis->jnFlags & JNODE_LABEL)!=0));
2356       break;
2357     }
2358     case JEACH_PARENT: {
2359       if( p->i>p->iBegin && p->bRecursive ){
2360         sqlite3_result_int64(ctx, (sqlite3_int64)p->sParse.aUp[p->i]);
2361       }
2362       break;
2363     }
2364     case JEACH_FULLKEY: {
2365       JsonString x;
2366       jsonInit(&x, ctx);
2367       if( p->bRecursive ){
2368         jsonEachComputePath(p, &x, p->i);
2369       }else{
2370         if( p->zRoot ){
2371           jsonAppendRaw(&x, p->zRoot, (int)strlen(p->zRoot));
2372         }else{
2373           jsonAppendChar(&x, '$');
2374         }
2375         if( p->eType==JSON_ARRAY ){
2376           jsonPrintf(30, &x, "[%d]", p->iRowid);
2377         }else if( p->eType==JSON_OBJECT ){
2378           assert( pThis->eU==1 );
2379           jsonPrintf(pThis->n, &x, ".%.*s", pThis->n-2, pThis->u.zJContent+1);
2380         }
2381       }
2382       jsonResult(&x);
2383       break;
2384     }
2385     case JEACH_PATH: {
2386       if( p->bRecursive ){
2387         JsonString x;
2388         jsonInit(&x, ctx);
2389         jsonEachComputePath(p, &x, p->sParse.aUp[p->i]);
2390         jsonResult(&x);
2391         break;
2392       }
2393       /* For json_each() path and root are the same so fall through
2394       ** into the root case */
2395       /* no break */ deliberate_fall_through
2396     }
2397     default: {
2398       const char *zRoot = p->zRoot;
2399       if( zRoot==0 ) zRoot = "$";
2400       sqlite3_result_text(ctx, zRoot, -1, SQLITE_STATIC);
2401       break;
2402     }
2403     case JEACH_JSON: {
2404       assert( i==JEACH_JSON );
2405       sqlite3_result_text(ctx, p->sParse.zJson, -1, SQLITE_STATIC);
2406       break;
2407     }
2408   }
2409   return SQLITE_OK;
2410 }
2411 
2412 /* Return the current rowid value */
2413 static int jsonEachRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){
2414   JsonEachCursor *p = (JsonEachCursor*)cur;
2415   *pRowid = p->iRowid;
2416   return SQLITE_OK;
2417 }
2418 
2419 /* The query strategy is to look for an equality constraint on the json
2420 ** column.  Without such a constraint, the table cannot operate.  idxNum is
2421 ** 1 if the constraint is found, 3 if the constraint and zRoot are found,
2422 ** and 0 otherwise.
2423 */
2424 static int jsonEachBestIndex(
2425   sqlite3_vtab *tab,
2426   sqlite3_index_info *pIdxInfo
2427 ){
2428   int i;                     /* Loop counter or computed array index */
2429   int aIdx[2];               /* Index of constraints for JSON and ROOT */
2430   int unusableMask = 0;      /* Mask of unusable JSON and ROOT constraints */
2431   int idxMask = 0;           /* Mask of usable == constraints JSON and ROOT */
2432   const struct sqlite3_index_constraint *pConstraint;
2433 
2434   /* This implementation assumes that JSON and ROOT are the last two
2435   ** columns in the table */
2436   assert( JEACH_ROOT == JEACH_JSON+1 );
2437   UNUSED_PARAMETER(tab);
2438   aIdx[0] = aIdx[1] = -1;
2439   pConstraint = pIdxInfo->aConstraint;
2440   for(i=0; i<pIdxInfo->nConstraint; i++, pConstraint++){
2441     int iCol;
2442     int iMask;
2443     if( pConstraint->iColumn < JEACH_JSON ) continue;
2444     iCol = pConstraint->iColumn - JEACH_JSON;
2445     assert( iCol==0 || iCol==1 );
2446     testcase( iCol==0 );
2447     iMask = 1 << iCol;
2448     if( pConstraint->usable==0 ){
2449       unusableMask |= iMask;
2450     }else if( pConstraint->op==SQLITE_INDEX_CONSTRAINT_EQ ){
2451       aIdx[iCol] = i;
2452       idxMask |= iMask;
2453     }
2454   }
2455   if( (unusableMask & ~idxMask)!=0 ){
2456     /* If there are any unusable constraints on JSON or ROOT, then reject
2457     ** this entire plan */
2458     return SQLITE_CONSTRAINT;
2459   }
2460   if( aIdx[0]<0 ){
2461     /* No JSON input.  Leave estimatedCost at the huge value that it was
2462     ** initialized to to discourage the query planner from selecting this
2463     ** plan. */
2464     pIdxInfo->idxNum = 0;
2465   }else{
2466     pIdxInfo->estimatedCost = 1.0;
2467     i = aIdx[0];
2468     pIdxInfo->aConstraintUsage[i].argvIndex = 1;
2469     pIdxInfo->aConstraintUsage[i].omit = 1;
2470     if( aIdx[1]<0 ){
2471       pIdxInfo->idxNum = 1;  /* Only JSON supplied.  Plan 1 */
2472     }else{
2473       i = aIdx[1];
2474       pIdxInfo->aConstraintUsage[i].argvIndex = 2;
2475       pIdxInfo->aConstraintUsage[i].omit = 1;
2476       pIdxInfo->idxNum = 3;  /* Both JSON and ROOT are supplied.  Plan 3 */
2477     }
2478   }
2479   return SQLITE_OK;
2480 }
2481 
2482 /* Start a search on a new JSON string */
2483 static int jsonEachFilter(
2484   sqlite3_vtab_cursor *cur,
2485   int idxNum, const char *idxStr,
2486   int argc, sqlite3_value **argv
2487 ){
2488   JsonEachCursor *p = (JsonEachCursor*)cur;
2489   const char *z;
2490   const char *zRoot = 0;
2491   sqlite3_int64 n;
2492 
2493   UNUSED_PARAMETER(idxStr);
2494   UNUSED_PARAMETER(argc);
2495   jsonEachCursorReset(p);
2496   if( idxNum==0 ) return SQLITE_OK;
2497   z = (const char*)sqlite3_value_text(argv[0]);
2498   if( z==0 ) return SQLITE_OK;
2499   n = sqlite3_value_bytes(argv[0]);
2500   p->zJson = sqlite3_malloc64( n+1 );
2501   if( p->zJson==0 ) return SQLITE_NOMEM;
2502   memcpy(p->zJson, z, (size_t)n+1);
2503   if( jsonParse(&p->sParse, 0, p->zJson) ){
2504     int rc = SQLITE_NOMEM;
2505     if( p->sParse.oom==0 ){
2506       sqlite3_free(cur->pVtab->zErrMsg);
2507       cur->pVtab->zErrMsg = sqlite3_mprintf("malformed JSON");
2508       if( cur->pVtab->zErrMsg ) rc = SQLITE_ERROR;
2509     }
2510     jsonEachCursorReset(p);
2511     return rc;
2512   }else if( p->bRecursive && jsonParseFindParents(&p->sParse) ){
2513     jsonEachCursorReset(p);
2514     return SQLITE_NOMEM;
2515   }else{
2516     JsonNode *pNode = 0;
2517     if( idxNum==3 ){
2518       const char *zErr = 0;
2519       zRoot = (const char*)sqlite3_value_text(argv[1]);
2520       if( zRoot==0 ) return SQLITE_OK;
2521       n = sqlite3_value_bytes(argv[1]);
2522       p->zRoot = sqlite3_malloc64( n+1 );
2523       if( p->zRoot==0 ) return SQLITE_NOMEM;
2524       memcpy(p->zRoot, zRoot, (size_t)n+1);
2525       if( zRoot[0]!='$' ){
2526         zErr = zRoot;
2527       }else{
2528         pNode = jsonLookupStep(&p->sParse, 0, p->zRoot+1, 0, &zErr);
2529       }
2530       if( zErr ){
2531         sqlite3_free(cur->pVtab->zErrMsg);
2532         cur->pVtab->zErrMsg = jsonPathSyntaxError(zErr);
2533         jsonEachCursorReset(p);
2534         return cur->pVtab->zErrMsg ? SQLITE_ERROR : SQLITE_NOMEM;
2535       }else if( pNode==0 ){
2536         return SQLITE_OK;
2537       }
2538     }else{
2539       pNode = p->sParse.aNode;
2540     }
2541     p->iBegin = p->i = (int)(pNode - p->sParse.aNode);
2542     p->eType = pNode->eType;
2543     if( p->eType>=JSON_ARRAY ){
2544       assert( pNode->eU==0 );
2545       VVA( pNode->eU = 3 );
2546       pNode->u.iKey = 0;
2547       p->iEnd = p->i + pNode->n + 1;
2548       if( p->bRecursive ){
2549         p->eType = p->sParse.aNode[p->sParse.aUp[p->i]].eType;
2550         if( p->i>0 && (p->sParse.aNode[p->i-1].jnFlags & JNODE_LABEL)!=0 ){
2551           p->i--;
2552         }
2553       }else{
2554         p->i++;
2555       }
2556     }else{
2557       p->iEnd = p->i+1;
2558     }
2559   }
2560   return SQLITE_OK;
2561 }
2562 
2563 /* The methods of the json_each virtual table */
2564 static sqlite3_module jsonEachModule = {
2565   0,                         /* iVersion */
2566   0,                         /* xCreate */
2567   jsonEachConnect,           /* xConnect */
2568   jsonEachBestIndex,         /* xBestIndex */
2569   jsonEachDisconnect,        /* xDisconnect */
2570   0,                         /* xDestroy */
2571   jsonEachOpenEach,          /* xOpen - open a cursor */
2572   jsonEachClose,             /* xClose - close a cursor */
2573   jsonEachFilter,            /* xFilter - configure scan constraints */
2574   jsonEachNext,              /* xNext - advance a cursor */
2575   jsonEachEof,               /* xEof - check for end of scan */
2576   jsonEachColumn,            /* xColumn - read data */
2577   jsonEachRowid,             /* xRowid - read data */
2578   0,                         /* xUpdate */
2579   0,                         /* xBegin */
2580   0,                         /* xSync */
2581   0,                         /* xCommit */
2582   0,                         /* xRollback */
2583   0,                         /* xFindMethod */
2584   0,                         /* xRename */
2585   0,                         /* xSavepoint */
2586   0,                         /* xRelease */
2587   0,                         /* xRollbackTo */
2588   0                          /* xShadowName */
2589 };
2590 
2591 /* The methods of the json_tree virtual table. */
2592 static sqlite3_module jsonTreeModule = {
2593   0,                         /* iVersion */
2594   0,                         /* xCreate */
2595   jsonEachConnect,           /* xConnect */
2596   jsonEachBestIndex,         /* xBestIndex */
2597   jsonEachDisconnect,        /* xDisconnect */
2598   0,                         /* xDestroy */
2599   jsonEachOpenTree,          /* xOpen - open a cursor */
2600   jsonEachClose,             /* xClose - close a cursor */
2601   jsonEachFilter,            /* xFilter - configure scan constraints */
2602   jsonEachNext,              /* xNext - advance a cursor */
2603   jsonEachEof,               /* xEof - check for end of scan */
2604   jsonEachColumn,            /* xColumn - read data */
2605   jsonEachRowid,             /* xRowid - read data */
2606   0,                         /* xUpdate */
2607   0,                         /* xBegin */
2608   0,                         /* xSync */
2609   0,                         /* xCommit */
2610   0,                         /* xRollback */
2611   0,                         /* xFindMethod */
2612   0,                         /* xRename */
2613   0,                         /* xSavepoint */
2614   0,                         /* xRelease */
2615   0,                         /* xRollbackTo */
2616   0                          /* xShadowName */
2617 };
2618 #endif /* SQLITE_OMIT_VIRTUALTABLE */
2619 #endif /* !defined(SQLITE_OMIT_JSON) */
2620 
2621 /*
2622 ** Register JSON functions.
2623 */
2624 void sqlite3RegisterJsonFunctions(void){
2625 #ifndef SQLITE_OMIT_JSON
2626   static FuncDef aJsonFunc[] = {
2627     JFUNCTION(json,               1, 0,  jsonRemoveFunc),
2628     JFUNCTION(json_array,        -1, 0,  jsonArrayFunc),
2629     JFUNCTION(json_array_length,  1, 0,  jsonArrayLengthFunc),
2630     JFUNCTION(json_array_length,  2, 0,  jsonArrayLengthFunc),
2631     JFUNCTION(json_extract,      -1, 0,  jsonExtractFunc),
2632     JFUNCTION(->,                 2, JSON_JSON, jsonExtractFunc),
2633     JFUNCTION(->>,                2, JSON_SQL, jsonExtractFunc),
2634     JFUNCTION(json_insert,       -1, 0,  jsonSetFunc),
2635     JFUNCTION(json_object,       -1, 0,  jsonObjectFunc),
2636     JFUNCTION(json_patch,         2, 0,  jsonPatchFunc),
2637     JFUNCTION(json_quote,         1, 0,  jsonQuoteFunc),
2638     JFUNCTION(json_remove,       -1, 0,  jsonRemoveFunc),
2639     JFUNCTION(json_replace,      -1, 0,  jsonReplaceFunc),
2640     JFUNCTION(json_set,          -1, JSON_ISSET,  jsonSetFunc),
2641     JFUNCTION(json_type,          1, 0,  jsonTypeFunc),
2642     JFUNCTION(json_type,          2, 0,  jsonTypeFunc),
2643     JFUNCTION(json_valid,         1, 0,  jsonValidFunc),
2644 #if SQLITE_DEBUG
2645     JFUNCTION(json_parse,         1, 0,  jsonParseFunc),
2646     JFUNCTION(json_test1,         1, 0,  jsonTest1Func),
2647 #endif
2648     WAGGREGATE(json_group_array,  1, 0, 0,
2649        jsonArrayStep, jsonArrayFinal, jsonArrayValue, jsonGroupInverse,
2650        SQLITE_SUBTYPE|SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS),
2651     WAGGREGATE(json_group_object, 2, 0, 0,
2652        jsonObjectStep, jsonObjectFinal, jsonObjectValue, jsonGroupInverse,
2653        SQLITE_SUBTYPE|SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS)
2654   };
2655   sqlite3InsertBuiltinFuncs(aJsonFunc, ArraySize(aJsonFunc));
2656 #endif
2657 }
2658 
2659 #if  !defined(SQLITE_OMIT_VIRTUALTABLE) && !defined(SQLITE_OMIT_JSON)
2660 /*
2661 ** Register the JSON table-valued functions
2662 */
2663 int sqlite3JsonTableFunctions(sqlite3 *db){
2664   int rc = SQLITE_OK;
2665   static const struct {
2666     const char *zName;
2667     sqlite3_module *pModule;
2668   } aMod[] = {
2669     { "json_each",            &jsonEachModule               },
2670     { "json_tree",            &jsonTreeModule               },
2671   };
2672   int i;
2673   for(i=0; i<sizeof(aMod)/sizeof(aMod[0]) && rc==SQLITE_OK; i++){
2674     rc = sqlite3_create_module(db, aMod[i].zName, aMod[i].pModule, 0);
2675   }
2676   return rc;
2677 }
2678 #endif /* !defined(SQLITE_OMIT_VIRTUALTABLE) && !defined(SQLITE_OMIT_JSON) */
2679