File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / src / vdbemem.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:04:17 2012 UTC (12 years, 8 months ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

    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>