xref: /sqlite-3.40.0/src/vdbemem.c (revision f2fcd075)
1 /*
2 ** 2004 May 26
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 file contains code use to manipulate "Mem" structure.  A "Mem"
14 ** stores a single value in the VDBE.  Mem is an opaque structure visible
15 ** only within the VDBE.  Interface routines refer to a Mem using the
16 ** name sqlite_value
17 */
18 #include "sqliteInt.h"
19 #include "vdbeInt.h"
20 
21 /*
22 ** Call sqlite3VdbeMemExpandBlob() on the supplied value (type Mem*)
23 ** P if required.
24 */
25 #define expandBlob(P) (((P)->flags&MEM_Zero)?sqlite3VdbeMemExpandBlob(P):0)
26 
27 /*
28 ** If pMem is an object with a valid string representation, this routine
29 ** ensures the internal encoding for the string representation is
30 ** 'desiredEnc', one of SQLITE_UTF8, SQLITE_UTF16LE or SQLITE_UTF16BE.
31 **
32 ** If pMem is not a string object, or the encoding of the string
33 ** representation is already stored using the requested encoding, then this
34 ** routine is a no-op.
35 **
36 ** SQLITE_OK is returned if the conversion is successful (or not required).
37 ** SQLITE_NOMEM may be returned if a malloc() fails during conversion
38 ** between formats.
39 */
40 int sqlite3VdbeChangeEncoding(Mem *pMem, int desiredEnc){
41   int rc;
42   assert( (pMem->flags&MEM_RowSet)==0 );
43   assert( desiredEnc==SQLITE_UTF8 || desiredEnc==SQLITE_UTF16LE
44            || desiredEnc==SQLITE_UTF16BE );
45   if( !(pMem->flags&MEM_Str) || pMem->enc==desiredEnc ){
46     return SQLITE_OK;
47   }
48   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
49 #ifdef SQLITE_OMIT_UTF16
50   return SQLITE_ERROR;
51 #else
52 
53   /* MemTranslate() may return SQLITE_OK or SQLITE_NOMEM. If NOMEM is returned,
54   ** then the encoding of the value may not have changed.
55   */
56   rc = sqlite3VdbeMemTranslate(pMem, (u8)desiredEnc);
57   assert(rc==SQLITE_OK    || rc==SQLITE_NOMEM);
58   assert(rc==SQLITE_OK    || pMem->enc!=desiredEnc);
59   assert(rc==SQLITE_NOMEM || pMem->enc==desiredEnc);
60   return rc;
61 #endif
62 }
63 
64 /*
65 ** Make sure pMem->z points to a writable allocation of at least
66 ** n bytes.
67 **
68 ** If the memory cell currently contains string or blob data
69 ** and the third argument passed to this function is true, the
70 ** current content of the cell is preserved. Otherwise, it may
71 ** be discarded.
72 **
73 ** This function sets the MEM_Dyn flag and clears any xDel callback.
74 ** It also clears MEM_Ephem and MEM_Static. If the preserve flag is
75 ** not set, Mem.n is zeroed.
76 */
77 int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve){
78   assert( 1 >=
79     ((pMem->zMalloc && pMem->zMalloc==pMem->z) ? 1 : 0) +
80     (((pMem->flags&MEM_Dyn)&&pMem->xDel) ? 1 : 0) +
81     ((pMem->flags&MEM_Ephem) ? 1 : 0) +
82     ((pMem->flags&MEM_Static) ? 1 : 0)
83   );
84   assert( (pMem->flags&MEM_RowSet)==0 );
85 
86   if( n<32 ) n = 32;
87   if( sqlite3DbMallocSize(pMem->db, pMem->zMalloc)<n ){
88     if( preserve && pMem->z==pMem->zMalloc ){
89       pMem->z = pMem->zMalloc = sqlite3DbReallocOrFree(pMem->db, pMem->z, n);
90       preserve = 0;
91     }else{
92       sqlite3DbFree(pMem->db, pMem->zMalloc);
93       pMem->zMalloc = sqlite3DbMallocRaw(pMem->db, n);
94     }
95   }
96 
97   if( pMem->z && preserve && pMem->zMalloc && pMem->z!=pMem->zMalloc ){
98     memcpy(pMem->zMalloc, pMem->z, pMem->n);
99   }
100   if( pMem->flags&MEM_Dyn && pMem->xDel ){
101     pMem->xDel((void *)(pMem->z));
102   }
103 
104   pMem->z = pMem->zMalloc;
105   if( pMem->z==0 ){
106     pMem->flags = MEM_Null;
107   }else{
108     pMem->flags &= ~(MEM_Ephem|MEM_Static);
109   }
110   pMem->xDel = 0;
111   return (pMem->z ? SQLITE_OK : SQLITE_NOMEM);
112 }
113 
114 /*
115 ** Make the given Mem object MEM_Dyn.  In other words, make it so
116 ** that any TEXT or BLOB content is stored in memory obtained from
117 ** malloc().  In this way, we know that the memory is safe to be
118 ** overwritten or altered.
119 **
120 ** Return SQLITE_OK on success or SQLITE_NOMEM if malloc fails.
121 */
122 int sqlite3VdbeMemMakeWriteable(Mem *pMem){
123   int f;
124   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
125   assert( (pMem->flags&MEM_RowSet)==0 );
126   expandBlob(pMem);
127   f = pMem->flags;
128   if( (f&(MEM_Str|MEM_Blob)) && pMem->z!=pMem->zMalloc ){
129     if( sqlite3VdbeMemGrow(pMem, pMem->n + 2, 1) ){
130       return SQLITE_NOMEM;
131     }
132     pMem->z[pMem->n] = 0;
133     pMem->z[pMem->n+1] = 0;
134     pMem->flags |= MEM_Term;
135   }
136 
137   return SQLITE_OK;
138 }
139 
140 /*
141 ** If the given Mem* has a zero-filled tail, turn it into an ordinary
142 ** blob stored in dynamically allocated space.
143 */
144 #ifndef SQLITE_OMIT_INCRBLOB
145 int sqlite3VdbeMemExpandBlob(Mem *pMem){
146   if( pMem->flags & MEM_Zero ){
147     int nByte;
148     assert( pMem->flags&MEM_Blob );
149     assert( (pMem->flags&MEM_RowSet)==0 );
150     assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
151 
152     /* Set nByte to the number of bytes required to store the expanded blob. */
153     nByte = pMem->n + pMem->u.nZero;
154     if( nByte<=0 ){
155       nByte = 1;
156     }
157     if( sqlite3VdbeMemGrow(pMem, nByte, 1) ){
158       return SQLITE_NOMEM;
159     }
160 
161     memset(&pMem->z[pMem->n], 0, pMem->u.nZero);
162     pMem->n += pMem->u.nZero;
163     pMem->flags &= ~(MEM_Zero|MEM_Term);
164   }
165   return SQLITE_OK;
166 }
167 #endif
168 
169 
170 /*
171 ** Make sure the given Mem is \u0000 terminated.
172 */
173 int sqlite3VdbeMemNulTerminate(Mem *pMem){
174   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
175   if( (pMem->flags & MEM_Term)!=0 || (pMem->flags & MEM_Str)==0 ){
176     return SQLITE_OK;   /* Nothing to do */
177   }
178   if( sqlite3VdbeMemGrow(pMem, pMem->n+2, 1) ){
179     return SQLITE_NOMEM;
180   }
181   pMem->z[pMem->n] = 0;
182   pMem->z[pMem->n+1] = 0;
183   pMem->flags |= MEM_Term;
184   return SQLITE_OK;
185 }
186 
187 /*
188 ** Add MEM_Str to the set of representations for the given Mem.  Numbers
189 ** are converted using sqlite3_snprintf().  Converting a BLOB to a string
190 ** is a no-op.
191 **
192 ** Existing representations MEM_Int and MEM_Real are *not* invalidated.
193 **
194 ** A MEM_Null value will never be passed to this function. This function is
195 ** used for converting values to text for returning to the user (i.e. via
196 ** sqlite3_value_text()), or for ensuring that values to be used as btree
197 ** keys are strings. In the former case a NULL pointer is returned the
198 ** user and the later is an internal programming error.
199 */
200 int sqlite3VdbeMemStringify(Mem *pMem, int enc){
201   int rc = SQLITE_OK;
202   int fg = pMem->flags;
203   const int nByte = 32;
204 
205   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
206   assert( !(fg&MEM_Zero) );
207   assert( !(fg&(MEM_Str|MEM_Blob)) );
208   assert( fg&(MEM_Int|MEM_Real) );
209   assert( (pMem->flags&MEM_RowSet)==0 );
210   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
211 
212 
213   if( sqlite3VdbeMemGrow(pMem, nByte, 0) ){
214     return SQLITE_NOMEM;
215   }
216 
217   /* For a Real or Integer, use sqlite3_mprintf() to produce the UTF-8
218   ** string representation of the value. Then, if the required encoding
219   ** is UTF-16le or UTF-16be do a translation.
220   **
221   ** FIX ME: It would be better if sqlite3_snprintf() could do UTF-16.
222   */
223   if( fg & MEM_Int ){
224     sqlite3_snprintf(nByte, pMem->z, "%lld", pMem->u.i);
225   }else{
226     assert( fg & MEM_Real );
227     sqlite3_snprintf(nByte, pMem->z, "%!.15g", pMem->r);
228   }
229   pMem->n = sqlite3Strlen30(pMem->z);
230   pMem->enc = SQLITE_UTF8;
231   pMem->flags |= MEM_Str|MEM_Term;
232   sqlite3VdbeChangeEncoding(pMem, enc);
233   return rc;
234 }
235 
236 /*
237 ** Memory cell pMem contains the context of an aggregate function.
238 ** This routine calls the finalize method for that function.  The
239 ** result of the aggregate is stored back into pMem.
240 **
241 ** Return SQLITE_ERROR if the finalizer reports an error.  SQLITE_OK
242 ** otherwise.
243 */
244 int sqlite3VdbeMemFinalize(Mem *pMem, FuncDef *pFunc){
245   int rc = SQLITE_OK;
246   if( ALWAYS(pFunc && pFunc->xFinalize) ){
247     sqlite3_context ctx;
248     assert( (pMem->flags & MEM_Null)!=0 || pFunc==pMem->u.pDef );
249     assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
250     memset(&ctx, 0, sizeof(ctx));
251     ctx.s.flags = MEM_Null;
252     ctx.s.db = pMem->db;
253     ctx.pMem = pMem;
254     ctx.pFunc = pFunc;
255     pFunc->xFinalize(&ctx); /* IMP: R-24505-23230 */
256     assert( 0==(pMem->flags&MEM_Dyn) && !pMem->xDel );
257     sqlite3DbFree(pMem->db, pMem->zMalloc);
258     memcpy(pMem, &ctx.s, sizeof(ctx.s));
259     rc = ctx.isError;
260   }
261   return rc;
262 }
263 
264 /*
265 ** If the memory cell contains a string value that must be freed by
266 ** invoking an external callback, free it now. Calling this function
267 ** does not free any Mem.zMalloc buffer.
268 */
269 void sqlite3VdbeMemReleaseExternal(Mem *p){
270   assert( p->db==0 || sqlite3_mutex_held(p->db->mutex) );
271   testcase( p->flags & MEM_Agg );
272   testcase( p->flags & MEM_Dyn );
273   testcase( p->flags & MEM_RowSet );
274   testcase( p->flags & MEM_Frame );
275   if( p->flags&(MEM_Agg|MEM_Dyn|MEM_RowSet|MEM_Frame) ){
276     if( p->flags&MEM_Agg ){
277       sqlite3VdbeMemFinalize(p, p->u.pDef);
278       assert( (p->flags & MEM_Agg)==0 );
279       sqlite3VdbeMemRelease(p);
280     }else if( p->flags&MEM_Dyn && p->xDel ){
281       assert( (p->flags&MEM_RowSet)==0 );
282       p->xDel((void *)p->z);
283       p->xDel = 0;
284     }else if( p->flags&MEM_RowSet ){
285       sqlite3RowSetClear(p->u.pRowSet);
286     }else if( p->flags&MEM_Frame ){
287       sqlite3VdbeMemSetNull(p);
288     }
289   }
290 }
291 
292 /*
293 ** Release any memory held by the Mem. This may leave the Mem in an
294 ** inconsistent state, for example with (Mem.z==0) and
295 ** (Mem.type==SQLITE_TEXT).
296 */
297 void sqlite3VdbeMemRelease(Mem *p){
298   sqlite3VdbeMemReleaseExternal(p);
299   sqlite3DbFree(p->db, p->zMalloc);
300   p->z = 0;
301   p->zMalloc = 0;
302   p->xDel = 0;
303 }
304 
305 /*
306 ** Convert a 64-bit IEEE double into a 64-bit signed integer.
307 ** If the double is too large, return 0x8000000000000000.
308 **
309 ** Most systems appear to do this simply by assigning
310 ** variables and without the extra range tests.  But
311 ** there are reports that windows throws an expection
312 ** if the floating point value is out of range. (See ticket #2880.)
313 ** Because we do not completely understand the problem, we will
314 ** take the conservative approach and always do range tests
315 ** before attempting the conversion.
316 */
317 static i64 doubleToInt64(double r){
318 #ifdef SQLITE_OMIT_FLOATING_POINT
319   /* When floating-point is omitted, double and int64 are the same thing */
320   return r;
321 #else
322   /*
323   ** Many compilers we encounter do not define constants for the
324   ** minimum and maximum 64-bit integers, or they define them
325   ** inconsistently.  And many do not understand the "LL" notation.
326   ** So we define our own static constants here using nothing
327   ** larger than a 32-bit integer constant.
328   */
329   static const i64 maxInt = LARGEST_INT64;
330   static const i64 minInt = SMALLEST_INT64;
331 
332   if( r<(double)minInt ){
333     return minInt;
334   }else if( r>(double)maxInt ){
335     /* minInt is correct here - not maxInt.  It turns out that assigning
336     ** a very large positive number to an integer results in a very large
337     ** negative integer.  This makes no sense, but it is what x86 hardware
338     ** does so for compatibility we will do the same in software. */
339     return minInt;
340   }else{
341     return (i64)r;
342   }
343 #endif
344 }
345 
346 /*
347 ** Return some kind of integer value which is the best we can do
348 ** at representing the value that *pMem describes as an integer.
349 ** If pMem is an integer, then the value is exact.  If pMem is
350 ** a floating-point then the value returned is the integer part.
351 ** If pMem is a string or blob, then we make an attempt to convert
352 ** it into a integer and return that.  If pMem represents an
353 ** an SQL-NULL value, return 0.
354 **
355 ** If pMem represents a string value, its encoding might be changed.
356 */
357 i64 sqlite3VdbeIntValue(Mem *pMem){
358   int flags;
359   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
360   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
361   flags = pMem->flags;
362   if( flags & MEM_Int ){
363     return pMem->u.i;
364   }else if( flags & MEM_Real ){
365     return doubleToInt64(pMem->r);
366   }else if( flags & (MEM_Str|MEM_Blob) ){
367     i64 value;
368     pMem->flags |= MEM_Str;
369     if( sqlite3VdbeChangeEncoding(pMem, SQLITE_UTF8)
370        || sqlite3VdbeMemNulTerminate(pMem) ){
371       return 0;
372     }
373     assert( pMem->z );
374     sqlite3Atoi64(pMem->z, &value);
375     return value;
376   }else{
377     return 0;
378   }
379 }
380 
381 /*
382 ** Return the best representation of pMem that we can get into a
383 ** double.  If pMem is already a double or an integer, return its
384 ** value.  If it is a string or blob, try to convert it to a double.
385 ** If it is a NULL, return 0.0.
386 */
387 double sqlite3VdbeRealValue(Mem *pMem){
388   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
389   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
390   if( pMem->flags & MEM_Real ){
391     return pMem->r;
392   }else if( pMem->flags & MEM_Int ){
393     return (double)pMem->u.i;
394   }else if( pMem->flags & (MEM_Str|MEM_Blob) ){
395     /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
396     double val = (double)0;
397     pMem->flags |= MEM_Str;
398     if( sqlite3VdbeChangeEncoding(pMem, SQLITE_UTF8)
399        || sqlite3VdbeMemNulTerminate(pMem) ){
400       /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
401       return (double)0;
402     }
403     assert( pMem->z );
404     sqlite3AtoF(pMem->z, &val);
405     return val;
406   }else{
407     /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
408     return (double)0;
409   }
410 }
411 
412 /*
413 ** The MEM structure is already a MEM_Real.  Try to also make it a
414 ** MEM_Int if we can.
415 */
416 void sqlite3VdbeIntegerAffinity(Mem *pMem){
417   assert( pMem->flags & MEM_Real );
418   assert( (pMem->flags & MEM_RowSet)==0 );
419   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
420   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
421 
422   pMem->u.i = doubleToInt64(pMem->r);
423 
424   /* Only mark the value as an integer if
425   **
426   **    (1) the round-trip conversion real->int->real is a no-op, and
427   **    (2) The integer is neither the largest nor the smallest
428   **        possible integer (ticket #3922)
429   **
430   ** The second and third terms in the following conditional enforces
431   ** the second condition under the assumption that addition overflow causes
432   ** values to wrap around.  On x86 hardware, the third term is always
433   ** true and could be omitted.  But we leave it in because other
434   ** architectures might behave differently.
435   */
436   if( pMem->r==(double)pMem->u.i && pMem->u.i>SMALLEST_INT64
437       && ALWAYS(pMem->u.i<LARGEST_INT64) ){
438     pMem->flags |= MEM_Int;
439   }
440 }
441 
442 /*
443 ** Convert pMem to type integer.  Invalidate any prior representations.
444 */
445 int sqlite3VdbeMemIntegerify(Mem *pMem){
446   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
447   assert( (pMem->flags & MEM_RowSet)==0 );
448   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
449 
450   pMem->u.i = sqlite3VdbeIntValue(pMem);
451   MemSetTypeFlag(pMem, MEM_Int);
452   return SQLITE_OK;
453 }
454 
455 /*
456 ** Convert pMem so that it is of type MEM_Real.
457 ** Invalidate any prior representations.
458 */
459 int sqlite3VdbeMemRealify(Mem *pMem){
460   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
461   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
462 
463   pMem->r = sqlite3VdbeRealValue(pMem);
464   MemSetTypeFlag(pMem, MEM_Real);
465   return SQLITE_OK;
466 }
467 
468 /*
469 ** Convert pMem so that it has types MEM_Real or MEM_Int or both.
470 ** Invalidate any prior representations.
471 **
472 ** Every effort is made to force the conversion, even if the input
473 ** is a string that does not look completely like a number.  Convert
474 ** as much of the string as we can and ignore the rest.
475 */
476 int sqlite3VdbeMemNumerify(Mem *pMem){
477   int rc;
478   assert( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))==0 );
479   assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 );
480   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
481   rc = sqlite3VdbeChangeEncoding(pMem, SQLITE_UTF8);
482   if( rc ) return rc;
483   rc = sqlite3VdbeMemNulTerminate(pMem);
484   if( rc ) return rc;
485   if( sqlite3Atoi64(pMem->z, &pMem->u.i) ){
486     MemSetTypeFlag(pMem, MEM_Int);
487   }else{
488     pMem->r = sqlite3VdbeRealValue(pMem);
489     MemSetTypeFlag(pMem, MEM_Real);
490     sqlite3VdbeIntegerAffinity(pMem);
491   }
492   return SQLITE_OK;
493 }
494 
495 /*
496 ** Delete any previous value and set the value stored in *pMem to NULL.
497 */
498 void sqlite3VdbeMemSetNull(Mem *pMem){
499   if( pMem->flags & MEM_Frame ){
500     sqlite3VdbeFrameDelete(pMem->u.pFrame);
501   }
502   if( pMem->flags & MEM_RowSet ){
503     sqlite3RowSetClear(pMem->u.pRowSet);
504   }
505   MemSetTypeFlag(pMem, MEM_Null);
506   pMem->type = SQLITE_NULL;
507 }
508 
509 /*
510 ** Delete any previous value and set the value to be a BLOB of length
511 ** n containing all zeros.
512 */
513 void sqlite3VdbeMemSetZeroBlob(Mem *pMem, int n){
514   sqlite3VdbeMemRelease(pMem);
515   pMem->flags = MEM_Blob|MEM_Zero;
516   pMem->type = SQLITE_BLOB;
517   pMem->n = 0;
518   if( n<0 ) n = 0;
519   pMem->u.nZero = n;
520   pMem->enc = SQLITE_UTF8;
521 
522 #ifdef SQLITE_OMIT_INCRBLOB
523   sqlite3VdbeMemGrow(pMem, n, 0);
524   if( pMem->z ){
525     pMem->n = n;
526     memset(pMem->z, 0, n);
527   }
528 #endif
529 }
530 
531 /*
532 ** Delete any previous value and set the value stored in *pMem to val,
533 ** manifest type INTEGER.
534 */
535 void sqlite3VdbeMemSetInt64(Mem *pMem, i64 val){
536   sqlite3VdbeMemRelease(pMem);
537   pMem->u.i = val;
538   pMem->flags = MEM_Int;
539   pMem->type = SQLITE_INTEGER;
540 }
541 
542 #ifndef SQLITE_OMIT_FLOATING_POINT
543 /*
544 ** Delete any previous value and set the value stored in *pMem to val,
545 ** manifest type REAL.
546 */
547 void sqlite3VdbeMemSetDouble(Mem *pMem, double val){
548   if( sqlite3IsNaN(val) ){
549     sqlite3VdbeMemSetNull(pMem);
550   }else{
551     sqlite3VdbeMemRelease(pMem);
552     pMem->r = val;
553     pMem->flags = MEM_Real;
554     pMem->type = SQLITE_FLOAT;
555   }
556 }
557 #endif
558 
559 /*
560 ** Delete any previous value and set the value of pMem to be an
561 ** empty boolean index.
562 */
563 void sqlite3VdbeMemSetRowSet(Mem *pMem){
564   sqlite3 *db = pMem->db;
565   assert( db!=0 );
566   assert( (pMem->flags & MEM_RowSet)==0 );
567   sqlite3VdbeMemRelease(pMem);
568   pMem->zMalloc = sqlite3DbMallocRaw(db, 64);
569   if( db->mallocFailed ){
570     pMem->flags = MEM_Null;
571   }else{
572     assert( pMem->zMalloc );
573     pMem->u.pRowSet = sqlite3RowSetInit(db, pMem->zMalloc,
574                                        sqlite3DbMallocSize(db, pMem->zMalloc));
575     assert( pMem->u.pRowSet!=0 );
576     pMem->flags = MEM_RowSet;
577   }
578 }
579 
580 /*
581 ** Return true if the Mem object contains a TEXT or BLOB that is
582 ** too large - whose size exceeds SQLITE_MAX_LENGTH.
583 */
584 int sqlite3VdbeMemTooBig(Mem *p){
585   assert( p->db!=0 );
586   if( p->flags & (MEM_Str|MEM_Blob) ){
587     int n = p->n;
588     if( p->flags & MEM_Zero ){
589       n += p->u.nZero;
590     }
591     return n>p->db->aLimit[SQLITE_LIMIT_LENGTH];
592   }
593   return 0;
594 }
595 
596 /*
597 ** Size of struct Mem not including the Mem.zMalloc member.
598 */
599 #define MEMCELLSIZE (size_t)(&(((Mem *)0)->zMalloc))
600 
601 /*
602 ** Make an shallow copy of pFrom into pTo.  Prior contents of
603 ** pTo are freed.  The pFrom->z field is not duplicated.  If
604 ** pFrom->z is used, then pTo->z points to the same thing as pFrom->z
605 ** and flags gets srcType (either MEM_Ephem or MEM_Static).
606 */
607 void sqlite3VdbeMemShallowCopy(Mem *pTo, const Mem *pFrom, int srcType){
608   assert( (pFrom->flags & MEM_RowSet)==0 );
609   sqlite3VdbeMemReleaseExternal(pTo);
610   memcpy(pTo, pFrom, MEMCELLSIZE);
611   pTo->xDel = 0;
612   if( (pFrom->flags&MEM_Static)==0 ){
613     pTo->flags &= ~(MEM_Dyn|MEM_Static|MEM_Ephem);
614     assert( srcType==MEM_Ephem || srcType==MEM_Static );
615     pTo->flags |= srcType;
616   }
617 }
618 
619 /*
620 ** Make a full copy of pFrom into pTo.  Prior contents of pTo are
621 ** freed before the copy is made.
622 */
623 int sqlite3VdbeMemCopy(Mem *pTo, const Mem *pFrom){
624   int rc = SQLITE_OK;
625 
626   assert( (pFrom->flags & MEM_RowSet)==0 );
627   sqlite3VdbeMemReleaseExternal(pTo);
628   memcpy(pTo, pFrom, MEMCELLSIZE);
629   pTo->flags &= ~MEM_Dyn;
630 
631   if( pTo->flags&(MEM_Str|MEM_Blob) ){
632     if( 0==(pFrom->flags&MEM_Static) ){
633       pTo->flags |= MEM_Ephem;
634       rc = sqlite3VdbeMemMakeWriteable(pTo);
635     }
636   }
637 
638   return rc;
639 }
640 
641 /*
642 ** Transfer the contents of pFrom to pTo. Any existing value in pTo is
643 ** freed. If pFrom contains ephemeral data, a copy is made.
644 **
645 ** pFrom contains an SQL NULL when this routine returns.
646 */
647 void sqlite3VdbeMemMove(Mem *pTo, Mem *pFrom){
648   assert( pFrom->db==0 || sqlite3_mutex_held(pFrom->db->mutex) );
649   assert( pTo->db==0 || sqlite3_mutex_held(pTo->db->mutex) );
650   assert( pFrom->db==0 || pTo->db==0 || pFrom->db==pTo->db );
651 
652   sqlite3VdbeMemRelease(pTo);
653   memcpy(pTo, pFrom, sizeof(Mem));
654   pFrom->flags = MEM_Null;
655   pFrom->xDel = 0;
656   pFrom->zMalloc = 0;
657 }
658 
659 /*
660 ** Change the value of a Mem to be a string or a BLOB.
661 **
662 ** The memory management strategy depends on the value of the xDel
663 ** parameter. If the value passed is SQLITE_TRANSIENT, then the
664 ** string is copied into a (possibly existing) buffer managed by the
665 ** Mem structure. Otherwise, any existing buffer is freed and the
666 ** pointer copied.
667 **
668 ** If the string is too large (if it exceeds the SQLITE_LIMIT_LENGTH
669 ** size limit) then no memory allocation occurs.  If the string can be
670 ** stored without allocating memory, then it is.  If a memory allocation
671 ** is required to store the string, then value of pMem is unchanged.  In
672 ** either case, SQLITE_TOOBIG is returned.
673 */
674 int sqlite3VdbeMemSetStr(
675   Mem *pMem,          /* Memory cell to set to string value */
676   const char *z,      /* String pointer */
677   int n,              /* Bytes in string, or negative */
678   u8 enc,             /* Encoding of z.  0 for BLOBs */
679   void (*xDel)(void*) /* Destructor function */
680 ){
681   int nByte = n;      /* New value for pMem->n */
682   int iLimit;         /* Maximum allowed string or blob size */
683   u16 flags = 0;      /* New value for pMem->flags */
684 
685   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
686   assert( (pMem->flags & MEM_RowSet)==0 );
687 
688   /* If z is a NULL pointer, set pMem to contain an SQL NULL. */
689   if( !z ){
690     sqlite3VdbeMemSetNull(pMem);
691     return SQLITE_OK;
692   }
693 
694   if( pMem->db ){
695     iLimit = pMem->db->aLimit[SQLITE_LIMIT_LENGTH];
696   }else{
697     iLimit = SQLITE_MAX_LENGTH;
698   }
699   flags = (enc==0?MEM_Blob:MEM_Str);
700   if( nByte<0 ){
701     assert( enc!=0 );
702     if( enc==SQLITE_UTF8 ){
703       for(nByte=0; nByte<=iLimit && z[nByte]; nByte++){}
704     }else{
705       for(nByte=0; nByte<=iLimit && (z[nByte] | z[nByte+1]); nByte+=2){}
706     }
707     flags |= MEM_Term;
708   }
709 
710   /* The following block sets the new values of Mem.z and Mem.xDel. It
711   ** also sets a flag in local variable "flags" to indicate the memory
712   ** management (one of MEM_Dyn or MEM_Static).
713   */
714   if( xDel==SQLITE_TRANSIENT ){
715     int nAlloc = nByte;
716     if( flags&MEM_Term ){
717       nAlloc += (enc==SQLITE_UTF8?1:2);
718     }
719     if( nByte>iLimit ){
720       return SQLITE_TOOBIG;
721     }
722     if( sqlite3VdbeMemGrow(pMem, nAlloc, 0) ){
723       return SQLITE_NOMEM;
724     }
725     memcpy(pMem->z, z, nAlloc);
726   }else if( xDel==SQLITE_DYNAMIC ){
727     sqlite3VdbeMemRelease(pMem);
728     pMem->zMalloc = pMem->z = (char *)z;
729     pMem->xDel = 0;
730   }else{
731     sqlite3VdbeMemRelease(pMem);
732     pMem->z = (char *)z;
733     pMem->xDel = xDel;
734     flags |= ((xDel==SQLITE_STATIC)?MEM_Static:MEM_Dyn);
735   }
736 
737   pMem->n = nByte;
738   pMem->flags = flags;
739   pMem->enc = (enc==0 ? SQLITE_UTF8 : enc);
740   pMem->type = (enc==0 ? SQLITE_BLOB : SQLITE_TEXT);
741 
742 #ifndef SQLITE_OMIT_UTF16
743   if( pMem->enc!=SQLITE_UTF8 && sqlite3VdbeMemHandleBom(pMem) ){
744     return SQLITE_NOMEM;
745   }
746 #endif
747 
748   if( nByte>iLimit ){
749     return SQLITE_TOOBIG;
750   }
751 
752   return SQLITE_OK;
753 }
754 
755 /*
756 ** Compare the values contained by the two memory cells, returning
757 ** negative, zero or positive if pMem1 is less than, equal to, or greater
758 ** than pMem2. Sorting order is NULL's first, followed by numbers (integers
759 ** and reals) sorted numerically, followed by text ordered by the collating
760 ** sequence pColl and finally blob's ordered by memcmp().
761 **
762 ** Two NULL values are considered equal by this function.
763 */
764 int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const CollSeq *pColl){
765   int rc;
766   int f1, f2;
767   int combined_flags;
768 
769   f1 = pMem1->flags;
770   f2 = pMem2->flags;
771   combined_flags = f1|f2;
772   assert( (combined_flags & MEM_RowSet)==0 );
773 
774   /* If one value is NULL, it is less than the other. If both values
775   ** are NULL, return 0.
776   */
777   if( combined_flags&MEM_Null ){
778     return (f2&MEM_Null) - (f1&MEM_Null);
779   }
780 
781   /* If one value is a number and the other is not, the number is less.
782   ** If both are numbers, compare as reals if one is a real, or as integers
783   ** if both values are integers.
784   */
785   if( combined_flags&(MEM_Int|MEM_Real) ){
786     if( !(f1&(MEM_Int|MEM_Real)) ){
787       return 1;
788     }
789     if( !(f2&(MEM_Int|MEM_Real)) ){
790       return -1;
791     }
792     if( (f1 & f2 & MEM_Int)==0 ){
793       double r1, r2;
794       if( (f1&MEM_Real)==0 ){
795         r1 = (double)pMem1->u.i;
796       }else{
797         r1 = pMem1->r;
798       }
799       if( (f2&MEM_Real)==0 ){
800         r2 = (double)pMem2->u.i;
801       }else{
802         r2 = pMem2->r;
803       }
804       if( r1<r2 ) return -1;
805       if( r1>r2 ) return 1;
806       return 0;
807     }else{
808       assert( f1&MEM_Int );
809       assert( f2&MEM_Int );
810       if( pMem1->u.i < pMem2->u.i ) return -1;
811       if( pMem1->u.i > pMem2->u.i ) return 1;
812       return 0;
813     }
814   }
815 
816   /* If one value is a string and the other is a blob, the string is less.
817   ** If both are strings, compare using the collating functions.
818   */
819   if( combined_flags&MEM_Str ){
820     if( (f1 & MEM_Str)==0 ){
821       return 1;
822     }
823     if( (f2 & MEM_Str)==0 ){
824       return -1;
825     }
826 
827     assert( pMem1->enc==pMem2->enc );
828     assert( pMem1->enc==SQLITE_UTF8 ||
829             pMem1->enc==SQLITE_UTF16LE || pMem1->enc==SQLITE_UTF16BE );
830 
831     /* The collation sequence must be defined at this point, even if
832     ** the user deletes the collation sequence after the vdbe program is
833     ** compiled (this was not always the case).
834     */
835     assert( !pColl || pColl->xCmp );
836 
837     if( pColl ){
838       if( pMem1->enc==pColl->enc ){
839         /* The strings are already in the correct encoding.  Call the
840         ** comparison function directly */
841         return pColl->xCmp(pColl->pUser,pMem1->n,pMem1->z,pMem2->n,pMem2->z);
842       }else{
843         const void *v1, *v2;
844         int n1, n2;
845         Mem c1;
846         Mem c2;
847         memset(&c1, 0, sizeof(c1));
848         memset(&c2, 0, sizeof(c2));
849         sqlite3VdbeMemShallowCopy(&c1, pMem1, MEM_Ephem);
850         sqlite3VdbeMemShallowCopy(&c2, pMem2, MEM_Ephem);
851         v1 = sqlite3ValueText((sqlite3_value*)&c1, pColl->enc);
852         n1 = v1==0 ? 0 : c1.n;
853         v2 = sqlite3ValueText((sqlite3_value*)&c2, pColl->enc);
854         n2 = v2==0 ? 0 : c2.n;
855         rc = pColl->xCmp(pColl->pUser, n1, v1, n2, v2);
856         sqlite3VdbeMemRelease(&c1);
857         sqlite3VdbeMemRelease(&c2);
858         return rc;
859       }
860     }
861     /* If a NULL pointer was passed as the collate function, fall through
862     ** to the blob case and use memcmp().  */
863   }
864 
865   /* Both values must be blobs.  Compare using memcmp().  */
866   rc = memcmp(pMem1->z, pMem2->z, (pMem1->n>pMem2->n)?pMem2->n:pMem1->n);
867   if( rc==0 ){
868     rc = pMem1->n - pMem2->n;
869   }
870   return rc;
871 }
872 
873 /*
874 ** Move data out of a btree key or data field and into a Mem structure.
875 ** The data or key is taken from the entry that pCur is currently pointing
876 ** to.  offset and amt determine what portion of the data or key to retrieve.
877 ** key is true to get the key or false to get data.  The result is written
878 ** into the pMem element.
879 **
880 ** The pMem structure is assumed to be uninitialized.  Any prior content
881 ** is overwritten without being freed.
882 **
883 ** If this routine fails for any reason (malloc returns NULL or unable
884 ** to read from the disk) then the pMem is left in an inconsistent state.
885 */
886 int sqlite3VdbeMemFromBtree(
887   BtCursor *pCur,   /* Cursor pointing at record to retrieve. */
888   int offset,       /* Offset from the start of data to return bytes from. */
889   int amt,          /* Number of bytes to return. */
890   int key,          /* If true, retrieve from the btree key, not data. */
891   Mem *pMem         /* OUT: Return data in this Mem structure. */
892 ){
893   char *zData;        /* Data from the btree layer */
894   int available = 0;  /* Number of bytes available on the local btree page */
895   int rc = SQLITE_OK; /* Return code */
896 
897   assert( sqlite3BtreeCursorIsValid(pCur) );
898 
899   /* Note: the calls to BtreeKeyFetch() and DataFetch() below assert()
900   ** that both the BtShared and database handle mutexes are held. */
901   assert( (pMem->flags & MEM_RowSet)==0 );
902   if( key ){
903     zData = (char *)sqlite3BtreeKeyFetch(pCur, &available);
904   }else{
905     zData = (char *)sqlite3BtreeDataFetch(pCur, &available);
906   }
907   assert( zData!=0 );
908 
909   if( offset+amt<=available && (pMem->flags&MEM_Dyn)==0 ){
910     sqlite3VdbeMemRelease(pMem);
911     pMem->z = &zData[offset];
912     pMem->flags = MEM_Blob|MEM_Ephem;
913   }else if( SQLITE_OK==(rc = sqlite3VdbeMemGrow(pMem, amt+2, 0)) ){
914     pMem->flags = MEM_Blob|MEM_Dyn|MEM_Term;
915     pMem->enc = 0;
916     pMem->type = SQLITE_BLOB;
917     if( key ){
918       rc = sqlite3BtreeKey(pCur, offset, amt, pMem->z);
919     }else{
920       rc = sqlite3BtreeData(pCur, offset, amt, pMem->z);
921     }
922     pMem->z[amt] = 0;
923     pMem->z[amt+1] = 0;
924     if( rc!=SQLITE_OK ){
925       sqlite3VdbeMemRelease(pMem);
926     }
927   }
928   pMem->n = amt;
929 
930   return rc;
931 }
932 
933 /* This function is only available internally, it is not part of the
934 ** external API. It works in a similar way to sqlite3_value_text(),
935 ** except the data returned is in the encoding specified by the second
936 ** parameter, which must be one of SQLITE_UTF16BE, SQLITE_UTF16LE or
937 ** SQLITE_UTF8.
938 **
939 ** (2006-02-16:)  The enc value can be or-ed with SQLITE_UTF16_ALIGNED.
940 ** If that is the case, then the result must be aligned on an even byte
941 ** boundary.
942 */
943 const void *sqlite3ValueText(sqlite3_value* pVal, u8 enc){
944   if( !pVal ) return 0;
945 
946   assert( pVal->db==0 || sqlite3_mutex_held(pVal->db->mutex) );
947   assert( (enc&3)==(enc&~SQLITE_UTF16_ALIGNED) );
948   assert( (pVal->flags & MEM_RowSet)==0 );
949 
950   if( pVal->flags&MEM_Null ){
951     return 0;
952   }
953   assert( (MEM_Blob>>3) == MEM_Str );
954   pVal->flags |= (pVal->flags & MEM_Blob)>>3;
955   expandBlob(pVal);
956   if( pVal->flags&MEM_Str ){
957     sqlite3VdbeChangeEncoding(pVal, enc & ~SQLITE_UTF16_ALIGNED);
958     if( (enc & SQLITE_UTF16_ALIGNED)!=0 && 1==(1&SQLITE_PTR_TO_INT(pVal->z)) ){
959       assert( (pVal->flags & (MEM_Ephem|MEM_Static))!=0 );
960       if( sqlite3VdbeMemMakeWriteable(pVal)!=SQLITE_OK ){
961         return 0;
962       }
963     }
964     sqlite3VdbeMemNulTerminate(pVal); /* IMP: R-59893-45467 */
965   }else{
966     assert( (pVal->flags&MEM_Blob)==0 );
967     sqlite3VdbeMemStringify(pVal, enc);
968     assert( 0==(1&SQLITE_PTR_TO_INT(pVal->z)) );
969   }
970   assert(pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) || pVal->db==0
971               || pVal->db->mallocFailed );
972   if( pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) ){
973     return pVal->z;
974   }else{
975     return 0;
976   }
977 }
978 
979 /*
980 ** Create a new sqlite3_value object.
981 */
982 sqlite3_value *sqlite3ValueNew(sqlite3 *db){
983   Mem *p = sqlite3DbMallocZero(db, sizeof(*p));
984   if( p ){
985     p->flags = MEM_Null;
986     p->type = SQLITE_NULL;
987     p->db = db;
988   }
989   return p;
990 }
991 
992 /*
993 ** Create a new sqlite3_value object, containing the value of pExpr.
994 **
995 ** This only works for very simple expressions that consist of one constant
996 ** token (i.e. "5", "5.1", "'a string'"). If the expression can
997 ** be converted directly into a value, then the value is allocated and
998 ** a pointer written to *ppVal. The caller is responsible for deallocating
999 ** the value by passing it to sqlite3ValueFree() later on. If the expression
1000 ** cannot be converted to a value, then *ppVal is set to NULL.
1001 */
1002 int sqlite3ValueFromExpr(
1003   sqlite3 *db,              /* The database connection */
1004   Expr *pExpr,              /* The expression to evaluate */
1005   u8 enc,                   /* Encoding to use */
1006   u8 affinity,              /* Affinity to use */
1007   sqlite3_value **ppVal     /* Write the new value here */
1008 ){
1009   int op;
1010   char *zVal = 0;
1011   sqlite3_value *pVal = 0;
1012 
1013   if( !pExpr ){
1014     *ppVal = 0;
1015     return SQLITE_OK;
1016   }
1017   op = pExpr->op;
1018 
1019   /* op can only be TK_REGISTER if we have compiled with SQLITE_ENABLE_STAT2.
1020   ** The ifdef here is to enable us to achieve 100% branch test coverage even
1021   ** when SQLITE_ENABLE_STAT2 is omitted.
1022   */
1023 #ifdef SQLITE_ENABLE_STAT2
1024   if( op==TK_REGISTER ) op = pExpr->op2;
1025 #else
1026   if( NEVER(op==TK_REGISTER) ) op = pExpr->op2;
1027 #endif
1028 
1029   if( op==TK_STRING || op==TK_FLOAT || op==TK_INTEGER ){
1030     pVal = sqlite3ValueNew(db);
1031     if( pVal==0 ) goto no_mem;
1032     if( ExprHasProperty(pExpr, EP_IntValue) ){
1033       sqlite3VdbeMemSetInt64(pVal, (i64)pExpr->u.iValue);
1034     }else{
1035       zVal = sqlite3DbStrDup(db, pExpr->u.zToken);
1036       if( zVal==0 ) goto no_mem;
1037       sqlite3ValueSetStr(pVal, -1, zVal, SQLITE_UTF8, SQLITE_DYNAMIC);
1038       if( op==TK_FLOAT ) pVal->type = SQLITE_FLOAT;
1039     }
1040     if( (op==TK_INTEGER || op==TK_FLOAT ) && affinity==SQLITE_AFF_NONE ){
1041       sqlite3ValueApplyAffinity(pVal, SQLITE_AFF_NUMERIC, SQLITE_UTF8);
1042     }else{
1043       sqlite3ValueApplyAffinity(pVal, affinity, SQLITE_UTF8);
1044     }
1045     if( enc!=SQLITE_UTF8 ){
1046       sqlite3VdbeChangeEncoding(pVal, enc);
1047     }
1048   }else if( op==TK_UMINUS ) {
1049     if( SQLITE_OK==sqlite3ValueFromExpr(db,pExpr->pLeft,enc,affinity,&pVal) ){
1050       pVal->u.i = -1 * pVal->u.i;
1051       /* (double)-1 In case of SQLITE_OMIT_FLOATING_POINT... */
1052       pVal->r = (double)-1 * pVal->r;
1053     }
1054   }
1055 #ifndef SQLITE_OMIT_BLOB_LITERAL
1056   else if( op==TK_BLOB ){
1057     int nVal;
1058     assert( pExpr->u.zToken[0]=='x' || pExpr->u.zToken[0]=='X' );
1059     assert( pExpr->u.zToken[1]=='\'' );
1060     pVal = sqlite3ValueNew(db);
1061     if( !pVal ) goto no_mem;
1062     zVal = &pExpr->u.zToken[2];
1063     nVal = sqlite3Strlen30(zVal)-1;
1064     assert( zVal[nVal]=='\'' );
1065     sqlite3VdbeMemSetStr(pVal, sqlite3HexToBlob(db, zVal, nVal), nVal/2,
1066                          0, SQLITE_DYNAMIC);
1067   }
1068 #endif
1069 
1070   if( pVal ){
1071     sqlite3VdbeMemStoreType(pVal);
1072   }
1073   *ppVal = pVal;
1074   return SQLITE_OK;
1075 
1076 no_mem:
1077   db->mallocFailed = 1;
1078   sqlite3DbFree(db, zVal);
1079   sqlite3ValueFree(pVal);
1080   *ppVal = 0;
1081   return SQLITE_NOMEM;
1082 }
1083 
1084 /*
1085 ** Change the string value of an sqlite3_value object
1086 */
1087 void sqlite3ValueSetStr(
1088   sqlite3_value *v,     /* Value to be set */
1089   int n,                /* Length of string z */
1090   const void *z,        /* Text of the new string */
1091   u8 enc,               /* Encoding to use */
1092   void (*xDel)(void*)   /* Destructor for the string */
1093 ){
1094   if( v ) sqlite3VdbeMemSetStr((Mem *)v, z, n, enc, xDel);
1095 }
1096 
1097 /*
1098 ** Free an sqlite3_value object
1099 */
1100 void sqlite3ValueFree(sqlite3_value *v){
1101   if( !v ) return;
1102   sqlite3VdbeMemRelease((Mem *)v);
1103   sqlite3DbFree(((Mem*)v)->db, v);
1104 }
1105 
1106 /*
1107 ** Return the number of bytes in the sqlite3_value object assuming
1108 ** that it uses the encoding "enc"
1109 */
1110 int sqlite3ValueBytes(sqlite3_value *pVal, u8 enc){
1111   Mem *p = (Mem*)pVal;
1112   if( (p->flags & MEM_Blob)!=0 || sqlite3ValueText(pVal, enc) ){
1113     if( p->flags & MEM_Zero ){
1114       return p->n + p->u.nZero;
1115     }else{
1116       return p->n;
1117     }
1118   }
1119   return 0;
1120 }
1121