Annotation of embedaddon/sqlite3/src/vdbemem.c, revision 1.1.1.1

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>