/ Hex Artifact Content
Login

Artifact 7b3305bc4a5139f4536ac9b5f61da0f915e49d2e3fdfa87dfdfa9d7aba8bc1e9:


0000: 2f 2a 0a 2a 2a 20 32 30 30 34 20 4d 61 79 20 32  /*.** 2004 May 2
0010: 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74 68  6.**.** The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c 65  place of.** a le
0060: 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65  gal notice, here
0070: 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a   is a blessing:.
0080: 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f 75  **.**    May you
0090: 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74   do good and not
00a0: 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61 79   evil..**    May
00b0: 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69 76   you find forgiv
00c0: 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73 65  eness for yourse
00d0: 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20 6f  lf and forgive o
00e0: 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61 79  thers..**    May
00f0: 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65 6c   you share freel
0100: 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67 20  y, never taking 
0110: 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67 69  more than you gi
0120: 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ve..**.*********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65  .**.** This file
0180: 20 63 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75   contains code u
0190: 73 65 20 74 6f 20 6d 61 6e 69 70 75 6c 61 74 65  se to manipulate
01a0: 20 22 4d 65 6d 22 20 73 74 72 75 63 74 75 72 65   "Mem" structure
01b0: 2e 20 20 41 20 22 4d 65 6d 22 0a 2a 2a 20 73 74  .  A "Mem".** st
01c0: 6f 72 65 73 20 61 20 73 69 6e 67 6c 65 20 76 61  ores a single va
01d0: 6c 75 65 20 69 6e 20 74 68 65 20 56 44 42 45 2e  lue in the VDBE.
01e0: 20 20 4d 65 6d 20 69 73 20 61 6e 20 6f 70 61 71    Mem is an opaq
01f0: 75 65 20 73 74 72 75 63 74 75 72 65 20 76 69 73  ue structure vis
0200: 69 62 6c 65 0a 2a 2a 20 6f 6e 6c 79 20 77 69 74  ible.** only wit
0210: 68 69 6e 20 74 68 65 20 56 44 42 45 2e 20 20 49  hin the VDBE.  I
0220: 6e 74 65 72 66 61 63 65 20 72 6f 75 74 69 6e 65  nterface routine
0230: 73 20 72 65 66 65 72 20 74 6f 20 61 20 4d 65 6d  s refer to a Mem
0240: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 6e 61   using the.** na
0250: 6d 65 20 73 71 6c 69 74 65 5f 76 61 6c 75 65 0a  me sqlite_value.
0260: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c  */.#include "sql
0270: 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75  iteInt.h".#inclu
0280: 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22 0a 0a  de "vdbeInt.h"..
0290: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
02a0: 42 55 47 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20  BUG./*.** Check 
02b0: 69 6e 76 61 72 69 61 6e 74 73 20 6f 6e 20 61 20  invariants on a 
02c0: 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a  Mem object..**.*
02d0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  * This routine i
02e0: 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75  s intended for u
02f0: 73 65 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73  se inside of ass
0300: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
0310: 2c 20 6c 69 6b 65 0a 2a 2a 20 74 68 69 73 3a 20  , like.** this: 
0320: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
0330: 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
0340: 76 61 72 69 61 6e 74 73 28 70 4d 65 6d 29 20 29  variants(pMem) )
0350: 3b 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ;.*/.int sqlite3
0360: 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61  VdbeCheckMemInva
0370: 72 69 61 6e 74 73 28 4d 65 6d 20 2a 70 29 7b 0a  riants(Mem *p){.
0380: 20 20 2f 2a 20 49 66 20 4d 45 4d 5f 44 79 6e 20    /* If MEM_Dyn 
0390: 69 73 20 73 65 74 20 74 68 65 6e 20 4d 65 6d 2e  is set then Mem.
03a0: 78 44 65 6c 21 3d 30 2e 20 20 0a 20 20 2a 2a 20  xDel!=0.  .  ** 
03b0: 4d 65 6d 2e 78 44 65 6c 20 6d 69 67 68 74 20 6e  Mem.xDel might n
03c0: 6f 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65  ot be initialize
03d0: 64 20 69 66 20 4d 45 4d 5f 44 79 6e 20 69 73 20  d if MEM_Dyn is 
03e0: 63 6c 65 61 72 2e 0a 20 20 2a 2f 0a 20 20 61 73  clear..  */.  as
03f0: 73 65 72 74 28 20 28 70 2d 3e 66 6c 61 67 73 20  sert( (p->flags 
0400: 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 7c 7c  & MEM_Dyn)==0 ||
0410: 20 70 2d 3e 78 44 65 6c 21 3d 30 20 29 3b 0a 0a   p->xDel!=0 );..
0420: 20 20 2f 2a 20 4d 45 4d 5f 44 79 6e 20 6d 61 79    /* MEM_Dyn may
0430: 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69 66 20   only be set if 
0440: 4d 65 6d 2e 73 7a 4d 61 6c 6c 6f 63 3d 3d 30 2e  Mem.szMalloc==0.
0450: 20 20 49 6e 20 74 68 69 73 20 77 61 79 20 77 65    In this way we
0460: 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61  .  ** ensure tha
0470: 74 20 69 66 20 4d 65 6d 2e 73 7a 4d 61 6c 6c 6f  t if Mem.szMallo
0480: 63 3e 30 20 74 68 65 6e 20 69 74 20 69 73 20 73  c>0 then it is s
0490: 61 66 65 20 74 6f 20 64 6f 0a 20 20 2a 2a 20 4d  afe to do.  ** M
04a0: 65 6d 2e 7a 20 3d 20 4d 65 6d 2e 7a 4d 61 6c 6c  em.z = Mem.zMall
04b0: 6f 63 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e  oc without havin
04c0: 67 20 74 6f 20 63 68 65 63 6b 20 4d 65 6d 2e 66  g to check Mem.f
04d0: 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 2e 0a 20 20  lags&MEM_Dyn..  
04e0: 2a 2a 20 54 68 61 74 20 73 61 76 65 73 20 61 20  ** That saves a 
04f0: 66 65 77 20 63 79 63 6c 65 73 20 69 6e 20 69 6e  few cycles in in
0500: 6e 65 72 20 6c 6f 6f 70 73 2e 20 2a 2f 0a 20 20  ner loops. */.  
0510: 61 73 73 65 72 74 28 20 28 70 2d 3e 66 6c 61 67  assert( (p->flag
0520: 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20  s & MEM_Dyn)==0 
0530: 7c 7c 20 70 2d 3e 73 7a 4d 61 6c 6c 6f 63 3d 3d  || p->szMalloc==
0540: 30 20 29 3b 0a 0a 20 20 2f 2a 20 43 61 6e 6e 6f  0 );..  /* Canno
0550: 74 20 62 65 20 62 6f 74 68 20 4d 45 4d 5f 49 6e  t be both MEM_In
0560: 74 20 61 6e 64 20 4d 45 4d 5f 52 65 61 6c 20 61  t and MEM_Real a
0570: 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 20  t the same time 
0580: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  */.  assert( (p-
0590: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
05a0: 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 28 4d  t|MEM_Real))!=(M
05b0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
05c0: 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 66 6c   );..  if( p->fl
05d0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
05e0: 7b 0a 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20  {.    /* Cannot 
05f0: 62 65 20 62 6f 74 68 20 4d 45 4d 5f 4e 75 6c 6c  be both MEM_Null
0600: 20 61 6e 64 20 73 6f 6d 65 20 6f 74 68 65 72 20   and some other 
0610: 74 79 70 65 20 2a 2f 0a 20 20 20 20 61 73 73 65  type */.    asse
0620: 72 74 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20  rt( (p->flags & 
0630: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
0640: 6c 7c 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c  l|MEM_Str|MEM_Bl
0650: 6f 62 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20  ob|MEM_Agg))==0 
0660: 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 4d 45  );..    /* If ME
0670: 4d 5f 4e 75 6c 6c 20 69 73 20 73 65 74 2c 20 74  M_Null is set, t
0680: 68 65 6e 20 65 69 74 68 65 72 20 74 68 65 20 76  hen either the v
0690: 61 6c 75 65 20 69 73 20 61 20 70 75 72 65 20 4e  alue is a pure N
06a0: 55 4c 4c 20 28 74 68 65 20 75 73 75 61 6c 0a 20  ULL (the usual. 
06b0: 20 20 20 2a 2a 20 63 61 73 65 29 20 6f 72 20 69     ** case) or i
06c0: 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 73  t is a pointer s
06d0: 65 74 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  et using sqlite3
06e0: 5f 62 69 6e 64 5f 70 6f 69 6e 74 65 72 28 29 20  _bind_pointer() 
06f0: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
0700: 33 5f 72 65 73 75 6c 74 5f 70 6f 69 6e 74 65 72  3_result_pointer
0710: 28 29 2e 20 20 49 66 20 61 20 70 6f 69 6e 74 65  ().  If a pointe
0720: 72 2c 20 74 68 65 6e 20 4d 45 4d 5f 54 65 72 6d  r, then MEM_Term
0730: 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 20 20   must also be.  
0740: 20 20 2a 2a 20 73 65 74 2e 0a 20 20 20 20 2a 2f    ** set..    */
0750: 0a 20 20 20 20 69 66 28 20 28 70 2d 3e 66 6c 61  .    if( (p->fla
0760: 67 73 20 26 20 28 4d 45 4d 5f 54 65 72 6d 7c 4d  gs & (MEM_Term|M
0770: 45 4d 5f 53 75 62 74 79 70 65 29 29 3d 3d 28 4d  EM_Subtype))==(M
0780: 45 4d 5f 54 65 72 6d 7c 4d 45 4d 5f 53 75 62 74  EM_Term|MEM_Subt
0790: 79 70 65 29 20 29 7b 0a 20 20 20 20 20 20 2f 2a  ype) ){.      /*
07a0: 20 54 68 69 73 20 69 73 20 61 20 70 6f 69 6e 74   This is a point
07b0: 65 72 20 74 79 70 65 2e 20 20 54 68 65 72 65 20  er type.  There 
07c0: 6d 61 79 20 62 65 20 61 20 66 6c 61 67 20 74 6f  may be a flag to
07d0: 20 69 6e 64 69 63 61 74 65 20 77 68 61 74 20 74   indicate what t
07e0: 6f 0a 20 20 20 20 20 20 2a 2a 20 64 6f 20 77 69  o.      ** do wi
07f0: 74 68 20 74 68 65 20 70 6f 69 6e 74 65 72 2e 20  th the pointer. 
0800: 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
0810: 20 28 28 70 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f   ((p->flags&MEM_
0820: 44 79 6e 29 21 3d 30 20 3f 20 31 20 3a 20 30 29  Dyn)!=0 ? 1 : 0)
0830: 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   +.             
0840: 20 28 28 70 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f   ((p->flags&MEM_
0850: 45 70 68 65 6d 29 21 3d 30 20 3f 20 31 20 3a 20  Ephem)!=0 ? 1 : 
0860: 30 29 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20  0) +.           
0870: 20 20 20 28 28 70 2d 3e 66 6c 61 67 73 26 4d 45     ((p->flags&ME
0880: 4d 5f 53 74 61 74 69 63 29 21 3d 30 20 3f 20 31  M_Static)!=0 ? 1
0890: 20 3a 20 30 29 20 3c 3d 20 31 20 29 3b 0a 0a 20   : 0) <= 1 );.. 
08a0: 20 20 20 20 20 2f 2a 20 4e 6f 20 6f 74 68 65 72       /* No other
08b0: 20 62 69 74 73 20 73 65 74 20 2a 2f 0a 20 20 20   bits set */.   
08c0: 20 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 66     assert( (p->f
08d0: 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c  lags & ~(MEM_Nul
08e0: 6c 7c 4d 45 4d 5f 54 65 72 6d 7c 4d 45 4d 5f 53  l|MEM_Term|MEM_S
08f0: 75 62 74 79 70 65 0a 20 20 20 20 20 20 20 20 20  ubtype.         
0900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0910: 20 20 7c 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45    |MEM_Dyn|MEM_E
0920: 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63 29  phem|MEM_Static)
0930: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
0940: 65 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 70 75  e{.      /* A pu
0950: 72 65 20 4e 55 4c 4c 20 6d 69 67 68 74 20 68 61  re NULL might ha
0960: 76 65 20 6f 74 68 65 72 20 66 6c 61 67 73 2c 20  ve other flags, 
0970: 73 75 63 68 20 61 73 20 4d 45 4d 5f 53 74 61 74  such as MEM_Stat
0980: 69 63 2c 20 4d 45 4d 5f 44 79 6e 2c 0a 20 20 20  ic, MEM_Dyn,.   
0990: 20 20 20 2a 2a 20 4d 45 4d 5f 45 70 68 65 6d 2c     ** MEM_Ephem,
09a0: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 2c 20 6f 72   MEM_Cleared, or
09b0: 20 4d 45 4d 5f 53 75 62 74 79 70 65 20 2a 2f 0a   MEM_Subtype */.
09c0: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
09d0: 20 20 20 2f 2a 20 54 68 65 20 4d 45 4d 5f 43 6c     /* The MEM_Cl
09e0: 65 61 72 65 64 20 62 69 74 20 69 73 20 6f 6e 6c  eared bit is onl
09f0: 79 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 4e 55 4c  y allowed on NUL
0a00: 4c 73 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74  Ls */.    assert
0a10: 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  ( (p->flags & ME
0a20: 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b  M_Cleared)==0 );
0a30: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 65 20 73  .  }..  /* The s
0a40: 7a 4d 61 6c 6c 6f 63 20 66 69 65 6c 64 20 68 6f  zMalloc field ho
0a50: 6c 64 73 20 74 68 65 20 63 6f 72 72 65 63 74 20  lds the correct 
0a60: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
0a70: 6e 20 73 69 7a 65 20 2a 2f 0a 20 20 61 73 73 65  n size */.  asse
0a80: 72 74 28 20 70 2d 3e 73 7a 4d 61 6c 6c 6f 63 3d  rt( p->szMalloc=
0a90: 3d 30 0a 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e  =0.       || p->
0aa0: 73 7a 4d 61 6c 6c 6f 63 3d 3d 73 71 6c 69 74 65  szMalloc==sqlite
0ab0: 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 70 2d  3DbMallocSize(p-
0ac0: 3e 64 62 2c 70 2d 3e 7a 4d 61 6c 6c 6f 63 29 20  >db,p->zMalloc) 
0ad0: 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 70 20 68 6f  );..  /* If p ho
0ae0: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20  lds a string or 
0af0: 62 6c 6f 62 2c 20 74 68 65 20 4d 65 6d 2e 7a 20  blob, the Mem.z 
0b00: 6d 75 73 74 20 70 6f 69 6e 74 20 74 6f 20 65 78  must point to ex
0b10: 61 63 74 6c 79 0a 20 20 2a 2a 20 6f 6e 65 20 6f  actly.  ** one o
0b20: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a  f the following:
0b30: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 28 31 29  .  **.  **   (1)
0b40: 20 4d 65 6d 6f 72 79 20 69 6e 20 4d 65 6d 2e 7a   Memory in Mem.z
0b50: 4d 61 6c 6c 6f 63 20 61 6e 64 20 6d 61 6e 61 67  Malloc and manag
0b60: 65 64 20 62 79 20 74 68 65 20 4d 65 6d 20 6f 62  ed by the Mem ob
0b70: 6a 65 63 74 0a 20 20 2a 2a 20 20 20 28 32 29 20  ject.  **   (2) 
0b80: 4d 65 6d 6f 72 79 20 74 6f 20 62 65 20 66 72 65  Memory to be fre
0b90: 65 64 20 75 73 69 6e 67 20 4d 65 6d 2e 78 44 65  ed using Mem.xDe
0ba0: 6c 0a 20 20 2a 2a 20 20 20 28 33 29 20 41 6e 20  l.  **   (3) An 
0bb0: 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67  ephemeral string
0bc0: 20 6f 72 20 62 6c 6f 62 0a 20 20 2a 2a 20 20 20   or blob.  **   
0bd0: 28 34 29 20 41 20 73 74 61 74 69 63 20 73 74 72  (4) A static str
0be0: 69 6e 67 20 6f 72 20 62 6c 6f 62 0a 20 20 2a 2f  ing or blob.  */
0bf0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0c00: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c10: 42 6c 6f 62 29 29 20 26 26 20 70 2d 3e 6e 3e 30  Blob)) && p->n>0
0c20: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
0c30: 0a 20 20 20 20 20 20 28 28 70 2d 3e 73 7a 4d 61  .      ((p->szMa
0c40: 6c 6c 6f 63 3e 30 20 26 26 20 70 2d 3e 7a 3d 3d  lloc>0 && p->z==
0c50: 70 2d 3e 7a 4d 61 6c 6c 6f 63 29 3f 20 31 20 3a  p->zMalloc)? 1 :
0c60: 20 30 29 20 2b 0a 20 20 20 20 20 20 28 28 70 2d   0) +.      ((p-
0c70: 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 21  >flags&MEM_Dyn)!
0c80: 3d 30 20 3f 20 31 20 3a 20 30 29 20 2b 0a 20 20  =0 ? 1 : 0) +.  
0c90: 20 20 20 20 28 28 70 2d 3e 66 6c 61 67 73 26 4d      ((p->flags&M
0ca0: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 3f 20 31  EM_Ephem)!=0 ? 1
0cb0: 20 3a 20 30 29 20 2b 0a 20 20 20 20 20 20 28 28   : 0) +.      ((
0cc0: 70 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 61  p->flags&MEM_Sta
0cd0: 74 69 63 29 21 3d 30 20 3f 20 31 20 3a 20 30 29  tic)!=0 ? 1 : 0)
0ce0: 20 3d 3d 20 31 0a 20 20 20 20 29 3b 0a 20 20 7d   == 1.    );.  }
0cf0: 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23  .  return 1;.}.#
0d00: 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
0d10: 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
0d20: 20 43 68 65 63 6b 20 74 68 61 74 20 73 74 72 69   Check that stri
0d30: 6e 67 20 76 61 6c 75 65 20 6f 66 20 70 4d 65 6d  ng value of pMem
0d40: 20 61 67 72 65 65 73 20 77 69 74 68 20 69 74 73   agrees with its
0d50: 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c   integer or real
0d60: 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 41 20   value..**.** A 
0d70: 73 69 6e 67 6c 65 20 69 6e 74 20 6f 72 20 72 65  single int or re
0d80: 61 6c 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20  al value always 
0d90: 63 6f 6e 76 65 72 74 73 20 74 6f 20 74 68 65 20  converts to the 
0da0: 73 61 6d 65 20 73 74 72 69 6e 67 73 2e 20 20 42  same strings.  B
0db0: 75 74 0a 2a 2a 20 6d 61 6e 79 20 64 69 66 66 65  ut.** many diffe
0dc0: 72 65 6e 74 20 73 74 72 69 6e 67 73 20 63 61 6e  rent strings can
0dd0: 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
0de0: 74 6f 20 74 68 65 20 73 61 6d 65 20 69 6e 74 20  to the same int 
0df0: 6f 72 20 72 65 61 6c 2e 0a 2a 2a 20 49 66 20 61  or real..** If a
0e00: 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20   table contains 
0e10: 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20  a numeric value 
0e20: 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20  and an index is 
0e30: 62 61 73 65 64 20 6f 6e 20 74 68 65 0a 2a 2a 20  based on the.** 
0e40: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 74  corresponding st
0e50: 72 69 6e 67 20 76 61 6c 75 65 2c 20 74 68 65 6e  ring value, then
0e60: 20 69 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74   it is important
0e70: 20 74 68 61 74 20 74 68 65 20 73 74 72 69 6e 67   that the string
0e80: 20 62 65 0a 2a 2a 20 64 65 72 69 76 65 64 20 66   be.** derived f
0e90: 72 6f 6d 20 74 68 65 20 6e 75 6d 65 72 69 63 20  rom the numeric 
0ea0: 76 61 6c 75 65 2c 20 6e 6f 74 20 74 68 65 20 6f  value, not the o
0eb0: 74 68 65 72 20 77 61 79 20 61 72 6f 75 6e 64 2c  ther way around,
0ec0: 20 74 6f 20 65 6e 73 75 72 65 0a 2a 2a 20 74 68   to ensure.** th
0ed0: 61 74 20 74 68 65 20 69 6e 64 65 78 20 61 6e 64  at the index and
0ee0: 20 74 61 62 6c 65 20 61 72 65 20 63 6f 6e 73 69   table are consi
0ef0: 73 74 65 6e 74 2e 20 20 53 65 65 20 74 69 63 6b  stent.  See tick
0f00: 65 74 0a 2a 2a 20 68 74 74 70 73 3a 2f 2f 77 77  et.** https://ww
0f10: 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63  w.sqlite.org/src
0f20: 2f 69 6e 66 6f 2f 33 34 33 36 33 34 39 34 32 64  /info/343634942d
0f30: 64 35 34 61 62 20 28 32 30 31 38 2d 30 31 2d 33  d54ab (2018-01-3
0f40: 31 29 20 66 6f 72 0a 2a 2a 20 61 6e 20 65 78 61  1) for.** an exa
0f50: 6d 70 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  mple..**.** This
0f60: 20 72 6f 75 74 69 6e 65 20 6c 6f 6f 6b 73 20 61   routine looks a
0f70: 74 20 70 4d 65 6d 20 74 6f 20 76 65 72 69 66 79  t pMem to verify
0f80: 20 74 68 61 74 20 69 66 20 69 74 20 68 61 73 20   that if it has 
0f90: 62 6f 74 68 20 61 20 6e 75 6d 65 72 69 63 0a 2a  both a numeric.*
0fa0: 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  * representation
0fb0: 20 61 6e 64 20 61 20 73 74 72 69 6e 67 20 72 65   and a string re
0fc0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 74 68 65  presentation the
0fd0: 6e 20 74 68 65 20 73 74 72 69 6e 67 20 72 65 70  n the string rep
0fe0: 20 68 61 73 0a 2a 2a 20 62 65 65 6e 20 64 65 72   has.** been der
0ff0: 69 76 65 64 20 66 72 6f 6d 20 74 68 65 20 6e 75  ived from the nu
1000: 6d 65 72 69 63 20 61 6e 64 20 6e 6f 74 20 74 68  meric and not th
1010: 65 20 6f 74 68 65 72 20 77 61 79 20 61 72 6f 75  e other way arou
1020: 6e 64 2e 20 20 49 74 20 72 65 74 75 72 6e 73 0a  nd.  It returns.
1030: 2a 2a 20 74 72 75 65 20 69 66 20 65 76 65 72 79  ** true if every
1040: 74 68 69 6e 67 20 69 73 20 6f 6b 20 61 6e 64 20  thing is ok and 
1050: 66 61 6c 73 65 20 69 66 20 74 68 65 72 65 20 69  false if there i
1060: 73 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a  s a problem..**.
1070: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
1080: 69 73 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64  is for use insid
1090: 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74  e of assert() st
10a0: 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e 0a 2a  atements only..*
10b0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  /.int sqlite3Vdb
10c0: 65 4d 65 6d 43 6f 6e 73 69 73 74 65 6e 74 44 75  eMemConsistentDu
10d0: 61 6c 52 65 70 28 4d 65 6d 20 2a 70 29 7b 0a 20  alRep(Mem *p){. 
10e0: 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b   char zBuf[100];
10f0: 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 6e  .  char *z;.  in
1100: 74 20 69 2c 20 6a 2c 20 69 6e 63 72 3b 0a 20 20  t i, j, incr;.  
1110: 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20  if( (p->flags & 
1120: 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 29 20 72 65  MEM_Str)==0 ) re
1130: 74 75 72 6e 20 31 3b 0a 20 20 69 66 28 20 28 70  turn 1;.  if( (p
1140: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
1150: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30  nt|MEM_Real))==0
1160: 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 69   ) return 1;.  i
1170: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
1180: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
1190: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
11a0: 7a 65 6f 66 28 7a 42 75 66 29 2c 7a 42 75 66 2c  zeof(zBuf),zBuf,
11b0: 22 25 6c 6c 64 22 2c 70 2d 3e 75 2e 69 29 3b 0a  "%lld",p->u.i);.
11c0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
11d0: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
11e0: 7a 65 6f 66 28 7a 42 75 66 29 2c 7a 42 75 66 2c  zeof(zBuf),zBuf,
11f0: 22 25 21 2e 31 35 67 22 2c 70 2d 3e 75 2e 72 29  "%!.15g",p->u.r)
1200: 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 70 2d 3e 7a  ;.  }.  z = p->z
1210: 3b 0a 20 20 69 20 3d 20 6a 20 3d 20 30 3b 0a 20  ;.  i = j = 0;. 
1220: 20 69 6e 63 72 20 3d 20 31 3b 0a 20 20 69 66 28   incr = 1;.  if(
1230: 20 70 2d 3e 65 6e 63 21 3d 53 51 4c 49 54 45 5f   p->enc!=SQLITE_
1240: 55 54 46 38 20 29 7b 0a 20 20 20 20 69 6e 63 72  UTF8 ){.    incr
1250: 20 3d 20 32 3b 0a 20 20 20 20 69 66 28 20 70 2d   = 2;.    if( p-
1260: 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  >enc==SQLITE_UTF
1270: 31 36 42 45 20 29 20 7a 2b 2b 3b 0a 20 20 7d 0a  16BE ) z++;.  }.
1280: 20 20 77 68 69 6c 65 28 20 7a 42 75 66 5b 6a 5d    while( zBuf[j]
1290: 20 29 7b 0a 20 20 20 20 69 66 28 20 7a 42 75 66   ){.    if( zBuf
12a0: 5b 6a 2b 2b 5d 21 3d 7a 5b 69 5d 20 29 20 72 65  [j++]!=z[i] ) re
12b0: 74 75 72 6e 20 30 3b 0a 20 20 20 20 69 20 2b 3d  turn 0;.    i +=
12c0: 20 69 6e 63 72 3b 0a 20 20 7d 0a 20 20 72 65 74   incr;.  }.  ret
12d0: 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 20  urn 1;.}.#endif 
12e0: 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
12f0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 70 4d 65  */../*.** If pMe
1300: 6d 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 77  m is an object w
1310: 69 74 68 20 61 20 76 61 6c 69 64 20 73 74 72 69  ith a valid stri
1320: 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ng representatio
1330: 6e 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a  n, this routine.
1340: 2a 2a 20 65 6e 73 75 72 65 73 20 74 68 65 20 69  ** ensures the i
1350: 6e 74 65 72 6e 61 6c 20 65 6e 63 6f 64 69 6e 67  nternal encoding
1360: 20 66 6f 72 20 74 68 65 20 73 74 72 69 6e 67 20   for the string 
1370: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
1380: 73 0a 2a 2a 20 27 64 65 73 69 72 65 64 45 6e 63  s.** 'desiredEnc
1390: 27 2c 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45  ', one of SQLITE
13a0: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54  _UTF8, SQLITE_UT
13b0: 46 31 36 4c 45 20 6f 72 20 53 51 4c 49 54 45 5f  F16LE or SQLITE_
13c0: 55 54 46 31 36 42 45 2e 0a 2a 2a 0a 2a 2a 20 49  UTF16BE..**.** I
13d0: 66 20 70 4d 65 6d 20 69 73 20 6e 6f 74 20 61 20  f pMem is not a 
13e0: 73 74 72 69 6e 67 20 6f 62 6a 65 63 74 2c 20 6f  string object, o
13f0: 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f  r the encoding o
1400: 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20  f the string.** 
1410: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
1420: 73 20 61 6c 72 65 61 64 79 20 73 74 6f 72 65 64  s already stored
1430: 20 75 73 69 6e 67 20 74 68 65 20 72 65 71 75 65   using the reque
1440: 73 74 65 64 20 65 6e 63 6f 64 69 6e 67 2c 20 74  sted encoding, t
1450: 68 65 6e 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74  hen this.** rout
1460: 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ine is a no-op..
1470: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4f 4b 20  **.** SQLITE_OK 
1480: 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 74  is returned if t
1490: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73  he conversion is
14a0: 20 73 75 63 63 65 73 73 66 75 6c 20 28 6f 72 20   successful (or 
14b0: 6e 6f 74 20 72 65 71 75 69 72 65 64 29 2e 0a 2a  not required)..*
14c0: 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 6d  * SQLITE_NOMEM m
14d0: 61 79 20 62 65 20 72 65 74 75 72 6e 65 64 20 69  ay be returned i
14e0: 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  f a malloc() fai
14f0: 6c 73 20 64 75 72 69 6e 67 20 63 6f 6e 76 65 72  ls during conver
1500: 73 69 6f 6e 0a 2a 2a 20 62 65 74 77 65 65 6e 20  sion.** between 
1510: 66 6f 72 6d 61 74 73 2e 0a 2a 2f 0a 69 6e 74 20  formats..*/.int 
1520: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
1530: 65 45 6e 63 6f 64 69 6e 67 28 4d 65 6d 20 2a 70  eEncoding(Mem *p
1540: 4d 65 6d 2c 20 69 6e 74 20 64 65 73 69 72 65 64  Mem, int desired
1550: 45 6e 63 29 7b 0a 23 69 66 6e 64 65 66 20 53 51  Enc){.#ifndef SQ
1560: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
1570: 20 20 69 6e 74 20 72 63 3b 0a 23 65 6e 64 69 66    int rc;.#endif
1580: 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69  .  assert( !sqli
1590: 74 65 33 56 64 62 65 4d 65 6d 49 73 52 6f 77 53  te3VdbeMemIsRowS
15a0: 65 74 28 70 4d 65 6d 29 20 29 3b 0a 20 20 61 73  et(pMem) );.  as
15b0: 73 65 72 74 28 20 64 65 73 69 72 65 64 45 6e 63  sert( desiredEnc
15c0: 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 7c 7c  ==SQLITE_UTF8 ||
15d0: 20 64 65 73 69 72 65 64 45 6e 63 3d 3d 53 51 4c   desiredEnc==SQL
15e0: 49 54 45 5f 55 54 46 31 36 4c 45 0a 20 20 20 20  ITE_UTF16LE.    
15f0: 20 20 20 20 20 20 20 7c 7c 20 64 65 73 69 72 65         || desire
1600: 64 45 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  dEnc==SQLITE_UTF
1610: 31 36 42 45 20 29 3b 0a 20 20 69 66 28 20 21 28  16BE );.  if( !(
1620: 70 4d 65 6d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pMem->flags&MEM_
1630: 53 74 72 29 20 7c 7c 20 70 4d 65 6d 2d 3e 65 6e  Str) || pMem->en
1640: 63 3d 3d 64 65 73 69 72 65 64 45 6e 63 20 29 7b  c==desiredEnc ){
1650: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
1660: 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 61 73 73  TE_OK;.  }.  ass
1670: 65 72 74 28 20 70 4d 65 6d 2d 3e 64 62 3d 3d 30  ert( pMem->db==0
1680: 20 7c 7c 20 73 71 6c 69 74 65 33 5f 6d 75 74 65   || sqlite3_mute
1690: 78 5f 68 65 6c 64 28 70 4d 65 6d 2d 3e 64 62 2d  x_held(pMem->db-
16a0: 3e 6d 75 74 65 78 29 20 29 3b 0a 23 69 66 64 65  >mutex) );.#ifde
16b0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
16c0: 46 31 36 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  F16.  return SQL
16d0: 49 54 45 5f 45 52 52 4f 52 3b 0a 23 65 6c 73 65  ITE_ERROR;.#else
16e0: 0a 0a 20 20 2f 2a 20 4d 65 6d 54 72 61 6e 73 6c  ..  /* MemTransl
16f0: 61 74 65 28 29 20 6d 61 79 20 72 65 74 75 72 6e  ate() may return
1700: 20 53 51 4c 49 54 45 5f 4f 4b 20 6f 72 20 53 51   SQLITE_OK or SQ
1710: 4c 49 54 45 5f 4e 4f 4d 45 4d 2e 20 49 66 20 4e  LITE_NOMEM. If N
1720: 4f 4d 45 4d 20 69 73 20 72 65 74 75 72 6e 65 64  OMEM is returned
1730: 2c 0a 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20  ,.  ** then the 
1740: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68 65 20  encoding of the 
1750: 76 61 6c 75 65 20 6d 61 79 20 6e 6f 74 20 68 61  value may not ha
1760: 76 65 20 63 68 61 6e 67 65 64 2e 0a 20 20 2a 2f  ve changed..  */
1770: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
1780: 64 62 65 4d 65 6d 54 72 61 6e 73 6c 61 74 65 28  dbeMemTranslate(
1790: 70 4d 65 6d 2c 20 28 75 38 29 64 65 73 69 72 65  pMem, (u8)desire
17a0: 64 45 6e 63 29 3b 0a 20 20 61 73 73 65 72 74 28  dEnc);.  assert(
17b0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 20 20  rc==SQLITE_OK   
17c0: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e   || rc==SQLITE_N
17d0: 4f 4d 45 4d 29 3b 0a 20 20 61 73 73 65 72 74 28  OMEM);.  assert(
17e0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 20 20  rc==SQLITE_OK   
17f0: 20 7c 7c 20 70 4d 65 6d 2d 3e 65 6e 63 21 3d 64   || pMem->enc!=d
1800: 65 73 69 72 65 64 45 6e 63 29 3b 0a 20 20 61 73  esiredEnc);.  as
1810: 73 65 72 74 28 72 63 3d 3d 53 51 4c 49 54 45 5f  sert(rc==SQLITE_
1820: 4e 4f 4d 45 4d 20 7c 7c 20 70 4d 65 6d 2d 3e 65  NOMEM || pMem->e
1830: 6e 63 3d 3d 64 65 73 69 72 65 64 45 6e 63 29 3b  nc==desiredEnc);
1840: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 23 65  .  return rc;.#e
1850: 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4d 61  ndif.}../*.** Ma
1860: 6b 65 20 73 75 72 65 20 70 4d 65 6d 2d 3e 7a 20  ke sure pMem->z 
1870: 70 6f 69 6e 74 73 20 74 6f 20 61 20 77 72 69 74  points to a writ
1880: 61 62 6c 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  able allocation 
1890: 6f 66 20 61 74 20 6c 65 61 73 74 20 0a 2a 2a 20  of at least .** 
18a0: 6d 69 6e 28 6e 2c 33 32 29 20 62 79 74 65 73 2e  min(n,32) bytes.
18b0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 50  .**.** If the bP
18c0: 72 65 73 65 72 76 65 20 61 72 67 75 6d 65 6e 74  reserve argument
18d0: 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 63   is true, then c
18e0: 6f 70 79 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  opy of the conte
18f0: 6e 74 20 6f 66 0a 2a 2a 20 70 4d 65 6d 2d 3e 7a  nt of.** pMem->z
1900: 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 20 61 6c   into the new al
1910: 6c 6f 63 61 74 69 6f 6e 2e 20 20 70 4d 65 6d 20  location.  pMem 
1920: 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20 61  must be either a
1930: 20 73 74 72 69 6e 67 20 6f 72 0a 2a 2a 20 62 6c   string or.** bl
1940: 6f 62 20 69 66 20 62 50 72 65 73 65 72 76 65 20  ob if bPreserve 
1950: 69 73 20 74 72 75 65 2e 20 20 49 66 20 62 50 72  is true.  If bPr
1960: 65 73 65 72 76 65 20 69 73 20 66 61 6c 73 65 2c  eserve is false,
1970: 20 61 6e 79 20 70 72 69 6f 72 20 63 6f 6e 74 65   any prior conte
1980: 6e 74 0a 2a 2a 20 69 6e 20 70 4d 65 6d 2d 3e 7a  nt.** in pMem->z
1990: 20 69 73 20 64 69 73 63 61 72 64 65 64 2e 0a 2a   is discarded..*
19a0: 2f 0a 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e  /.SQLITE_NOINLIN
19b0: 45 20 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  E int sqlite3Vdb
19c0: 65 4d 65 6d 47 72 6f 77 28 4d 65 6d 20 2a 70 4d  eMemGrow(Mem *pM
19d0: 65 6d 2c 20 69 6e 74 20 6e 2c 20 69 6e 74 20 62  em, int n, int b
19e0: 50 72 65 73 65 72 76 65 29 7b 0a 20 20 61 73 73  Preserve){.  ass
19f0: 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
1a00: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
1a10: 74 73 28 70 4d 65 6d 29 20 29 3b 0a 20 20 61 73  ts(pMem) );.  as
1a20: 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 56 64  sert( !sqlite3Vd
1a30: 62 65 4d 65 6d 49 73 52 6f 77 53 65 74 28 70 4d  beMemIsRowSet(pM
1a40: 65 6d 29 20 29 3b 0a 20 20 74 65 73 74 63 61 73  em) );.  testcas
1a50: 65 28 20 70 4d 65 6d 2d 3e 64 62 3d 3d 30 20 29  e( pMem->db==0 )
1a60: 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 62  ;..  /* If the b
1a70: 50 72 65 73 65 72 76 65 20 66 6c 61 67 20 69 73  Preserve flag is
1a80: 20 73 65 74 20 74 6f 20 74 72 75 65 2c 20 74 68   set to true, th
1a90: 65 6e 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  en the memory ce
1aa0: 6c 6c 20 6d 75 73 74 20 61 6c 72 65 61 64 79 0a  ll must already.
1ab0: 20 20 2a 2a 20 63 6f 6e 74 61 69 6e 20 61 20 76    ** contain a v
1ac0: 61 6c 69 64 20 73 74 72 69 6e 67 20 6f 72 20 62  alid string or b
1ad0: 6c 6f 62 20 76 61 6c 75 65 2e 20 20 2a 2f 0a 20  lob value.  */. 
1ae0: 20 61 73 73 65 72 74 28 20 62 50 72 65 73 65 72   assert( bPreser
1af0: 76 65 3d 3d 30 20 7c 7c 20 70 4d 65 6d 2d 3e 66  ve==0 || pMem->f
1b00: 6c 61 67 73 26 28 4d 45 4d 5f 42 6c 6f 62 7c 4d  lags&(MEM_Blob|M
1b10: 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 74 65 73  EM_Str) );.  tes
1b20: 74 63 61 73 65 28 20 62 50 72 65 73 65 72 76 65  tcase( bPreserve
1b30: 20 26 26 20 70 4d 65 6d 2d 3e 7a 3d 3d 30 20 29   && pMem->z==0 )
1b40: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4d 65  ;..  assert( pMe
1b50: 6d 2d 3e 73 7a 4d 61 6c 6c 6f 63 3d 3d 30 0a 20  m->szMalloc==0. 
1b60: 20 20 20 20 20 20 7c 7c 20 70 4d 65 6d 2d 3e 73        || pMem->s
1b70: 7a 4d 61 6c 6c 6f 63 3d 3d 73 71 6c 69 74 65 33  zMalloc==sqlite3
1b80: 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 70 4d 65  DbMallocSize(pMe
1b90: 6d 2d 3e 64 62 2c 20 70 4d 65 6d 2d 3e 7a 4d 61  m->db, pMem->zMa
1ba0: 6c 6c 6f 63 29 20 29 3b 0a 20 20 69 66 28 20 6e  lloc) );.  if( n
1bb0: 3c 33 32 20 29 20 6e 20 3d 20 33 32 3b 0a 20 20  <32 ) n = 32;.  
1bc0: 69 66 28 20 70 4d 65 6d 2d 3e 73 7a 4d 61 6c 6c  if( pMem->szMall
1bd0: 6f 63 3e 30 20 26 26 20 62 50 72 65 73 65 72 76  oc>0 && bPreserv
1be0: 65 20 26 26 20 70 4d 65 6d 2d 3e 7a 3d 3d 70 4d  e && pMem->z==pM
1bf0: 65 6d 2d 3e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20  em->zMalloc ){. 
1c00: 20 20 20 70 4d 65 6d 2d 3e 7a 20 3d 20 70 4d 65     pMem->z = pMe
1c10: 6d 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 71 6c  m->zMalloc = sql
1c20: 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46  ite3DbReallocOrF
1c30: 72 65 65 28 70 4d 65 6d 2d 3e 64 62 2c 20 70 4d  ree(pMem->db, pM
1c40: 65 6d 2d 3e 7a 2c 20 6e 29 3b 0a 20 20 20 20 62  em->z, n);.    b
1c50: 50 72 65 73 65 72 76 65 20 3d 20 30 3b 0a 20 20  Preserve = 0;.  
1c60: 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70  }else{.    if( p
1c70: 4d 65 6d 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20  Mem->szMalloc>0 
1c80: 29 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e  ) sqlite3DbFreeN
1c90: 4e 28 70 4d 65 6d 2d 3e 64 62 2c 20 70 4d 65 6d  N(pMem->db, pMem
1ca0: 2d 3e 7a 4d 61 6c 6c 6f 63 29 3b 0a 20 20 20 20  ->zMalloc);.    
1cb0: 70 4d 65 6d 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20  pMem->zMalloc = 
1cc0: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
1cd0: 61 77 28 70 4d 65 6d 2d 3e 64 62 2c 20 6e 29 3b  aw(pMem->db, n);
1ce0: 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d 2d  .  }.  if( pMem-
1cf0: 3e 7a 4d 61 6c 6c 6f 63 3d 3d 30 20 29 7b 0a 20  >zMalloc==0 ){. 
1d00: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
1d10: 6d 53 65 74 4e 75 6c 6c 28 70 4d 65 6d 29 3b 0a  mSetNull(pMem);.
1d20: 20 20 20 20 70 4d 65 6d 2d 3e 7a 20 3d 20 30 3b      pMem->z = 0;
1d30: 0a 20 20 20 20 70 4d 65 6d 2d 3e 73 7a 4d 61 6c  .    pMem->szMal
1d40: 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 72 65 74  loc = 0;.    ret
1d50: 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  urn SQLITE_NOMEM
1d60: 5f 42 4b 50 54 3b 0a 20 20 7d 65 6c 73 65 7b 0a  _BKPT;.  }else{.
1d70: 20 20 20 20 70 4d 65 6d 2d 3e 73 7a 4d 61 6c 6c      pMem->szMall
1d80: 6f 63 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  oc = sqlite3DbMa
1d90: 6c 6c 6f 63 53 69 7a 65 28 70 4d 65 6d 2d 3e 64  llocSize(pMem->d
1da0: 62 2c 20 70 4d 65 6d 2d 3e 7a 4d 61 6c 6c 6f 63  b, pMem->zMalloc
1db0: 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 62 50  );.  }..  if( bP
1dc0: 72 65 73 65 72 76 65 20 26 26 20 70 4d 65 6d 2d  reserve && pMem-
1dd0: 3e 7a 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  >z ){.    assert
1de0: 28 20 70 4d 65 6d 2d 3e 7a 21 3d 70 4d 65 6d 2d  ( pMem->z!=pMem-
1df0: 3e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20  >zMalloc );.    
1e00: 6d 65 6d 63 70 79 28 70 4d 65 6d 2d 3e 7a 4d 61  memcpy(pMem->zMa
1e10: 6c 6c 6f 63 2c 20 70 4d 65 6d 2d 3e 7a 2c 20 70  lloc, pMem->z, p
1e20: 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 69  Mem->n);.  }.  i
1e30: 66 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 26  f( (pMem->flags&
1e40: 4d 45 4d 5f 44 79 6e 29 21 3d 30 20 29 7b 0a 20  MEM_Dyn)!=0 ){. 
1e50: 20 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d 2d     assert( pMem-
1e60: 3e 78 44 65 6c 21 3d 30 20 26 26 20 70 4d 65 6d  >xDel!=0 && pMem
1e70: 2d 3e 78 44 65 6c 21 3d 53 51 4c 49 54 45 5f 44  ->xDel!=SQLITE_D
1e80: 59 4e 41 4d 49 43 20 29 3b 0a 20 20 20 20 70 4d  YNAMIC );.    pM
1e90: 65 6d 2d 3e 78 44 65 6c 28 28 76 6f 69 64 20 2a  em->xDel((void *
1ea0: 29 28 70 4d 65 6d 2d 3e 7a 29 29 3b 0a 20 20 7d  )(pMem->z));.  }
1eb0: 0a 0a 20 20 70 4d 65 6d 2d 3e 7a 20 3d 20 70 4d  ..  pMem->z = pM
1ec0: 65 6d 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 70  em->zMalloc;.  p
1ed0: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28  Mem->flags &= ~(
1ee0: 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65  MEM_Dyn|MEM_Ephe
1ef0: 6d 7c 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  m|MEM_Static);. 
1f00: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
1f10: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 61 6e  K;.}../*.** Chan
1f20: 67 65 20 74 68 65 20 70 4d 65 6d 2d 3e 7a 4d 61  ge the pMem->zMa
1f30: 6c 6c 6f 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  lloc allocation 
1f40: 74 6f 20 62 65 20 61 74 20 6c 65 61 73 74 20 73  to be at least s
1f50: 7a 4e 65 77 20 62 79 74 65 73 2e 0a 2a 2a 20 49  zNew bytes..** I
1f60: 66 20 70 4d 65 6d 2d 3e 7a 4d 61 6c 6c 6f 63 20  f pMem->zMalloc 
1f70: 61 6c 72 65 61 64 79 20 6d 65 65 74 73 20 6f 72  already meets or
1f80: 20 65 78 63 65 65 64 73 20 74 68 65 20 72 65 71   exceeds the req
1f90: 75 65 73 74 65 64 20 73 69 7a 65 2c 20 74 68 69  uested size, thi
1fa0: 73 0a 2a 2a 20 72 6f 75 74 69 6e 65 20 69 73 20  s.** routine is 
1fb0: 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41  a no-op..**.** A
1fc0: 6e 79 20 70 72 69 6f 72 20 73 74 72 69 6e 67 20  ny prior string 
1fd0: 6f 72 20 62 6c 6f 62 20 63 6f 6e 74 65 6e 74 20  or blob content 
1fe0: 69 6e 20 74 68 65 20 70 4d 65 6d 20 6f 62 6a 65  in the pMem obje
1ff0: 63 74 20 6d 61 79 20 62 65 20 64 69 73 63 61 72  ct may be discar
2000: 64 65 64 2e 0a 2a 2a 20 54 68 65 20 70 4d 65 6d  ded..** The pMem
2010: 2d 3e 78 44 65 6c 20 64 65 73 74 72 75 63 74 6f  ->xDel destructo
2020: 72 20 69 73 20 63 61 6c 6c 65 64 2c 20 69 66 20  r is called, if 
2030: 69 74 20 65 78 69 73 74 73 2e 20 20 54 68 6f 75  it exists.  Thou
2040: 67 68 20 4d 45 4d 5f 53 74 72 0a 2a 2a 20 61 6e  gh MEM_Str.** an
2050: 64 20 4d 45 4d 5f 42 6c 6f 62 20 76 61 6c 75 65  d MEM_Blob value
2060: 73 20 6d 61 79 20 62 65 20 64 69 73 63 61 72 64  s may be discard
2070: 65 64 2c 20 4d 45 4d 5f 49 6e 74 2c 20 4d 45 4d  ed, MEM_Int, MEM
2080: 5f 52 65 61 6c 2c 20 61 6e 64 20 4d 45 4d 5f 4e  _Real, and MEM_N
2090: 75 6c 6c 0a 2a 2a 20 76 61 6c 75 65 73 20 61 72  ull.** values ar
20a0: 65 20 70 72 65 73 65 72 76 65 64 2e 0a 2a 2a 0a  e preserved..**.
20b0: 2a 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45  ** Return SQLITE
20c0: 5f 4f 4b 20 6f 6e 20 73 75 63 63 65 73 73 20 6f  _OK on success o
20d0: 72 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  r an error code 
20e0: 28 70 72 6f 62 61 62 6c 79 20 53 51 4c 49 54 45  (probably SQLITE
20f0: 5f 4e 4f 4d 45 4d 29 0a 2a 2a 20 69 66 20 75 6e  _NOMEM).** if un
2100: 61 62 6c 65 20 74 6f 20 63 6f 6d 70 6c 65 74 65  able to complete
2110: 20 74 68 65 20 72 65 73 69 7a 69 6e 67 2e 0a 2a   the resizing..*
2120: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  /.int sqlite3Vdb
2130: 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69  eMemClearAndResi
2140: 7a 65 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 69 6e  ze(Mem *pMem, in
2150: 74 20 73 7a 4e 65 77 29 7b 0a 20 20 61 73 73 65  t szNew){.  asse
2160: 72 74 28 20 73 7a 4e 65 77 3e 30 20 29 3b 0a 20  rt( szNew>0 );. 
2170: 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
2180: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
2190: 3d 3d 30 20 7c 7c 20 70 4d 65 6d 2d 3e 73 7a 4d  ==0 || pMem->szM
21a0: 61 6c 6c 6f 63 3d 3d 30 20 29 3b 0a 20 20 69 66  alloc==0 );.  if
21b0: 28 20 70 4d 65 6d 2d 3e 73 7a 4d 61 6c 6c 6f 63  ( pMem->szMalloc
21c0: 3c 73 7a 4e 65 77 20 29 7b 0a 20 20 20 20 72 65  <szNew ){.    re
21d0: 74 75 72 6e 20 73 71 6c 69 74 65 33 56 64 62 65  turn sqlite3Vdbe
21e0: 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 73 7a  MemGrow(pMem, sz
21f0: 4e 65 77 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 61  New, 0);.  }.  a
2200: 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
2210: 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d  ags & MEM_Dyn)==
2220: 30 20 29 3b 0a 20 20 70 4d 65 6d 2d 3e 7a 20 3d  0 );.  pMem->z =
2230: 20 70 4d 65 6d 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a   pMem->zMalloc;.
2240: 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 3d    pMem->flags &=
2250: 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 49   (MEM_Null|MEM_I
2260: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  nt|MEM_Real);.  
2270: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
2280: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 74 20 69 73  ;.}../*.** It is
2290: 20 61 6c 72 65 61 64 79 20 6b 6e 6f 77 6e 20 74   already known t
22a0: 68 61 74 20 70 4d 65 6d 20 63 6f 6e 74 61 69 6e  hat pMem contain
22b0: 73 20 61 6e 20 75 6e 74 65 72 6d 69 6e 61 74 65  s an unterminate
22c0: 64 20 73 74 72 69 6e 67 2e 0a 2a 2a 20 41 64 64  d string..** Add
22d0: 20 74 68 65 20 7a 65 72 6f 20 74 65 72 6d 69 6e   the zero termin
22e0: 61 74 6f 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ator..*/.static 
22f0: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20  SQLITE_NOINLINE 
2300: 69 6e 74 20 76 64 62 65 4d 65 6d 41 64 64 54 65  int vdbeMemAddTe
2310: 72 6d 69 6e 61 74 6f 72 28 4d 65 6d 20 2a 70 4d  rminator(Mem *pM
2320: 65 6d 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74  em){.  if( sqlit
2330: 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d  e3VdbeMemGrow(pM
2340: 65 6d 2c 20 70 4d 65 6d 2d 3e 6e 2b 32 2c 20 31  em, pMem->n+2, 1
2350: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
2360: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50  SQLITE_NOMEM_BKP
2370: 54 3b 0a 20 20 7d 0a 20 20 70 4d 65 6d 2d 3e 7a  T;.  }.  pMem->z
2380: 5b 70 4d 65 6d 2d 3e 6e 5d 20 3d 20 30 3b 0a 20  [pMem->n] = 0;. 
2390: 20 70 4d 65 6d 2d 3e 7a 5b 70 4d 65 6d 2d 3e 6e   pMem->z[pMem->n
23a0: 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4d 65 6d 2d  +1] = 0;.  pMem-
23b0: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65  >flags |= MEM_Te
23c0: 72 6d 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  rm;.  return SQL
23d0: 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ITE_OK;.}../*.**
23e0: 20 43 68 61 6e 67 65 20 70 4d 65 6d 20 73 6f 20   Change pMem so 
23f0: 74 68 61 74 20 69 74 73 20 4d 45 4d 5f 53 74 72  that its MEM_Str
2400: 20 6f 72 20 4d 45 4d 5f 42 6c 6f 62 20 76 61 6c   or MEM_Blob val
2410: 75 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 0a  ue is stored in.
2420: 2a 2a 20 4d 45 4d 2e 7a 4d 61 6c 6c 6f 63 2c 20  ** MEM.zMalloc, 
2430: 77 68 65 72 65 20 69 74 20 63 61 6e 20 62 65 20  where it can be 
2440: 73 61 66 65 6c 79 20 77 72 69 74 74 65 6e 2e 0a  safely written..
2450: 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 53 51 4c  **.** Return SQL
2460: 49 54 45 5f 4f 4b 20 6f 6e 20 73 75 63 63 65 73  ITE_OK on succes
2470: 73 20 6f 72 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  s or SQLITE_NOME
2480: 4d 20 69 66 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  M if malloc fail
2490: 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  s..*/.int sqlite
24a0: 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74  3VdbeMemMakeWrit
24b0: 65 61 62 6c 65 28 4d 65 6d 20 2a 70 4d 65 6d 29  eable(Mem *pMem)
24c0: 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d  {.  assert( pMem
24d0: 2d 3e 64 62 3d 3d 30 20 7c 7c 20 73 71 6c 69 74  ->db==0 || sqlit
24e0: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 4d  e3_mutex_held(pM
24f0: 65 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29  em->db->mutex) )
2500: 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c  ;.  assert( !sql
2510: 69 74 65 33 56 64 62 65 4d 65 6d 49 73 52 6f 77  ite3VdbeMemIsRow
2520: 53 65 74 28 70 4d 65 6d 29 20 29 3b 0a 20 20 69  Set(pMem) );.  i
2530: 66 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  f( (pMem->flags 
2540: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
2550: 6c 6f 62 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  lob))!=0 ){.    
2560: 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  if( ExpandBlob(p
2570: 4d 65 6d 29 20 29 20 72 65 74 75 72 6e 20 53 51  Mem) ) return SQ
2580: 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20  LITE_NOMEM;.    
2590: 69 66 28 20 70 4d 65 6d 2d 3e 73 7a 4d 61 6c 6c  if( pMem->szMall
25a0: 6f 63 3d 3d 30 20 7c 7c 20 70 4d 65 6d 2d 3e 7a  oc==0 || pMem->z
25b0: 21 3d 70 4d 65 6d 2d 3e 7a 4d 61 6c 6c 6f 63 20  !=pMem->zMalloc 
25c0: 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 72 63 20  ){.      int rc 
25d0: 3d 20 76 64 62 65 4d 65 6d 41 64 64 54 65 72 6d  = vdbeMemAddTerm
25e0: 69 6e 61 74 6f 72 28 70 4d 65 6d 29 3b 0a 20 20  inator(pMem);.  
25f0: 20 20 20 20 69 66 28 20 72 63 20 29 20 72 65 74      if( rc ) ret
2600: 75 72 6e 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20  urn rc;.    }.  
2610: 7d 0a 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  }.  pMem->flags 
2620: 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 23  &= ~MEM_Ephem;.#
2630: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2640: 55 47 0a 20 20 70 4d 65 6d 2d 3e 70 53 63 6f 70  UG.  pMem->pScop
2650: 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69  yFrom = 0;.#endi
2660: 66 0a 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49  f..  return SQLI
2670: 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  TE_OK;.}../*.** 
2680: 49 66 20 74 68 65 20 67 69 76 65 6e 20 4d 65 6d  If the given Mem
2690: 2a 20 68 61 73 20 61 20 7a 65 72 6f 2d 66 69 6c  * has a zero-fil
26a0: 6c 65 64 20 74 61 69 6c 2c 20 74 75 72 6e 20 69  led tail, turn i
26b0: 74 20 69 6e 74 6f 20 61 6e 20 6f 72 64 69 6e 61  t into an ordina
26c0: 72 79 0a 2a 2a 20 62 6c 6f 62 20 73 74 6f 72 65  ry.** blob store
26d0: 64 20 69 6e 20 64 79 6e 61 6d 69 63 61 6c 6c 79  d in dynamically
26e0: 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65   allocated space
26f0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
2700: 49 54 45 5f 4f 4d 49 54 5f 49 4e 43 52 42 4c 4f  ITE_OMIT_INCRBLO
2710: 42 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  B.int sqlite3Vdb
2720: 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 4d  eMemExpandBlob(M
2730: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74  em *pMem){.  int
2740: 20 6e 42 79 74 65 3b 0a 20 20 61 73 73 65 72 74   nByte;.  assert
2750: 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20  ( pMem->flags & 
2760: 4d 45 4d 5f 5a 65 72 6f 20 29 3b 0a 20 20 61 73  MEM_Zero );.  as
2770: 73 65 72 74 28 20 70 4d 65 6d 2d 3e 66 6c 61 67  sert( pMem->flag
2780: 73 26 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  s&MEM_Blob );.  
2790: 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33  assert( !sqlite3
27a0: 56 64 62 65 4d 65 6d 49 73 52 6f 77 53 65 74 28  VdbeMemIsRowSet(
27b0: 70 4d 65 6d 29 20 29 3b 0a 20 20 61 73 73 65 72  pMem) );.  asser
27c0: 74 28 20 70 4d 65 6d 2d 3e 64 62 3d 3d 30 20 7c  t( pMem->db==0 |
27d0: 7c 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  | sqlite3_mutex_
27e0: 68 65 6c 64 28 70 4d 65 6d 2d 3e 64 62 2d 3e 6d  held(pMem->db->m
27f0: 75 74 65 78 29 20 29 3b 0a 0a 20 20 2f 2a 20 53  utex) );..  /* S
2800: 65 74 20 6e 42 79 74 65 20 74 6f 20 74 68 65 20  et nByte to the 
2810: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
2820: 72 65 71 75 69 72 65 64 20 74 6f 20 73 74 6f 72  required to stor
2830: 65 20 74 68 65 20 65 78 70 61 6e 64 65 64 20 62  e the expanded b
2840: 6c 6f 62 2e 20 2a 2f 0a 20 20 6e 42 79 74 65 20  lob. */.  nByte 
2850: 3d 20 70 4d 65 6d 2d 3e 6e 20 2b 20 70 4d 65 6d  = pMem->n + pMem
2860: 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 69 66 28  ->u.nZero;.  if(
2870: 20 6e 42 79 74 65 3c 3d 30 20 29 7b 0a 20 20 20   nByte<=0 ){.   
2880: 20 6e 42 79 74 65 20 3d 20 31 3b 0a 20 20 7d 0a   nByte = 1;.  }.
2890: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
28a0: 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 6e  eMemGrow(pMem, n
28b0: 42 79 74 65 2c 20 31 29 20 29 7b 0a 20 20 20 20  Byte, 1) ){.    
28c0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f  return SQLITE_NO
28d0: 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 7d 0a 0a 20  MEM_BKPT;.  }.. 
28e0: 20 6d 65 6d 73 65 74 28 26 70 4d 65 6d 2d 3e 7a   memset(&pMem->z
28f0: 5b 70 4d 65 6d 2d 3e 6e 5d 2c 20 30 2c 20 70 4d  [pMem->n], 0, pM
2900: 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20  em->u.nZero);.  
2910: 70 4d 65 6d 2d 3e 6e 20 2b 3d 20 70 4d 65 6d 2d  pMem->n += pMem-
2920: 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 70 4d 65 6d  >u.nZero;.  pMem
2930: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
2940: 5f 5a 65 72 6f 7c 4d 45 4d 5f 54 65 72 6d 29 3b  _Zero|MEM_Term);
2950: 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
2960: 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  _OK;.}.#endif../
2970: 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72 65 20 74  *.** Make sure t
2980: 68 65 20 67 69 76 65 6e 20 4d 65 6d 20 69 73 20  he given Mem is 
2990: 5c 75 30 30 30 30 20 74 65 72 6d 69 6e 61 74 65  \u0000 terminate
29a0: 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  d..*/.int sqlite
29b0: 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69  3VdbeMemNulTermi
29c0: 6e 61 74 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b  nate(Mem *pMem){
29d0: 0a 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d 2d  .  assert( pMem-
29e0: 3e 64 62 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65  >db==0 || sqlite
29f0: 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 4d 65  3_mutex_held(pMe
2a00: 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b  m->db->mutex) );
2a10: 0a 20 20 74 65 73 74 63 61 73 65 28 20 28 70 4d  .  testcase( (pM
2a20: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  em->flags & (MEM
2a30: 5f 54 65 72 6d 7c 4d 45 4d 5f 53 74 72 29 29 3d  _Term|MEM_Str))=
2a40: 3d 28 4d 45 4d 5f 54 65 72 6d 7c 4d 45 4d 5f 53  =(MEM_Term|MEM_S
2a50: 74 72 29 20 29 3b 0a 20 20 74 65 73 74 63 61 73  tr) );.  testcas
2a60: 65 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  e( (pMem->flags 
2a70: 26 20 28 4d 45 4d 5f 54 65 72 6d 7c 4d 45 4d 5f  & (MEM_Term|MEM_
2a80: 53 74 72 29 29 3d 3d 30 20 29 3b 0a 20 20 69 66  Str))==0 );.  if
2a90: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
2aa0: 20 28 4d 45 4d 5f 54 65 72 6d 7c 4d 45 4d 5f 53   (MEM_Term|MEM_S
2ab0: 74 72 29 29 21 3d 4d 45 4d 5f 53 74 72 20 29 7b  tr))!=MEM_Str ){
2ac0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
2ad0: 54 45 5f 4f 4b 3b 20 20 20 2f 2a 20 4e 6f 74 68  TE_OK;   /* Noth
2ae0: 69 6e 67 20 74 6f 20 64 6f 20 2a 2f 0a 20 20 7d  ing to do */.  }
2af0: 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e  else{.    return
2b00: 20 76 64 62 65 4d 65 6d 41 64 64 54 65 72 6d 69   vdbeMemAddTermi
2b10: 6e 61 74 6f 72 28 70 4d 65 6d 29 3b 0a 20 20 7d  nator(pMem);.  }
2b20: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 20 4d 45  .}../*.** Add ME
2b30: 4d 5f 53 74 72 20 74 6f 20 74 68 65 20 73 65 74  M_Str to the set
2b40: 20 6f 66 20 72 65 70 72 65 73 65 6e 74 61 74 69   of representati
2b50: 6f 6e 73 20 66 6f 72 20 74 68 65 20 67 69 76 65  ons for the give
2b60: 6e 20 4d 65 6d 2e 20 20 4e 75 6d 62 65 72 73 0a  n Mem.  Numbers.
2b70: 2a 2a 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64  ** are converted
2b80: 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 73   using sqlite3_s
2b90: 6e 70 72 69 6e 74 66 28 29 2e 20 20 43 6f 6e 76  nprintf().  Conv
2ba0: 65 72 74 69 6e 67 20 61 20 42 4c 4f 42 20 74 6f  erting a BLOB to
2bb0: 20 61 20 73 74 72 69 6e 67 0a 2a 2a 20 69 73 20   a string.** is 
2bc0: 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 0a 2a 2a 20 45  a no-op..**.** E
2bd0: 78 69 73 74 69 6e 67 20 72 65 70 72 65 73 65 6e  xisting represen
2be0: 74 61 74 69 6f 6e 73 20 4d 45 4d 5f 49 6e 74 20  tations MEM_Int 
2bf0: 61 6e 64 20 4d 45 4d 5f 52 65 61 6c 20 61 72 65  and MEM_Real are
2c00: 20 69 6e 76 61 6c 69 64 61 74 65 64 20 69 66 0a   invalidated if.
2c10: 2a 2a 20 62 46 6f 72 63 65 20 69 73 20 74 72 75  ** bForce is tru
2c20: 65 20 62 75 74 20 61 72 65 20 72 65 74 61 69 6e  e but are retain
2c30: 65 64 20 69 66 20 62 46 6f 72 63 65 20 69 73 20  ed if bForce is 
2c40: 66 61 6c 73 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4d  false..**.** A M
2c50: 45 4d 5f 4e 75 6c 6c 20 76 61 6c 75 65 20 77 69  EM_Null value wi
2c60: 6c 6c 20 6e 65 76 65 72 20 62 65 20 70 61 73 73  ll never be pass
2c70: 65 64 20 74 6f 20 74 68 69 73 20 66 75 6e 63 74  ed to this funct
2c80: 69 6f 6e 2e 20 54 68 69 73 20 66 75 6e 63 74 69  ion. This functi
2c90: 6f 6e 20 69 73 0a 2a 2a 20 75 73 65 64 20 66 6f  on is.** used fo
2ca0: 72 20 63 6f 6e 76 65 72 74 69 6e 67 20 76 61 6c  r converting val
2cb0: 75 65 73 20 74 6f 20 74 65 78 74 20 66 6f 72 20  ues to text for 
2cc0: 72 65 74 75 72 6e 69 6e 67 20 74 6f 20 74 68 65  returning to the
2cd0: 20 75 73 65 72 20 28 69 2e 65 2e 20 76 69 61 0a   user (i.e. via.
2ce0: 2a 2a 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ** sqlite3_value
2cf0: 5f 74 65 78 74 28 29 29 2c 20 6f 72 20 66 6f 72  _text()), or for
2d00: 20 65 6e 73 75 72 69 6e 67 20 74 68 61 74 20 76   ensuring that v
2d10: 61 6c 75 65 73 20 74 6f 20 62 65 20 75 73 65 64  alues to be used
2d20: 20 61 73 20 62 74 72 65 65 0a 2a 2a 20 6b 65 79   as btree.** key
2d30: 73 20 61 72 65 20 73 74 72 69 6e 67 73 2e 20 49  s are strings. I
2d40: 6e 20 74 68 65 20 66 6f 72 6d 65 72 20 63 61 73  n the former cas
2d50: 65 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72  e a NULL pointer
2d60: 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 68 65   is returned the
2d70: 0a 2a 2a 20 75 73 65 72 20 61 6e 64 20 74 68 65  .** user and the
2d80: 20 6c 61 74 74 65 72 20 69 73 20 61 6e 20 69 6e   latter is an in
2d90: 74 65 72 6e 61 6c 20 70 72 6f 67 72 61 6d 6d 69  ternal programmi
2da0: 6e 67 20 65 72 72 6f 72 2e 0a 2a 2f 0a 69 6e 74  ng error..*/.int
2db0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2dc0: 74 72 69 6e 67 69 66 79 28 4d 65 6d 20 2a 70 4d  tringify(Mem *pM
2dd0: 65 6d 2c 20 75 38 20 65 6e 63 2c 20 75 38 20 62  em, u8 enc, u8 b
2de0: 46 6f 72 63 65 29 7b 0a 20 20 69 6e 74 20 66 67  Force){.  int fg
2df0: 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a   = pMem->flags;.
2e00: 20 20 63 6f 6e 73 74 20 69 6e 74 20 6e 42 79 74    const int nByt
2e10: 65 20 3d 20 33 32 3b 0a 0a 20 20 61 73 73 65 72  e = 32;..  asser
2e20: 74 28 20 70 4d 65 6d 2d 3e 64 62 3d 3d 30 20 7c  t( pMem->db==0 |
2e30: 7c 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  | sqlite3_mutex_
2e40: 68 65 6c 64 28 70 4d 65 6d 2d 3e 64 62 2d 3e 6d  held(pMem->db->m
2e50: 75 74 65 78 29 20 29 3b 0a 20 20 61 73 73 65 72  utex) );.  asser
2e60: 74 28 20 21 28 66 67 26 4d 45 4d 5f 5a 65 72 6f  t( !(fg&MEM_Zero
2e70: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 21  ) );.  assert( !
2e80: 28 66 67 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  (fg&(MEM_Str|MEM
2e90: 5f 42 6c 6f 62 29 29 20 29 3b 0a 20 20 61 73 73  _Blob)) );.  ass
2ea0: 65 72 74 28 20 66 67 26 28 4d 45 4d 5f 49 6e 74  ert( fg&(MEM_Int
2eb0: 7c 4d 45 4d 5f 52 65 61 6c 29 20 29 3b 0a 20 20  |MEM_Real) );.  
2ec0: 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33  assert( !sqlite3
2ed0: 56 64 62 65 4d 65 6d 49 73 52 6f 77 53 65 74 28  VdbeMemIsRowSet(
2ee0: 70 4d 65 6d 29 20 29 3b 0a 20 20 61 73 73 65 72  pMem) );.  asser
2ef0: 74 28 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c  t( EIGHT_BYTE_AL
2f00: 49 47 4e 4d 45 4e 54 28 70 4d 65 6d 29 20 29 3b  IGNMENT(pMem) );
2f10: 0a 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ...  if( sqlite3
2f20: 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
2f30: 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74  esize(pMem, nByt
2f40: 65 29 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e  e) ){.    pMem->
2f50: 65 6e 63 20 3d 20 30 3b 0a 20 20 20 20 72 65 74  enc = 0;.    ret
2f60: 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  urn SQLITE_NOMEM
2f70: 5f 42 4b 50 54 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  _BKPT;.  }..  /*
2f80: 20 46 6f 72 20 61 20 52 65 61 6c 20 6f 72 20 49   For a Real or I
2f90: 6e 74 65 67 65 72 2c 20 75 73 65 20 73 71 6c 69  nteger, use sqli
2fa0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 29 20 74  te3_snprintf() t
2fb0: 6f 20 70 72 6f 64 75 63 65 20 74 68 65 20 55 54  o produce the UT
2fc0: 46 2d 38 0a 20 20 2a 2a 20 73 74 72 69 6e 67 20  F-8.  ** string 
2fd0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
2fe0: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 54 68 65  f the value. The
2ff0: 6e 2c 20 69 66 20 74 68 65 20 72 65 71 75 69 72  n, if the requir
3000: 65 64 20 65 6e 63 6f 64 69 6e 67 0a 20 20 2a 2a  ed encoding.  **
3010: 20 69 73 20 55 54 46 2d 31 36 6c 65 20 6f 72 20   is UTF-16le or 
3020: 55 54 46 2d 31 36 62 65 20 64 6f 20 61 20 74 72  UTF-16be do a tr
3030: 61 6e 73 6c 61 74 69 6f 6e 2e 0a 20 20 2a 2a 20  anslation..  ** 
3040: 0a 20 20 2a 2a 20 46 49 58 20 4d 45 3a 20 49 74  .  ** FIX ME: It
3050: 20 77 6f 75 6c 64 20 62 65 20 62 65 74 74 65 72   would be better
3060: 20 69 66 20 73 71 6c 69 74 65 33 5f 73 6e 70 72   if sqlite3_snpr
3070: 69 6e 74 66 28 29 20 63 6f 75 6c 64 20 64 6f 20  intf() could do 
3080: 55 54 46 2d 31 36 2e 0a 20 20 2a 2f 0a 20 20 69  UTF-16..  */.  i
3090: 66 28 20 66 67 20 26 20 4d 45 4d 5f 49 6e 74 20  f( fg & MEM_Int 
30a0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ){.    sqlite3_s
30b0: 6e 70 72 69 6e 74 66 28 6e 42 79 74 65 2c 20 70  nprintf(nByte, p
30c0: 4d 65 6d 2d 3e 7a 2c 20 22 25 6c 6c 64 22 2c 20  Mem->z, "%lld", 
30d0: 70 4d 65 6d 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65  pMem->u.i);.  }e
30e0: 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
30f0: 20 66 67 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29   fg & MEM_Real )
3100: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3110: 70 72 69 6e 74 66 28 6e 42 79 74 65 2c 20 70 4d  printf(nByte, pM
3120: 65 6d 2d 3e 7a 2c 20 22 25 21 2e 31 35 67 22 2c  em->z, "%!.15g",
3130: 20 70 4d 65 6d 2d 3e 75 2e 72 29 3b 0a 20 20 7d   pMem->u.r);.  }
3140: 0a 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d 2d  .  assert( pMem-
3150: 3e 7a 21 3d 30 20 29 3b 0a 20 20 70 4d 65 6d 2d  >z!=0 );.  pMem-
3160: 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  >n = sqlite3Strl
3170: 65 6e 33 30 4e 4e 28 70 4d 65 6d 2d 3e 7a 29 3b  en30NN(pMem->z);
3180: 0a 20 20 70 4d 65 6d 2d 3e 65 6e 63 20 3d 20 53  .  pMem->enc = S
3190: 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 70 4d  QLITE_UTF8;.  pM
31a0: 65 6d 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  em->flags |= MEM
31b0: 5f 53 74 72 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20  _Str|MEM_Term;. 
31c0: 20 69 66 28 20 62 46 6f 72 63 65 20 29 20 70 4d   if( bForce ) pM
31d0: 65 6d 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  em->flags &= ~(M
31e0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31f0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  ;.  sqlite3VdbeC
3200: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d  hangeEncoding(pM
3210: 65 6d 2c 20 65 6e 63 29 3b 0a 20 20 72 65 74 75  em, enc);.  retu
3220: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
3230: 0a 2f 2a 0a 2a 2a 20 4d 65 6d 6f 72 79 20 63 65  ./*.** Memory ce
3240: 6c 6c 20 70 4d 65 6d 20 63 6f 6e 74 61 69 6e 73  ll pMem contains
3250: 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20   the context of 
3260: 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  an aggregate fun
3270: 63 74 69 6f 6e 2e 0a 2a 2a 20 54 68 69 73 20 72  ction..** This r
3280: 6f 75 74 69 6e 65 20 63 61 6c 6c 73 20 74 68 65  outine calls the
3290: 20 66 69 6e 61 6c 69 7a 65 20 6d 65 74 68 6f 64   finalize method
32a0: 20 66 6f 72 20 74 68 61 74 20 66 75 6e 63 74 69   for that functi
32b0: 6f 6e 2e 20 20 54 68 65 0a 2a 2a 20 72 65 73 75  on.  The.** resu
32c0: 6c 74 20 6f 66 20 74 68 65 20 61 67 67 72 65 67  lt of the aggreg
32d0: 61 74 65 20 69 73 20 73 74 6f 72 65 64 20 62 61  ate is stored ba
32e0: 63 6b 20 69 6e 74 6f 20 70 4d 65 6d 2e 0a 2a 2a  ck into pMem..**
32f0: 0a 2a 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54  .** Return SQLIT
3300: 45 5f 45 52 52 4f 52 20 69 66 20 74 68 65 20 66  E_ERROR if the f
3310: 69 6e 61 6c 69 7a 65 72 20 72 65 70 6f 72 74 73  inalizer reports
3320: 20 61 6e 20 65 72 72 6f 72 2e 20 20 53 51 4c 49   an error.  SQLI
3330: 54 45 5f 4f 4b 0a 2a 2a 20 6f 74 68 65 72 77 69  TE_OK.** otherwi
3340: 73 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  se..*/.int sqlit
3350: 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a  e3VdbeMemFinaliz
3360: 65 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 46 75 6e  e(Mem *pMem, Fun
3370: 63 44 65 66 20 2a 70 46 75 6e 63 29 7b 0a 20 20  cDef *pFunc){.  
3380: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
3390: 63 74 78 3b 0a 20 20 4d 65 6d 20 74 3b 0a 20 20  ctx;.  Mem t;.  
33a0: 61 73 73 65 72 74 28 20 70 46 75 6e 63 21 3d 30  assert( pFunc!=0
33b0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 46   );.  assert( pF
33c0: 75 6e 63 2d 3e 78 46 69 6e 61 6c 69 7a 65 21 3d  unc->xFinalize!=
33d0: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  0 );.  assert( (
33e0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pMem->flags & ME
33f0: 4d 5f 4e 75 6c 6c 29 21 3d 30 20 7c 7c 20 70 46  M_Null)!=0 || pF
3400: 75 6e 63 3d 3d 70 4d 65 6d 2d 3e 75 2e 70 44 65  unc==pMem->u.pDe
3410: 66 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  f );.  assert( p
3420: 4d 65 6d 2d 3e 64 62 3d 3d 30 20 7c 7c 20 73 71  Mem->db==0 || sq
3430: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64  lite3_mutex_held
3440: 28 70 4d 65 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78  (pMem->db->mutex
3450: 29 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 63  ) );.  memset(&c
3460: 74 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28 63 74  tx, 0, sizeof(ct
3470: 78 29 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 74  x));.  memset(&t
3480: 2c 20 30 2c 20 73 69 7a 65 6f 66 28 74 29 29 3b  , 0, sizeof(t));
3490: 0a 20 20 74 2e 66 6c 61 67 73 20 3d 20 4d 45 4d  .  t.flags = MEM
34a0: 5f 4e 75 6c 6c 3b 0a 20 20 74 2e 64 62 20 3d 20  _Null;.  t.db = 
34b0: 70 4d 65 6d 2d 3e 64 62 3b 0a 20 20 63 74 78 2e  pMem->db;.  ctx.
34c0: 70 4f 75 74 20 3d 20 26 74 3b 0a 20 20 63 74 78  pOut = &t;.  ctx
34d0: 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20  .pMem = pMem;.  
34e0: 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 46 75 6e  ctx.pFunc = pFun
34f0: 63 3b 0a 20 20 70 46 75 6e 63 2d 3e 78 46 69 6e  c;.  pFunc->xFin
3500: 61 6c 69 7a 65 28 26 63 74 78 29 3b 20 2f 2a 20  alize(&ctx); /* 
3510: 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32  IMP: R-24505-232
3520: 33 30 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  30 */.  assert( 
3530: 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d  (pMem->flags & M
3540: 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20  EM_Dyn)==0 );.  
3550: 69 66 28 20 70 4d 65 6d 2d 3e 73 7a 4d 61 6c 6c  if( pMem->szMall
3560: 6f 63 3e 30 20 29 20 73 71 6c 69 74 65 33 44 62  oc>0 ) sqlite3Db
3570: 46 72 65 65 4e 4e 28 70 4d 65 6d 2d 3e 64 62 2c  FreeNN(pMem->db,
3580: 20 70 4d 65 6d 2d 3e 7a 4d 61 6c 6c 6f 63 29 3b   pMem->zMalloc);
3590: 0a 20 20 6d 65 6d 63 70 79 28 70 4d 65 6d 2c 20  .  memcpy(pMem, 
35a0: 26 74 2c 20 73 69 7a 65 6f 66 28 74 29 29 3b 0a  &t, sizeof(t));.
35b0: 20 20 72 65 74 75 72 6e 20 63 74 78 2e 69 73 45    return ctx.isE
35c0: 72 72 6f 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4d  rror;.}../*.** M
35d0: 65 6d 6f 72 79 20 63 65 6c 6c 20 70 41 63 63 75  emory cell pAccu
35e0: 6d 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 63  m contains the c
35f0: 6f 6e 74 65 78 74 20 6f 66 20 61 6e 20 61 67 67  ontext of an agg
3600: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e  regate function.
3610: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
3620: 20 63 61 6c 6c 73 20 74 68 65 20 78 56 61 6c 75   calls the xValu
3630: 65 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61  e method for tha
3640: 74 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 73  t function and s
3650: 74 6f 72 65 73 0a 2a 2a 20 74 68 65 20 72 65 73  tores.** the res
3660: 75 6c 74 73 20 69 6e 20 6d 65 6d 6f 72 79 20 63  ults in memory c
3670: 65 6c 6c 20 70 4d 65 6d 2e 0a 2a 2a 0a 2a 2a 20  ell pMem..**.** 
3680: 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 69 73 20  SQLITE_ERROR is 
3690: 72 65 74 75 72 6e 65 64 20 69 66 20 78 56 61 6c  returned if xVal
36a0: 75 65 28 29 20 72 65 70 6f 72 74 73 20 61 6e 20  ue() reports an 
36b0: 65 72 72 6f 72 2e 20 53 51 4c 49 54 45 5f 4f 4b  error. SQLITE_OK
36c0: 20 0a 2a 2a 20 6f 74 68 65 72 77 69 73 65 2e 0a   .** otherwise..
36d0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
36e0: 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e  E_OMIT_WINDOWFUN
36f0: 43 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  C.int sqlite3Vdb
3700: 65 4d 65 6d 41 67 67 56 61 6c 75 65 28 4d 65 6d  eMemAggValue(Mem
3710: 20 2a 70 41 63 63 75 6d 2c 20 4d 65 6d 20 2a 70   *pAccum, Mem *p
3720: 4f 75 74 2c 20 46 75 6e 63 44 65 66 20 2a 70 46  Out, FuncDef *pF
3730: 75 6e 63 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  unc){.  sqlite3_
3740: 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 4d  context ctx;.  M
3750: 65 6d 20 74 3b 0a 20 20 61 73 73 65 72 74 28 20  em t;.  assert( 
3760: 70 46 75 6e 63 21 3d 30 20 29 3b 0a 20 20 61 73  pFunc!=0 );.  as
3770: 73 65 72 74 28 20 70 46 75 6e 63 2d 3e 78 56 61  sert( pFunc->xVa
3780: 6c 75 65 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  lue!=0 );.  asse
3790: 72 74 28 20 28 70 41 63 63 75 6d 2d 3e 66 6c 61  rt( (pAccum->fla
37a0: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
37b0: 30 20 7c 7c 20 70 46 75 6e 63 3d 3d 70 41 63 63  0 || pFunc==pAcc
37c0: 75 6d 2d 3e 75 2e 70 44 65 66 20 29 3b 0a 20 20  um->u.pDef );.  
37d0: 61 73 73 65 72 74 28 20 70 41 63 63 75 6d 2d 3e  assert( pAccum->
37e0: 64 62 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33  db==0 || sqlite3
37f0: 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 41 63 63  _mutex_held(pAcc
3800: 75 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29  um->db->mutex) )
3810: 3b 0a 20 20 6d 65 6d 73 65 74 28 26 63 74 78 2c  ;.  memset(&ctx,
3820: 20 30 2c 20 73 69 7a 65 6f 66 28 63 74 78 29 29   0, sizeof(ctx))
3830: 3b 0a 20 20 6d 65 6d 73 65 74 28 26 74 2c 20 30  ;.  memset(&t, 0
3840: 2c 20 73 69 7a 65 6f 66 28 74 29 29 3b 0a 20 20  , sizeof(t));.  
3850: 74 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  t.flags = MEM_Nu
3860: 6c 6c 3b 0a 20 20 74 2e 64 62 20 3d 20 70 41 63  ll;.  t.db = pAc
3870: 63 75 6d 2d 3e 64 62 3b 0a 20 20 73 71 6c 69 74  cum->db;.  sqlit
3880: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
3890: 28 70 4f 75 74 29 3b 0a 20 20 63 74 78 2e 70 4f  (pOut);.  ctx.pO
38a0: 75 74 20 3d 20 70 4f 75 74 3b 0a 20 20 63 74 78  ut = pOut;.  ctx
38b0: 2e 70 4d 65 6d 20 3d 20 70 41 63 63 75 6d 3b 0a  .pMem = pAccum;.
38c0: 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 46    ctx.pFunc = pF
38d0: 75 6e 63 3b 0a 20 20 70 46 75 6e 63 2d 3e 78 56  unc;.  pFunc->xV
38e0: 61 6c 75 65 28 26 63 74 78 29 3b 0a 20 20 72 65  alue(&ctx);.  re
38f0: 74 75 72 6e 20 63 74 78 2e 69 73 45 72 72 6f 72  turn ctx.isError
3900: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
3910: 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57  LITE_OMIT_WINDOW
3920: 46 55 4e 43 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 49  FUNC */../*.** I
3930: 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
3940: 6c 20 63 6f 6e 74 61 69 6e 73 20 61 20 76 61 6c  l contains a val
3950: 75 65 20 74 68 61 74 20 6d 75 73 74 20 62 65 20  ue that must be 
3960: 66 72 65 65 64 20 62 79 0a 2a 2a 20 69 6e 76 6f  freed by.** invo
3970: 6b 69 6e 67 20 74 68 65 20 65 78 74 65 72 6e 61  king the externa
3980: 6c 20 63 61 6c 6c 62 61 63 6b 20 69 6e 20 4d 65  l callback in Me
3990: 6d 2e 78 44 65 6c 2c 20 74 68 65 6e 20 74 68 69  m.xDel, then thi
39a0: 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 69 6c  s routine.** wil
39b0: 6c 20 66 72 65 65 20 74 68 61 74 20 76 61 6c 75  l free that valu
39c0: 65 2e 20 20 49 74 20 61 6c 73 6f 20 73 65 74 73  e.  It also sets
39d0: 20 4d 65 6d 2e 66 6c 61 67 73 20 74 6f 20 4d 45   Mem.flags to ME
39e0: 4d 5f 4e 75 6c 6c 2e 0a 2a 2a 0a 2a 2a 20 54 68  M_Null..**.** Th
39f0: 69 73 20 69 73 20 61 20 68 65 6c 70 65 72 20 72  is is a helper r
3a00: 6f 75 74 69 6e 65 20 66 6f 72 20 73 71 6c 69 74  outine for sqlit
3a10: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
3a20: 28 29 20 61 6e 64 0a 2a 2a 20 66 6f 72 20 73 71  () and.** for sq
3a30: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
3a40: 61 73 65 28 29 2e 20 20 55 73 65 20 74 68 6f 73  ase().  Use thos
3a50: 65 20 6f 74 68 65 72 20 72 6f 75 74 69 6e 65 73  e other routines
3a60: 20 61 73 20 74 68 65 0a 2a 2a 20 65 6e 74 72 79   as the.** entry
3a70: 20 70 6f 69 6e 74 20 66 6f 72 20 72 65 6c 65 61   point for relea
3a80: 73 69 6e 67 20 4d 65 6d 20 72 65 73 6f 75 72 63  sing Mem resourc
3a90: 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 53 51  es..*/.static SQ
3aa0: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 76 6f  LITE_NOINLINE vo
3ab0: 69 64 20 76 64 62 65 4d 65 6d 43 6c 65 61 72 45  id vdbeMemClearE
3ac0: 78 74 65 72 6e 41 6e 64 53 65 74 4e 75 6c 6c 28  xternAndSetNull(
3ad0: 4d 65 6d 20 2a 70 29 7b 0a 20 20 61 73 73 65 72  Mem *p){.  asser
3ae0: 74 28 20 70 2d 3e 64 62 3d 3d 30 20 7c 7c 20 73  t( p->db==0 || s
3af0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c  qlite3_mutex_hel
3b00: 64 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20  d(p->db->mutex) 
3b10: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62  );.  assert( Vdb
3b20: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 29 20 29  eMemDynamic(p) )
3b30: 3b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  ;.  if( p->flags
3b40: 26 4d 45 4d 5f 41 67 67 20 29 7b 0a 20 20 20 20  &MEM_Agg ){.    
3b50: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69  sqlite3VdbeMemFi
3b60: 6e 61 6c 69 7a 65 28 70 2c 20 70 2d 3e 75 2e 70  nalize(p, p->u.p
3b70: 44 65 66 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Def);.    assert
3b80: 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  ( (p->flags & ME
3b90: 4d 5f 41 67 67 29 3d 3d 30 20 29 3b 0a 20 20 20  M_Agg)==0 );.   
3ba0: 20 74 65 73 74 63 61 73 65 28 20 70 2d 3e 66 6c   testcase( p->fl
3bb0: 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 20 29 3b  ags & MEM_Dyn );
3bc0: 0a 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e 66 6c  .  }.  if( p->fl
3bd0: 61 67 73 26 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20  ags&MEM_Dyn ){. 
3be0: 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 78 44     assert( p->xD
3bf0: 65 6c 21 3d 53 51 4c 49 54 45 5f 44 59 4e 41 4d  el!=SQLITE_DYNAM
3c00: 49 43 20 26 26 20 70 2d 3e 78 44 65 6c 21 3d 30  IC && p->xDel!=0
3c10: 20 29 3b 0a 20 20 20 20 70 2d 3e 78 44 65 6c 28   );.    p->xDel(
3c20: 28 76 6f 69 64 20 2a 29 70 2d 3e 7a 29 3b 0a 20  (void *)p->z);. 
3c30: 20 7d 0a 20 20 70 2d 3e 66 6c 61 67 73 20 3d 20   }.  p->flags = 
3c40: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 7d 0a 0a 2f 2a 0a  MEM_Null;.}../*.
3c50: 2a 2a 20 52 65 6c 65 61 73 65 20 6d 65 6d 6f 72  ** Release memor
3c60: 79 20 68 65 6c 64 20 62 79 20 74 68 65 20 4d 65  y held by the Me
3c70: 6d 20 70 2c 20 62 6f 74 68 20 65 78 74 65 72 6e  m p, both extern
3c80: 61 6c 20 6d 65 6d 6f 72 79 20 63 6c 65 61 72 65  al memory cleare
3c90: 64 0a 2a 2a 20 62 79 20 70 2d 3e 78 44 65 6c 20  d.** by p->xDel 
3ca0: 61 6e 64 20 6d 65 6d 6f 72 79 20 69 6e 20 70 2d  and memory in p-
3cb0: 3e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2a 0a 2a 2a 20  >zMalloc..**.** 
3cc0: 54 68 69 73 20 69 73 20 61 20 68 65 6c 70 65 72  This is a helper
3cd0: 20 72 6f 75 74 69 6e 65 20 69 6e 76 6f 6b 65 64   routine invoked
3ce0: 20 62 79 20 73 71 6c 69 74 65 33 56 64 62 65 4d   by sqlite3VdbeM
3cf0: 65 6d 52 65 6c 65 61 73 65 28 29 20 69 6e 0a 2a  emRelease() in.*
3d00: 2a 20 74 68 65 20 75 6e 75 73 75 61 6c 20 63 61  * the unusual ca
3d10: 73 65 20 77 68 65 72 65 20 74 68 65 72 65 20 72  se where there r
3d20: 65 61 6c 6c 79 20 69 73 20 6d 65 6d 6f 72 79 20  eally is memory 
3d30: 69 6e 20 70 20 74 68 61 74 20 6e 65 65 64 73 0a  in p that needs.
3d40: 2a 2a 20 74 6f 20 62 65 20 66 72 65 65 64 2e 0a  ** to be freed..
3d50: 2a 2f 0a 73 74 61 74 69 63 20 53 51 4c 49 54 45  */.static SQLITE
3d60: 5f 4e 4f 49 4e 4c 49 4e 45 20 76 6f 69 64 20 76  _NOINLINE void v
3d70: 64 62 65 4d 65 6d 43 6c 65 61 72 28 4d 65 6d 20  dbeMemClear(Mem 
3d80: 2a 70 29 7b 0a 20 20 69 66 28 20 56 64 62 65 4d  *p){.  if( VdbeM
3d90: 65 6d 44 79 6e 61 6d 69 63 28 70 29 20 29 7b 0a  emDynamic(p) ){.
3da0: 20 20 20 20 76 64 62 65 4d 65 6d 43 6c 65 61 72      vdbeMemClear
3db0: 45 78 74 65 72 6e 41 6e 64 53 65 74 4e 75 6c 6c  ExternAndSetNull
3dc0: 28 70 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  (p);.  }.  if( p
3dd0: 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20  ->szMalloc ){.  
3de0: 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e    sqlite3DbFreeN
3df0: 4e 28 70 2d 3e 64 62 2c 20 70 2d 3e 7a 4d 61 6c  N(p->db, p->zMal
3e00: 6c 6f 63 29 3b 0a 20 20 20 20 70 2d 3e 73 7a 4d  loc);.    p->szM
3e10: 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 7d 0a 20  alloc = 0;.  }. 
3e20: 20 70 2d 3e 7a 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a   p->z = 0;.}../*
3e30: 0a 2a 2a 20 52 65 6c 65 61 73 65 20 61 6e 79 20  .** Release any 
3e40: 6d 65 6d 6f 72 79 20 72 65 73 6f 75 72 63 65 73  memory resources
3e50: 20 68 65 6c 64 20 62 79 20 74 68 65 20 4d 65 6d   held by the Mem
3e60: 2e 20 20 42 6f 74 68 20 74 68 65 20 6d 65 6d 6f  .  Both the memo
3e70: 72 79 20 74 68 61 74 20 69 73 0a 2a 2a 20 66 72  ry that is.** fr
3e80: 65 65 20 62 79 20 4d 65 6d 2e 78 44 65 6c 20 61  ee by Mem.xDel a
3e90: 6e 64 20 74 68 65 20 4d 65 6d 2e 7a 4d 61 6c 6c  nd the Mem.zMall
3ea0: 6f 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 61 72  oc allocation ar
3eb0: 65 20 66 72 65 65 64 2e 0a 2a 2a 0a 2a 2a 20 55  e freed..**.** U
3ec0: 73 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  se this routine 
3ed0: 70 72 69 6f 72 20 74 6f 20 63 6c 65 61 6e 20 75  prior to clean u
3ee0: 70 20 70 72 69 6f 72 20 74 6f 20 61 62 61 6e 64  p prior to aband
3ef0: 6f 6e 69 6e 67 20 61 20 4d 65 6d 2c 20 6f 72 20  oning a Mem, or 
3f00: 74 6f 0a 2a 2a 20 72 65 73 65 74 20 61 20 4d 65  to.** reset a Me
3f10: 6d 20 62 61 63 6b 20 74 6f 20 69 74 73 20 6d 69  m back to its mi
3f20: 6e 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 75 74 69  nimum memory uti
3f30: 6c 69 7a 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  lization..**.** 
3f40: 55 73 65 20 73 71 6c 69 74 65 33 56 64 62 65 4d  Use sqlite3VdbeM
3f50: 65 6d 53 65 74 4e 75 6c 6c 28 29 20 74 6f 20 72  emSetNull() to r
3f60: 65 6c 65 61 73 65 20 6a 75 73 74 20 74 68 65 20  elease just the 
3f70: 4d 65 6d 2e 78 44 65 6c 20 73 70 61 63 65 0a 2a  Mem.xDel space.*
3f80: 2a 20 70 72 69 6f 72 20 74 6f 20 69 6e 73 65 72  * prior to inser
3f90: 74 69 6e 67 20 6e 65 77 20 63 6f 6e 74 65 6e 74  ting new content
3fa0: 20 69 6e 74 6f 20 74 68 65 20 4d 65 6d 2e 0a 2a   into the Mem..*
3fb0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  /.void sqlite3Vd
3fc0: 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 4d 65 6d  beMemRelease(Mem
3fd0: 20 2a 70 29 7b 0a 20 20 61 73 73 65 72 74 28 20   *p){.  assert( 
3fe0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
3ff0: 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 29  MemInvariants(p)
4000: 20 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65   );.  if( VdbeMe
4010: 6d 44 79 6e 61 6d 69 63 28 70 29 20 7c 7c 20 70  mDynamic(p) || p
4020: 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20  ->szMalloc ){.  
4030: 20 20 76 64 62 65 4d 65 6d 43 6c 65 61 72 28 70    vdbeMemClear(p
4040: 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  );.  }.}../*.** 
4050: 43 6f 6e 76 65 72 74 20 61 20 36 34 2d 62 69 74  Convert a 64-bit
4060: 20 49 45 45 45 20 64 6f 75 62 6c 65 20 69 6e 74   IEEE double int
4070: 6f 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e 65  o a 64-bit signe
4080: 64 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 20 49 66  d integer..** If
4090: 20 74 68 65 20 64 6f 75 62 6c 65 20 69 73 20 6f   the double is o
40a0: 75 74 20 6f 66 20 72 61 6e 67 65 20 6f 66 20 61  ut of range of a
40b0: 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69   64-bit signed i
40c0: 6e 74 65 67 65 72 20 74 68 65 6e 0a 2a 2a 20 72  nteger then.** r
40d0: 65 74 75 72 6e 20 74 68 65 20 63 6c 6f 73 65 73  eturn the closes
40e0: 74 20 61 76 61 69 6c 61 62 6c 65 20 36 34 2d 62  t available 64-b
40f0: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
4100: 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 53 51 4c  r..*/.static SQL
4110: 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 69 36 34  ITE_NOINLINE i64
4120: 20 64 6f 75 62 6c 65 54 6f 49 6e 74 36 34 28 64   doubleToInt64(d
4130: 6f 75 62 6c 65 20 72 29 7b 0a 23 69 66 64 65 66  ouble r){.#ifdef
4140: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
4150: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 2f 2a  ATING_POINT.  /*
4160: 20 57 68 65 6e 20 66 6c 6f 61 74 69 6e 67 2d 70   When floating-p
4170: 6f 69 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c  oint is omitted,
4180: 20 64 6f 75 62 6c 65 20 61 6e 64 20 69 6e 74 36   double and int6
4190: 34 20 61 72 65 20 74 68 65 20 73 61 6d 65 20 74  4 are the same t
41a0: 68 69 6e 67 20 2a 2f 0a 20 20 72 65 74 75 72 6e  hing */.  return
41b0: 20 72 3b 0a 23 65 6c 73 65 0a 20 20 2f 2a 0a 20   r;.#else.  /*. 
41c0: 20 2a 2a 20 4d 61 6e 79 20 63 6f 6d 70 69 6c 65   ** Many compile
41d0: 72 73 20 77 65 20 65 6e 63 6f 75 6e 74 65 72 20  rs we encounter 
41e0: 64 6f 20 6e 6f 74 20 64 65 66 69 6e 65 20 63 6f  do not define co
41f0: 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65 0a  nstants for the.
4200: 20 20 2a 2a 20 6d 69 6e 69 6d 75 6d 20 61 6e 64    ** minimum and
4210: 20 6d 61 78 69 6d 75 6d 20 36 34 2d 62 69 74 20   maximum 64-bit 
4220: 69 6e 74 65 67 65 72 73 2c 20 6f 72 20 74 68 65  integers, or the
4230: 79 20 64 65 66 69 6e 65 20 74 68 65 6d 0a 20 20  y define them.  
4240: 2a 2a 20 69 6e 63 6f 6e 73 69 73 74 65 6e 74 6c  ** inconsistentl
4250: 79 2e 20 20 41 6e 64 20 6d 61 6e 79 20 64 6f 20  y.  And many do 
4260: 6e 6f 74 20 75 6e 64 65 72 73 74 61 6e 64 20 74  not understand t
4270: 68 65 20 22 4c 4c 22 20 6e 6f 74 61 74 69 6f 6e  he "LL" notation
4280: 2e 0a 20 20 2a 2a 20 53 6f 20 77 65 20 64 65 66  ..  ** So we def
4290: 69 6e 65 20 6f 75 72 20 6f 77 6e 20 73 74 61 74  ine our own stat
42a0: 69 63 20 63 6f 6e 73 74 61 6e 74 73 20 68 65 72  ic constants her
42b0: 65 20 75 73 69 6e 67 20 6e 6f 74 68 69 6e 67 0a  e using nothing.
42c0: 20 20 2a 2a 20 6c 61 72 67 65 72 20 74 68 61 6e    ** larger than
42d0: 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65   a 32-bit intege
42e0: 72 20 63 6f 6e 73 74 61 6e 74 2e 0a 20 20 2a 2f  r constant..  */
42f0: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
4300: 69 36 34 20 6d 61 78 49 6e 74 20 3d 20 4c 41 52  i64 maxInt = LAR
4310: 47 45 53 54 5f 49 4e 54 36 34 3b 0a 20 20 73 74  GEST_INT64;.  st
4320: 61 74 69 63 20 63 6f 6e 73 74 20 69 36 34 20 6d  atic const i64 m
4330: 69 6e 49 6e 74 20 3d 20 53 4d 41 4c 4c 45 53 54  inInt = SMALLEST
4340: 5f 49 4e 54 36 34 3b 0a 0a 20 20 69 66 28 20 72  _INT64;..  if( r
4350: 3c 3d 28 64 6f 75 62 6c 65 29 6d 69 6e 49 6e 74  <=(double)minInt
4360: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 6d   ){.    return m
4370: 69 6e 49 6e 74 3b 0a 20 20 7d 65 6c 73 65 20 69  inInt;.  }else i
4380: 66 28 20 72 3e 3d 28 64 6f 75 62 6c 65 29 6d 61  f( r>=(double)ma
4390: 78 49 6e 74 20 29 7b 0a 20 20 20 20 72 65 74 75  xInt ){.    retu
43a0: 72 6e 20 6d 61 78 49 6e 74 3b 0a 20 20 7d 65 6c  rn maxInt;.  }el
43b0: 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 28  se{.    return (
43c0: 69 36 34 29 72 3b 0a 20 20 7d 0a 23 65 6e 64 69  i64)r;.  }.#endi
43d0: 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  f.}../*.** Retur
43e0: 6e 20 73 6f 6d 65 20 6b 69 6e 64 20 6f 66 20 69  n some kind of i
43f0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 77 68 69  nteger value whi
4400: 63 68 20 69 73 20 74 68 65 20 62 65 73 74 20 77  ch is the best w
4410: 65 20 63 61 6e 20 64 6f 0a 2a 2a 20 61 74 20 72  e can do.** at r
4420: 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
4430: 76 61 6c 75 65 20 74 68 61 74 20 2a 70 4d 65 6d  value that *pMem
4440: 20 64 65 73 63 72 69 62 65 73 20 61 73 20 61 6e   describes as an
4450: 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20   integer..** If 
4460: 70 4d 65 6d 20 69 73 20 61 6e 20 69 6e 74 65 67  pMem is an integ
4470: 65 72 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  er, then the val
4480: 75 65 20 69 73 20 65 78 61 63 74 2e 20 20 49 66  ue is exact.  If
4490: 20 70 4d 65 6d 20 69 73 0a 2a 2a 20 61 20 66 6c   pMem is.** a fl
44a0: 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 74 68 65  oating-point the
44b0: 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65 74 75  n the value retu
44c0: 72 6e 65 64 20 69 73 20 74 68 65 20 69 6e 74 65  rned is the inte
44d0: 67 65 72 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20  ger part..** If 
44e0: 70 4d 65 6d 20 69 73 20 61 20 73 74 72 69 6e 67  pMem is a string
44f0: 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 77   or blob, then w
4500: 65 20 6d 61 6b 65 20 61 6e 20 61 74 74 65 6d 70  e make an attemp
4510: 74 20 74 6f 20 63 6f 6e 76 65 72 74 0a 2a 2a 20  t to convert.** 
4520: 69 74 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67  it into an integ
4530: 65 72 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68  er and return th
4540: 61 74 2e 20 20 49 66 20 70 4d 65 6d 20 72 65 70  at.  If pMem rep
4550: 72 65 73 65 6e 74 73 20 61 6e 0a 2a 2a 20 61 6e  resents an.** an
4560: 20 53 51 4c 2d 4e 55 4c 4c 20 76 61 6c 75 65 2c   SQL-NULL value,
4570: 20 72 65 74 75 72 6e 20 30 2e 0a 2a 2a 0a 2a 2a   return 0..**.**
4580: 20 49 66 20 70 4d 65 6d 20 72 65 70 72 65 73 65   If pMem represe
4590: 6e 74 73 20 61 20 73 74 72 69 6e 67 20 76 61 6c  nts a string val
45a0: 75 65 2c 20 69 74 73 20 65 6e 63 6f 64 69 6e 67  ue, its encoding
45b0: 20 6d 69 67 68 74 20 62 65 20 63 68 61 6e 67 65   might be change
45c0: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 53 51 4c  d..*/.static SQL
45d0: 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 69 36 34  ITE_NOINLINE i64
45e0: 20 6d 65 6d 49 6e 74 56 61 6c 75 65 28 4d 65 6d   memIntValue(Mem
45f0: 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 36 34 20 76   *pMem){.  i64 v
4600: 61 6c 75 65 20 3d 20 30 3b 0a 20 20 73 71 6c 69  alue = 0;.  sqli
4610: 74 65 33 41 74 6f 69 36 34 28 70 4d 65 6d 2d 3e  te3Atoi64(pMem->
4620: 7a 2c 20 26 76 61 6c 75 65 2c 20 70 4d 65 6d 2d  z, &value, pMem-
4630: 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3b 0a  >n, pMem->enc);.
4640: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0a    return value;.
4650: 7d 0a 69 36 34 20 73 71 6c 69 74 65 33 56 64 62  }.i64 sqlite3Vdb
4660: 65 49 6e 74 56 61 6c 75 65 28 4d 65 6d 20 2a 70  eIntValue(Mem *p
4670: 4d 65 6d 29 7b 0a 20 20 69 6e 74 20 66 6c 61 67  Mem){.  int flag
4680: 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 65  s;.  assert( pMe
4690: 6d 2d 3e 64 62 3d 3d 30 20 7c 7c 20 73 71 6c 69  m->db==0 || sqli
46a0: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70  te3_mutex_held(p
46b0: 4d 65 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20  Mem->db->mutex) 
46c0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 45 49 47  );.  assert( EIG
46d0: 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e  HT_BYTE_ALIGNMEN
46e0: 54 28 70 4d 65 6d 29 20 29 3b 0a 20 20 66 6c 61  T(pMem) );.  fla
46f0: 67 73 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73  gs = pMem->flags
4700: 3b 0a 20 20 69 66 28 20 66 6c 61 67 73 20 26 20  ;.  if( flags & 
4710: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 72  MEM_Int ){.    r
4720: 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 75 2e 69 3b  eturn pMem->u.i;
4730: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 6c 61  .  }else if( fla
4740: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b  gs & MEM_Real ){
4750: 0a 20 20 20 20 72 65 74 75 72 6e 20 64 6f 75 62  .    return doub
4760: 6c 65 54 6f 49 6e 74 36 34 28 70 4d 65 6d 2d 3e  leToInt64(pMem->
4770: 75 2e 72 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  u.r);.  }else if
4780: 28 20 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ( flags & (MEM_S
4790: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
47a0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d      assert( pMem
47b0: 2d 3e 7a 20 7c 7c 20 70 4d 65 6d 2d 3e 6e 3d 3d  ->z || pMem->n==
47c0: 30 20 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  0 );.    return 
47d0: 6d 65 6d 49 6e 74 56 61 6c 75 65 28 70 4d 65 6d  memIntValue(pMem
47e0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
47f0: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a  return 0;.  }.}.
4800: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
4810: 65 20 62 65 73 74 20 72 65 70 72 65 73 65 6e 74  e best represent
4820: 61 74 69 6f 6e 20 6f 66 20 70 4d 65 6d 20 74 68  ation of pMem th
4830: 61 74 20 77 65 20 63 61 6e 20 67 65 74 20 69 6e  at we can get in
4840: 74 6f 20 61 0a 2a 2a 20 64 6f 75 62 6c 65 2e 20  to a.** double. 
4850: 20 49 66 20 70 4d 65 6d 20 69 73 20 61 6c 72 65   If pMem is alre
4860: 61 64 79 20 61 20 64 6f 75 62 6c 65 20 6f 72 20  ady a double or 
4870: 61 6e 20 69 6e 74 65 67 65 72 2c 20 72 65 74 75  an integer, retu
4880: 72 6e 20 69 74 73 0a 2a 2a 20 76 61 6c 75 65 2e  rn its.** value.
4890: 20 20 49 66 20 69 74 20 69 73 20 61 20 73 74 72    If it is a str
48a0: 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79  ing or blob, try
48b0: 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74   to convert it t
48c0: 6f 20 61 20 64 6f 75 62 6c 65 2e 0a 2a 2a 20 49  o a double..** I
48d0: 66 20 69 74 20 69 73 20 61 20 4e 55 4c 4c 2c 20  f it is a NULL, 
48e0: 72 65 74 75 72 6e 20 30 2e 30 2e 0a 2a 2f 0a 73  return 0.0..*/.s
48f0: 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f 49  tatic SQLITE_NOI
4900: 4e 4c 49 4e 45 20 64 6f 75 62 6c 65 20 6d 65 6d  NLINE double mem
4910: 52 65 61 6c 56 61 6c 75 65 28 4d 65 6d 20 2a 70  RealValue(Mem *p
4920: 4d 65 6d 29 7b 0a 20 20 2f 2a 20 28 64 6f 75 62  Mem){.  /* (doub
4930: 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20  le)0 In case of 
4940: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
4950: 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f  TING_POINT... */
4960: 0a 20 20 64 6f 75 62 6c 65 20 76 61 6c 20 3d 20  .  double val = 
4970: 28 64 6f 75 62 6c 65 29 30 3b 0a 20 20 73 71 6c  (double)0;.  sql
4980: 69 74 65 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a  ite3AtoF(pMem->z
4990: 2c 20 26 76 61 6c 2c 20 70 4d 65 6d 2d 3e 6e 2c  , &val, pMem->n,
49a0: 20 70 4d 65 6d 2d 3e 65 6e 63 29 3b 0a 20 20 72   pMem->enc);.  r
49b0: 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 64 6f 75  eturn val;.}.dou
49c0: 62 6c 65 20 73 71 6c 69 74 65 33 56 64 62 65 52  ble sqlite3VdbeR
49d0: 65 61 6c 56 61 6c 75 65 28 4d 65 6d 20 2a 70 4d  ealValue(Mem *pM
49e0: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 70  em){.  assert( p
49f0: 4d 65 6d 2d 3e 64 62 3d 3d 30 20 7c 7c 20 73 71  Mem->db==0 || sq
4a00: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64  lite3_mutex_held
4a10: 28 70 4d 65 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78  (pMem->db->mutex
4a20: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 45  ) );.  assert( E
4a30: 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d  IGHT_BYTE_ALIGNM
4a40: 45 4e 54 28 70 4d 65 6d 29 20 29 3b 0a 20 20 69  ENT(pMem) );.  i
4a50: 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  f( pMem->flags &
4a60: 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20   MEM_Real ){.   
4a70: 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 75 2e   return pMem->u.
4a80: 72 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  r;.  }else if( p
4a90: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
4aa0: 5f 49 6e 74 20 29 7b 0a 20 20 20 20 72 65 74 75  _Int ){.    retu
4ab0: 72 6e 20 28 64 6f 75 62 6c 65 29 70 4d 65 6d 2d  rn (double)pMem-
4ac0: 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 20 69 66  >u.i;.  }else if
4ad0: 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20  ( pMem->flags & 
4ae0: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
4af0: 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  b) ){.    return
4b00: 20 6d 65 6d 52 65 61 6c 56 61 6c 75 65 28 70 4d   memRealValue(pM
4b10: 65 6d 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  em);.  }else{.  
4b20: 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49    /* (double)0 I
4b30: 6e 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45  n case of SQLITE
4b40: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
4b50: 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 72  OINT... */.    r
4b60: 65 74 75 72 6e 20 28 64 6f 75 62 6c 65 29 30 3b  eturn (double)0;
4b70: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  .  }.}../*.** Re
4b80: 74 75 72 6e 20 31 20 69 66 20 70 4d 65 6d 20 72  turn 1 if pMem r
4b90: 65 70 72 65 73 65 6e 74 73 20 74 72 75 65 2c 20  epresents true, 
4ba0: 61 6e 64 20 72 65 74 75 72 6e 20 30 20 69 66 20  and return 0 if 
4bb0: 70 4d 65 6d 20 72 65 70 72 65 73 65 6e 74 73 20  pMem represents 
4bc0: 66 61 6c 73 65 2e 0a 2a 2a 20 52 65 74 75 72 6e  false..** Return
4bd0: 20 74 68 65 20 76 61 6c 75 65 20 69 66 4e 75 6c   the value ifNul
4be0: 6c 20 69 66 20 70 4d 65 6d 20 69 73 20 4e 55 4c  l if pMem is NUL
4bf0: 4c 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  L.  .*/.int sqli
4c00: 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61  te3VdbeBooleanVa
4c10: 6c 75 65 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 69  lue(Mem *pMem, i
4c20: 6e 74 20 69 66 4e 75 6c 6c 29 7b 0a 20 20 69 66  nt ifNull){.  if
4c30: 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20  ( pMem->flags & 
4c40: 4d 45 4d 5f 49 6e 74 20 29 20 72 65 74 75 72 6e  MEM_Int ) return
4c50: 20 70 4d 65 6d 2d 3e 75 2e 69 21 3d 30 3b 0a 20   pMem->u.i!=0;. 
4c60: 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   if( pMem->flags
4c70: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 72 65   & MEM_Null ) re
4c80: 74 75 72 6e 20 69 66 4e 75 6c 6c 3b 0a 20 20 72  turn ifNull;.  r
4c90: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56 64 62  eturn sqlite3Vdb
4ca0: 65 52 65 61 6c 56 61 6c 75 65 28 70 4d 65 6d 29  eRealValue(pMem)
4cb0: 21 3d 30 2e 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  !=0.0;.}../*.** 
4cc0: 54 68 65 20 4d 45 4d 20 73 74 72 75 63 74 75 72  The MEM structur
4cd0: 65 20 69 73 20 61 6c 72 65 61 64 79 20 61 20 4d  e is already a M
4ce0: 45 4d 5f 52 65 61 6c 2e 20 20 54 72 79 20 74 6f  EM_Real.  Try to
4cf0: 20 61 6c 73 6f 20 6d 61 6b 65 20 69 74 20 61 0a   also make it a.
4d00: 2a 2a 20 4d 45 4d 5f 49 6e 74 20 69 66 20 77 65  ** MEM_Int if we
4d10: 20 63 61 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71   can..*/.void sq
4d20: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
4d30: 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 4d  Affinity(Mem *pM
4d40: 65 6d 29 7b 0a 20 20 69 36 34 20 69 78 3b 0a 20  em){.  i64 ix;. 
4d50: 20 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 66   assert( pMem->f
4d60: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
4d70: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71  );.  assert( !sq
4d80: 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 73 52 6f  lite3VdbeMemIsRo
4d90: 77 53 65 74 28 70 4d 65 6d 29 20 29 3b 0a 20 20  wSet(pMem) );.  
4da0: 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 64 62  assert( pMem->db
4db0: 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f 6d  ==0 || sqlite3_m
4dc0: 75 74 65 78 5f 68 65 6c 64 28 70 4d 65 6d 2d 3e  utex_held(pMem->
4dd0: 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20  db->mutex) );.  
4de0: 61 73 73 65 72 74 28 20 45 49 47 48 54 5f 42 59  assert( EIGHT_BY
4df0: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 70 4d 65  TE_ALIGNMENT(pMe
4e00: 6d 29 20 29 3b 0a 0a 20 20 69 78 20 3d 20 64 6f  m) );..  ix = do
4e10: 75 62 6c 65 54 6f 49 6e 74 36 34 28 70 4d 65 6d  ubleToInt64(pMem
4e20: 2d 3e 75 2e 72 29 3b 0a 0a 20 20 2f 2a 20 4f 6e  ->u.r);..  /* On
4e30: 6c 79 20 6d 61 72 6b 20 74 68 65 20 76 61 6c 75  ly mark the valu
4e40: 65 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20  e as an integer 
4e50: 69 66 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20  if.  **.  **    
4e60: 28 31 29 20 74 68 65 20 72 6f 75 6e 64 2d 74 72  (1) the round-tr
4e70: 69 70 20 63 6f 6e 76 65 72 73 69 6f 6e 20 72 65  ip conversion re
4e80: 61 6c 2d 3e 69 6e 74 2d 3e 72 65 61 6c 20 69 73  al->int->real is
4e90: 20 61 20 6e 6f 2d 6f 70 2c 20 61 6e 64 0a 20 20   a no-op, and.  
4ea0: 2a 2a 20 20 20 20 28 32 29 20 54 68 65 20 69 6e  **    (2) The in
4eb0: 74 65 67 65 72 20 69 73 20 6e 65 69 74 68 65 72  teger is neither
4ec0: 20 74 68 65 20 6c 61 72 67 65 73 74 20 6e 6f 72   the largest nor
4ed0: 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 0a 20 20   the smallest.  
4ee0: 2a 2a 20 20 20 20 20 20 20 20 70 6f 73 73 69 62  **        possib
4ef0: 6c 65 20 69 6e 74 65 67 65 72 20 28 74 69 63 6b  le integer (tick
4f00: 65 74 20 23 33 39 32 32 29 0a 20 20 2a 2a 0a 20  et #3922).  **. 
4f10: 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61   ** The second a
4f20: 6e 64 20 74 68 69 72 64 20 74 65 72 6d 73 20 69  nd third terms i
4f30: 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
4f40: 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 65 6e 66 6f  conditional enfo
4f50: 72 63 65 73 0a 20 20 2a 2a 20 74 68 65 20 73 65  rces.  ** the se
4f60: 63 6f 6e 64 20 63 6f 6e 64 69 74 69 6f 6e 20 75  cond condition u
4f70: 6e 64 65 72 20 74 68 65 20 61 73 73 75 6d 70 74  nder the assumpt
4f80: 69 6f 6e 20 74 68 61 74 20 61 64 64 69 74 69 6f  ion that additio
4f90: 6e 20 6f 76 65 72 66 6c 6f 77 20 63 61 75 73 65  n overflow cause
4fa0: 73 0a 20 20 2a 2a 20 76 61 6c 75 65 73 20 74 6f  s.  ** values to
4fb0: 20 77 72 61 70 20 61 72 6f 75 6e 64 2e 0a 20 20   wrap around..  
4fc0: 2a 2f 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75  */.  if( pMem->u
4fd0: 2e 72 3d 3d 69 78 20 26 26 20 69 78 3e 53 4d 41  .r==ix && ix>SMA
4fe0: 4c 4c 45 53 54 5f 49 4e 54 36 34 20 26 26 20 69  LLEST_INT64 && i
4ff0: 78 3c 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20  x<LARGEST_INT64 
5000: 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69  ){.    pMem->u.i
5010: 20 3d 20 69 78 3b 0a 20 20 20 20 4d 65 6d 53 65   = ix;.    MemSe
5020: 74 54 79 70 65 46 6c 61 67 28 70 4d 65 6d 2c 20  tTypeFlag(pMem, 
5030: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 7d 0a  MEM_Int);.  }.}.
5040: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 70  ./*.** Convert p
5050: 4d 65 6d 20 74 6f 20 74 79 70 65 20 69 6e 74 65  Mem to type inte
5060: 67 65 72 2e 20 20 49 6e 76 61 6c 69 64 61 74 65  ger.  Invalidate
5070: 20 61 6e 79 20 70 72 69 6f 72 20 72 65 70 72 65   any prior repre
5080: 73 65 6e 74 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 69  sentations..*/.i
5090: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  nt sqlite3VdbeMe
50a0: 6d 49 6e 74 65 67 65 72 69 66 79 28 4d 65 6d 20  mIntegerify(Mem 
50b0: 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65 72 74  *pMem){.  assert
50c0: 28 20 70 4d 65 6d 2d 3e 64 62 3d 3d 30 20 7c 7c  ( pMem->db==0 ||
50d0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
50e0: 65 6c 64 28 70 4d 65 6d 2d 3e 64 62 2d 3e 6d 75  eld(pMem->db->mu
50f0: 74 65 78 29 20 29 3b 0a 20 20 61 73 73 65 72 74  tex) );.  assert
5100: 28 20 21 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ( !sqlite3VdbeMe
5110: 6d 49 73 52 6f 77 53 65 74 28 70 4d 65 6d 29 20  mIsRowSet(pMem) 
5120: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 45 49 47  );.  assert( EIG
5130: 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e  HT_BYTE_ALIGNMEN
5140: 54 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 70 4d  T(pMem) );..  pM
5150: 65 6d 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65  em->u.i = sqlite
5160: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 4d  3VdbeIntValue(pM
5170: 65 6d 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  em);.  MemSetTyp
5180: 65 46 6c 61 67 28 70 4d 65 6d 2c 20 4d 45 4d 5f  eFlag(pMem, MEM_
5190: 49 6e 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 53  Int);.  return S
51a0: 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  QLITE_OK;.}../*.
51b0: 2a 2a 20 43 6f 6e 76 65 72 74 20 70 4d 65 6d 20  ** Convert pMem 
51c0: 73 6f 20 74 68 61 74 20 69 74 20 69 73 20 6f 66  so that it is of
51d0: 20 74 79 70 65 20 4d 45 4d 5f 52 65 61 6c 2e 0a   type MEM_Real..
51e0: 2a 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6e  ** Invalidate an
51f0: 79 20 70 72 69 6f 72 20 72 65 70 72 65 73 65 6e  y prior represen
5200: 74 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 69 6e 74 20  tations..*/.int 
5210: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
5220: 61 6c 69 66 79 28 4d 65 6d 20 2a 70 4d 65 6d 29  alify(Mem *pMem)
5230: 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d  {.  assert( pMem
5240: 2d 3e 64 62 3d 3d 30 20 7c 7c 20 73 71 6c 69 74  ->db==0 || sqlit
5250: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 4d  e3_mutex_held(pM
5260: 65 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29  em->db->mutex) )
5270: 3b 0a 20 20 61 73 73 65 72 74 28 20 45 49 47 48  ;.  assert( EIGH
5280: 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54  T_BYTE_ALIGNMENT
5290: 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 70 4d 65  (pMem) );..  pMe
52a0: 6d 2d 3e 75 2e 72 20 3d 20 73 71 6c 69 74 65 33  m->u.r = sqlite3
52b0: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 4d  VdbeRealValue(pM
52c0: 65 6d 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  em);.  MemSetTyp
52d0: 65 46 6c 61 67 28 70 4d 65 6d 2c 20 4d 45 4d 5f  eFlag(pMem, MEM_
52e0: 52 65 61 6c 29 3b 0a 20 20 72 65 74 75 72 6e 20  Real);.  return 
52f0: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  SQLITE_OK;.}../*
5300: 20 43 6f 6d 70 61 72 65 20 61 20 66 6c 6f 61 74   Compare a float
5310: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 20  ing point value 
5320: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  to an integer.  
5330: 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 74  Return true if t
5340: 68 65 20 74 77 6f 0a 2a 2a 20 76 61 6c 75 65 73  he two.** values
5350: 20 61 72 65 20 74 68 65 20 73 61 6d 65 20 77 69   are the same wi
5360: 74 68 69 6e 20 74 68 65 20 70 72 65 63 69 73 69  thin the precisi
5370: 6f 6e 20 6f 66 20 74 68 65 20 66 6c 6f 61 74 69  on of the floati
5380: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
5390: 2a 2a 0a 2a 2a 20 46 6f 72 20 73 6f 6d 65 20 76  **.** For some v
53a0: 65 72 73 69 6f 6e 73 20 6f 66 20 47 43 43 20 6f  ersions of GCC o
53b0: 6e 20 33 32 2d 62 69 74 20 6d 61 63 68 69 6e 65  n 32-bit machine
53c0: 73 2c 20 69 66 20 79 6f 75 20 64 6f 20 74 68 65  s, if you do the
53d0: 20 6d 6f 72 65 20 6f 62 76 69 6f 75 73 0a 2a 2a   more obvious.**
53e0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 22   comparison of "
53f0: 72 31 3d 3d 28 64 6f 75 62 6c 65 29 69 22 20 79  r1==(double)i" y
5400: 6f 75 20 73 6f 6d 65 74 69 6d 65 73 20 67 65 74  ou sometimes get
5410: 20 61 6e 20 61 6e 73 77 65 72 20 6f 66 20 66 61   an answer of fa
5420: 6c 73 65 20 65 76 65 6e 0a 2a 2a 20 74 68 6f 75  lse even.** thou
5430: 67 68 20 74 68 65 20 72 31 20 61 6e 64 20 28 64  gh the r1 and (d
5440: 6f 75 62 6c 65 29 69 20 76 61 6c 75 65 73 20 61  ouble)i values a
5450: 72 65 20 62 69 74 2d 66 6f 72 2d 62 69 74 20 74  re bit-for-bit t
5460: 68 65 20 73 61 6d 65 2e 0a 2a 2f 0a 73 74 61 74  he same..*/.stat
5470: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 52 65  ic int sqlite3Re
5480: 61 6c 53 61 6d 65 41 73 49 6e 74 28 64 6f 75 62  alSameAsInt(doub
5490: 6c 65 20 72 31 2c 20 73 71 6c 69 74 65 33 5f 69  le r1, sqlite3_i
54a0: 6e 74 36 34 20 69 29 7b 0a 20 20 64 6f 75 62 6c  nt64 i){.  doubl
54b0: 65 20 72 32 20 3d 20 28 64 6f 75 62 6c 65 29 69  e r2 = (double)i
54c0: 3b 0a 20 20 72 65 74 75 72 6e 20 6d 65 6d 63 6d  ;.  return memcm
54d0: 70 28 26 72 31 2c 20 26 72 32 2c 20 73 69 7a 65  p(&r1, &r2, size
54e0: 6f 66 28 72 31 29 29 3d 3d 30 3b 0a 7d 0a 0a 2f  of(r1))==0;.}../
54f0: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 70 4d 65  *.** Convert pMe
5500: 6d 20 73 6f 20 74 68 61 74 20 69 74 20 68 61 73  m so that it has
5510: 20 74 79 70 65 73 20 4d 45 4d 5f 52 65 61 6c 20   types MEM_Real 
5520: 6f 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 62 6f  or MEM_Int or bo
5530: 74 68 2e 0a 2a 2a 20 49 6e 76 61 6c 69 64 61 74  th..** Invalidat
5540: 65 20 61 6e 79 20 70 72 69 6f 72 20 72 65 70 72  e any prior repr
5550: 65 73 65 6e 74 61 74 69 6f 6e 73 2e 0a 2a 2a 0a  esentations..**.
5560: 2a 2a 20 45 76 65 72 79 20 65 66 66 6f 72 74 20  ** Every effort 
5570: 69 73 20 6d 61 64 65 20 74 6f 20 66 6f 72 63 65  is made to force
5580: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 2c   the conversion,
5590: 20 65 76 65 6e 20 69 66 20 74 68 65 20 69 6e 70   even if the inp
55a0: 75 74 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e  ut.** is a strin
55b0: 67 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  g that does not 
55c0: 6c 6f 6f 6b 20 63 6f 6d 70 6c 65 74 65 6c 79 20  look completely 
55d0: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2e 20 20  like a number.  
55e0: 43 6f 6e 76 65 72 74 0a 2a 2a 20 61 73 20 6d 75  Convert.** as mu
55f0: 63 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  ch of the string
5600: 20 61 73 20 77 65 20 63 61 6e 20 61 6e 64 20 69   as we can and i
5610: 67 6e 6f 72 65 20 74 68 65 20 72 65 73 74 2e 0a  gnore the rest..
5620: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  */.int sqlite3Vd
5630: 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 4d 65  beMemNumerify(Me
5640: 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20  m *pMem){.  if( 
5650: 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28  (pMem->flags & (
5660: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
5670: 7c 4d 45 4d 5f 4e 75 6c 6c 29 29 3d 3d 30 20 29  |MEM_Null))==0 )
5680: 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 20 20  {.    int rc;.  
5690: 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
56a0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c  >flags & (MEM_Bl
56b0: 6f 62 7c 4d 45 4d 5f 53 74 72 29 29 21 3d 30 20  ob|MEM_Str))!=0 
56c0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
56d0: 4d 65 6d 2d 3e 64 62 3d 3d 30 20 7c 7c 20 73 71  Mem->db==0 || sq
56e0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64  lite3_mutex_held
56f0: 28 70 4d 65 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78  (pMem->db->mutex
5700: 29 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  ) );.    rc = sq
5710: 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d 65 6d  lite3Atoi64(pMem
5720: 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 69 2c  ->z, &pMem->u.i,
5730: 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e   pMem->n, pMem->
5740: 65 6e 63 29 3b 0a 20 20 20 20 69 66 28 20 72 63  enc);.    if( rc
5750: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 4d 65 6d  ==0 ){.      Mem
5760: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4d 65 6d  SetTypeFlag(pMem
5770: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20  , MEM_Int);.    
5780: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 36 34  }else{.      i64
5790: 20 69 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 3b 0a   i = pMem->u.i;.
57a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 41 74 6f        sqlite3Ato
57b0: 46 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  F(pMem->z, &pMem
57c0: 2d 3e 75 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.r, pMem->n, 
57d0: 70 4d 65 6d 2d 3e 65 6e 63 29 3b 0a 20 20 20 20  pMem->enc);.    
57e0: 20 20 69 66 28 20 72 63 3d 3d 31 20 26 26 20 73    if( rc==1 && s
57f0: 71 6c 69 74 65 33 52 65 61 6c 53 61 6d 65 41 73  qlite3RealSameAs
5800: 49 6e 74 28 70 4d 65 6d 2d 3e 75 2e 72 2c 20 69  Int(pMem->u.r, i
5810: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4d 65  ) ){.        pMe
5820: 6d 2d 3e 75 2e 69 20 3d 20 69 3b 0a 20 20 20 20  m->u.i = i;.    
5830: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
5840: 61 67 28 70 4d 65 6d 2c 20 4d 45 4d 5f 49 6e 74  ag(pMem, MEM_Int
5850: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
5860: 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79          MemSetTy
5870: 70 65 46 6c 61 67 28 70 4d 65 6d 2c 20 4d 45 4d  peFlag(pMem, MEM
5880: 5f 52 65 61 6c 29 3b 0a 20 20 20 20 20 20 7d 0a  _Real);.      }.
5890: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65      }.  }.  asse
58a0: 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
58b0: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
58c0: 52 65 61 6c 7c 4d 45 4d 5f 4e 75 6c 6c 29 29 21  Real|MEM_Null))!
58d0: 3d 30 20 29 3b 0a 20 20 70 4d 65 6d 2d 3e 66 6c  =0 );.  pMem->fl
58e0: 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 53 74 72  ags &= ~(MEM_Str
58f0: 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 5a 65  |MEM_Blob|MEM_Ze
5900: 72 6f 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51  ro);.  return SQ
5910: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a  LITE_OK;.}../*.*
5920: 2a 20 43 61 73 74 20 74 68 65 20 64 61 74 61 74  * Cast the datat
5930: 79 70 65 20 6f 66 20 74 68 65 20 76 61 6c 75 65  ype of the value
5940: 20 69 6e 20 70 4d 65 6d 20 61 63 63 6f 72 64 69   in pMem accordi
5950: 6e 67 20 74 6f 20 74 68 65 20 61 66 66 69 6e 69  ng to the affini
5960: 74 79 0a 2a 2a 20 22 61 66 66 22 2e 20 20 43 61  ty.** "aff".  Ca
5970: 73 74 69 6e 67 20 69 73 20 64 69 66 66 65 72 65  sting is differe
5980: 6e 74 20 66 72 6f 6d 20 61 70 70 6c 79 69 6e 67  nt from applying
5990: 20 61 66 66 69 6e 69 74 79 20 69 6e 20 74 68 61   affinity in tha
59a0: 74 20 61 20 63 61 73 74 0a 2a 2a 20 69 73 20 66  t a cast.** is f
59b0: 6f 72 63 65 64 2e 20 20 49 6e 20 6f 74 68 65 72  orced.  In other
59c0: 20 77 6f 72 64 73 2c 20 74 68 65 20 76 61 6c 75   words, the valu
59d0: 65 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69  e is converted i
59e0: 6e 74 6f 20 74 68 65 20 64 65 73 69 72 65 64 0a  nto the desired.
59f0: 2a 2a 20 61 66 66 69 6e 69 74 79 20 65 76 65 6e  ** affinity even
5a00: 20 69 66 20 74 68 61 74 20 72 65 73 75 6c 74 73   if that results
5a10: 20 69 6e 20 6c 6f 73 73 20 6f 66 20 64 61 74 61   in loss of data
5a20: 2e 20 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  .  This routine 
5a30: 69 73 0a 2a 2a 20 75 73 65 64 20 28 66 6f 72 20  is.** used (for 
5a40: 65 78 61 6d 70 6c 65 29 20 74 6f 20 69 6d 70 6c  example) to impl
5a50: 65 6d 65 6e 74 20 74 68 65 20 53 51 4c 20 22 63  ement the SQL "c
5a60: 61 73 74 28 29 22 20 6f 70 65 72 61 74 6f 72 2e  ast()" operator.
5a70: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
5a80: 56 64 62 65 4d 65 6d 43 61 73 74 28 4d 65 6d 20  VdbeMemCast(Mem 
5a90: 2a 70 4d 65 6d 2c 20 75 38 20 61 66 66 2c 20 75  *pMem, u8 aff, u
5aa0: 38 20 65 6e 63 6f 64 69 6e 67 29 7b 0a 20 20 69  8 encoding){.  i
5ab0: 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  f( pMem->flags &
5ac0: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 72 65 74 75   MEM_Null ) retu
5ad0: 72 6e 3b 0a 20 20 73 77 69 74 63 68 28 20 61 66  rn;.  switch( af
5ae0: 66 20 29 7b 0a 20 20 20 20 63 61 73 65 20 53 51  f ){.    case SQ
5af0: 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 20 7b  LITE_AFF_BLOB: {
5b00: 20 20 20 2f 2a 20 52 65 61 6c 6c 79 20 61 20 63     /* Really a c
5b10: 61 73 74 20 74 6f 20 42 4c 4f 42 20 2a 2f 0a 20  ast to BLOB */. 
5b20: 20 20 20 20 20 69 66 28 20 28 70 4d 65 6d 2d 3e       if( (pMem->
5b30: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
5b40: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
5b50: 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c  sqlite3ValueAppl
5b60: 79 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20  yAffinity(pMem, 
5b70: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
5b80: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
5b90: 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d      assert( pMem
5ba0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
5bb0: 72 20 7c 7c 20 70 4d 65 6d 2d 3e 64 62 2d 3e 6d  r || pMem->db->m
5bc0: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
5bd0: 20 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d         if( pMem-
5be0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
5bf0: 20 29 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61   ) MemSetTypeFla
5c00: 67 28 70 4d 65 6d 2c 20 4d 45 4d 5f 42 6c 6f 62  g(pMem, MEM_Blob
5c10: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
5c20: 20 20 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c          pMem->fl
5c30: 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 54 79 70  ags &= ~(MEM_Typ
5c40: 65 4d 61 73 6b 26 7e 4d 45 4d 5f 42 6c 6f 62 29  eMask&~MEM_Blob)
5c50: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
5c60: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
5c70: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 41 46 46   case SQLITE_AFF
5c80: 5f 4e 55 4d 45 52 49 43 3a 20 7b 0a 20 20 20 20  _NUMERIC: {.    
5c90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
5ca0: 4e 75 6d 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a  Numerify(pMem);.
5cb0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
5cc0: 20 7d 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49   }.    case SQLI
5cd0: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 20  TE_AFF_INTEGER: 
5ce0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
5cf0: 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
5d00: 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 62 72  (pMem);.      br
5d10: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63  eak;.    }.    c
5d20: 61 73 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52  ase SQLITE_AFF_R
5d30: 45 41 4c 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c  EAL: {.      sql
5d40: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
5d50: 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  fy(pMem);.      
5d60: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
5d70: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
5d80: 20 20 61 73 73 65 72 74 28 20 61 66 66 3d 3d 53    assert( aff==S
5d90: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29  QLITE_AFF_TEXT )
5da0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5db0: 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c  MEM_Str==(MEM_Bl
5dc0: 6f 62 3e 3e 33 29 20 29 3b 0a 20 20 20 20 20 20  ob>>3) );.      
5dd0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 7c 3d 20 28  pMem->flags |= (
5de0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pMem->flags&MEM_
5df0: 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20 20 20 20 20  Blob)>>3;.      
5e00: 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c  sqlite3ValueAppl
5e10: 79 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20  yAffinity(pMem, 
5e20: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
5e30: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
5e40: 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e    assert( pMem->
5e50: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
5e60: 7c 7c 20 70 4d 65 6d 2d 3e 64 62 2d 3e 6d 61 6c  || pMem->db->mal
5e70: 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
5e80: 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26     pMem->flags &
5e90: 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  = ~(MEM_Int|MEM_
5ea0: 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  Real|MEM_Blob|ME
5eb0: 4d 5f 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 62  M_Zero);.      b
5ec0: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
5ed0: 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69 74 69 61 6c  }../*.** Initial
5ee0: 69 7a 65 20 62 75 6c 6b 20 6d 65 6d 6f 72 79 20  ize bulk memory 
5ef0: 74 6f 20 62 65 20 61 20 63 6f 6e 73 69 73 74 65  to be a consiste
5f00: 6e 74 20 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 2a  nt Mem object..*
5f10: 2a 0a 2a 2a 20 54 68 65 20 6d 69 6e 69 6d 75 6d  *.** The minimum
5f20: 20 61 6d 6f 75 6e 74 20 6f 66 20 69 6e 69 74 69   amount of initi
5f30: 61 6c 69 7a 61 74 69 6f 6e 20 66 65 61 73 69 62  alization feasib
5f40: 6c 65 20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e  le is performed.
5f50: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
5f60: 56 64 62 65 4d 65 6d 49 6e 69 74 28 4d 65 6d 20  VdbeMemInit(Mem 
5f70: 2a 70 4d 65 6d 2c 20 73 71 6c 69 74 65 33 20 2a  *pMem, sqlite3 *
5f80: 64 62 2c 20 75 31 36 20 66 6c 61 67 73 29 7b 0a  db, u16 flags){.
5f90: 20 20 61 73 73 65 72 74 28 20 28 66 6c 61 67 73    assert( (flags
5fa0: 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b   & ~MEM_TypeMask
5fb0: 29 3d 3d 30 20 29 3b 0a 20 20 70 4d 65 6d 2d 3e  )==0 );.  pMem->
5fc0: 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 3b 0a 20  flags = flags;. 
5fd0: 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a   pMem->db = db;.
5fe0: 20 20 70 4d 65 6d 2d 3e 73 7a 4d 61 6c 6c 6f 63    pMem->szMalloc
5ff0: 20 3d 20 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20   = 0;.}.../*.** 
6000: 44 65 6c 65 74 65 20 61 6e 79 20 70 72 65 76 69  Delete any previ
6010: 6f 75 73 20 76 61 6c 75 65 20 61 6e 64 20 73 65  ous value and se
6020: 74 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  t the value stor
6030: 65 64 20 69 6e 20 2a 70 4d 65 6d 20 74 6f 20 4e  ed in *pMem to N
6040: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ULL..**.** This 
6050: 72 6f 75 74 69 6e 65 20 63 61 6c 6c 73 20 74 68  routine calls th
6060: 65 20 4d 65 6d 2e 78 44 65 6c 20 64 65 73 74 72  e Mem.xDel destr
6070: 75 63 74 6f 72 20 74 6f 20 64 69 73 70 6f 73 65  uctor to dispose
6080: 20 6f 66 20 76 61 6c 75 65 73 20 74 68 61 74 0a   of values that.
6090: 2a 2a 20 72 65 71 75 69 72 65 20 74 68 65 20 64  ** require the d
60a0: 65 73 74 72 75 63 74 6f 72 2e 20 20 42 75 74 20  estructor.  But 
60b0: 69 74 20 70 72 65 73 65 72 76 65 73 20 74 68 65  it preserves the
60c0: 20 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 6d 65 6d   Mem.zMalloc mem
60d0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a  ory allocation..
60e0: 2a 2a 20 54 6f 20 66 72 65 65 20 61 6c 6c 20 72  ** To free all r
60f0: 65 73 6f 75 72 63 65 73 2c 20 75 73 65 20 73 71  esources, use sq
6100: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
6110: 61 73 65 28 29 2c 20 77 68 69 63 68 20 62 6f 74  ase(), which bot
6120: 68 20 63 61 6c 6c 73 20 74 68 69 73 0a 2a 2a 20  h calls this.** 
6130: 72 6f 75 74 69 6e 65 20 74 6f 20 69 6e 76 6f 6b  routine to invok
6140: 65 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  e the destructor
6150: 20 61 6e 64 20 64 65 61 6c 6c 6f 63 61 74 65 73   and deallocates
6160: 20 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2a   Mem.zMalloc..**
6170: 0a 2a 2a 20 55 73 65 20 74 68 69 73 20 72 6f 75  .** Use this rou
6180: 74 69 6e 65 20 74 6f 20 72 65 73 65 74 20 74 68  tine to reset th
6190: 65 20 4d 65 6d 20 70 72 69 6f 72 20 74 6f 20 69  e Mem prior to i
61a0: 6e 73 65 72 74 20 61 20 6e 65 77 20 76 61 6c 75  nsert a new valu
61b0: 65 2e 0a 2a 2a 0a 2a 2a 20 55 73 65 20 73 71 6c  e..**.** Use sql
61c0: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
61d0: 73 65 28 29 20 74 6f 20 63 6f 6d 70 6c 65 74 65  se() to complete
61e0: 20 65 72 61 73 65 20 74 68 65 20 4d 65 6d 20 70   erase the Mem p
61f0: 72 69 6f 72 20 74 6f 20 61 62 61 6e 64 6f 6e 69  rior to abandoni
6200: 6e 67 20 69 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73  ng it..*/.void s
6210: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
6220: 4e 75 6c 6c 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b  Null(Mem *pMem){
6230: 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79  .  if( VdbeMemDy
6240: 6e 61 6d 69 63 28 70 4d 65 6d 29 20 29 7b 0a 20  namic(pMem) ){. 
6250: 20 20 20 76 64 62 65 4d 65 6d 43 6c 65 61 72 45     vdbeMemClearE
6260: 78 74 65 72 6e 41 6e 64 53 65 74 4e 75 6c 6c 28  xternAndSetNull(
6270: 70 4d 65 6d 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  pMem);.  }else{.
6280: 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20      pMem->flags 
6290: 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 7d 0a  = MEM_Null;.  }.
62a0: 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  }.void sqlite3Va
62b0: 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74  lueSetNull(sqlit
62c0: 65 33 5f 76 61 6c 75 65 20 2a 70 29 7b 0a 20 20  e3_value *p){.  
62d0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
62e0: 74 4e 75 6c 6c 28 28 4d 65 6d 2a 29 70 29 3b 20  tNull((Mem*)p); 
62f0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 6c 65 74 65  .}../*.** Delete
6300: 20 61 6e 79 20 70 72 65 76 69 6f 75 73 20 76 61   any previous va
6310: 6c 75 65 20 61 6e 64 20 73 65 74 20 74 68 65 20  lue and set the 
6320: 76 61 6c 75 65 20 74 6f 20 62 65 20 61 20 42 4c  value to be a BL
6330: 4f 42 20 6f 66 20 6c 65 6e 67 74 68 0a 2a 2a 20  OB of length.** 
6340: 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c  n containing all
6350: 20 7a 65 72 6f 73 2e 0a 2a 2f 0a 76 6f 69 64 20   zeros..*/.void 
6360: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
6370: 74 5a 65 72 6f 42 6c 6f 62 28 4d 65 6d 20 2a 70  tZeroBlob(Mem *p
6380: 4d 65 6d 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 73  Mem, int n){.  s
6390: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
63a0: 65 61 73 65 28 70 4d 65 6d 29 3b 0a 20 20 70 4d  ease(pMem);.  pM
63b0: 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  em->flags = MEM_
63c0: 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72 6f 3b 0a 20  Blob|MEM_Zero;. 
63d0: 20 70 4d 65 6d 2d 3e 6e 20 3d 20 30 3b 0a 20 20   pMem->n = 0;.  
63e0: 69 66 28 20 6e 3c 30 20 29 20 6e 20 3d 20 30 3b  if( n<0 ) n = 0;
63f0: 0a 20 20 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f  .  pMem->u.nZero
6400: 20 3d 20 6e 3b 0a 20 20 70 4d 65 6d 2d 3e 65 6e   = n;.  pMem->en
6410: 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
6420: 0a 20 20 70 4d 65 6d 2d 3e 7a 20 3d 20 30 3b 0a  .  pMem->z = 0;.
6430: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 70 4d 65  }../*.** The pMe
6440: 6d 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 63 6f  m is known to co
6450: 6e 74 61 69 6e 20 63 6f 6e 74 65 6e 74 20 74 68  ntain content th
6460: 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64  at needs to be d
6470: 65 73 74 72 6f 79 65 64 20 70 72 69 6f 72 0a 2a  estroyed prior.*
6480: 2a 20 74 6f 20 61 20 76 61 6c 75 65 20 63 68 61  * to a value cha
6490: 6e 67 65 2e 20 20 53 6f 20 69 6e 76 6f 6b 65 20  nge.  So invoke 
64a0: 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 2c 20  the destructor, 
64b0: 74 68 65 6e 20 73 65 74 20 74 68 65 20 76 61 6c  then set the val
64c0: 75 65 20 74 6f 0a 2a 2a 20 61 20 36 34 2d 62 69  ue to.** a 64-bi
64d0: 74 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 73 74  t integer..*/.st
64e0: 61 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  atic SQLITE_NOIN
64f0: 4c 49 4e 45 20 76 6f 69 64 20 76 64 62 65 52 65  LINE void vdbeRe
6500: 6c 65 61 73 65 41 6e 64 53 65 74 49 6e 74 36 34  leaseAndSetInt64
6510: 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 69 36 34 20  (Mem *pMem, i64 
6520: 76 61 6c 29 7b 0a 20 20 73 71 6c 69 74 65 33 56  val){.  sqlite3V
6530: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4d  dbeMemSetNull(pM
6540: 65 6d 29 3b 0a 20 20 70 4d 65 6d 2d 3e 75 2e 69  em);.  pMem->u.i
6550: 20 3d 20 76 61 6c 3b 0a 20 20 70 4d 65 6d 2d 3e   = val;.  pMem->
6560: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
6570: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 6c 65 74 65  .}../*.** Delete
6580: 20 61 6e 79 20 70 72 65 76 69 6f 75 73 20 76 61   any previous va
6590: 6c 75 65 20 61 6e 64 20 73 65 74 20 74 68 65 20  lue and set the 
65a0: 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20  value stored in 
65b0: 2a 70 4d 65 6d 20 74 6f 20 76 61 6c 2c 0a 2a 2a  *pMem to val,.**
65c0: 20 6d 61 6e 69 66 65 73 74 20 74 79 70 65 20 49   manifest type I
65d0: 4e 54 45 47 45 52 2e 0a 2a 2f 0a 76 6f 69 64 20  NTEGER..*/.void 
65e0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
65f0: 74 49 6e 74 36 34 28 4d 65 6d 20 2a 70 4d 65 6d  tInt64(Mem *pMem
6600: 2c 20 69 36 34 20 76 61 6c 29 7b 0a 20 20 69 66  , i64 val){.  if
6610: 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
6620: 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 76 64  (pMem) ){.    vd
6630: 62 65 52 65 6c 65 61 73 65 41 6e 64 53 65 74 49  beReleaseAndSetI
6640: 6e 74 36 34 28 70 4d 65 6d 2c 20 76 61 6c 29 3b  nt64(pMem, val);
6650: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4d  .  }else{.    pM
6660: 65 6d 2d 3e 75 2e 69 20 3d 20 76 61 6c 3b 0a 20  em->u.i = val;. 
6670: 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d     pMem->flags =
6680: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 7d 0a   MEM_Int;.  }.}.
6690: 0a 2f 2a 20 41 20 6e 6f 2d 6f 70 20 64 65 73 74  ./* A no-op dest
66a0: 72 75 63 74 6f 72 20 2a 2f 0a 76 6f 69 64 20 73  ructor */.void s
66b0: 71 6c 69 74 65 33 4e 6f 6f 70 44 65 73 74 72 75  qlite3NoopDestru
66c0: 63 74 6f 72 28 76 6f 69 64 20 2a 70 29 7b 20 55  ctor(void *p){ U
66d0: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
66e0: 70 29 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65 74  p); }../*.** Set
66f0: 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
6700: 64 20 69 6e 20 2a 70 4d 65 6d 20 73 68 6f 75 6c  d in *pMem shoul
6710: 64 20 61 6c 72 65 61 64 79 20 62 65 20 61 20 4e  d already be a N
6720: 55 4c 4c 2e 0a 2a 2a 20 41 6c 73 6f 20 73 74 6f  ULL..** Also sto
6730: 72 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  re a pointer to 
6740: 67 6f 20 77 69 74 68 20 69 74 2e 0a 2a 2f 0a 76  go with it..*/.v
6750: 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d  oid sqlite3VdbeM
6760: 65 6d 53 65 74 50 6f 69 6e 74 65 72 28 0a 20 20  emSetPointer(.  
6770: 4d 65 6d 20 2a 70 4d 65 6d 2c 0a 20 20 76 6f 69  Mem *pMem,.  voi
6780: 64 20 2a 70 50 74 72 2c 0a 20 20 63 6f 6e 73 74  d *pPtr,.  const
6790: 20 63 68 61 72 20 2a 7a 50 54 79 70 65 2c 0a 20   char *zPType,. 
67a0: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 75 63   void (*xDestruc
67b0: 74 6f 72 29 28 76 6f 69 64 2a 29 0a 29 7b 0a 20  tor)(void*).){. 
67c0: 20 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 66   assert( pMem->f
67d0: 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29  lags==MEM_Null )
67e0: 3b 0a 20 20 70 4d 65 6d 2d 3e 75 2e 7a 50 54 79  ;.  pMem->u.zPTy
67f0: 70 65 20 3d 20 7a 50 54 79 70 65 20 3f 20 7a 50  pe = zPType ? zP
6800: 54 79 70 65 20 3a 20 22 22 3b 0a 20 20 70 4d 65  Type : "";.  pMe
6810: 6d 2d 3e 7a 20 3d 20 70 50 74 72 3b 0a 20 20 70  m->z = pPtr;.  p
6820: 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Mem->flags = MEM
6830: 5f 4e 75 6c 6c 7c 4d 45 4d 5f 44 79 6e 7c 4d 45  _Null|MEM_Dyn|ME
6840: 4d 5f 53 75 62 74 79 70 65 7c 4d 45 4d 5f 54 65  M_Subtype|MEM_Te
6850: 72 6d 3b 0a 20 20 70 4d 65 6d 2d 3e 65 53 75 62  rm;.  pMem->eSub
6860: 74 79 70 65 20 3d 20 27 70 27 3b 0a 20 20 70 4d  type = 'p';.  pM
6870: 65 6d 2d 3e 78 44 65 6c 20 3d 20 78 44 65 73 74  em->xDel = xDest
6880: 72 75 63 74 6f 72 20 3f 20 78 44 65 73 74 72 75  ructor ? xDestru
6890: 63 74 6f 72 20 3a 20 73 71 6c 69 74 65 33 4e 6f  ctor : sqlite3No
68a0: 6f 70 44 65 73 74 72 75 63 74 6f 72 3b 0a 7d 0a  opDestructor;.}.
68b0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
68c0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
68d0: 49 4e 54 0a 2f 2a 0a 2a 2a 20 44 65 6c 65 74 65  INT./*.** Delete
68e0: 20 61 6e 79 20 70 72 65 76 69 6f 75 73 20 76 61   any previous va
68f0: 6c 75 65 20 61 6e 64 20 73 65 74 20 74 68 65 20  lue and set the 
6900: 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20  value stored in 
6910: 2a 70 4d 65 6d 20 74 6f 20 76 61 6c 2c 0a 2a 2a  *pMem to val,.**
6920: 20 6d 61 6e 69 66 65 73 74 20 74 79 70 65 20 52   manifest type R
6930: 45 41 4c 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  EAL..*/.void sql
6940: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 44 6f  ite3VdbeMemSetDo
6950: 75 62 6c 65 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20  uble(Mem *pMem, 
6960: 64 6f 75 62 6c 65 20 76 61 6c 29 7b 0a 20 20 73  double val){.  s
6970: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
6980: 4e 75 6c 6c 28 70 4d 65 6d 29 3b 0a 20 20 69 66  Null(pMem);.  if
6990: 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  ( !sqlite3IsNaN(
69a0: 76 61 6c 29 20 29 7b 0a 20 20 20 20 70 4d 65 6d  val) ){.    pMem
69b0: 2d 3e 75 2e 72 20 3d 20 76 61 6c 3b 0a 20 20 20  ->u.r = val;.   
69c0: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d   pMem->flags = M
69d0: 45 4d 5f 52 65 61 6c 3b 0a 20 20 7d 0a 7d 0a 23  EM_Real;.  }.}.#
69e0: 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
69f0: 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
6a00: 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
6a10: 74 68 65 20 4d 65 6d 20 68 6f 6c 64 73 20 61 20  the Mem holds a 
6a20: 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 2e 20 20  RowSet object.  
6a30: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  This routine is 
6a40: 69 6e 74 65 6e 64 65 64 0a 2a 2a 20 66 6f 72 20  intended.** for 
6a50: 75 73 65 20 69 6e 73 69 64 65 20 6f 66 20 61 73  use inside of as
6a60: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
6a70: 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  s..*/.int sqlite
6a80: 33 56 64 62 65 4d 65 6d 49 73 52 6f 77 53 65 74  3VdbeMemIsRowSet
6a90: 28 63 6f 6e 73 74 20 4d 65 6d 20 2a 70 4d 65 6d  (const Mem *pMem
6aa0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 28 70 4d 65  ){.  return (pMe
6ab0: 6d 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 42 6c  m->flags&(MEM_Bl
6ac0: 6f 62 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 28 4d  ob|MEM_Dyn))==(M
6ad0: 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 44 79 6e 29  EM_Blob|MEM_Dyn)
6ae0: 0a 20 20 20 20 20 20 20 20 20 26 26 20 70 4d 65  .         && pMe
6af0: 6d 2d 3e 78 44 65 6c 3d 3d 73 71 6c 69 74 65 33  m->xDel==sqlite3
6b00: 52 6f 77 53 65 74 44 65 6c 65 74 65 3b 0a 7d 0a  RowSetDelete;.}.
6b10: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65  #endif../*.** De
6b20: 6c 65 74 65 20 61 6e 79 20 70 72 65 76 69 6f 75  lete any previou
6b30: 73 20 76 61 6c 75 65 20 61 6e 64 20 73 65 74 20  s value and set 
6b40: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 4d 65  the value of pMe
6b50: 6d 20 74 6f 20 62 65 20 61 6e 0a 2a 2a 20 65 6d  m to be an.** em
6b60: 70 74 79 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  pty boolean inde
6b70: 78 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  x..**.** Return 
6b80: 53 51 4c 49 54 45 5f 4f 4b 20 6f 6e 20 73 75 63  SQLITE_OK on suc
6b90: 63 65 73 73 20 61 6e 64 20 53 51 4c 49 54 45 5f  cess and SQLITE_
6ba0: 4e 4f 4d 45 4d 20 69 66 20 61 20 6d 65 6d 6f 72  NOMEM if a memor
6bb0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 0a 2a 2a 20  y allocation.** 
6bc0: 65 72 72 6f 72 20 6f 63 63 75 72 73 2e 0a 2a 2f  error occurs..*/
6bd0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
6be0: 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 4d 65 6d  MemSetRowSet(Mem
6bf0: 20 2a 70 4d 65 6d 29 7b 0a 20 20 73 71 6c 69 74   *pMem){.  sqlit
6c00: 65 33 20 2a 64 62 20 3d 20 70 4d 65 6d 2d 3e 64  e3 *db = pMem->d
6c10: 62 3b 0a 20 20 52 6f 77 53 65 74 20 2a 70 3b 0a  b;.  RowSet *p;.
6c20: 20 20 61 73 73 65 72 74 28 20 64 62 21 3d 30 20    assert( db!=0 
6c30: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71  );.  assert( !sq
6c40: 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 73 52 6f  lite3VdbeMemIsRo
6c50: 77 53 65 74 28 70 4d 65 6d 29 20 29 3b 0a 20 20  wSet(pMem) );.  
6c60: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
6c70: 6c 65 61 73 65 28 70 4d 65 6d 29 3b 0a 20 20 70  lease(pMem);.  p
6c80: 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74   = sqlite3RowSet
6c90: 49 6e 69 74 28 64 62 29 3b 0a 20 20 69 66 28 20  Init(db);.  if( 
6ca0: 70 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 53 51  p==0 ) return SQ
6cb0: 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 70 4d  LITE_NOMEM;.  pM
6cc0: 65 6d 2d 3e 7a 20 3d 20 28 63 68 61 72 2a 29 70  em->z = (char*)p
6cd0: 3b 0a 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  ;.  pMem->flags 
6ce0: 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 44  = MEM_Blob|MEM_D
6cf0: 79 6e 3b 0a 20 20 70 4d 65 6d 2d 3e 78 44 65 6c  yn;.  pMem->xDel
6d00: 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74   = sqlite3RowSet
6d10: 44 65 6c 65 74 65 3b 0a 20 20 72 65 74 75 72 6e  Delete;.  return
6d20: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f   SQLITE_OK;.}../
6d30: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
6d40: 20 69 66 20 74 68 65 20 4d 65 6d 20 6f 62 6a 65   if the Mem obje
6d50: 63 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 45  ct contains a TE
6d60: 58 54 20 6f 72 20 42 4c 4f 42 20 74 68 61 74 20  XT or BLOB that 
6d70: 69 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20  is.** too large 
6d80: 2d 20 77 68 6f 73 65 20 73 69 7a 65 20 65 78 63  - whose size exc
6d90: 65 65 64 73 20 53 51 4c 49 54 45 5f 4d 41 58 5f  eeds SQLITE_MAX_
6da0: 4c 45 4e 47 54 48 2e 0a 2a 2f 0a 69 6e 74 20 73  LENGTH..*/.int s
6db0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
6dc0: 42 69 67 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 61  Big(Mem *p){.  a
6dd0: 73 73 65 72 74 28 20 70 2d 3e 64 62 21 3d 30 20  ssert( p->db!=0 
6de0: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67  );.  if( p->flag
6df0: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
6e00: 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20 69 6e  _Blob) ){.    in
6e10: 74 20 6e 20 3d 20 70 2d 3e 6e 3b 0a 20 20 20 20  t n = p->n;.    
6e20: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
6e30: 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
6e40: 20 6e 20 2b 3d 20 70 2d 3e 75 2e 6e 5a 65 72 6f   n += p->u.nZero
6e50: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
6e60: 72 6e 20 6e 3e 70 2d 3e 64 62 2d 3e 61 4c 69 6d  rn n>p->db->aLim
6e70: 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
6e80: 4c 45 4e 47 54 48 5d 3b 0a 20 20 7d 0a 20 20 72  LENGTH];.  }.  r
6e90: 65 74 75 72 6e 20 30 3b 20 0a 7d 0a 0a 23 69 66  eturn 0; .}..#if
6ea0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
6eb0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  ./*.** This rout
6ec0: 69 6e 65 20 70 72 65 70 61 72 65 73 20 61 20 6d  ine prepares a m
6ed0: 65 6d 6f 72 79 20 63 65 6c 6c 20 66 6f 72 20 6d  emory cell for m
6ee0: 6f 64 69 66 69 63 61 74 69 6f 6e 20 62 79 20 62  odification by b
6ef0: 72 65 61 6b 69 6e 67 0a 2a 2a 20 69 74 73 20 6c  reaking.** its l
6f00: 69 6e 6b 20 74 6f 20 61 20 73 68 61 6c 6c 6f 77  ink to a shallow
6f10: 20 63 6f 70 79 20 61 6e 64 20 62 79 20 6d 61 72   copy and by mar
6f20: 6b 69 6e 67 20 61 6e 79 20 63 75 72 72 65 6e 74  king any current
6f30: 20 73 68 61 6c 6c 6f 77 0a 2a 2a 20 63 6f 70 69   shallow.** copi
6f40: 65 73 20 6f 66 20 74 68 69 73 20 63 65 6c 6c 20  es of this cell 
6f50: 61 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 0a 2a  as invalid..**.*
6f60: 2a 20 54 68 69 73 20 69 73 20 75 73 65 64 20 66  * This is used f
6f70: 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64  or testing and d
6f80: 65 62 75 67 67 69 6e 67 20 6f 6e 6c 79 20 2d 20  ebugging only - 
6f90: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 73 68 61  to make sure sha
6fa0: 6c 6c 6f 77 0a 2a 2a 20 63 6f 70 69 65 73 20 61  llow.** copies a
6fb0: 72 65 20 6e 6f 74 20 6d 69 73 75 73 65 64 2e 0a  re not misused..
6fc0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
6fd0: 64 62 65 4d 65 6d 41 62 6f 75 74 54 6f 43 68 61  dbeMemAboutToCha
6fe0: 6e 67 65 28 56 64 62 65 20 2a 70 56 64 62 65 2c  nge(Vdbe *pVdbe,
6ff0: 20 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69   Mem *pMem){.  i
7000: 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b  nt i;.  Mem *pX;
7010: 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70 58 3d 70  .  for(i=0, pX=p
7020: 56 64 62 65 2d 3e 61 4d 65 6d 3b 20 69 3c 70 56  Vdbe->aMem; i<pV
7030: 64 62 65 2d 3e 6e 4d 65 6d 3b 20 69 2b 2b 2c 20  dbe->nMem; i++, 
7040: 70 58 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 70  pX++){.    if( p
7050: 58 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 70  X->pScopyFrom==p
7060: 4d 65 6d 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  Mem ){.      /* 
7070: 49 66 20 70 58 20 69 73 20 6d 61 72 6b 65 64 20  If pX is marked 
7080: 61 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  as a shallow cop
7090: 79 20 6f 66 20 70 4d 65 6d 2c 20 74 68 65 6e 20  y of pMem, then 
70a0: 76 65 72 69 66 79 20 74 68 61 74 0a 20 20 20 20  verify that.    
70b0: 20 20 2a 2a 20 6e 6f 20 73 69 67 6e 69 66 69 63    ** no signific
70c0: 61 6e 74 20 63 68 61 6e 67 65 73 20 68 61 76 65  ant changes have
70d0: 20 62 65 65 6e 20 6d 61 64 65 20 74 6f 20 70 58   been made to pX
70e0: 20 73 69 6e 63 65 20 74 68 65 20 4f 50 5f 53 43   since the OP_SC
70f0: 6f 70 79 2e 0a 20 20 20 20 20 20 2a 2a 20 41 20  opy..      ** A 
7100: 73 69 67 6e 69 66 69 63 61 6e 74 20 63 68 61 6e  significant chan
7110: 67 65 20 77 6f 75 6c 64 20 69 6e 64 69 63 61 74  ge would indicat
7120: 65 64 20 61 20 6d 69 73 73 65 64 20 63 61 6c 6c  ed a missed call
7130: 20 74 6f 20 74 68 69 73 0a 20 20 20 20 20 20 2a   to this.      *
7140: 2a 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 70  * function for p
7150: 58 2e 20 20 4d 69 6e 6f 72 20 63 68 61 6e 67 65  X.  Minor change
7160: 73 2c 20 73 75 63 68 20 61 73 20 61 64 64 69 6e  s, such as addin
7170: 67 20 6f 72 20 72 65 6d 6f 76 69 6e 67 20 61 0a  g or removing a.
7180: 20 20 20 20 20 20 2a 2a 20 64 75 61 6c 20 74 79        ** dual ty
7190: 70 65 2c 20 61 72 65 20 61 6c 6c 6f 77 65 64 2c  pe, are allowed,
71a0: 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65 20   as long as the 
71b0: 75 6e 64 65 72 6c 79 69 6e 67 20 76 61 6c 75 65  underlying value
71c0: 20 69 73 20 74 68 65 0a 20 20 20 20 20 20 2a 2a   is the.      **
71d0: 20 73 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 20 20   same. */.      
71e0: 75 31 36 20 6d 46 6c 61 67 73 20 3d 20 70 4d 65  u16 mFlags = pMe
71f0: 6d 2d 3e 66 6c 61 67 73 20 26 20 70 58 2d 3e 66  m->flags & pX->f
7200: 6c 61 67 73 20 26 20 70 58 2d 3e 6d 53 63 6f 70  lags & pX->mScop
7210: 79 46 6c 61 67 73 3b 0a 20 20 20 20 20 20 61 73  yFlags;.      as
7220: 73 65 72 74 28 20 28 6d 46 6c 61 67 73 26 4d 45  sert( (mFlags&ME
7230: 4d 5f 49 6e 74 29 3d 3d 30 20 7c 7c 20 70 4d 65  M_Int)==0 || pMe
7240: 6d 2d 3e 75 2e 69 3d 3d 70 58 2d 3e 75 2e 69 20  m->u.i==pX->u.i 
7250: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
7260: 20 28 6d 46 6c 61 67 73 26 4d 45 4d 5f 52 65 61   (mFlags&MEM_Rea
7270: 6c 29 3d 3d 30 20 7c 7c 20 70 4d 65 6d 2d 3e 75  l)==0 || pMem->u
7280: 2e 72 3d 3d 70 58 2d 3e 75 2e 72 20 29 3b 0a 20  .r==pX->u.r );. 
7290: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 6d 46       assert( (mF
72a0: 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 3d 3d 30  lags&MEM_Str)==0
72b0: 20 20 7c 7c 20 28 70 4d 65 6d 2d 3e 6e 3d 3d 70    || (pMem->n==p
72c0: 58 2d 3e 6e 20 26 26 20 70 4d 65 6d 2d 3e 7a 3d  X->n && pMem->z=
72d0: 3d 70 58 2d 3e 7a 29 20 29 3b 0a 20 20 20 20 20  =pX->z) );.     
72e0: 20 61 73 73 65 72 74 28 20 28 6d 46 6c 61 67 73   assert( (mFlags
72f0: 26 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 20 7c  &MEM_Blob)==0  |
7300: 7c 20 73 71 6c 69 74 65 33 42 6c 6f 62 43 6f 6d  | sqlite3BlobCom
7310: 70 61 72 65 28 70 4d 65 6d 2c 70 58 29 3d 3d 30  pare(pMem,pX)==0
7320: 20 29 3b 0a 20 20 20 20 20 20 0a 20 20 20 20 20   );.      .     
7330: 20 2f 2a 20 70 4d 65 6d 20 69 73 20 74 68 65 20   /* pMem is the 
7340: 72 65 67 69 73 74 65 72 20 74 68 61 74 20 69 73  register that is
7350: 20 63 68 61 6e 67 69 6e 67 2e 20 20 42 75 74 20   changing.  But 
7360: 61 6c 73 6f 20 6d 61 72 6b 20 70 58 20 61 73 0a  also mark pX as.
7370: 20 20 20 20 20 20 2a 2a 20 75 6e 64 65 66 69 6e        ** undefin
7380: 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61  ed so that we ca
7390: 6e 20 71 75 69 63 6b 6c 79 20 64 65 74 65 63 74  n quickly detect
73a0: 20 74 68 65 20 73 68 61 6c 6c 6f 77 2d 63 6f 70   the shallow-cop
73b0: 79 20 65 72 72 6f 72 20 2a 2f 0a 20 20 20 20 20  y error */.     
73c0: 20 70 58 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d   pX->flags = MEM
73d0: 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20  _Undefined;.    
73e0: 20 20 70 58 2d 3e 70 53 63 6f 70 79 46 72 6f 6d    pX->pScopyFrom
73f0: 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 0;.    }.  }.
7400: 20 20 70 4d 65 6d 2d 3e 70 53 63 6f 70 79 46 72    pMem->pScopyFr
7410: 6f 6d 20 3d 20 30 3b 0a 7d 0a 23 65 6e 64 69 66  om = 0;.}.#endif
7420: 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
7430: 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65   */.../*.** Make
7440: 20 61 6e 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79   an shallow copy
7450: 20 6f 66 20 70 46 72 6f 6d 20 69 6e 74 6f 20 70   of pFrom into p
7460: 54 6f 2e 20 20 50 72 69 6f 72 20 63 6f 6e 74 65  To.  Prior conte
7470: 6e 74 73 20 6f 66 0a 2a 2a 20 70 54 6f 20 61 72  nts of.** pTo ar
7480: 65 20 66 72 65 65 64 2e 20 20 54 68 65 20 70 46  e freed.  The pF
7490: 72 6f 6d 2d 3e 7a 20 66 69 65 6c 64 20 69 73 20  rom->z field is 
74a0: 6e 6f 74 20 64 75 70 6c 69 63 61 74 65 64 2e 20  not duplicated. 
74b0: 20 49 66 0a 2a 2a 20 70 46 72 6f 6d 2d 3e 7a 20   If.** pFrom->z 
74c0: 69 73 20 75 73 65 64 2c 20 74 68 65 6e 20 70 54  is used, then pT
74d0: 6f 2d 3e 7a 20 70 6f 69 6e 74 73 20 74 6f 20 74  o->z points to t
74e0: 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73  he same thing as
74f0: 20 70 46 72 6f 6d 2d 3e 7a 0a 2a 2a 20 61 6e 64   pFrom->z.** and
7500: 20 66 6c 61 67 73 20 67 65 74 73 20 73 72 63 54   flags gets srcT
7510: 79 70 65 20 28 65 69 74 68 65 72 20 4d 45 4d 5f  ype (either MEM_
7520: 45 70 68 65 6d 20 6f 72 20 4d 45 4d 5f 53 74 61  Ephem or MEM_Sta
7530: 74 69 63 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tic)..*/.static 
7540: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20  SQLITE_NOINLINE 
7550: 76 6f 69 64 20 76 64 62 65 43 6c 72 43 6f 70 79  void vdbeClrCopy
7560: 28 4d 65 6d 20 2a 70 54 6f 2c 20 63 6f 6e 73 74  (Mem *pTo, const
7570: 20 4d 65 6d 20 2a 70 46 72 6f 6d 2c 20 69 6e 74   Mem *pFrom, int
7580: 20 65 54 79 70 65 29 7b 0a 20 20 76 64 62 65 4d   eType){.  vdbeM
7590: 65 6d 43 6c 65 61 72 45 78 74 65 72 6e 41 6e 64  emClearExternAnd
75a0: 53 65 74 4e 75 6c 6c 28 70 54 6f 29 3b 0a 20 20  SetNull(pTo);.  
75b0: 61 73 73 65 72 74 28 20 21 56 64 62 65 4d 65 6d  assert( !VdbeMem
75c0: 44 79 6e 61 6d 69 63 28 70 54 6f 29 20 29 3b 0a  Dynamic(pTo) );.
75d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
75e0: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 54 6f 2c  ShallowCopy(pTo,
75f0: 20 70 46 72 6f 6d 2c 20 65 54 79 70 65 29 3b 0a   pFrom, eType);.
7600: 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  }.void sqlite3Vd
7610: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
7620: 28 4d 65 6d 20 2a 70 54 6f 2c 20 63 6f 6e 73 74  (Mem *pTo, const
7630: 20 4d 65 6d 20 2a 70 46 72 6f 6d 2c 20 69 6e 74   Mem *pFrom, int
7640: 20 73 72 63 54 79 70 65 29 7b 0a 20 20 61 73 73   srcType){.  ass
7650: 65 72 74 28 20 21 73 71 6c 69 74 65 33 56 64 62  ert( !sqlite3Vdb
7660: 65 4d 65 6d 49 73 52 6f 77 53 65 74 28 70 46 72  eMemIsRowSet(pFr
7670: 6f 6d 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  om) );.  assert(
7680: 20 70 54 6f 2d 3e 64 62 3d 3d 70 46 72 6f 6d 2d   pTo->db==pFrom-
7690: 3e 64 62 20 29 3b 0a 20 20 69 66 28 20 56 64 62  >db );.  if( Vdb
76a0: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 54 6f 29  eMemDynamic(pTo)
76b0: 20 29 7b 20 76 64 62 65 43 6c 72 43 6f 70 79 28   ){ vdbeClrCopy(
76c0: 70 54 6f 2c 70 46 72 6f 6d 2c 73 72 63 54 79 70  pTo,pFrom,srcTyp
76d0: 65 29 3b 20 72 65 74 75 72 6e 3b 20 7d 0a 20 20  e); return; }.  
76e0: 6d 65 6d 63 70 79 28 70 54 6f 2c 20 70 46 72 6f  memcpy(pTo, pFro
76f0: 6d 2c 20 4d 45 4d 43 45 4c 4c 53 49 5a 45 29 3b  m, MEMCELLSIZE);
7700: 0a 20 20 69 66 28 20 28 70 46 72 6f 6d 2d 3e 66  .  if( (pFrom->f
7710: 6c 61 67 73 26 4d 45 4d 5f 53 74 61 74 69 63 29  lags&MEM_Static)
7720: 3d 3d 30 20 29 7b 0a 20 20 20 20 70 54 6f 2d 3e  ==0 ){.    pTo->
7730: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 44  flags &= ~(MEM_D
7740: 79 6e 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  yn|MEM_Static|ME
7750: 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 61 73  M_Ephem);.    as
7760: 73 65 72 74 28 20 73 72 63 54 79 70 65 3d 3d 4d  sert( srcType==M
7770: 45 4d 5f 45 70 68 65 6d 20 7c 7c 20 73 72 63 54  EM_Ephem || srcT
7780: 79 70 65 3d 3d 4d 45 4d 5f 53 74 61 74 69 63 20  ype==MEM_Static 
7790: 29 3b 0a 20 20 20 20 70 54 6f 2d 3e 66 6c 61 67  );.    pTo->flag
77a0: 73 20 7c 3d 20 73 72 63 54 79 70 65 3b 0a 20 20  s |= srcType;.  
77b0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20  }.}../*.** Make 
77c0: 61 20 66 75 6c 6c 20 63 6f 70 79 20 6f 66 20 70  a full copy of p
77d0: 46 72 6f 6d 20 69 6e 74 6f 20 70 54 6f 2e 20 20  From into pTo.  
77e0: 50 72 69 6f 72 20 63 6f 6e 74 65 6e 74 73 20 6f  Prior contents o
77f0: 66 20 70 54 6f 20 61 72 65 0a 2a 2a 20 66 72 65  f pTo are.** fre
7800: 65 64 20 62 65 66 6f 72 65 20 74 68 65 20 63 6f  ed before the co
7810: 70 79 20 69 73 20 6d 61 64 65 2e 0a 2a 2f 0a 69  py is made..*/.i
7820: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  nt sqlite3VdbeMe
7830: 6d 43 6f 70 79 28 4d 65 6d 20 2a 70 54 6f 2c 20  mCopy(Mem *pTo, 
7840: 63 6f 6e 73 74 20 4d 65 6d 20 2a 70 46 72 6f 6d  const Mem *pFrom
7850: 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  ){.  int rc = SQ
7860: 4c 49 54 45 5f 4f 4b 3b 0a 0a 20 20 61 73 73 65  LITE_OK;..  asse
7870: 72 74 28 20 21 73 71 6c 69 74 65 33 56 64 62 65  rt( !sqlite3Vdbe
7880: 4d 65 6d 49 73 52 6f 77 53 65 74 28 70 46 72 6f  MemIsRowSet(pFro
7890: 6d 29 20 29 3b 0a 20 20 69 66 28 20 56 64 62 65  m) );.  if( Vdbe
78a0: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 54 6f 29 20  MemDynamic(pTo) 
78b0: 29 20 76 64 62 65 4d 65 6d 43 6c 65 61 72 45 78  ) vdbeMemClearEx
78c0: 74 65 72 6e 41 6e 64 53 65 74 4e 75 6c 6c 28 70  ternAndSetNull(p
78d0: 54 6f 29 3b 0a 20 20 6d 65 6d 63 70 79 28 70 54  To);.  memcpy(pT
78e0: 6f 2c 20 70 46 72 6f 6d 2c 20 4d 45 4d 43 45 4c  o, pFrom, MEMCEL
78f0: 4c 53 49 5a 45 29 3b 0a 20 20 70 54 6f 2d 3e 66  LSIZE);.  pTo->f
7900: 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e  lags &= ~MEM_Dyn
7910: 3b 0a 20 20 69 66 28 20 70 54 6f 2d 3e 66 6c 61  ;.  if( pTo->fla
7920: 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  gs&(MEM_Str|MEM_
7930: 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20 69 66 28  Blob) ){.    if(
7940: 20 30 3d 3d 28 70 46 72 6f 6d 2d 3e 66 6c 61 67   0==(pFrom->flag
7950: 73 26 4d 45 4d 5f 53 74 61 74 69 63 29 20 29 7b  s&MEM_Static) ){
7960: 0a 20 20 20 20 20 20 70 54 6f 2d 3e 66 6c 61 67  .      pTo->flag
7970: 73 20 7c 3d 20 4d 45 4d 5f 45 70 68 65 6d 3b 0a  s |= MEM_Ephem;.
7980: 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
7990: 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69  e3VdbeMemMakeWri
79a0: 74 65 61 62 6c 65 28 70 54 6f 29 3b 0a 20 20 20  teable(pTo);.   
79b0: 20 7d 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e   }.  }..  return
79c0: 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72   rc;.}../*.** Tr
79d0: 61 6e 73 66 65 72 20 74 68 65 20 63 6f 6e 74 65  ansfer the conte
79e0: 6e 74 73 20 6f 66 20 70 46 72 6f 6d 20 74 6f 20  nts of pFrom to 
79f0: 70 54 6f 2e 20 41 6e 79 20 65 78 69 73 74 69 6e  pTo. Any existin
7a00: 67 20 76 61 6c 75 65 20 69 6e 20 70 54 6f 20 69  g value in pTo i
7a10: 73 0a 2a 2a 20 66 72 65 65 64 2e 20 49 66 20 70  s.** freed. If p
7a20: 46 72 6f 6d 20 63 6f 6e 74 61 69 6e 73 20 65 70  From contains ep
7a30: 68 65 6d 65 72 61 6c 20 64 61 74 61 2c 20 61 20  hemeral data, a 
7a40: 63 6f 70 79 20 69 73 20 6d 61 64 65 2e 0a 2a 2a  copy is made..**
7a50: 0a 2a 2a 20 70 46 72 6f 6d 20 63 6f 6e 74 61 69  .** pFrom contai
7a60: 6e 73 20 61 6e 20 53 51 4c 20 4e 55 4c 4c 20 77  ns an SQL NULL w
7a70: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
7a80: 20 72 65 74 75 72 6e 73 2e 0a 2a 2f 0a 76 6f 69   returns..*/.voi
7a90: 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  d sqlite3VdbeMem
7aa0: 4d 6f 76 65 28 4d 65 6d 20 2a 70 54 6f 2c 20 4d  Move(Mem *pTo, M
7ab0: 65 6d 20 2a 70 46 72 6f 6d 29 7b 0a 20 20 61 73  em *pFrom){.  as
7ac0: 73 65 72 74 28 20 70 46 72 6f 6d 2d 3e 64 62 3d  sert( pFrom->db=
7ad0: 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f 6d 75  =0 || sqlite3_mu
7ae0: 74 65 78 5f 68 65 6c 64 28 70 46 72 6f 6d 2d 3e  tex_held(pFrom->
7af0: 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20  db->mutex) );.  
7b00: 61 73 73 65 72 74 28 20 70 54 6f 2d 3e 64 62 3d  assert( pTo->db=
7b10: 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f 6d 75  =0 || sqlite3_mu
7b20: 74 65 78 5f 68 65 6c 64 28 70 54 6f 2d 3e 64 62  tex_held(pTo->db
7b30: 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 61 73  ->mutex) );.  as
7b40: 73 65 72 74 28 20 70 46 72 6f 6d 2d 3e 64 62 3d  sert( pFrom->db=
7b50: 3d 30 20 7c 7c 20 70 54 6f 2d 3e 64 62 3d 3d 30  =0 || pTo->db==0
7b60: 20 7c 7c 20 70 46 72 6f 6d 2d 3e 64 62 3d 3d 70   || pFrom->db==p
7b70: 54 6f 2d 3e 64 62 20 29 3b 0a 0a 20 20 73 71 6c  To->db );..  sql
7b80: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
7b90: 73 65 28 70 54 6f 29 3b 0a 20 20 6d 65 6d 63 70  se(pTo);.  memcp
7ba0: 79 28 70 54 6f 2c 20 70 46 72 6f 6d 2c 20 73 69  y(pTo, pFrom, si
7bb0: 7a 65 6f 66 28 4d 65 6d 29 29 3b 0a 20 20 70 46  zeof(Mem));.  pF
7bc0: 72 6f 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  rom->flags = MEM
7bd0: 5f 4e 75 6c 6c 3b 0a 20 20 70 46 72 6f 6d 2d 3e  _Null;.  pFrom->
7be0: 73 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 7d 0a  szMalloc = 0;.}.
7bf0: 0a 2f 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68  ./*.** Change th
7c00: 65 20 76 61 6c 75 65 20 6f 66 20 61 20 4d 65 6d  e value of a Mem
7c10: 20 74 6f 20 62 65 20 61 20 73 74 72 69 6e 67 20   to be a string 
7c20: 6f 72 20 61 20 42 4c 4f 42 2e 0a 2a 2a 0a 2a 2a  or a BLOB..**.**
7c30: 20 54 68 65 20 6d 65 6d 6f 72 79 20 6d 61 6e 61   The memory mana
7c40: 67 65 6d 65 6e 74 20 73 74 72 61 74 65 67 79 20  gement strategy 
7c50: 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 76  depends on the v
7c60: 61 6c 75 65 20 6f 66 20 74 68 65 20 78 44 65 6c  alue of the xDel
7c70: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 2e 20 49  .** parameter. I
7c80: 66 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73  f the value pass
7c90: 65 64 20 69 73 20 53 51 4c 49 54 45 5f 54 52 41  ed is SQLITE_TRA
7ca0: 4e 53 49 45 4e 54 2c 20 74 68 65 6e 20 74 68 65  NSIENT, then the
7cb0: 20 0a 2a 2a 20 73 74 72 69 6e 67 20 69 73 20 63   .** string is c
7cc0: 6f 70 69 65 64 20 69 6e 74 6f 20 61 20 28 70 6f  opied into a (po
7cd0: 73 73 69 62 6c 79 20 65 78 69 73 74 69 6e 67 29  ssibly existing)
7ce0: 20 62 75 66 66 65 72 20 6d 61 6e 61 67 65 64 20   buffer managed 
7cf0: 62 79 20 74 68 65 20 0a 2a 2a 20 4d 65 6d 20 73  by the .** Mem s
7d00: 74 72 75 63 74 75 72 65 2e 20 4f 74 68 65 72 77  tructure. Otherw
7d10: 69 73 65 2c 20 61 6e 79 20 65 78 69 73 74 69 6e  ise, any existin
7d20: 67 20 62 75 66 66 65 72 20 69 73 20 66 72 65 65  g buffer is free
7d30: 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 70 6f 69  d and the.** poi
7d40: 6e 74 65 72 20 63 6f 70 69 65 64 2e 0a 2a 2a 0a  nter copied..**.
7d50: 2a 2a 20 49 66 20 74 68 65 20 73 74 72 69 6e 67  ** If the string
7d60: 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 28 69   is too large (i
7d70: 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68 65  f it exceeds the
7d80: 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45   SQLITE_LIMIT_LE
7d90: 4e 47 54 48 0a 2a 2a 20 73 69 7a 65 20 6c 69 6d  NGTH.** size lim
7da0: 69 74 29 20 74 68 65 6e 20 6e 6f 20 6d 65 6d 6f  it) then no memo
7db0: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 63  ry allocation oc
7dc0: 63 75 72 73 2e 20 20 49 66 20 74 68 65 20 73 74  curs.  If the st
7dd0: 72 69 6e 67 20 63 61 6e 20 62 65 0a 2a 2a 20 73  ring can be.** s
7de0: 74 6f 72 65 64 20 77 69 74 68 6f 75 74 20 61 6c  tored without al
7df0: 6c 6f 63 61 74 69 6e 67 20 6d 65 6d 6f 72 79 2c  locating memory,
7e00: 20 74 68 65 6e 20 69 74 20 69 73 2e 20 20 49 66   then it is.  If
7e10: 20 61 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61   a memory alloca
7e20: 74 69 6f 6e 0a 2a 2a 20 69 73 20 72 65 71 75 69  tion.** is requi
7e30: 72 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  red to store the
7e40: 20 73 74 72 69 6e 67 2c 20 74 68 65 6e 20 76 61   string, then va
7e50: 6c 75 65 20 6f 66 20 70 4d 65 6d 20 69 73 20 75  lue of pMem is u
7e60: 6e 63 68 61 6e 67 65 64 2e 20 20 49 6e 0a 2a 2a  nchanged.  In.**
7e70: 20 65 69 74 68 65 72 20 63 61 73 65 2c 20 53 51   either case, SQ
7e80: 4c 49 54 45 5f 54 4f 4f 42 49 47 20 69 73 20 72  LITE_TOOBIG is r
7e90: 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 69 6e 74 20  eturned..*/.int 
7ea0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
7eb0: 74 53 74 72 28 0a 20 20 4d 65 6d 20 2a 70 4d 65  tStr(.  Mem *pMe
7ec0: 6d 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  m,          /* M
7ed0: 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20 73 65  emory cell to se
7ee0: 74 20 74 6f 20 73 74 72 69 6e 67 20 76 61 6c 75  t to string valu
7ef0: 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
7f00: 72 20 2a 7a 2c 20 20 20 20 20 20 2f 2a 20 53 74  r *z,      /* St
7f10: 72 69 6e 67 20 70 6f 69 6e 74 65 72 20 2a 2f 0a  ring pointer */.
7f20: 20 20 69 6e 74 20 6e 2c 20 20 20 20 20 20 20 20    int n,        
7f30: 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 69        /* Bytes i
7f40: 6e 20 73 74 72 69 6e 67 2c 20 6f 72 20 6e 65 67  n string, or neg
7f50: 61 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e  ative */.  u8 en
7f60: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c,             /
7f70: 2a 20 45 6e 63 6f 64 69 6e 67 20 6f 66 20 7a 2e  * Encoding of z.
7f80: 20 20 30 20 66 6f 72 20 42 4c 4f 42 73 20 2a 2f    0 for BLOBs */
7f90: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28  .  void (*xDel)(
7fa0: 76 6f 69 64 2a 29 20 2f 2a 20 44 65 73 74 72 75  void*) /* Destru
7fb0: 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ctor function */
7fc0: 0a 29 7b 0a 20 20 69 6e 74 20 6e 42 79 74 65 20  .){.  int nByte 
7fd0: 3d 20 6e 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77  = n;      /* New
7fe0: 20 76 61 6c 75 65 20 66 6f 72 20 70 4d 65 6d 2d   value for pMem-
7ff0: 3e 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d  >n */.  int iLim
8000: 69 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  it;         /* M
8010: 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 73  aximum allowed s
8020: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 73 69  tring or blob si
8030: 7a 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  ze */.  u16 flag
8040: 73 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e  s = 0;      /* N
8050: 65 77 20 76 61 6c 75 65 20 66 6f 72 20 70 4d 65  ew value for pMe
8060: 6d 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 61  m->flags */..  a
8070: 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 64 62 3d  ssert( pMem->db=
8080: 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f 6d 75  =0 || sqlite3_mu
8090: 74 65 78 5f 68 65 6c 64 28 70 4d 65 6d 2d 3e 64  tex_held(pMem->d
80a0: 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 61  b->mutex) );.  a
80b0: 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 56  ssert( !sqlite3V
80c0: 64 62 65 4d 65 6d 49 73 52 6f 77 53 65 74 28 70  dbeMemIsRowSet(p
80d0: 4d 65 6d 29 20 29 3b 0a 0a 20 20 2f 2a 20 49 66  Mem) );..  /* If
80e0: 20 7a 20 69 73 20 61 20 4e 55 4c 4c 20 70 6f 69   z is a NULL poi
80f0: 6e 74 65 72 2c 20 73 65 74 20 70 4d 65 6d 20 74  nter, set pMem t
8100: 6f 20 63 6f 6e 74 61 69 6e 20 61 6e 20 53 51 4c  o contain an SQL
8110: 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 69 66 28 20   NULL. */.  if( 
8120: 21 7a 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  !z ){.    sqlite
8130: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
8140: 70 4d 65 6d 29 3b 0a 20 20 20 20 72 65 74 75 72  pMem);.    retur
8150: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d  n SQLITE_OK;.  }
8160: 0a 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 64 62  ..  if( pMem->db
8170: 20 29 7b 0a 20 20 20 20 69 4c 69 6d 69 74 20 3d   ){.    iLimit =
8180: 20 70 4d 65 6d 2d 3e 64 62 2d 3e 61 4c 69 6d 69   pMem->db->aLimi
8190: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
81a0: 45 4e 47 54 48 5d 3b 0a 20 20 7d 65 6c 73 65 7b  ENGTH];.  }else{
81b0: 0a 20 20 20 20 69 4c 69 6d 69 74 20 3d 20 53 51  .    iLimit = SQ
81c0: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 3b  LITE_MAX_LENGTH;
81d0: 0a 20 20 7d 0a 20 20 66 6c 61 67 73 20 3d 20 28  .  }.  flags = (
81e0: 65 6e 63 3d 3d 30 3f 4d 45 4d 5f 42 6c 6f 62 3a  enc==0?MEM_Blob:
81f0: 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20  MEM_Str);.  if( 
8200: 6e 42 79 74 65 3c 30 20 29 7b 0a 20 20 20 20 61  nByte<0 ){.    a
8210: 73 73 65 72 74 28 20 65 6e 63 21 3d 30 20 29 3b  ssert( enc!=0 );
8220: 0a 20 20 20 20 69 66 28 20 65 6e 63 3d 3d 53 51  .    if( enc==SQ
8230: 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20  LITE_UTF8 ){.   
8240: 20 20 20 6e 42 79 74 65 20 3d 20 30 78 37 66 66     nByte = 0x7ff
8250: 66 66 66 66 66 20 26 20 28 69 6e 74 29 73 74 72  fffff & (int)str
8260: 6c 65 6e 28 7a 29 3b 0a 20 20 20 20 20 20 69 66  len(z);.      if
8270: 28 20 6e 42 79 74 65 3e 69 4c 69 6d 69 74 20 29  ( nByte>iLimit )
8280: 20 6e 42 79 74 65 20 3d 20 69 4c 69 6d 69 74 2b   nByte = iLimit+
8290: 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
82a0: 20 20 20 20 66 6f 72 28 6e 42 79 74 65 3d 30 3b      for(nByte=0;
82b0: 20 6e 42 79 74 65 3c 3d 69 4c 69 6d 69 74 20 26   nByte<=iLimit &
82c0: 26 20 28 7a 5b 6e 42 79 74 65 5d 20 7c 20 7a 5b  & (z[nByte] | z[
82d0: 6e 42 79 74 65 2b 31 5d 29 3b 20 6e 42 79 74 65  nByte+1]); nByte
82e0: 2b 3d 32 29 7b 7d 0a 20 20 20 20 7d 0a 20 20 20  +=2){}.    }.   
82f0: 20 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65   flags |= MEM_Te
8300: 72 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68  rm;.  }..  /* Th
8310: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 6c 6f 63  e following bloc
8320: 6b 20 73 65 74 73 20 74 68 65 20 6e 65 77 20 76  k sets the new v
8330: 61 6c 75 65 73 20 6f 66 20 4d 65 6d 2e 7a 20 61  alues of Mem.z a
8340: 6e 64 20 4d 65 6d 2e 78 44 65 6c 2e 20 49 74 0a  nd Mem.xDel. It.
8350: 20 20 2a 2a 20 61 6c 73 6f 20 73 65 74 73 20 61    ** also sets a
8360: 20 66 6c 61 67 20 69 6e 20 6c 6f 63 61 6c 20 76   flag in local v
8370: 61 72 69 61 62 6c 65 20 22 66 6c 61 67 73 22 20  ariable "flags" 
8380: 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 65 20  to indicate the 
8390: 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 6d 61 6e 61  memory.  ** mana
83a0: 67 65 6d 65 6e 74 20 28 6f 6e 65 20 6f 66 20 4d  gement (one of M
83b0: 45 4d 5f 44 79 6e 20 6f 72 20 4d 45 4d 5f 53 74  EM_Dyn or MEM_St
83c0: 61 74 69 63 29 2e 0a 20 20 2a 2f 0a 20 20 69 66  atic)..  */.  if
83d0: 28 20 78 44 65 6c 3d 3d 53 51 4c 49 54 45 5f 54  ( xDel==SQLITE_T
83e0: 52 41 4e 53 49 45 4e 54 20 29 7b 0a 20 20 20 20  RANSIENT ){.    
83f0: 69 6e 74 20 6e 41 6c 6c 6f 63 20 3d 20 6e 42 79  int nAlloc = nBy
8400: 74 65 3b 0a 20 20 20 20 69 66 28 20 66 6c 61 67  te;.    if( flag
8410: 73 26 4d 45 4d 5f 54 65 72 6d 20 29 7b 0a 20 20  s&MEM_Term ){.  
8420: 20 20 20 20 6e 41 6c 6c 6f 63 20 2b 3d 20 28 65      nAlloc += (e
8430: 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 3f  nc==SQLITE_UTF8?
8440: 31 3a 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  1:2);.    }.    
8450: 69 66 28 20 6e 42 79 74 65 3e 69 4c 69 6d 69 74  if( nByte>iLimit
8460: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
8470: 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a   SQLITE_TOOBIG;.
8480: 20 20 20 20 7d 0a 20 20 20 20 74 65 73 74 63 61      }.    testca
8490: 73 65 28 20 6e 41 6c 6c 6f 63 3d 3d 30 20 29 3b  se( nAlloc==0 );
84a0: 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 6e  .    testcase( n
84b0: 41 6c 6c 6f 63 3d 3d 33 31 20 29 3b 0a 20 20 20  Alloc==31 );.   
84c0: 20 74 65 73 74 63 61 73 65 28 20 6e 41 6c 6c 6f   testcase( nAllo
84d0: 63 3d 3d 33 32 20 29 3b 0a 20 20 20 20 69 66 28  c==32 );.    if(
84e0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
84f0: 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4d  learAndResize(pM
8500: 65 6d 2c 20 4d 41 58 28 6e 41 6c 6c 6f 63 2c 33  em, MAX(nAlloc,3
8510: 32 29 29 20 29 7b 0a 20 20 20 20 20 20 72 65 74  2)) ){.      ret
8520: 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  urn SQLITE_NOMEM
8530: 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 0a 20 20 20  _BKPT;.    }.   
8540: 20 6d 65 6d 63 70 79 28 70 4d 65 6d 2d 3e 7a 2c   memcpy(pMem->z,
8550: 20 7a 2c 20 6e 41 6c 6c 6f 63 29 3b 0a 20 20 7d   z, nAlloc);.  }
8560: 65 6c 73 65 20 69 66 28 20 78 44 65 6c 3d 3d 53  else if( xDel==S
8570: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 29 7b  QLITE_DYNAMIC ){
8580: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
8590: 4d 65 6d 52 65 6c 65 61 73 65 28 70 4d 65 6d 29  MemRelease(pMem)
85a0: 3b 0a 20 20 20 20 70 4d 65 6d 2d 3e 7a 4d 61 6c  ;.    pMem->zMal
85b0: 6c 6f 63 20 3d 20 70 4d 65 6d 2d 3e 7a 20 3d 20  loc = pMem->z = 
85c0: 28 63 68 61 72 20 2a 29 7a 3b 0a 20 20 20 20 70  (char *)z;.    p
85d0: 4d 65 6d 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d 20  Mem->szMalloc = 
85e0: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53  sqlite3DbMallocS
85f0: 69 7a 65 28 70 4d 65 6d 2d 3e 64 62 2c 20 70 4d  ize(pMem->db, pM
8600: 65 6d 2d 3e 7a 4d 61 6c 6c 6f 63 29 3b 0a 20 20  em->zMalloc);.  
8610: 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
8620: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
8630: 28 70 4d 65 6d 29 3b 0a 20 20 20 20 70 4d 65 6d  (pMem);.    pMem
8640: 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 7a 3b  ->z = (char *)z;
8650: 0a 20 20 20 20 70 4d 65 6d 2d 3e 78 44 65 6c 20  .    pMem->xDel 
8660: 3d 20 78 44 65 6c 3b 0a 20 20 20 20 66 6c 61 67  = xDel;.    flag
8670: 73 20 7c 3d 20 28 28 78 44 65 6c 3d 3d 53 51 4c  s |= ((xDel==SQL
8680: 49 54 45 5f 53 54 41 54 49 43 29 3f 4d 45 4d 5f  ITE_STATIC)?MEM_
8690: 53 74 61 74 69 63 3a 4d 45 4d 5f 44 79 6e 29 3b  Static:MEM_Dyn);
86a0: 0a 20 20 7d 0a 0a 20 20 70 4d 65 6d 2d 3e 6e 20  .  }..  pMem->n 
86b0: 3d 20 6e 42 79 74 65 3b 0a 20 20 70 4d 65 6d 2d  = nByte;.  pMem-
86c0: 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 3b 0a  >flags = flags;.
86d0: 20 20 70 4d 65 6d 2d 3e 65 6e 63 20 3d 20 28 65    pMem->enc = (e
86e0: 6e 63 3d 3d 30 20 3f 20 53 51 4c 49 54 45 5f 55  nc==0 ? SQLITE_U
86f0: 54 46 38 20 3a 20 65 6e 63 29 3b 0a 0a 23 69 66  TF8 : enc);..#if
8700: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
8710: 5f 55 54 46 31 36 0a 20 20 69 66 28 20 70 4d 65  _UTF16.  if( pMe
8720: 6d 2d 3e 65 6e 63 21 3d 53 51 4c 49 54 45 5f 55  m->enc!=SQLITE_U
8730: 54 46 38 20 26 26 20 73 71 6c 69 74 65 33 56 64  TF8 && sqlite3Vd
8740: 62 65 4d 65 6d 48 61 6e 64 6c 65 42 6f 6d 28 70  beMemHandleBom(p
8750: 4d 65 6d 29 20 29 7b 0a 20 20 20 20 72 65 74 75  Mem) ){.    retu
8760: 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f  rn SQLITE_NOMEM_
8770: 42 4b 50 54 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  BKPT;.  }.#endif
8780: 0a 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 69 4c  ..  if( nByte>iL
8790: 69 6d 69 74 20 29 7b 0a 20 20 20 20 72 65 74 75  imit ){.    retu
87a0: 72 6e 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  rn SQLITE_TOOBIG
87b0: 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20  ;.  }..  return 
87c0: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  SQLITE_OK;.}../*
87d0: 0a 2a 2a 20 4d 6f 76 65 20 64 61 74 61 20 6f 75  .** Move data ou
87e0: 74 20 6f 66 20 61 20 62 74 72 65 65 20 6b 65 79  t of a btree key
87f0: 20 6f 72 20 64 61 74 61 20 66 69 65 6c 64 20 61   or data field a
8800: 6e 64 20 69 6e 74 6f 20 61 20 4d 65 6d 20 73 74  nd into a Mem st
8810: 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 65 20  ructure..** The 
8820: 64 61 74 61 20 69 73 20 70 61 79 6c 6f 61 64 20  data is payload 
8830: 66 72 6f 6d 20 74 68 65 20 65 6e 74 72 79 20 74  from the entry t
8840: 68 61 74 20 70 43 75 72 20 69 73 20 63 75 72 72  hat pCur is curr
8850: 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 0a 2a  ently pointing.*
8860: 2a 20 74 6f 2e 20 20 6f 66 66 73 65 74 20 61 6e  * to.  offset an
8870: 64 20 61 6d 74 20 64 65 74 65 72 6d 69 6e 65 20  d amt determine 
8880: 77 68 61 74 20 70 6f 72 74 69 6f 6e 20 6f 66 20  what portion of 
8890: 74 68 65 20 64 61 74 61 20 6f 72 20 6b 65 79 20  the data or key 
88a0: 74 6f 20 72 65 74 72 69 65 76 65 2e 0a 2a 2a 20  to retrieve..** 
88b0: 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 77 72  The result is wr
88c0: 69 74 74 65 6e 20 69 6e 74 6f 20 74 68 65 20 70  itten into the p
88d0: 4d 65 6d 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a  Mem element..**.
88e0: 2a 2a 20 54 68 65 20 70 4d 65 6d 20 6f 62 6a 65  ** The pMem obje
88f0: 63 74 20 6d 75 73 74 20 68 61 76 65 20 62 65 65  ct must have bee
8900: 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20  n initialized.  
8910: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c  This routine wil
8920: 6c 20 75 73 65 0a 2a 2a 20 70 4d 65 6d 2d 3e 7a  l use.** pMem->z
8930: 4d 61 6c 6c 6f 63 20 74 6f 20 68 6f 6c 64 20 74  Malloc to hold t
8940: 68 65 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20  he content from 
8950: 74 68 65 20 62 74 72 65 65 2c 20 69 66 20 70 6f  the btree, if po
8960: 73 73 69 62 6c 65 2e 20 20 4e 65 77 0a 2a 2a 20  ssible.  New.** 
8970: 70 4d 65 6d 2d 3e 7a 4d 61 6c 6c 6f 63 20 73 70  pMem->zMalloc sp
8980: 61 63 65 20 77 69 6c 6c 20 62 65 20 61 6c 6c 6f  ace will be allo
8990: 63 61 74 65 64 20 69 66 20 6e 65 63 65 73 73 61  cated if necessa
89a0: 72 79 2e 20 20 54 68 65 20 63 61 6c 6c 69 6e 67  ry.  The calling
89b0: 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 69 73 20 72   routine.** is r
89c0: 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 6d  esponsible for m
89d0: 61 6b 69 6e 67 20 73 75 72 65 20 74 68 61 74 20  aking sure that 
89e0: 74 68 65 20 70 4d 65 6d 20 6f 62 6a 65 63 74 20  the pMem object 
89f0: 69 73 20 65 76 65 6e 74 75 61 6c 6c 79 0a 2a 2a  is eventually.**
8a00: 20 64 65 73 74 72 6f 79 65 64 2e 0a 2a 2a 0a 2a   destroyed..**.*
8a10: 2a 20 49 66 20 74 68 69 73 20 72 6f 75 74 69 6e  * If this routin
8a20: 65 20 66 61 69 6c 73 20 66 6f 72 20 61 6e 79 20  e fails for any 
8a30: 72 65 61 73 6f 6e 20 28 6d 61 6c 6c 6f 63 20 72  reason (malloc r
8a40: 65 74 75 72 6e 73 20 4e 55 4c 4c 20 6f 72 20 75  eturns NULL or u
8a50: 6e 61 62 6c 65 0a 2a 2a 20 74 6f 20 72 65 61 64  nable.** to read
8a60: 20 66 72 6f 6d 20 74 68 65 20 64 69 73 6b 29 20   from the disk) 
8a70: 74 68 65 6e 20 74 68 65 20 70 4d 65 6d 20 69 73  then the pMem is
8a80: 20 6c 65 66 74 20 69 6e 20 61 6e 20 69 6e 63 6f   left in an inco
8a90: 6e 73 69 73 74 65 6e 74 20 73 74 61 74 65 2e 0a  nsistent state..
8aa0: 2a 2f 0a 73 74 61 74 69 63 20 53 51 4c 49 54 45  */.static SQLITE
8ab0: 5f 4e 4f 49 4e 4c 49 4e 45 20 69 6e 74 20 76 64  _NOINLINE int vd
8ac0: 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 52 65  beMemFromBtreeRe
8ad0: 73 69 7a 65 28 0a 20 20 42 74 43 75 72 73 6f 72  size(.  BtCursor
8ae0: 20 2a 70 43 75 72 2c 20 20 20 2f 2a 20 43 75 72   *pCur,   /* Cur
8af0: 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  sor pointing at 
8b00: 72 65 63 6f 72 64 20 74 6f 20 72 65 74 72 69 65  record to retrie
8b10: 76 65 2e 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66  ve. */.  u32 off
8b20: 73 65 74 2c 20 20 20 20 20 20 20 2f 2a 20 4f 66  set,       /* Of
8b30: 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 73 74  fset from the st
8b40: 61 72 74 20 6f 66 20 64 61 74 61 20 74 6f 20 72  art of data to r
8b50: 65 74 75 72 6e 20 62 79 74 65 73 20 66 72 6f 6d  eturn bytes from
8b60: 2e 20 2a 2f 0a 20 20 75 33 32 20 61 6d 74 2c 20  . */.  u32 amt, 
8b70: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
8b80: 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20 72  er of bytes to r
8b90: 65 74 75 72 6e 2e 20 2a 2f 0a 20 20 4d 65 6d 20  eturn. */.  Mem 
8ba0: 2a 70 4d 65 6d 20 20 20 20 20 20 20 20 20 2f 2a  *pMem         /*
8bb0: 20 4f 55 54 3a 20 52 65 74 75 72 6e 20 64 61 74   OUT: Return dat
8bc0: 61 20 69 6e 20 74 68 69 73 20 4d 65 6d 20 73 74  a in this Mem st
8bd0: 72 75 63 74 75 72 65 2e 20 2a 2f 0a 29 7b 0a 20  ructure. */.){. 
8be0: 20 69 6e 74 20 72 63 3b 0a 20 20 70 4d 65 6d 2d   int rc;.  pMem-
8bf0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
8c00: 6c 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f  l;.  if( SQLITE_
8c10: 4f 4b 3d 3d 28 72 63 20 3d 20 73 71 6c 69 74 65  OK==(rc = sqlite
8c20: 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
8c30: 52 65 73 69 7a 65 28 70 4d 65 6d 2c 20 61 6d 74  Resize(pMem, amt
8c40: 2b 31 29 29 20 29 7b 0a 20 20 20 20 72 63 20 3d  +1)) ){.    rc =
8c50: 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79   sqlite3BtreePay
8c60: 6c 6f 61 64 28 70 43 75 72 2c 20 6f 66 66 73 65  load(pCur, offse
8c70: 74 2c 20 61 6d 74 2c 20 70 4d 65 6d 2d 3e 7a 29  t, amt, pMem->z)
8c80: 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
8c90: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
8ca0: 20 70 4d 65 6d 2d 3e 7a 5b 61 6d 74 5d 20 3d 20   pMem->z[amt] = 
8cb0: 30 3b 20 20 20 2f 2a 20 4f 76 65 72 72 75 6e 20  0;   /* Overrun 
8cc0: 61 72 65 61 20 75 73 65 64 20 77 68 65 6e 20 72  area used when r
8cd0: 65 61 64 69 6e 67 20 6d 61 6c 66 6f 72 6d 65 64  eading malformed
8ce0: 20 72 65 63 6f 72 64 73 20 2a 2f 0a 20 20 20 20   records */.    
8cf0: 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20    pMem->flags = 
8d00: 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 20 20 20 20  MEM_Blob;.      
8d10: 70 4d 65 6d 2d 3e 6e 20 3d 20 28 69 6e 74 29 61  pMem->n = (int)a
8d20: 6d 74 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  mt;.    }else{. 
8d30: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8d40: 4d 65 6d 52 65 6c 65 61 73 65 28 70 4d 65 6d 29  MemRelease(pMem)
8d50: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
8d60: 74 75 72 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20 73  turn rc;.}.int s
8d70: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
8d80: 6d 42 74 72 65 65 28 0a 20 20 42 74 43 75 72 73  mBtree(.  BtCurs
8d90: 6f 72 20 2a 70 43 75 72 2c 20 20 20 2f 2a 20 43  or *pCur,   /* C
8da0: 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61  ursor pointing a
8db0: 74 20 72 65 63 6f 72 64 20 74 6f 20 72 65 74 72  t record to retr
8dc0: 69 65 76 65 2e 20 2a 2f 0a 20 20 75 33 32 20 6f  ieve. */.  u32 o
8dd0: 66 66 73 65 74 2c 20 20 20 20 20 20 20 2f 2a 20  ffset,       /* 
8de0: 4f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20  Offset from the 
8df0: 73 74 61 72 74 20 6f 66 20 64 61 74 61 20 74 6f  start of data to
8e00: 20 72 65 74 75 72 6e 20 62 79 74 65 73 20 66 72   return bytes fr
8e10: 6f 6d 2e 20 2a 2f 0a 20 20 75 33 32 20 61 6d 74  om. */.  u32 amt
8e20: 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ,          /* Nu
8e30: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f  mber of bytes to
8e40: 20 72 65 74 75 72 6e 2e 20 2a 2f 0a 20 20 4d 65   return. */.  Me
8e50: 6d 20 2a 70 4d 65 6d 20 20 20 20 20 20 20 20 20  m *pMem         
8e60: 2f 2a 20 4f 55 54 3a 20 52 65 74 75 72 6e 20 64  /* OUT: Return d
8e70: 61 74 61 20 69 6e 20 74 68 69 73 20 4d 65 6d 20  ata in this Mem 
8e80: 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 29 7b  structure. */.){
8e90: 0a 20 20 63 68 61 72 20 2a 7a 44 61 74 61 3b 20  .  char *zData; 
8ea0: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20 66         /* Data f
8eb0: 72 6f 6d 20 74 68 65 20 62 74 72 65 65 20 6c 61  rom the btree la
8ec0: 79 65 72 20 2a 2f 0a 20 20 75 33 32 20 61 76 61  yer */.  u32 ava
8ed0: 69 6c 61 62 6c 65 20 3d 20 30 3b 20 20 2f 2a 20  ilable = 0;  /* 
8ee0: 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
8ef0: 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 74 68 65  available on the
8f00: 20 6c 6f 63 61 6c 20 62 74 72 65 65 20 70 61 67   local btree pag
8f10: 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20  e */.  int rc = 
8f20: 53 51 4c 49 54 45 5f 4f 4b 3b 20 2f 2a 20 52 65  SQLITE_OK; /* Re
8f30: 74 75 72 6e 20 63 6f 64 65 20 2a 2f 0a 0a 20 20  turn code */..  
8f40: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
8f50: 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
8f60: 64 28 70 43 75 72 29 20 29 3b 0a 20 20 61 73 73  d(pCur) );.  ass
8f70: 65 72 74 28 20 21 56 64 62 65 4d 65 6d 44 79 6e  ert( !VdbeMemDyn
8f80: 61 6d 69 63 28 70 4d 65 6d 29 20 29 3b 0a 0a 20  amic(pMem) );.. 
8f90: 20 2f 2a 20 4e 6f 74 65 3a 20 74 68 65 20 63 61   /* Note: the ca
8fa0: 6c 6c 73 20 74 6f 20 42 74 72 65 65 4b 65 79 46  lls to BtreeKeyF
8fb0: 65 74 63 68 28 29 20 61 6e 64 20 44 61 74 61 46  etch() and DataF
8fc0: 65 74 63 68 28 29 20 62 65 6c 6f 77 20 61 73 73  etch() below ass
8fd0: 65 72 74 28 29 20 0a 20 20 2a 2a 20 74 68 61 74  ert() .  ** that
8fe0: 20 62 6f 74 68 20 74 68 65 20 42 74 53 68 61 72   both the BtShar
8ff0: 65 64 20 61 6e 64 20 64 61 74 61 62 61 73 65 20  ed and database 
9000: 68 61 6e 64 6c 65 20 6d 75 74 65 78 65 73 20 61  handle mutexes a
9010: 72 65 20 68 65 6c 64 2e 20 2a 2f 0a 20 20 61 73  re held. */.  as
9020: 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 56 64  sert( !sqlite3Vd
9030: 62 65 4d 65 6d 49 73 52 6f 77 53 65 74 28 70 4d  beMemIsRowSet(pM
9040: 65 6d 29 20 29 3b 0a 20 20 7a 44 61 74 61 20 3d  em) );.  zData =
9050: 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33   (char *)sqlite3
9060: 42 74 72 65 65 50 61 79 6c 6f 61 64 46 65 74 63  BtreePayloadFetc
9070: 68 28 70 43 75 72 2c 20 26 61 76 61 69 6c 61 62  h(pCur, &availab
9080: 6c 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a  le);.  assert( z
9090: 44 61 74 61 21 3d 30 20 29 3b 0a 0a 20 20 69 66  Data!=0 );..  if
90a0: 28 20 6f 66 66 73 65 74 2b 61 6d 74 3c 3d 61 76  ( offset+amt<=av
90b0: 61 69 6c 61 62 6c 65 20 29 7b 0a 20 20 20 20 70  ailable ){.    p
90c0: 4d 65 6d 2d 3e 7a 20 3d 20 26 7a 44 61 74 61 5b  Mem->z = &zData[
90d0: 6f 66 66 73 65 74 5d 3b 0a 20 20 20 20 70 4d 65  offset];.    pMe
90e0: 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42  m->flags = MEM_B
90f0: 6c 6f 62 7c 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20  lob|MEM_Ephem;. 
9100: 20 20 20 70 4d 65 6d 2d 3e 6e 20 3d 20 28 69 6e     pMem->n = (in
9110: 74 29 61 6d 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  t)amt;.  }else{.
9120: 20 20 20 20 72 63 20 3d 20 76 64 62 65 4d 65 6d      rc = vdbeMem
9130: 46 72 6f 6d 42 74 72 65 65 52 65 73 69 7a 65 28  FromBtreeResize(
9140: 70 43 75 72 2c 20 6f 66 66 73 65 74 2c 20 61 6d  pCur, offset, am
9150: 74 2c 20 70 4d 65 6d 29 3b 0a 20 20 7d 0a 0a 20  t, pMem);.  }.. 
9160: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
9170: 2a 0a 2a 2a 20 54 68 65 20 70 56 61 6c 20 61 72  *.** The pVal ar
9180: 67 75 6d 65 6e 74 20 69 73 20 6b 6e 6f 77 6e 20  gument is known 
9190: 74 6f 20 62 65 20 61 20 76 61 6c 75 65 20 6f 74  to be a value ot
91a0: 68 65 72 20 74 68 61 6e 20 4e 55 4c 4c 2e 0a 2a  her than NULL..*
91b0: 2a 20 43 6f 6e 76 65 72 74 20 69 74 20 69 6e 74  * Convert it int
91c0: 6f 20 61 20 73 74 72 69 6e 67 20 77 69 74 68 20  o a string with 
91d0: 65 6e 63 6f 64 69 6e 67 20 65 6e 63 20 61 6e 64  encoding enc and
91e0: 20 72 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65   return a pointe
91f0: 72 0a 2a 2a 20 74 6f 20 61 20 7a 65 72 6f 2d 74  r.** to a zero-t
9200: 65 72 6d 69 6e 61 74 65 64 20 76 65 72 73 69 6f  erminated versio
9210: 6e 20 6f 66 20 74 68 61 74 20 73 74 72 69 6e 67  n of that string
9220: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 53 51 4c 49  ..*/.static SQLI
9230: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6e 73  TE_NOINLINE cons
9240: 74 20 76 6f 69 64 20 2a 76 61 6c 75 65 54 6f 54  t void *valueToT
9250: 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ext(sqlite3_valu
9260: 65 2a 20 70 56 61 6c 2c 20 75 38 20 65 6e 63 29  e* pVal, u8 enc)
9270: 7b 0a 20 20 61 73 73 65 72 74 28 20 70 56 61 6c  {.  assert( pVal
9280: 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
9290: 20 70 56 61 6c 2d 3e 64 62 3d 3d 30 20 7c 7c 20   pVal->db==0 || 
92a0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65  sqlite3_mutex_he
92b0: 6c 64 28 70 56 61 6c 2d 3e 64 62 2d 3e 6d 75 74  ld(pVal->db->mut
92c0: 65 78 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ex) );.  assert(
92d0: 20 28 65 6e 63 26 33 29 3d 3d 28 65 6e 63 26 7e   (enc&3)==(enc&~
92e0: 53 51 4c 49 54 45 5f 55 54 46 31 36 5f 41 4c 49  SQLITE_UTF16_ALI
92f0: 47 4e 45 44 29 20 29 3b 0a 20 20 61 73 73 65 72  GNED) );.  asser
9300: 74 28 20 21 73 71 6c 69 74 65 33 56 64 62 65 4d  t( !sqlite3VdbeM
9310: 65 6d 49 73 52 6f 77 53 65 74 28 70 56 61 6c 29  emIsRowSet(pVal)
9320: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
9330: 56 61 6c 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Val->flags & (ME
9340: 4d 5f 4e 75 6c 6c 29 29 3d 3d 30 20 29 3b 0a 20  M_Null))==0 );. 
9350: 20 69 66 28 20 70 56 61 6c 2d 3e 66 6c 61 67 73   if( pVal->flags
9360: 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d   & (MEM_Blob|MEM
9370: 5f 53 74 72 29 20 29 7b 0a 20 20 20 20 69 66 28  _Str) ){.    if(
9380: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 56 61 6c   ExpandBlob(pVal
9390: 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  ) ) return 0;.  
93a0: 20 20 70 56 61 6c 2d 3e 66 6c 61 67 73 20 7c 3d    pVal->flags |=
93b0: 20 4d 45 4d 5f 53 74 72 3b 0a 20 20 20 20 69 66   MEM_Str;.    if
93c0: 28 20 70 56 61 6c 2d 3e 65 6e 63 20 21 3d 20 28  ( pVal->enc != (
93d0: 65 6e 63 20 26 20 7e 53 51 4c 49 54 45 5f 55 54  enc & ~SQLITE_UT
93e0: 46 31 36 5f 41 4c 49 47 4e 45 44 29 20 29 7b 0a  F16_ALIGNED) ){.
93f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9400: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
9410: 70 56 61 6c 2c 20 65 6e 63 20 26 20 7e 53 51 4c  pVal, enc & ~SQL
9420: 49 54 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45  ITE_UTF16_ALIGNE
9430: 44 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  D);.    }.    if
9440: 28 20 28 65 6e 63 20 26 20 53 51 4c 49 54 45 5f  ( (enc & SQLITE_
9450: 55 54 46 31 36 5f 41 4c 49 47 4e 45 44 29 21 3d  UTF16_ALIGNED)!=
9460: 30 20 26 26 20 31 3d 3d 28 31 26 53 51 4c 49 54  0 && 1==(1&SQLIT
9470: 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 70 56 61  E_PTR_TO_INT(pVa
9480: 6c 2d 3e 7a 29 29 20 29 7b 0a 20 20 20 20 20 20  l->z)) ){.      
9490: 61 73 73 65 72 74 28 20 28 70 56 61 6c 2d 3e 66  assert( (pVal->f
94a0: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 45 70 68 65  lags & (MEM_Ephe
94b0: 6d 7c 4d 45 4d 5f 53 74 61 74 69 63 29 29 21 3d  m|MEM_Static))!=
94c0: 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73  0 );.      if( s
94d0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b  qlite3VdbeMemMak
94e0: 65 57 72 69 74 65 61 62 6c 65 28 70 56 61 6c 29  eWriteable(pVal)
94f0: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
9500: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
9510: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
9520: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
9530: 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 70 56  mNulTerminate(pV
9540: 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 33  al); /* IMP: R-3
9550: 31 32 37 35 2d 34 34 30 36 30 20 2a 2f 0a 20 20  1275-44060 */.  
9560: 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
9570: 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69  e3VdbeMemStringi
9580: 66 79 28 70 56 61 6c 2c 20 65 6e 63 2c 20 30 29  fy(pVal, enc, 0)
9590: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 30 3d  ;.    assert( 0=
95a0: 3d 28 31 26 53 51 4c 49 54 45 5f 50 54 52 5f 54  =(1&SQLITE_PTR_T
95b0: 4f 5f 49 4e 54 28 70 56 61 6c 2d 3e 7a 29 29 20  O_INT(pVal->z)) 
95c0: 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  );.  }.  assert(
95d0: 70 56 61 6c 2d 3e 65 6e 63 3d 3d 28 65 6e 63 20  pVal->enc==(enc 
95e0: 26 20 7e 53 51 4c 49 54 45 5f 55 54 46 31 36 5f  & ~SQLITE_UTF16_
95f0: 41 4c 49 47 4e 45 44 29 20 7c 7c 20 70 56 61 6c  ALIGNED) || pVal
9600: 2d 3e 64 62 3d 3d 30 0a 20 20 20 20 20 20 20 20  ->db==0.        
9610: 20 20 20 20 20 20 7c 7c 20 70 56 61 6c 2d 3e 64        || pVal->d
9620: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
9630: 29 3b 0a 20 20 69 66 28 20 70 56 61 6c 2d 3e 65  );.  if( pVal->e
9640: 6e 63 3d 3d 28 65 6e 63 20 26 20 7e 53 51 4c 49  nc==(enc & ~SQLI
9650: 54 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45 44  TE_UTF16_ALIGNED
9660: 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
9670: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
9680: 6f 6e 73 69 73 74 65 6e 74 44 75 61 6c 52 65 70  onsistentDualRep
9690: 28 70 56 61 6c 29 20 29 3b 0a 20 20 20 20 72 65  (pVal) );.    re
96a0: 74 75 72 6e 20 70 56 61 6c 2d 3e 7a 3b 0a 20 20  turn pVal->z;.  
96b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72  }else{.    retur
96c0: 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 54  n 0;.  }.}../* T
96d0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
96e0: 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69  only available i
96f0: 6e 74 65 72 6e 61 6c 6c 79 2c 20 69 74 20 69 73  nternally, it is
9700: 20 6e 6f 74 20 70 61 72 74 20 6f 66 20 74 68 65   not part of the
9710: 0a 2a 2a 20 65 78 74 65 72 6e 61 6c 20 41 50 49  .** external API
9720: 2e 20 49 74 20 77 6f 72 6b 73 20 69 6e 20 61 20  . It works in a 
9730: 73 69 6d 69 6c 61 72 20 77 61 79 20 74 6f 20 73  similar way to s
9740: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
9750: 74 28 29 2c 0a 2a 2a 20 65 78 63 65 70 74 20 74  t(),.** except t
9760: 68 65 20 64 61 74 61 20 72 65 74 75 72 6e 65 64  he data returned
9770: 20 69 73 20 69 6e 20 74 68 65 20 65 6e 63 6f 64   is in the encod
9780: 69 6e 67 20 73 70 65 63 69 66 69 65 64 20 62 79  ing specified by
9790: 20 74 68 65 20 73 65 63 6f 6e 64 0a 2a 2a 20 70   the second.** p
97a0: 61 72 61 6d 65 74 65 72 2c 20 77 68 69 63 68 20  arameter, which 
97b0: 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 53  must be one of S
97c0: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2c 20 53  QLITE_UTF16BE, S
97d0: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 6f 72  QLITE_UTF16LE or
97e0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2e  .** SQLITE_UTF8.
97f0: 0a 2a 2a 0a 2a 2a 20 28 32 30 30 36 2d 30 32 2d  .**.** (2006-02-
9800: 31 36 3a 29 20 20 54 68 65 20 65 6e 63 20 76 61  16:)  The enc va
9810: 6c 75 65 20 63 61 6e 20 62 65 20 6f 72 2d 65 64  lue can be or-ed
9820: 20 77 69 74 68 20 53 51 4c 49 54 45 5f 55 54 46   with SQLITE_UTF
9830: 31 36 5f 41 4c 49 47 4e 45 44 2e 0a 2a 2a 20 49  16_ALIGNED..** I
9840: 66 20 74 68 61 74 20 69 73 20 74 68 65 20 63 61  f that is the ca
9850: 73 65 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73  se, then the res
9860: 75 6c 74 20 6d 75 73 74 20 62 65 20 61 6c 69 67  ult must be alig
9870: 6e 65 64 20 6f 6e 20 61 6e 20 65 76 65 6e 20 62  ned on an even b
9880: 79 74 65 0a 2a 2a 20 62 6f 75 6e 64 61 72 79 2e  yte.** boundary.
9890: 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  .*/.const void *
98a0: 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
98b0: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 20  (sqlite3_value* 
98c0: 70 56 61 6c 2c 20 75 38 20 65 6e 63 29 7b 0a 20  pVal, u8 enc){. 
98d0: 20 69 66 28 20 21 70 56 61 6c 20 29 20 72 65 74   if( !pVal ) ret
98e0: 75 72 6e 20 30 3b 0a 20 20 61 73 73 65 72 74 28  urn 0;.  assert(
98f0: 20 70 56 61 6c 2d 3e 64 62 3d 3d 30 20 7c 7c 20   pVal->db==0 || 
9900: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65  sqlite3_mutex_he
9910: 6c 64 28 70 56 61 6c 2d 3e 64 62 2d 3e 6d 75 74  ld(pVal->db->mut
9920: 65 78 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ex) );.  assert(
9930: 20 28 65 6e 63 26 33 29 3d 3d 28 65 6e 63 26 7e   (enc&3)==(enc&~
9940: 53 51 4c 49 54 45 5f 55 54 46 31 36 5f 41 4c 49  SQLITE_UTF16_ALI
9950: 47 4e 45 44 29 20 29 3b 0a 20 20 61 73 73 65 72  GNED) );.  asser
9960: 74 28 20 21 73 71 6c 69 74 65 33 56 64 62 65 4d  t( !sqlite3VdbeM
9970: 65 6d 49 73 52 6f 77 53 65 74 28 70 56 61 6c 29  emIsRowSet(pVal)
9980: 20 29 3b 0a 20 20 69 66 28 20 28 70 56 61 6c 2d   );.  if( (pVal-
9990: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
99a0: 4d 45 4d 5f 54 65 72 6d 29 29 3d 3d 28 4d 45 4d  MEM_Term))==(MEM
99b0: 5f 53 74 72 7c 4d 45 4d 5f 54 65 72 6d 29 20 26  _Str|MEM_Term) &
99c0: 26 20 70 56 61 6c 2d 3e 65 6e 63 3d 3d 65 6e 63  & pVal->enc==enc
99d0: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
99e0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f  sqlite3VdbeMemCo
99f0: 6e 73 69 73 74 65 6e 74 44 75 61 6c 52 65 70 28  nsistentDualRep(
9a00: 70 56 61 6c 29 20 29 3b 0a 20 20 20 20 72 65 74  pVal) );.    ret
9a10: 75 72 6e 20 70 56 61 6c 2d 3e 7a 3b 0a 20 20 7d  urn pVal->z;.  }
9a20: 0a 20 20 69 66 28 20 70 56 61 6c 2d 3e 66 6c 61  .  if( pVal->fla
9a30: 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20  gs&MEM_Null ){. 
9a40: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
9a50: 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 54  .  return valueT
9a60: 6f 54 65 78 74 28 70 56 61 6c 2c 20 65 6e 63 29  oText(pVal, enc)
9a70: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74  ;.}../*.** Creat
9a80: 65 20 61 20 6e 65 77 20 73 71 6c 69 74 65 33 5f  e a new sqlite3_
9a90: 76 61 6c 75 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f  value object..*/
9aa0: 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  .sqlite3_value *
9ab0: 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28  sqlite3ValueNew(
9ac0: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
9ad0: 4d 65 6d 20 2a 70 20 3d 20 73 71 6c 69 74 65 33  Mem *p = sqlite3
9ae0: 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c  DbMallocZero(db,
9af0: 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a 20 20   sizeof(*p));.  
9b00: 69 66 28 20 70 20 29 7b 0a 20 20 20 20 70 2d 3e  if( p ){.    p->
9b10: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
9b20: 3b 0a 20 20 20 20 70 2d 3e 64 62 20 3d 20 64 62  ;.    p->db = db
9b30: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70  ;.  }.  return p
9b40: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65  ;.}../*.** Conte
9b50: 78 74 20 6f 62 6a 65 63 74 20 70 61 73 73 65 64  xt object passed
9b60: 20 62 79 20 73 71 6c 69 74 65 33 53 74 61 74 34   by sqlite3Stat4
9b70: 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 29 20  ProbeSetValue() 
9b80: 74 68 72 6f 75 67 68 20 74 6f 20 0a 2a 2a 20 76  through to .** v
9b90: 61 6c 75 65 4e 65 77 28 29 2e 20 53 65 65 20 63  alueNew(). See c
9ba0: 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 76 61  omments above va
9bb0: 6c 75 65 4e 65 77 28 29 20 66 6f 72 20 64 65 74  lueNew() for det
9bc0: 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ails..*/.struct 
9bd0: 56 61 6c 75 65 4e 65 77 53 74 61 74 34 43 74 78  ValueNewStat4Ctx
9be0: 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
9bf0: 73 65 3b 0a 20 20 49 6e 64 65 78 20 2a 70 49 64  se;.  Index *pId
9c00: 78 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  x;.  UnpackedRec
9c10: 6f 72 64 20 2a 2a 70 70 52 65 63 3b 0a 20 20 69  ord **ppRec;.  i
9c20: 6e 74 20 69 56 61 6c 3b 0a 7d 3b 0a 0a 2f 2a 0a  nt iVal;.};../*.
9c30: 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 6e 64 20  ** Allocate and 
9c40: 72 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  return a pointer
9c50: 20 74 6f 20 61 20 6e 65 77 20 73 71 6c 69 74 65   to a new sqlite
9c60: 33 5f 76 61 6c 75 65 20 6f 62 6a 65 63 74 2e 20  3_value object. 
9c70: 49 66 0a 2a 2a 20 74 68 65 20 73 65 63 6f 6e 64  If.** the second
9c80: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 69   argument to thi
9c90: 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 4e 55  s function is NU
9ca0: 4c 4c 2c 20 74 68 65 20 6f 62 6a 65 63 74 20 69  LL, the object i
9cb0: 73 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62  s allocated.** b
9cc0: 79 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65  y calling sqlite
9cd0: 33 56 61 6c 75 65 4e 65 77 28 29 2e 0a 2a 2a 0a  3ValueNew()..**.
9ce0: 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  ** Otherwise, if
9cf0: 20 74 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75   the second argu
9d00: 6d 65 6e 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  ment is non-zero
9d10: 2c 20 74 68 65 6e 20 74 68 69 73 20 66 75 6e 63  , then this func
9d20: 74 69 6f 6e 20 69 73 20 0a 2a 2a 20 62 65 69 6e  tion is .** bein
9d30: 67 20 63 61 6c 6c 65 64 20 69 6e 64 69 72 65 63  g called indirec
9d40: 74 6c 79 20 62 79 20 73 71 6c 69 74 65 33 53 74  tly by sqlite3St
9d50: 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65  at4ProbeSetValue
9d60: 28 29 2e 20 49 66 20 69 74 20 68 61 73 20 6e 6f  (). If it has no
9d70: 74 0a 2a 2a 20 61 6c 72 65 61 64 79 20 62 65 65  t.** already bee
9d80: 6e 20 61 6c 6c 6f 63 61 74 65 64 2c 20 61 6c 6c  n allocated, all
9d90: 6f 63 61 74 65 20 74 68 65 20 55 6e 70 61 63 6b  ocate the Unpack
9da0: 65 64 52 65 63 6f 72 64 20 73 74 72 75 63 74 75  edRecord structu
9db0: 72 65 20 74 68 61 74 20 0a 2a 2a 20 74 68 61 74  re that .** that
9dc0: 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72   function will r
9dd0: 65 74 75 72 6e 20 74 6f 20 69 74 73 20 63 61 6c  eturn to its cal
9de0: 6c 65 72 20 68 65 72 65 2e 20 54 68 65 6e 20 72  ler here. Then r
9df0: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
9e00: 74 6f 0a 2a 2a 20 61 6e 20 73 71 6c 69 74 65 33  to.** an sqlite3
9e10: 5f 76 61 6c 75 65 20 77 69 74 68 69 6e 20 74 68  _value within th
9e20: 65 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  e UnpackedRecord
9e30: 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2f 0a 73  .a[] array..*/.s
9e40: 74 61 74 69 63 20 73 71 6c 69 74 65 33 5f 76 61  tatic sqlite3_va
9e50: 6c 75 65 20 2a 76 61 6c 75 65 4e 65 77 28 73 71  lue *valueNew(sq
9e60: 6c 69 74 65 33 20 2a 64 62 2c 20 73 74 72 75 63  lite3 *db, struc
9e70: 74 20 56 61 6c 75 65 4e 65 77 53 74 61 74 34 43  t ValueNewStat4C
9e80: 74 78 20 2a 70 29 7b 0a 23 69 66 64 65 66 20 53  tx *p){.#ifdef S
9e90: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
9ea0: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 66  T3_OR_STAT4.  if
9eb0: 28 20 70 20 29 7b 0a 20 20 20 20 55 6e 70 61 63  ( p ){.    Unpac
9ec0: 6b 65 64 52 65 63 6f 72 64 20 2a 70 52 65 63 20  kedRecord *pRec 
9ed0: 3d 20 70 2d 3e 70 70 52 65 63 5b 30 5d 3b 0a 0a  = p->ppRec[0];..
9ee0: 20 20 20 20 69 66 28 20 70 52 65 63 3d 3d 30 20      if( pRec==0 
9ef0: 29 7b 0a 20 20 20 20 20 20 49 6e 64 65 78 20 2a  ){.      Index *
9f00: 70 49 64 78 20 3d 20 70 2d 3e 70 49 64 78 3b 20  pIdx = p->pIdx; 
9f10: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 62 65       /* Index be
9f20: 69 6e 67 20 70 72 6f 62 65 64 20 2a 2f 0a 20 20  ing probed */.  
9f30: 20 20 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20      int nByte;  
9f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f50: 2f 2a 20 42 79 74 65 73 20 6f 66 20 73 70 61 63  /* Bytes of spac
9f60: 65 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 2a 2f  e to allocate */
9f70: 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 20 20 20  .      int i;   
9f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f90: 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 76 61     /* Counter va
9fa0: 72 69 61 62 6c 65 20 2a 2f 0a 20 20 20 20 20 20  riable */.      
9fb0: 69 6e 74 20 6e 43 6f 6c 20 3d 20 70 49 64 78 2d  int nCol = pIdx-
9fc0: 3e 6e 43 6f 6c 75 6d 6e 3b 20 20 20 2f 2a 20 4e  >nColumn;   /* N
9fd0: 75 6d 62 65 72 20 6f 66 20 69 6e 64 65 78 20 63  umber of index c
9fe0: 6f 6c 75 6d 6e 73 20 69 6e 63 6c 75 64 69 6e 67  olumns including
9ff0: 20 72 6f 77 69 64 20 2a 2f 0a 20 20 0a 20 20 20   rowid */.  .   
a000: 20 20 20 6e 42 79 74 65 20 3d 20 73 69 7a 65 6f     nByte = sizeo
a010: 66 28 4d 65 6d 29 20 2a 20 6e 43 6f 6c 20 2b 20  f(Mem) * nCol + 
a020: 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e  ROUND8(sizeof(Un
a030: 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29 3b 0a  packedRecord));.
a040: 20 20 20 20 20 20 70 52 65 63 20 3d 20 28 55 6e        pRec = (Un
a050: 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 73 71  packedRecord*)sq
a060: 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
a070: 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20  o(db, nByte);.  
a080: 20 20 20 20 69 66 28 20 70 52 65 63 20 29 7b 0a      if( pRec ){.
a090: 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e 70 4b          pRec->pK
a0a0: 65 79 49 6e 66 6f 20 3d 20 73 71 6c 69 74 65 33  eyInfo = sqlite3
a0b0: 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 70  KeyInfoOfIndex(p
a0c0: 2d 3e 70 50 61 72 73 65 2c 20 70 49 64 78 29 3b  ->pParse, pIdx);
a0d0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 52 65  .        if( pRe
a0e0: 63 2d 3e 70 4b 65 79 49 6e 66 6f 20 29 7b 0a 20  c->pKeyInfo ){. 
a0f0: 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
a100: 20 70 52 65 63 2d 3e 70 4b 65 79 49 6e 66 6f 2d   pRec->pKeyInfo-
a110: 3e 6e 41 6c 6c 46 69 65 6c 64 3d 3d 6e 43 6f 6c  >nAllField==nCol
a120: 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73   );.          as
a130: 73 65 72 74 28 20 70 52 65 63 2d 3e 70 4b 65 79  sert( pRec->pKey
a140: 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64  Info->enc==ENC(d
a150: 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  b) );.          
a160: 70 52 65 63 2d 3e 61 4d 65 6d 20 3d 20 28 4d 65  pRec->aMem = (Me
a170: 6d 20 2a 29 28 28 75 38 2a 29 70 52 65 63 20 2b  m *)((u8*)pRec +
a180: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55   ROUND8(sizeof(U
a190: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29 29  npackedRecord)))
a1a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  ;.          for(
a1b0: 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b  i=0; i<nCol; i++
a1c0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ){.            p
a1d0: 52 65 63 2d 3e 61 4d 65 6d 5b 69 5d 2e 66 6c 61  Rec->aMem[i].fla
a1e0: 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
a1f0: 20 20 20 20 20 20 20 20 20 20 20 70 52 65 63 2d             pRec-
a200: 3e 61 4d 65 6d 5b 69 5d 2e 64 62 20 3d 20 64 62  >aMem[i].db = db
a210: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
a220: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
a230: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
a240: 46 72 65 65 4e 4e 28 64 62 2c 20 70 52 65 63 29  FreeNN(db, pRec)
a250: 3b 0a 20 20 20 20 20 20 20 20 20 20 70 52 65 63  ;.          pRec
a260: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a   = 0;.        }.
a270: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
a280: 28 20 70 52 65 63 3d 3d 30 20 29 20 72 65 74 75  ( pRec==0 ) retu
a290: 72 6e 20 30 3b 0a 20 20 20 20 20 20 70 2d 3e 70  rn 0;.      p->p
a2a0: 70 52 65 63 5b 30 5d 20 3d 20 70 52 65 63 3b 0a  pRec[0] = pRec;.
a2b0: 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 70 52 65      }.  .    pRe
a2c0: 63 2d 3e 6e 46 69 65 6c 64 20 3d 20 70 2d 3e 69  c->nField = p->i
a2d0: 56 61 6c 2b 31 3b 0a 20 20 20 20 72 65 74 75 72  Val+1;.    retur
a2e0: 6e 20 26 70 52 65 63 2d 3e 61 4d 65 6d 5b 70 2d  n &pRec->aMem[p-
a2f0: 3e 69 56 61 6c 5d 3b 0a 20 20 7d 0a 23 65 6c 73  >iVal];.  }.#els
a300: 65 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  e.  UNUSED_PARAM
a310: 45 54 45 52 28 70 29 3b 0a 23 65 6e 64 69 66 20  ETER(p);.#endif 
a320: 2f 2a 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  /* defined(SQLIT
a330: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
a340: 52 5f 53 54 41 54 34 29 20 2a 2f 0a 20 20 72 65  R_STAT4) */.  re
a350: 74 75 72 6e 20 73 71 6c 69 74 65 33 56 61 6c 75  turn sqlite3Valu
a360: 65 4e 65 77 28 64 62 29 3b 0a 7d 0a 0a 2f 2a 0a  eNew(db);.}../*.
a370: 2a 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f  ** The expressio
a380: 6e 20 6f 62 6a 65 63 74 20 69 6e 64 69 63 61 74  n object indicat
a390: 65 64 20 62 79 20 74 68 65 20 73 65 63 6f 6e 64  ed by the second
a3a0: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 67 75 61   argument is gua
a3b0: 72 61 6e 74 65 65 64 0a 2a 2a 20 74 6f 20 62 65  ranteed.** to be
a3c0: 20 61 20 73 63 61 6c 61 72 20 53 51 4c 20 66 75   a scalar SQL fu
a3d0: 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 0a 2a 2a  nction. If.**.**
a3e0: 20 20 20 2a 20 61 6c 6c 20 66 75 6e 63 74 69 6f     * all functio
a3f0: 6e 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  n arguments are 
a400: 53 51 4c 20 6c 69 74 65 72 61 6c 73 2c 0a 2a 2a  SQL literals,.**
a410: 20 20 20 2a 20 6f 6e 65 20 6f 66 20 74 68 65 20     * one of the 
a420: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
a430: 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47  TANT or _SLOCHNG
a440: 20 66 75 6e 63 74 69 6f 6e 20 66 6c 61 67 73 20   function flags 
a450: 69 73 20 73 65 74 2c 20 61 6e 64 0a 2a 2a 20 20  is set, and.**  
a460: 20 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55   * the SQLITE_FU
a470: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 75 6e 63  NC_NEEDCOLL func
a480: 74 69 6f 6e 20 66 6c 61 67 20 69 73 20 6e 6f 74  tion flag is not
a490: 20 73 65 74 2c 0a 2a 2a 0a 2a 2a 20 74 68 65 6e   set,.**.** then
a4a0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 61 74   this routine at
a4b0: 74 65 6d 70 74 73 20 74 6f 20 69 6e 76 6f 6b 65  tempts to invoke
a4c0: 20 74 68 65 20 53 51 4c 20 66 75 6e 63 74 69 6f   the SQL functio
a4d0: 6e 2e 20 41 73 73 75 6d 69 6e 67 20 6e 6f 0a 2a  n. Assuming no.*
a4e0: 2a 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20  * error occurs, 
a4f0: 6f 75 74 70 75 74 20 70 61 72 61 6d 65 74 65 72  output parameter
a500: 20 28 2a 70 70 56 61 6c 29 20 69 73 20 73 65 74   (*ppVal) is set
a510: 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 61 20 76   to point to a v
a520: 61 6c 75 65 20 0a 2a 2a 20 6f 62 6a 65 63 74 20  alue .** object 
a530: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72  containing the r
a540: 65 73 75 6c 74 20 62 65 66 6f 72 65 20 72 65 74  esult before ret
a550: 75 72 6e 69 6e 67 20 53 51 4c 49 54 45 5f 4f 4b  urning SQLITE_OK
a560: 2e 0a 2a 2a 0a 2a 2a 20 41 66 66 69 6e 69 74 79  ..**.** Affinity
a570: 20 61 66 66 20 69 73 20 61 70 70 6c 69 65 64 20   aff is applied 
a580: 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  to the result of
a590: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65   the function be
a5a0: 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a  fore returning..
a5b0: 2a 2a 20 49 66 20 74 68 65 20 72 65 73 75 6c 74  ** If the result
a5c0: 20 69 73 20 61 20 74 65 78 74 20 76 61 6c 75 65   is a text value
a5d0: 2c 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 61  , the sqlite3_va
a5e0: 6c 75 65 20 6f 62 6a 65 63 74 20 75 73 65 73 20  lue object uses 
a5f0: 65 6e 63 6f 64 69 6e 67 20 0a 2a 2a 20 65 6e 63  encoding .** enc
a600: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
a610: 6f 6e 64 69 74 69 6f 6e 73 20 61 62 6f 76 65 20  onditions above 
a620: 61 72 65 20 6e 6f 74 20 6d 65 74 2c 20 74 68 69  are not met, thi
a630: 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  s function retur
a640: 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 0a 2a 2a 20  ns SQLITE_OK.** 
a650: 61 6e 64 20 73 65 74 73 20 28 2a 70 70 56 61 6c  and sets (*ppVal
a660: 29 20 74 6f 20 4e 55 4c 4c 2e 20 4f 72 2c 20 69  ) to NULL. Or, i
a670: 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72  f an error occur
a680: 73 2c 20 28 2a 70 70 56 61 6c 29 20 69 73 20 73  s, (*ppVal) is s
a690: 65 74 20 74 6f 0a 2a 2a 20 4e 55 4c 4c 20 61 6e  et to.** NULL an
a6a0: 64 20 61 6e 20 53 51 4c 69 74 65 20 65 72 72 6f  d an SQLite erro
a6b0: 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 2e  r code returned.
a6c0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
a6d0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
a6e0: 52 5f 53 54 41 54 34 0a 73 74 61 74 69 63 20 69  R_STAT4.static i
a6f0: 6e 74 20 76 61 6c 75 65 46 72 6f 6d 46 75 6e 63  nt valueFromFunc
a700: 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 20  tion(.  sqlite3 
a710: 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  *db,            
a720: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
a730: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
a740: 6f 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 2c  on */.  Expr *p,
a750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a760: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65          /* The e
a770: 78 70 72 65 73 73 69 6f 6e 20 74 6f 20 65 76 61  xpression to eva
a780: 6c 75 61 74 65 20 2a 2f 0a 20 20 75 38 20 65 6e  luate */.  u8 en
a790: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
a7a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 6e             /* En
a7b0: 63 6f 64 69 6e 67 20 74 6f 20 75 73 65 20 2a 2f  coding to use */
a7c0: 0a 20 20 75 38 20 61 66 66 2c 20 20 20 20 20 20  .  u8 aff,      
a7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a7e0: 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74     /* Affinity t
a7f0: 6f 20 75 73 65 20 2a 2f 0a 20 20 73 71 6c 69 74  o use */.  sqlit
a800: 65 33 5f 76 61 6c 75 65 20 2a 2a 70 70 56 61 6c  e3_value **ppVal
a810: 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72  ,          /* Wr
a820: 69 74 65 20 74 68 65 20 6e 65 77 20 76 61 6c 75  ite the new valu
a830: 65 20 68 65 72 65 20 2a 2f 0a 20 20 73 74 72 75  e here */.  stru
a840: 63 74 20 56 61 6c 75 65 4e 65 77 53 74 61 74 34  ct ValueNewStat4
a850: 43 74 78 20 2a 70 43 74 78 20 20 20 2f 2a 20 53  Ctx *pCtx   /* S
a860: 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 66  econd argument f
a870: 6f 72 20 76 61 6c 75 65 4e 65 77 28 29 20 2a 2f  or valueNew() */
a880: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  .){.  sqlite3_co
a890: 6e 74 65 78 74 20 63 74 78 3b 20 20 20 20 20 20  ntext ctx;      
a8a0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
a8b0: 20 6f 62 6a 65 63 74 20 66 6f 72 20 66 75 6e 63   object for func
a8c0: 74 69 6f 6e 20 69 6e 76 6f 63 61 74 69 6f 6e 20  tion invocation 
a8d0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  */.  sqlite3_val
a8e0: 75 65 20 2a 2a 61 70 56 61 6c 20 3d 20 30 3b 20  ue **apVal = 0; 
a8f0: 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e       /* Function
a900: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
a910: 69 6e 74 20 6e 56 61 6c 20 3d 20 30 3b 20 20 20  int nVal = 0;   
a920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a930: 2f 2a 20 53 69 7a 65 20 6f 66 20 61 70 56 61 6c  /* Size of apVal
a940: 5b 5d 20 61 72 72 61 79 20 2a 2f 0a 20 20 46 75  [] array */.  Fu
a950: 6e 63 44 65 66 20 2a 70 46 75 6e 63 20 3d 20 30  ncDef *pFunc = 0
a960: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
a970: 20 46 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   Function defini
a980: 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tion */.  sqlite
a990: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 20 3d 20  3_value *pVal = 
a9a0: 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77  0;        /* New
a9b0: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 69 6e 74 20   value */.  int 
a9c0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20  rc = SQLITE_OK; 
a9d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
a9e0: 65 74 75 72 6e 20 63 6f 64 65 20 2a 2f 0a 20 20  eturn code */.  
a9f0: 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 20  ExprList *pList 
aa00: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
aa10: 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 61 72 67 75  /* Function argu
aa20: 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69  ments */.  int i
aa30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
aa40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 74             /* It
aa50: 65 72 61 74 6f 72 20 76 61 72 69 61 62 6c 65 20  erator variable 
aa60: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 43  */..  assert( pC
aa70: 74 78 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  tx!=0 );.  asser
aa80: 74 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 45  t( (p->flags & E
aa90: 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 29 3d 3d 30 20  P_TokenOnly)==0 
aaa0: 29 3b 0a 20 20 70 4c 69 73 74 20 3d 20 70 2d 3e  );.  pList = p->
aab0: 78 2e 70 4c 69 73 74 3b 0a 20 20 69 66 28 20 70  x.pList;.  if( p
aac0: 4c 69 73 74 20 29 20 6e 56 61 6c 20 3d 20 70 4c  List ) nVal = pL
aad0: 69 73 74 2d 3e 6e 45 78 70 72 3b 0a 20 20 70 46  ist->nExpr;.  pF
aae0: 75 6e 63 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  unc = sqlite3Fin
aaf0: 64 46 75 6e 63 74 69 6f 6e 28 64 62 2c 20 70 2d  dFunction(db, p-
ab00: 3e 75 2e 7a 54 6f 6b 65 6e 2c 20 6e 56 61 6c 2c  >u.zToken, nVal,
ab10: 20 65 6e 63 2c 20 30 29 3b 0a 20 20 61 73 73 65   enc, 0);.  asse
ab20: 72 74 28 20 70 46 75 6e 63 20 29 3b 0a 20 20 69  rt( pFunc );.  i
ab30: 66 28 20 28 70 46 75 6e 63 2d 3e 66 75 6e 63 46  f( (pFunc->funcF
ab40: 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 46  lags & (SQLITE_F
ab50: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
ab60: 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
ab70: 29 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 28 70 46  ))==0 .   || (pF
ab80: 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26  unc->funcFlags &
ab90: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
aba0: 44 43 4f 4c 4c 29 0a 20 20 29 7b 0a 20 20 20 20  DCOLL).  ){.    
abb0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
abc0: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4c 69  ;.  }..  if( pLi
abd0: 73 74 20 29 7b 0a 20 20 20 20 61 70 56 61 6c 20  st ){.    apVal 
abe0: 3d 20 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  = (sqlite3_value
abf0: 2a 2a 29 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  **)sqlite3DbMall
ac00: 6f 63 5a 65 72 6f 28 64 62 2c 20 73 69 7a 65 6f  ocZero(db, sizeo
ac10: 66 28 61 70 56 61 6c 5b 30 5d 29 20 2a 20 6e 56  f(apVal[0]) * nV
ac20: 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 61 70 56  al);.    if( apV
ac30: 61 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  al==0 ){.      r
ac40: 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
ac50: 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  _BKPT;.      got
ac60: 6f 20 76 61 6c 75 65 5f 66 72 6f 6d 5f 66 75 6e  o value_from_fun
ac70: 63 74 69 6f 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d  ction_out;.    }
ac80: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
ac90: 6e 56 61 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nVal; i++){.    
aca0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 61    rc = sqlite3Va
acb0: 6c 75 65 46 72 6f 6d 45 78 70 72 28 64 62 2c 20  lueFromExpr(db, 
acc0: 70 4c 69 73 74 2d 3e 61 5b 69 5d 2e 70 45 78 70  pList->a[i].pExp
acd0: 72 2c 20 65 6e 63 2c 20 61 66 66 2c 20 26 61 70  r, enc, aff, &ap
ace0: 56 61 6c 5b 69 5d 29 3b 0a 20 20 20 20 20 20 69  Val[i]);.      i
acf0: 66 28 20 61 70 56 61 6c 5b 69 5d 3d 3d 30 20 7c  f( apVal[i]==0 |
ad00: 7c 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  | rc!=SQLITE_OK 
ad10: 29 20 67 6f 74 6f 20 76 61 6c 75 65 5f 66 72 6f  ) goto value_fro
ad20: 6d 5f 66 75 6e 63 74 69 6f 6e 5f 6f 75 74 3b 0a  m_function_out;.
ad30: 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 70 56 61      }.  }..  pVa
ad40: 6c 20 3d 20 76 61 6c 75 65 4e 65 77 28 64 62 2c  l = valueNew(db,
ad50: 20 70 43 74 78 29 3b 0a 20 20 69 66 28 20 70 56   pCtx);.  if( pV
ad60: 61 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  al==0 ){.    rc 
ad70: 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  = SQLITE_NOMEM_B
ad80: 4b 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 76 61  KPT;.    goto va
ad90: 6c 75 65 5f 66 72 6f 6d 5f 66 75 6e 63 74 69 6f  lue_from_functio
ada0: 6e 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 61 73  n_out;.  }..  as
adb0: 73 65 72 74 28 20 70 43 74 78 2d 3e 70 50 61 72  sert( pCtx->pPar
adc0: 73 65 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  se->rc==SQLITE_O
add0: 4b 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 63  K );.  memset(&c
ade0: 74 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28 63 74  tx, 0, sizeof(ct
adf0: 78 29 29 3b 0a 20 20 63 74 78 2e 70 4f 75 74 20  x));.  ctx.pOut 
ae00: 3d 20 70 56 61 6c 3b 0a 20 20 63 74 78 2e 70 46  = pVal;.  ctx.pF
ae10: 75 6e 63 20 3d 20 70 46 75 6e 63 3b 0a 20 20 70  unc = pFunc;.  p
ae20: 46 75 6e 63 2d 3e 78 53 46 75 6e 63 28 26 63 74  Func->xSFunc(&ct
ae30: 78 2c 20 6e 56 61 6c 2c 20 61 70 56 61 6c 29 3b  x, nVal, apVal);
ae40: 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72  .  if( ctx.isErr
ae50: 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 63  or ){.    rc = c
ae60: 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 20 20  tx.isError;.    
ae70: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
ae80: 70 43 74 78 2d 3e 70 50 61 72 73 65 2c 20 22 25  pCtx->pParse, "%
ae90: 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
aea0: 65 5f 74 65 78 74 28 70 56 61 6c 29 29 3b 0a 20  e_text(pVal));. 
aeb0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
aec0: 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66  te3ValueApplyAff
aed0: 69 6e 69 74 79 28 70 56 61 6c 2c 20 61 66 66 2c  inity(pVal, aff,
aee0: 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20   SQLITE_UTF8);. 
aef0: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
af00: 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20  QLITE_OK );.    
af10: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
af20: 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
af30: 56 61 6c 2c 20 65 6e 63 29 3b 0a 20 20 20 20 69  Val, enc);.    i
af40: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
af50: 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65 4d   && sqlite3VdbeM
af60: 65 6d 54 6f 6f 42 69 67 28 70 56 61 6c 29 20 29  emTooBig(pVal) )
af70: 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
af80: 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 20 20  ITE_TOOBIG;.    
af90: 20 20 70 43 74 78 2d 3e 70 50 61 72 73 65 2d 3e    pCtx->pParse->
afa0: 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  nErr++;.    }.  
afb0: 7d 0a 20 20 70 43 74 78 2d 3e 70 50 61 72 73 65  }.  pCtx->pParse
afc0: 2d 3e 72 63 20 3d 20 72 63 3b 0a 0a 20 76 61 6c  ->rc = rc;.. val
afd0: 75 65 5f 66 72 6f 6d 5f 66 75 6e 63 74 69 6f 6e  ue_from_function
afe0: 5f 6f 75 74 3a 0a 20 20 69 66 28 20 72 63 21 3d  _out:.  if( rc!=
aff0: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
b000: 20 70 56 61 6c 20 3d 20 30 3b 0a 20 20 7d 0a 20   pVal = 0;.  }. 
b010: 20 69 66 28 20 61 70 56 61 6c 20 29 7b 0a 20 20   if( apVal ){.  
b020: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 56 61    for(i=0; i<nVa
b030: 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73  l; i++){.      s
b040: 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
b050: 61 70 56 61 6c 5b 69 5d 29 3b 0a 20 20 20 20 7d  apVal[i]);.    }
b060: 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
b070: 65 65 4e 4e 28 64 62 2c 20 61 70 56 61 6c 29 3b  eeNN(db, apVal);
b080: 0a 20 20 7d 0a 0a 20 20 2a 70 70 56 61 6c 20 3d  .  }..  *ppVal =
b090: 20 70 56 61 6c 3b 0a 20 20 72 65 74 75 72 6e 20   pVal;.  return 
b0a0: 72 63 3b 0a 7d 0a 23 65 6c 73 65 0a 23 20 64 65  rc;.}.#else.# de
b0b0: 66 69 6e 65 20 76 61 6c 75 65 46 72 6f 6d 46 75  fine valueFromFu
b0c0: 6e 63 74 69 6f 6e 28 61 2c 62 2c 63 2c 64 2c 65  nction(a,b,c,d,e
b0d0: 2c 66 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65  ,f) SQLITE_OK.#e
b0e0: 6e 64 69 66 20 2f 2a 20 64 65 66 69 6e 65 64 28  ndif /* defined(
b0f0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
b100: 41 54 33 5f 4f 52 5f 53 54 41 54 34 29 20 2a 2f  AT3_OR_STAT4) */
b110: 0a 0a 2f 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20  ../*.** Extract 
b120: 61 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65  a value from the
b130: 20 73 75 70 70 6c 69 65 64 20 65 78 70 72 65 73   supplied expres
b140: 73 69 6f 6e 20 69 6e 20 74 68 65 20 6d 61 6e 6e  sion in the mann
b150: 65 72 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20  er described.** 
b160: 61 62 6f 76 65 20 73 71 6c 69 74 65 33 56 61 6c  above sqlite3Val
b170: 75 65 46 72 6f 6d 45 78 70 72 28 29 2e 20 41 6c  ueFromExpr(). Al
b180: 6c 6f 63 61 74 65 20 74 68 65 20 73 71 6c 69 74  locate the sqlit
b190: 65 33 5f 76 61 6c 75 65 20 6f 62 6a 65 63 74 0a  e3_value object.
b1a0: 2a 2a 20 75 73 69 6e 67 20 76 61 6c 75 65 4e 65  ** using valueNe
b1b0: 77 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 70 43  w()..**.** If pC
b1c0: 74 78 20 69 73 20 4e 55 4c 4c 20 61 6e 64 20 61  tx is NULL and a
b1d0: 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61  n error occurs a
b1e0: 66 74 65 72 20 74 68 65 20 73 71 6c 69 74 65 33  fter the sqlite3
b1f0: 5f 76 61 6c 75 65 20 6f 62 6a 65 63 74 0a 2a 2a  _value object.**
b200: 20 68 61 73 20 62 65 65 6e 20 61 6c 6c 6f 63 61   has been alloca
b210: 74 65 64 2c 20 69 74 20 69 73 20 66 72 65 65 64  ted, it is freed
b220: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
b230: 67 2e 20 4f 72 2c 20 69 66 20 70 43 74 78 20 69  g. Or, if pCtx i
b240: 73 20 6e 6f 74 0a 2a 2a 20 4e 55 4c 4c 2c 20 69  s not.** NULL, i
b250: 74 20 69 73 20 61 73 73 75 6d 65 64 20 74 68 61  t is assumed tha
b260: 74 20 74 68 65 20 63 61 6c 6c 65 72 20 77 69 6c  t the caller wil
b270: 6c 20 66 72 65 65 20 61 6e 79 20 61 6c 6c 6f 63  l free any alloc
b280: 61 74 65 64 20 6f 62 6a 65 63 74 0a 2a 2a 20 69  ated object.** i
b290: 6e 20 61 6c 6c 20 63 61 73 65 73 2e 0a 2a 2f 0a  n all cases..*/.
b2a0: 73 74 61 74 69 63 20 69 6e 74 20 76 61 6c 75 65  static int value
b2b0: 46 72 6f 6d 45 78 70 72 28 0a 20 20 73 71 6c 69  FromExpr(.  sqli
b2c0: 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20  te3 *db,        
b2d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
b2e0: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
b2f0: 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 45 78 70 72  ection */.  Expr
b300: 20 2a 70 45 78 70 72 2c 20 20 20 20 20 20 20 20   *pExpr,        
b310: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
b320: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f  he expression to
b330: 20 65 76 61 6c 75 61 74 65 20 2a 2f 0a 20 20 75   evaluate */.  u
b340: 38 20 65 6e 63 2c 20 20 20 20 20 20 20 20 20 20  8 enc,          
b350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b360: 2a 20 45 6e 63 6f 64 69 6e 67 20 74 6f 20 75 73  * Encoding to us
b370: 65 20 2a 2f 0a 20 20 75 38 20 61 66 66 69 6e 69  e */.  u8 affini
b380: 74 79 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ty,             
b390: 20 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69         /* Affini
b3a0: 74 79 20 74 6f 20 75 73 65 20 2a 2f 0a 20 20 73  ty to use */.  s
b3b0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 70  qlite3_value **p
b3c0: 70 56 61 6c 2c 20 20 20 20 20 20 20 20 20 20 2f  pVal,          /
b3d0: 2a 20 57 72 69 74 65 20 74 68 65 20 6e 65 77 20  * Write the new 
b3e0: 76 61 6c 75 65 20 68 65 72 65 20 2a 2f 0a 20 20  value here */.  
b3f0: 73 74 72 75 63 74 20 56 61 6c 75 65 4e 65 77 53  struct ValueNewS
b400: 74 61 74 34 43 74 78 20 2a 70 43 74 78 20 20 20  tat4Ctx *pCtx   
b410: 2f 2a 20 53 65 63 6f 6e 64 20 61 72 67 75 6d 65  /* Second argume
b420: 6e 74 20 66 6f 72 20 76 61 6c 75 65 4e 65 77 28  nt for valueNew(
b430: 29 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 6f 70  ) */.){.  int op
b440: 3b 0a 20 20 63 68 61 72 20 2a 7a 56 61 6c 20 3d  ;.  char *zVal =
b450: 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61   0;.  sqlite3_va
b460: 6c 75 65 20 2a 70 56 61 6c 20 3d 20 30 3b 0a 20  lue *pVal = 0;. 
b470: 20 69 6e 74 20 6e 65 67 49 6e 74 20 3d 20 31 3b   int negInt = 1;
b480: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
b490: 4e 65 67 20 3d 20 22 22 3b 0a 20 20 69 6e 74 20  Neg = "";.  int 
b4a0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
b4b0: 0a 20 20 61 73 73 65 72 74 28 20 70 45 78 70 72  .  assert( pExpr
b4c0: 21 3d 30 20 29 3b 0a 20 20 77 68 69 6c 65 28 20  !=0 );.  while( 
b4d0: 28 6f 70 20 3d 20 70 45 78 70 72 2d 3e 6f 70 29  (op = pExpr->op)
b4e0: 3d 3d 54 4b 5f 55 50 4c 55 53 20 7c 7c 20 6f 70  ==TK_UPLUS || op
b4f0: 3d 3d 54 4b 5f 53 50 41 4e 20 29 20 70 45 78 70  ==TK_SPAN ) pExp
b500: 72 20 3d 20 70 45 78 70 72 2d 3e 70 4c 65 66 74  r = pExpr->pLeft
b510: 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
b520: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
b530: 33 5f 4f 52 5f 53 54 41 54 34 29 0a 20 20 69 66  3_OR_STAT4).  if
b540: 28 20 6f 70 3d 3d 54 4b 5f 52 45 47 49 53 54 45  ( op==TK_REGISTE
b550: 52 20 29 20 6f 70 20 3d 20 70 45 78 70 72 2d 3e  R ) op = pExpr->
b560: 6f 70 32 3b 0a 23 65 6c 73 65 0a 20 20 69 66 28  op2;.#else.  if(
b570: 20 4e 45 56 45 52 28 6f 70 3d 3d 54 4b 5f 52 45   NEVER(op==TK_RE
b580: 47 49 53 54 45 52 29 20 29 20 6f 70 20 3d 20 70  GISTER) ) op = p
b590: 45 78 70 72 2d 3e 6f 70 32 3b 0a 23 65 6e 64 69  Expr->op2;.#endi
b5a0: 66 0a 0a 20 20 2f 2a 20 43 6f 6d 70 72 65 73 73  f..  /* Compress
b5b0: 65 64 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  ed expressions o
b5c0: 6e 6c 79 20 61 70 70 65 61 72 20 77 68 65 6e 20  nly appear when 
b5d0: 70 61 72 73 69 6e 67 20 74 68 65 20 44 45 46 41  parsing the DEFA
b5e0: 55 4c 54 20 63 6c 61 75 73 65 0a 20 20 2a 2a 20  ULT clause.  ** 
b5f0: 6f 6e 20 61 20 74 61 62 6c 65 20 63 6f 6c 75 6d  on a table colum
b600: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20 61 6e  n definition, an
b610: 64 20 68 65 6e 63 65 20 6f 6e 6c 79 20 77 68 65  d hence only whe
b620: 6e 20 70 43 74 78 3d 3d 30 2e 20 20 54 68 69 73  n pCtx==0.  This
b630: 0a 20 20 2a 2a 20 63 68 65 63 6b 20 65 6e 73 75  .  ** check ensu
b640: 72 65 73 20 74 68 61 74 20 61 6e 20 45 50 5f 54  res that an EP_T
b650: 6f 6b 65 6e 4f 6e 6c 79 20 65 78 70 72 65 73 73  okenOnly express
b660: 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 70 61 73  ion is never pas
b670: 73 65 64 20 64 6f 77 6e 0a 20 20 2a 2a 20 69 6e  sed down.  ** in
b680: 74 6f 20 76 61 6c 75 65 46 72 6f 6d 46 75 6e 63  to valueFromFunc
b690: 74 69 6f 6e 28 29 2e 20 2a 2f 0a 20 20 61 73 73  tion(). */.  ass
b6a0: 65 72 74 28 20 28 70 45 78 70 72 2d 3e 66 6c 61  ert( (pExpr->fla
b6b0: 67 73 20 26 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c  gs & EP_TokenOnl
b6c0: 79 29 3d 3d 30 20 7c 7c 20 70 43 74 78 3d 3d 30  y)==0 || pCtx==0
b6d0: 20 29 3b 0a 0a 20 20 69 66 28 20 6f 70 3d 3d 54   );..  if( op==T
b6e0: 4b 5f 43 41 53 54 20 29 7b 0a 20 20 20 20 75 38  K_CAST ){.    u8
b6f0: 20 61 66 66 20 3d 20 73 71 6c 69 74 65 33 41 66   aff = sqlite3Af
b700: 66 69 6e 69 74 79 54 79 70 65 28 70 45 78 70 72  finityType(pExpr
b710: 2d 3e 75 2e 7a 54 6f 6b 65 6e 2c 30 29 3b 0a 20  ->u.zToken,0);. 
b720: 20 20 20 72 63 20 3d 20 76 61 6c 75 65 46 72 6f     rc = valueFro
b730: 6d 45 78 70 72 28 64 62 2c 20 70 45 78 70 72 2d  mExpr(db, pExpr-
b740: 3e 70 4c 65 66 74 2c 20 65 6e 63 2c 20 61 66 66  >pLeft, enc, aff
b750: 2c 20 70 70 56 61 6c 2c 20 70 43 74 78 29 3b 0a  , ppVal, pCtx);.
b760: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72 63      testcase( rc
b770: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  !=SQLITE_OK );. 
b780: 20 20 20 69 66 28 20 2a 70 70 56 61 6c 20 29 7b     if( *ppVal ){
b790: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
b7a0: 62 65 4d 65 6d 43 61 73 74 28 2a 70 70 56 61 6c  beMemCast(*ppVal
b7b0: 2c 20 61 66 66 2c 20 53 51 4c 49 54 45 5f 55 54  , aff, SQLITE_UT
b7c0: 46 38 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  F8);.      sqlit
b7d0: 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69  e3ValueApplyAffi
b7e0: 6e 69 74 79 28 2a 70 70 56 61 6c 2c 20 61 66 66  nity(*ppVal, aff
b7f0: 69 6e 69 74 79 2c 20 53 51 4c 49 54 45 5f 55 54  inity, SQLITE_UT
b800: 46 38 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  F8);.    }.    r
b810: 65 74 75 72 6e 20 72 63 3b 0a 20 20 7d 0a 0a 20  eturn rc;.  }.. 
b820: 20 2f 2a 20 48 61 6e 64 6c 65 20 6e 65 67 61 74   /* Handle negat
b830: 69 76 65 20 69 6e 74 65 67 65 72 73 20 69 6e 20  ive integers in 
b840: 61 20 73 69 6e 67 6c 65 20 73 74 65 70 2e 20 20  a single step.  
b850: 54 68 69 73 20 69 73 20 6e 65 65 64 65 64 20 69  This is needed i
b860: 6e 20 74 68 65 0a 20 20 2a 2a 20 63 61 73 65 20  n the.  ** case 
b870: 77 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 69  when the value i
b880: 73 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34  s -9223372036854
b890: 37 37 35 38 30 38 2e 0a 20 20 2a 2f 0a 20 20 69  775808..  */.  i
b8a0: 66 28 20 6f 70 3d 3d 54 4b 5f 55 4d 49 4e 55 53  f( op==TK_UMINUS
b8b0: 0a 20 20 20 26 26 20 28 70 45 78 70 72 2d 3e 70  .   && (pExpr->p
b8c0: 4c 65 66 74 2d 3e 6f 70 3d 3d 54 4b 5f 49 4e 54  Left->op==TK_INT
b8d0: 45 47 45 52 20 7c 7c 20 70 45 78 70 72 2d 3e 70  EGER || pExpr->p
b8e0: 4c 65 66 74 2d 3e 6f 70 3d 3d 54 4b 5f 46 4c 4f  Left->op==TK_FLO
b8f0: 41 54 29 20 29 7b 0a 20 20 20 20 70 45 78 70 72  AT) ){.    pExpr
b900: 20 3d 20 70 45 78 70 72 2d 3e 70 4c 65 66 74 3b   = pExpr->pLeft;
b910: 0a 20 20 20 20 6f 70 20 3d 20 70 45 78 70 72 2d  .    op = pExpr-
b920: 3e 6f 70 3b 0a 20 20 20 20 6e 65 67 49 6e 74 20  >op;.    negInt 
b930: 3d 20 2d 31 3b 0a 20 20 20 20 7a 4e 65 67 20 3d  = -1;.    zNeg =
b940: 20 22 2d 22 3b 0a 20 20 7d 0a 0a 20 20 69 66 28   "-";.  }..  if(
b950: 20 6f 70 3d 3d 54 4b 5f 53 54 52 49 4e 47 20 7c   op==TK_STRING |
b960: 7c 20 6f 70 3d 3d 54 4b 5f 46 4c 4f 41 54 20 7c  | op==TK_FLOAT |
b970: 7c 20 6f 70 3d 3d 54 4b 5f 49 4e 54 45 47 45 52  | op==TK_INTEGER
b980: 20 29 7b 0a 20 20 20 20 70 56 61 6c 20 3d 20 76   ){.    pVal = v
b990: 61 6c 75 65 4e 65 77 28 64 62 2c 20 70 43 74 78  alueNew(db, pCtx
b9a0: 29 3b 0a 20 20 20 20 69 66 28 20 70 56 61 6c 3d  );.    if( pVal=
b9b0: 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
b9c0: 3b 0a 20 20 20 20 69 66 28 20 45 78 70 72 48 61  ;.    if( ExprHa
b9d0: 73 50 72 6f 70 65 72 74 79 28 70 45 78 70 72 2c  sProperty(pExpr,
b9e0: 20 45 50 5f 49 6e 74 56 61 6c 75 65 29 20 29 7b   EP_IntValue) ){
b9f0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
ba00: 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 56  beMemSetInt64(pV
ba10: 61 6c 2c 20 28 69 36 34 29 70 45 78 70 72 2d 3e  al, (i64)pExpr->
ba20: 75 2e 69 56 61 6c 75 65 2a 6e 65 67 49 6e 74 29  u.iValue*negInt)
ba30: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
ba40: 20 20 20 7a 56 61 6c 20 3d 20 73 71 6c 69 74 65     zVal = sqlite
ba50: 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 25 73  3MPrintf(db, "%s
ba60: 25 73 22 2c 20 7a 4e 65 67 2c 20 70 45 78 70 72  %s", zNeg, pExpr
ba70: 2d 3e 75 2e 7a 54 6f 6b 65 6e 29 3b 0a 20 20 20  ->u.zToken);.   
ba80: 20 20 20 69 66 28 20 7a 56 61 6c 3d 3d 30 20 29     if( zVal==0 )
ba90: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
baa0: 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65      sqlite3Value
bab0: 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c  SetStr(pVal, -1,
bac0: 20 7a 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54   zVal, SQLITE_UT
bad0: 46 38 2c 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d  F8, SQLITE_DYNAM
bae0: 49 43 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  IC);.    }.    i
baf0: 66 28 20 28 6f 70 3d 3d 54 4b 5f 49 4e 54 45 47  f( (op==TK_INTEG
bb00: 45 52 20 7c 7c 20 6f 70 3d 3d 54 4b 5f 46 4c 4f  ER || op==TK_FLO
bb10: 41 54 20 29 20 26 26 20 61 66 66 69 6e 69 74 79  AT ) && affinity
bb20: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f  ==SQLITE_AFF_BLO
bb30: 42 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  B ){.      sqlit
bb40: 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69  e3ValueApplyAffi
bb50: 6e 69 74 79 28 70 56 61 6c 2c 20 53 51 4c 49 54  nity(pVal, SQLIT
bb60: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 53  E_AFF_NUMERIC, S
bb70: 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 20  QLITE_UTF8);.   
bb80: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71   }else{.      sq
bb90: 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41  lite3ValueApplyA
bba0: 66 66 69 6e 69 74 79 28 70 56 61 6c 2c 20 61 66  ffinity(pVal, af
bbb0: 66 69 6e 69 74 79 2c 20 53 51 4c 49 54 45 5f 55  finity, SQLITE_U
bbc0: 54 46 38 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  TF8);.    }.    
bbd0: 69 66 28 20 70 56 61 6c 2d 3e 66 6c 61 67 73 20  if( pVal->flags 
bbe0: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
bbf0: 65 61 6c 29 20 29 20 70 56 61 6c 2d 3e 66 6c 61  eal) ) pVal->fla
bc00: 67 73 20 26 3d 20 7e 4d 45 4d 5f 53 74 72 3b 0a  gs &= ~MEM_Str;.
bc10: 20 20 20 20 69 66 28 20 65 6e 63 21 3d 53 51 4c      if( enc!=SQL
bc20: 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20  ITE_UTF8 ){.    
bc30: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
bc40: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
bc50: 28 70 56 61 6c 2c 20 65 6e 63 29 3b 0a 20 20 20  (pVal, enc);.   
bc60: 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f   }.  }else if( o
bc70: 70 3d 3d 54 4b 5f 55 4d 49 4e 55 53 20 29 20 7b  p==TK_UMINUS ) {
bc80: 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72 61  .    /* This bra
bc90: 6e 63 68 20 68 61 70 70 65 6e 73 20 66 6f 72 20  nch happens for 
bca0: 6d 75 6c 74 69 70 6c 65 20 6e 65 67 61 74 69 76  multiple negativ
bcb0: 65 20 73 69 67 6e 73 2e 20 20 45 78 3a 20 2d 28  e signs.  Ex: -(
bcc0: 2d 35 29 20 2a 2f 0a 20 20 20 20 69 66 28 20 53  -5) */.    if( S
bcd0: 51 4c 49 54 45 5f 4f 4b 3d 3d 76 61 6c 75 65 46  QLITE_OK==valueF
bce0: 72 6f 6d 45 78 70 72 28 64 62 2c 70 45 78 70 72  romExpr(db,pExpr
bcf0: 2d 3e 70 4c 65 66 74 2c 65 6e 63 2c 61 66 66 69  ->pLeft,enc,affi
bd00: 6e 69 74 79 2c 26 70 56 61 6c 2c 70 43 74 78 29  nity,&pVal,pCtx)
bd10: 20 0a 20 20 20 20 20 26 26 20 70 56 61 6c 21 3d   .     && pVal!=
bd20: 30 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 73  0.    ){.      s
bd30: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d  qlite3VdbeMemNum
bd40: 65 72 69 66 79 28 70 56 61 6c 29 3b 0a 20 20 20  erify(pVal);.   
bd50: 20 20 20 69 66 28 20 70 56 61 6c 2d 3e 66 6c 61     if( pVal->fla
bd60: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b  gs & MEM_Real ){
bd70: 0a 20 20 20 20 20 20 20 20 70 56 61 6c 2d 3e 75  .        pVal->u
bd80: 2e 72 20 3d 20 2d 70 56 61 6c 2d 3e 75 2e 72 3b  .r = -pVal->u.r;
bd90: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
bda0: 20 70 56 61 6c 2d 3e 75 2e 69 3d 3d 53 4d 41 4c   pVal->u.i==SMAL
bdb0: 4c 45 53 54 5f 49 4e 54 36 34 20 29 7b 0a 20 20  LEST_INT64 ){.  
bdc0: 20 20 20 20 20 20 70 56 61 6c 2d 3e 75 2e 72 20        pVal->u.r 
bdd0: 3d 20 2d 28 64 6f 75 62 6c 65 29 53 4d 41 4c 4c  = -(double)SMALL
bde0: 45 53 54 5f 49 4e 54 36 34 3b 0a 20 20 20 20 20  EST_INT64;.     
bdf0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
be00: 67 28 70 56 61 6c 2c 20 4d 45 4d 5f 52 65 61 6c  g(pVal, MEM_Real
be10: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
be20: 20 20 20 20 20 20 20 20 70 56 61 6c 2d 3e 75 2e          pVal->u.
be30: 69 20 3d 20 2d 70 56 61 6c 2d 3e 75 2e 69 3b 0a  i = -pVal->u.i;.
be40: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
be50: 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41  lite3ValueApplyA
be60: 66 66 69 6e 69 74 79 28 70 56 61 6c 2c 20 61 66  ffinity(pVal, af
be70: 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 20 20  finity, enc);.  
be80: 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20    }.  }else if( 
be90: 6f 70 3d 3d 54 4b 5f 4e 55 4c 4c 20 29 7b 0a 20  op==TK_NULL ){. 
bea0: 20 20 20 70 56 61 6c 20 3d 20 76 61 6c 75 65 4e     pVal = valueN
beb0: 65 77 28 64 62 2c 20 70 43 74 78 29 3b 0a 20 20  ew(db, pCtx);.  
bec0: 20 20 69 66 28 20 70 56 61 6c 3d 3d 30 20 29 20    if( pVal==0 ) 
bed0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
bee0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
bef0: 75 6d 65 72 69 66 79 28 70 56 61 6c 29 3b 0a 20  umerify(pVal);. 
bf00: 20 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54   }.#ifndef SQLIT
bf10: 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54 45  E_OMIT_BLOB_LITE
bf20: 52 41 4c 0a 20 20 65 6c 73 65 20 69 66 28 20 6f  RAL.  else if( o
bf30: 70 3d 3d 54 4b 5f 42 4c 4f 42 20 29 7b 0a 20 20  p==TK_BLOB ){.  
bf40: 20 20 69 6e 74 20 6e 56 61 6c 3b 0a 20 20 20 20    int nVal;.    
bf50: 61 73 73 65 72 74 28 20 70 45 78 70 72 2d 3e 75  assert( pExpr->u
bf60: 2e 7a 54 6f 6b 65 6e 5b 30 5d 3d 3d 27 78 27 20  .zToken[0]=='x' 
bf70: 7c 7c 20 70 45 78 70 72 2d 3e 75 2e 7a 54 6f 6b  || pExpr->u.zTok
bf80: 65 6e 5b 30 5d 3d 3d 27 58 27 20 29 3b 0a 20 20  en[0]=='X' );.  
bf90: 20 20 61 73 73 65 72 74 28 20 70 45 78 70 72 2d    assert( pExpr-
bfa0: 3e 75 2e 7a 54 6f 6b 65 6e 5b 31 5d 3d 3d 27 5c  >u.zToken[1]=='\
bfb0: 27 27 20 29 3b 0a 20 20 20 20 70 56 61 6c 20 3d  '' );.    pVal =
bfc0: 20 76 61 6c 75 65 4e 65 77 28 64 62 2c 20 70 43   valueNew(db, pC
bfd0: 74 78 29 3b 0a 20 20 20 20 69 66 28 20 21 70 56  tx);.    if( !pV
bfe0: 61 6c 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  al ) goto no_mem
bff0: 3b 0a 20 20 20 20 7a 56 61 6c 20 3d 20 26 70 45  ;.    zVal = &pE
c000: 78 70 72 2d 3e 75 2e 7a 54 6f 6b 65 6e 5b 32 5d  xpr->u.zToken[2]
c010: 3b 0a 20 20 20 20 6e 56 61 6c 20 3d 20 73 71 6c  ;.    nVal = sql
c020: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 56 61  ite3Strlen30(zVa
c030: 6c 29 2d 31 3b 0a 20 20 20 20 61 73 73 65 72 74  l)-1;.    assert
c040: 28 20 7a 56 61 6c 5b 6e 56 61 6c 5d 3d 3d 27 5c  ( zVal[nVal]=='\
c050: 27 27 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  '' );.    sqlite
c060: 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
c070: 56 61 6c 2c 20 73 71 6c 69 74 65 33 48 65 78 54  Val, sqlite3HexT
c080: 6f 42 6c 6f 62 28 64 62 2c 20 7a 56 61 6c 2c 20  oBlob(db, zVal, 
c090: 6e 56 61 6c 29 2c 20 6e 56 61 6c 2f 32 2c 0a 20  nVal), nVal/2,. 
c0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0b0: 20 20 20 20 20 20 20 20 30 2c 20 53 51 4c 49 54          0, SQLIT
c0c0: 45 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20 7d 0a  E_DYNAMIC);.  }.
c0d0: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
c0e0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
c0f0: 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 65 6c 73  3_OR_STAT4.  els
c100: 65 20 69 66 28 20 6f 70 3d 3d 54 4b 5f 46 55 4e  e if( op==TK_FUN
c110: 43 54 49 4f 4e 20 26 26 20 70 43 74 78 21 3d 30  CTION && pCtx!=0
c120: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 76 61 6c   ){.    rc = val
c130: 75 65 46 72 6f 6d 46 75 6e 63 74 69 6f 6e 28 64  ueFromFunction(d
c140: 62 2c 20 70 45 78 70 72 2c 20 65 6e 63 2c 20 61  b, pExpr, enc, a
c150: 66 66 69 6e 69 74 79 2c 20 26 70 56 61 6c 2c 20  ffinity, &pVal, 
c160: 70 43 74 78 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  pCtx);.  }.#endi
c170: 66 0a 20 20 65 6c 73 65 20 69 66 28 20 6f 70 3d  f.  else if( op=
c180: 3d 54 4b 5f 54 52 55 45 46 41 4c 53 45 20 29 7b  =TK_TRUEFALSE ){
c190: 0a 20 20 20 20 20 70 56 61 6c 20 3d 20 76 61 6c  .     pVal = val
c1a0: 75 65 4e 65 77 28 64 62 2c 20 70 43 74 78 29 3b  ueNew(db, pCtx);
c1b0: 0a 20 20 20 20 20 70 56 61 6c 2d 3e 66 6c 61 67  .     pVal->flag
c1c0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
c1d0: 20 20 70 56 61 6c 2d 3e 75 2e 69 20 3d 20 70 45    pVal->u.i = pE
c1e0: 78 70 72 2d 3e 75 2e 7a 54 6f 6b 65 6e 5b 34 5d  xpr->u.zToken[4]
c1f0: 3d 3d 30 3b 0a 20 20 7d 0a 0a 20 20 2a 70 70 56  ==0;.  }..  *ppV
c200: 61 6c 20 3d 20 70 56 61 6c 3b 0a 20 20 72 65 74  al = pVal;.  ret
c210: 75 72 6e 20 72 63 3b 0a 0a 6e 6f 5f 6d 65 6d 3a  urn rc;..no_mem:
c220: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
c230: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
c240: 54 41 54 34 0a 20 20 69 66 28 20 70 43 74 78 3d  TAT4.  if( pCtx=
c250: 3d 30 20 7c 7c 20 70 43 74 78 2d 3e 70 50 61 72  =0 || pCtx->pPar
c260: 73 65 2d 3e 6e 45 72 72 3d 3d 30 20 29 0a 23 65  se->nErr==0 ).#e
c270: 6e 64 69 66 0a 20 20 20 20 73 71 6c 69 74 65 33  ndif.    sqlite3
c280: 4f 6f 6d 46 61 75 6c 74 28 64 62 29 3b 0a 20 20  OomFault(db);.  
c290: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
c2a0: 2c 20 7a 56 61 6c 29 3b 0a 20 20 61 73 73 65 72  , zVal);.  asser
c2b0: 74 28 20 2a 70 70 56 61 6c 3d 3d 30 20 29 3b 0a  t( *ppVal==0 );.
c2c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
c2d0: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
c2e0: 41 54 34 0a 20 20 69 66 28 20 70 43 74 78 3d 3d  AT4.  if( pCtx==
c2f0: 30 20 29 20 73 71 6c 69 74 65 33 56 61 6c 75 65  0 ) sqlite3Value
c300: 46 72 65 65 28 70 56 61 6c 29 3b 0a 23 65 6c 73  Free(pVal);.#els
c310: 65 0a 20 20 61 73 73 65 72 74 28 20 70 43 74 78  e.  assert( pCtx
c320: 3d 3d 30 20 29 3b 20 73 71 6c 69 74 65 33 56 61  ==0 ); sqlite3Va
c330: 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 23  lueFree(pVal);.#
c340: 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 53  endif.  return S
c350: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
c360: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74  ;.}../*.** Creat
c370: 65 20 61 20 6e 65 77 20 73 71 6c 69 74 65 33 5f  e a new sqlite3_
c380: 76 61 6c 75 65 20 6f 62 6a 65 63 74 2c 20 63 6f  value object, co
c390: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 76 61 6c  ntaining the val
c3a0: 75 65 20 6f 66 20 70 45 78 70 72 2e 0a 2a 2a 0a  ue of pExpr..**.
c3b0: 2a 2a 20 54 68 69 73 20 6f 6e 6c 79 20 77 6f 72  ** This only wor
c3c0: 6b 73 20 66 6f 72 20 76 65 72 79 20 73 69 6d 70  ks for very simp
c3d0: 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  le expressions t
c3e0: 68 61 74 20 63 6f 6e 73 69 73 74 20 6f 66 20 6f  hat consist of o
c3f0: 6e 65 20 63 6f 6e 73 74 61 6e 74 0a 2a 2a 20 74  ne constant.** t
c400: 6f 6b 65 6e 20 28 69 2e 65 2e 20 22 35 22 2c 20  oken (i.e. "5", 
c410: 22 35 2e 31 22 2c 20 22 27 61 20 73 74 72 69 6e  "5.1", "'a strin
c420: 67 27 22 29 2e 20 49 66 20 74 68 65 20 65 78 70  g'"). If the exp
c430: 72 65 73 73 69 6f 6e 20 63 61 6e 0a 2a 2a 20 62  ression can.** b
c440: 65 20 63 6f 6e 76 65 72 74 65 64 20 64 69 72 65  e converted dire
c450: 63 74 6c 79 20 69 6e 74 6f 20 61 20 76 61 6c 75  ctly into a valu
c460: 65 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  e, then the valu
c470: 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 61  e is allocated a
c480: 6e 64 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20  nd.** a pointer 
c490: 77 72 69 74 74 65 6e 20 74 6f 20 2a 70 70 56 61  written to *ppVa
c4a0: 6c 2e 20 54 68 65 20 63 61 6c 6c 65 72 20 69 73  l. The caller is
c4b0: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
c4c0: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 0a 2a 2a   deallocating.**
c4d0: 20 74 68 65 20 76 61 6c 75 65 20 62 79 20 70 61   the value by pa
c4e0: 73 73 69 6e 67 20 69 74 20 74 6f 20 73 71 6c 69  ssing it to sqli
c4f0: 74 65 33 56 61 6c 75 65 46 72 65 65 28 29 20 6c  te3ValueFree() l
c500: 61 74 65 72 20 6f 6e 2e 20 49 66 20 74 68 65 20  ater on. If the 
c510: 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 63 61  expression.** ca
c520: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
c530: 64 20 74 6f 20 61 20 76 61 6c 75 65 2c 20 74 68  d to a value, th
c540: 65 6e 20 2a 70 70 56 61 6c 20 69 73 20 73 65 74  en *ppVal is set
c550: 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2f 0a 69 6e 74   to NULL..*/.int
c560: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f   sqlite3ValueFro
c570: 6d 45 78 70 72 28 0a 20 20 73 71 6c 69 74 65 33  mExpr(.  sqlite3
c580: 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20   *db,           
c590: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
c5a0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
c5b0: 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72 2c 20  .  Expr *pExpr, 
c5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c5d0: 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  The expression t
c5e0: 6f 20 65 76 61 6c 75 61 74 65 20 2a 2f 0a 20 20  o evaluate */.  
c5f0: 75 38 20 65 6e 63 2c 20 20 20 20 20 20 20 20 20  u8 enc,         
c600: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 6e 63            /* Enc
c610: 6f 64 69 6e 67 20 74 6f 20 75 73 65 20 2a 2f 0a  oding to use */.
c620: 20 20 75 38 20 61 66 66 69 6e 69 74 79 2c 20 20    u8 affinity,  
c630: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
c640: 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20 2a  ffinity to use *
c650: 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  /.  sqlite3_valu
c660: 65 20 2a 2a 70 70 56 61 6c 20 20 20 20 20 2f 2a  e **ppVal     /*
c670: 20 57 72 69 74 65 20 74 68 65 20 6e 65 77 20 76   Write the new v
c680: 61 6c 75 65 20 68 65 72 65 20 2a 2f 0a 29 7b 0a  alue here */.){.
c690: 20 20 72 65 74 75 72 6e 20 70 45 78 70 72 20 3f    return pExpr ?
c6a0: 20 76 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 64   valueFromExpr(d
c6b0: 62 2c 20 70 45 78 70 72 2c 20 65 6e 63 2c 20 61  b, pExpr, enc, a
c6c0: 66 66 69 6e 69 74 79 2c 20 70 70 56 61 6c 2c 20  ffinity, ppVal, 
c6d0: 30 29 20 3a 20 30 3b 0a 7d 0a 0a 23 69 66 64 65  0) : 0;.}..#ifde
c6e0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
c6f0: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2f  STAT3_OR_STAT4./
c700: 2a 0a 2a 2a 20 54 68 65 20 69 6d 70 6c 65 6d 65  *.** The impleme
c710: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  ntation of the s
c720: 71 6c 69 74 65 5f 72 65 63 6f 72 64 28 29 20 66  qlite_record() f
c730: 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 66 75  unction. This fu
c740: 6e 63 74 69 6f 6e 20 61 63 63 65 70 74 73 0a 2a  nction accepts.*
c750: 2a 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d  * a single argum
c760: 65 6e 74 20 6f 66 20 61 6e 79 20 74 79 70 65 2e  ent of any type.
c770: 20 54 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75   The return valu
c780: 65 20 69 73 20 61 20 66 6f 72 6d 61 74 74 65 64  e is a formatted
c790: 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 72 65   database .** re
c7a0: 63 6f 72 64 20 28 61 20 62 6c 6f 62 29 20 63 6f  cord (a blob) co
c7b0: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 61 72 67  ntaining the arg
c7c0: 75 6d 65 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 0a  ument value..**.
c7d0: 2a 2a 20 54 68 69 73 20 69 73 20 75 73 65 64 20  ** This is used 
c7e0: 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 76  to convert the v
c7f0: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 74  alue stored in t
c800: 68 65 20 27 73 61 6d 70 6c 65 27 20 63 6f 6c 75  he 'sample' colu
c810: 6d 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71 6c  mn of the.** sql
c820: 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20  ite_stat3 table 
c830: 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  to the record fo
c840: 72 6d 61 74 20 53 51 4c 69 74 65 20 75 73 65 73  rmat SQLite uses
c850: 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a   internally..*/.
c860: 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 63 6f  static void reco
c870: 72 64 46 75 6e 63 28 0a 20 20 73 71 6c 69 74 65  rdFunc(.  sqlite
c880: 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65  3_context *conte
c890: 78 74 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a  xt,.  int argc,.
c8a0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
c8b0: 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 63 6f 6e 73  **argv.){.  cons
c8c0: 74 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61  t int file_forma
c8d0: 74 20 3d 20 31 3b 0a 20 20 75 33 32 20 69 53 65  t = 1;.  u32 iSe
c8e0: 72 69 61 6c 3b 20 20 20 20 20 20 20 20 20 20 20  rial;           
c8f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65 72 69           /* Seri
c900: 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 69 6e 74  al type */.  int
c910: 20 6e 53 65 72 69 61 6c 3b 20 20 20 20 20 20 20   nSerial;       
c920: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c930: 42 79 74 65 73 20 6f 66 20 73 70 61 63 65 20 66  Bytes of space f
c940: 6f 72 20 69 53 65 72 69 61 6c 20 61 73 20 76 61  or iSerial as va
c950: 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 6e 56  rint */.  u32 nV
c960: 61 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  al;             
c970: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74            /* Byt
c980: 65 73 20 6f 66 20 73 70 61 63 65 20 72 65 71 75  es of space requ
c990: 69 72 65 64 20 66 6f 72 20 61 72 67 76 5b 30 5d  ired for argv[0]
c9a0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 74 3b 0a   */.  int nRet;.
c9b0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
c9c0: 20 75 38 20 2a 61 52 65 74 3b 0a 0a 20 20 55 4e   u8 *aRet;..  UN
c9d0: 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 20  USED_PARAMETER( 
c9e0: 61 72 67 63 20 29 3b 0a 20 20 69 53 65 72 69 61  argc );.  iSeria
c9f0: 6c 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  l = sqlite3VdbeS
ca00: 65 72 69 61 6c 54 79 70 65 28 61 72 67 76 5b 30  erialType(argv[0
ca10: 5d 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 2c 20  ], file_format, 
ca20: 26 6e 56 61 6c 29 3b 0a 20 20 6e 53 65 72 69 61  &nVal);.  nSeria
ca30: 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e  l = sqlite3Varin
ca40: 74 4c 65 6e 28 69 53 65 72 69 61 6c 29 3b 0a 20  tLen(iSerial);. 
ca50: 20 64 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f   db = sqlite3_co
ca60: 6e 74 65 78 74 5f 64 62 5f 68 61 6e 64 6c 65 28  ntext_db_handle(
ca70: 63 6f 6e 74 65 78 74 29 3b 0a 0a 20 20 6e 52 65  context);..  nRe
ca80: 74 20 3d 20 31 20 2b 20 6e 53 65 72 69 61 6c 20  t = 1 + nSerial 
ca90: 2b 20 6e 56 61 6c 3b 0a 20 20 61 52 65 74 20 3d  + nVal;.  aRet =
caa0: 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
cab0: 52 61 77 4e 4e 28 64 62 2c 20 6e 52 65 74 29 3b  RawNN(db, nRet);
cac0: 0a 20 20 69 66 28 20 61 52 65 74 3d 3d 30 20 29  .  if( aRet==0 )
cad0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65  {.    sqlite3_re
cae0: 73 75 6c 74 5f 65 72 72 6f 72 5f 6e 6f 6d 65 6d  sult_error_nomem
caf0: 28 63 6f 6e 74 65 78 74 29 3b 0a 20 20 7d 65 6c  (context);.  }el
cb00: 73 65 7b 0a 20 20 20 20 61 52 65 74 5b 30 5d 20  se{.    aRet[0] 
cb10: 3d 20 6e 53 65 72 69 61 6c 2b 31 3b 0a 20 20 20  = nSerial+1;.   
cb20: 20 70 75 74 56 61 72 69 6e 74 33 32 28 26 61 52   putVarint32(&aR
cb30: 65 74 5b 31 5d 2c 20 69 53 65 72 69 61 6c 29 3b  et[1], iSerial);
cb40: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
cb50: 53 65 72 69 61 6c 50 75 74 28 26 61 52 65 74 5b  SerialPut(&aRet[
cb60: 31 2b 6e 53 65 72 69 61 6c 5d 2c 20 61 72 67 76  1+nSerial], argv
cb70: 5b 30 5d 2c 20 69 53 65 72 69 61 6c 29 3b 0a 20  [0], iSerial);. 
cb80: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
cb90: 74 5f 62 6c 6f 62 28 63 6f 6e 74 65 78 74 2c 20  t_blob(context, 
cba0: 61 52 65 74 2c 20 6e 52 65 74 2c 20 53 51 4c 49  aRet, nRet, SQLI
cbb0: 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
cbc0: 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
cbd0: 4e 4e 28 64 62 2c 20 61 52 65 74 29 3b 0a 20 20  NN(db, aRet);.  
cbe0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73  }.}../*.** Regis
cbf0: 74 65 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  ter built-in fun
cc00: 63 74 69 6f 6e 73 20 75 73 65 64 20 74 6f 20 68  ctions used to h
cc10: 65 6c 70 20 72 65 61 64 20 41 4e 41 4c 59 5a 45  elp read ANALYZE
cc20: 20 64 61 74 61 2e 0a 2a 2f 0a 76 6f 69 64 20 73   data..*/.void s
cc30: 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e  qlite3AnalyzeFun
cc40: 63 74 69 6f 6e 73 28 76 6f 69 64 29 7b 0a 20 20  ctions(void){.  
cc50: 73 74 61 74 69 63 20 46 75 6e 63 44 65 66 20 61  static FuncDef a
cc60: 41 6e 61 6c 79 7a 65 54 61 62 6c 65 46 75 6e 63  AnalyzeTableFunc
cc70: 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 46 55 4e 43  s[] = {.    FUNC
cc80: 54 49 4f 4e 28 73 71 6c 69 74 65 5f 72 65 63 6f  TION(sqlite_reco
cc90: 72 64 2c 20 20 20 31 2c 20 30 2c 20 30 2c 20 72  rd,   1, 0, 0, r
cca0: 65 63 6f 72 64 46 75 6e 63 29 2c 0a 20 20 7d 3b  ecordFunc),.  };
ccb0: 0a 20 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74  .  sqlite3Insert
ccc0: 42 75 69 6c 74 69 6e 46 75 6e 63 73 28 61 41 6e  BuiltinFuncs(aAn
ccd0: 61 6c 79 7a 65 54 61 62 6c 65 46 75 6e 63 73 2c  alyzeTableFuncs,
cce0: 20 41 72 72 61 79 53 69 7a 65 28 61 41 6e 61 6c   ArraySize(aAnal
ccf0: 79 7a 65 54 61 62 6c 65 46 75 6e 63 73 29 29 3b  yzeTableFuncs));
cd00: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70  .}../*.** Attemp
cd10: 74 20 74 6f 20 65 78 74 72 61 63 74 20 61 20 76  t to extract a v
cd20: 61 6c 75 65 20 66 72 6f 6d 20 70 45 78 70 72 20  alue from pExpr 
cd30: 61 6e 64 20 75 73 65 20 69 74 20 74 6f 20 63 6f  and use it to co
cd40: 6e 73 74 72 75 63 74 20 2a 70 70 56 61 6c 2e 0a  nstruct *ppVal..
cd50: 2a 2a 0a 2a 2a 20 49 66 20 70 41 6c 6c 6f 63 20  **.** If pAlloc 
cd60: 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
cd70: 6e 20 61 6e 20 55 6e 70 61 63 6b 65 64 52 65 63  n an UnpackedRec
cd80: 6f 72 64 20 6f 62 6a 65 63 74 20 69 73 20 63 72  ord object is cr
cd90: 65 61 74 65 64 20 66 6f 72 0a 2a 2a 20 70 41 6c  eated for.** pAl
cda0: 6c 6f 63 20 69 66 20 6f 6e 65 20 64 6f 65 73 20  loc if one does 
cdb0: 6e 6f 74 20 65 78 69 73 74 20 61 6e 64 20 74 68  not exist and th
cdc0: 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 61  e new value is a
cdd0: 64 64 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 55  dded to the.** U
cde0: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 6f 62  npackedRecord ob
cdf0: 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 76 61  ject..**.** A va
ce00: 6c 75 65 20 69 73 20 65 78 74 72 61 63 74 65 64  lue is extracted
ce10: 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   in the followin
ce20: 67 20 63 61 73 65 73 3a 0a 2a 2a 0a 2a 2a 20 20  g cases:.**.**  
ce30: 2a 20 28 70 45 78 70 72 3d 3d 30 29 2e 20 49 6e  * (pExpr==0). In
ce40: 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 76   this case the v
ce50: 61 6c 75 65 20 69 73 20 61 73 73 75 6d 65 64 20  alue is assumed 
ce60: 74 6f 20 62 65 20 61 6e 20 53 51 4c 20 4e 55 4c  to be an SQL NUL
ce70: 4c 2c 0a 2a 2a 0a 2a 2a 20 20 2a 20 54 68 65 20  L,.**.**  * The 
ce80: 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
ce90: 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 2c 20  bound variable, 
cea0: 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 72 65  and this is a re
ceb0: 70 72 65 70 61 72 65 2c 20 6f 72 0a 2a 2a 0a 2a  prepare, or.**.*
cec0: 2a 20 20 2a 20 54 68 65 20 65 78 70 72 65 73 73  *  * The express
ced0: 69 6f 6e 20 69 73 20 61 20 6c 69 74 65 72 61 6c  ion is a literal
cee0: 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6e   value..**.** On
cef0: 20 73 75 63 63 65 73 73 2c 20 2a 70 70 56 61 6c   success, *ppVal
cf00: 20 69 73 20 6d 61 64 65 20 74 6f 20 70 6f 69 6e   is made to poin
cf10: 74 20 74 6f 20 74 68 65 20 65 78 74 72 61 63 74  t to the extract
cf20: 65 64 20 76 61 6c 75 65 2e 20 20 54 68 65 20 63  ed value.  The c
cf30: 61 6c 6c 65 72 0a 2a 2a 20 69 73 20 72 65 73 70  aller.** is resp
cf40: 6f 6e 73 69 62 6c 65 20 66 6f 72 20 65 6e 73 75  onsible for ensu
cf50: 72 69 6e 67 20 74 68 61 74 20 74 68 65 20 76 61  ring that the va
cf60: 6c 75 65 20 69 73 20 65 76 65 6e 74 75 61 6c 6c  lue is eventuall
cf70: 79 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 61 74  y freed..*/.stat
cf80: 69 63 20 69 6e 74 20 73 74 61 74 34 56 61 6c 75  ic int stat4Valu
cf90: 65 46 72 6f 6d 45 78 70 72 28 0a 20 20 50 61 72  eFromExpr(.  Par
cfa0: 73 65 20 2a 70 50 61 72 73 65 2c 20 20 20 20 20  se *pParse,     
cfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cfc0: 50 61 72 73 65 20 63 6f 6e 74 65 78 74 20 2a 2f  Parse context */
cfd0: 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72 2c 20  .  Expr *pExpr, 
cfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cff0: 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73     /* The expres
d000: 73 69 6f 6e 20 74 6f 20 65 78 74 72 61 63 74 20  sion to extract 
d010: 61 20 76 61 6c 75 65 20 66 72 6f 6d 20 2a 2f 0a  a value from */.
d020: 20 20 75 38 20 61 66 66 69 6e 69 74 79 2c 20 20    u8 affinity,  
d030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d040: 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f    /* Affinity to
d050: 20 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74   use */.  struct
d060: 20 56 61 6c 75 65 4e 65 77 53 74 61 74 34 43 74   ValueNewStat4Ct
d070: 78 20 2a 70 41 6c 6c 6f 63 2c 2f 2a 20 48 6f 77  x *pAlloc,/* How
d080: 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 73 70 61   to allocate spa
d090: 63 65 2e 20 20 4f 72 20 4e 55 4c 4c 20 2a 2f 0a  ce.  Or NULL */.
d0a0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
d0b0: 2a 2a 70 70 56 61 6c 20 20 20 20 20 20 20 20 20  **ppVal         
d0c0: 20 20 2f 2a 20 4f 55 54 3a 20 4e 65 77 20 76 61    /* OUT: New va
d0d0: 6c 75 65 20 6f 62 6a 65 63 74 20 28 6f 72 20 4e  lue object (or N
d0e0: 55 4c 4c 29 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ULL) */.){.  int
d0f0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
d100: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
d110: 20 2a 70 56 61 6c 20 3d 20 30 3b 0a 20 20 73 71   *pVal = 0;.  sq
d120: 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72  lite3 *db = pPar
d130: 73 65 2d 3e 64 62 3b 0a 0a 20 20 2f 2a 20 53 6b  se->db;..  /* Sk
d140: 69 70 20 6f 76 65 72 20 61 6e 79 20 54 4b 5f 43  ip over any TK_C
d150: 4f 4c 4c 41 54 45 20 6e 6f 64 65 73 20 2a 2f 0a  OLLATE nodes */.
d160: 20 20 70 45 78 70 72 20 3d 20 73 71 6c 69 74 65    pExpr = sqlite
d170: 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65  3ExprSkipCollate
d180: 28 70 45 78 70 72 29 3b 0a 0a 20 20 61 73 73 65  (pExpr);..  asse
d190: 72 74 28 20 70 45 78 70 72 3d 3d 30 20 7c 7c 20  rt( pExpr==0 || 
d1a0: 70 45 78 70 72 2d 3e 6f 70 21 3d 54 4b 5f 52 45  pExpr->op!=TK_RE
d1b0: 47 49 53 54 45 52 20 7c 7c 20 70 45 78 70 72 2d  GISTER || pExpr-
d1c0: 3e 6f 70 32 21 3d 54 4b 5f 56 41 52 49 41 42 4c  >op2!=TK_VARIABL
d1d0: 45 20 29 3b 0a 20 20 69 66 28 20 21 70 45 78 70  E );.  if( !pExp
d1e0: 72 20 29 7b 0a 20 20 20 20 70 56 61 6c 20 3d 20  r ){.    pVal = 
d1f0: 76 61 6c 75 65 4e 65 77 28 64 62 2c 20 70 41 6c  valueNew(db, pAl
d200: 6c 6f 63 29 3b 0a 20 20 20 20 69 66 28 20 70 56  loc);.    if( pV
d210: 61 6c 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  al ){.      sqli
d220: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
d230: 6c 28 28 4d 65 6d 2a 29 70 56 61 6c 29 3b 0a 20  l((Mem*)pVal);. 
d240: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28     }.  }else if(
d250: 20 70 45 78 70 72 2d 3e 6f 70 3d 3d 54 4b 5f 56   pExpr->op==TK_V
d260: 41 52 49 41 42 4c 45 20 26 26 20 28 64 62 2d 3e  ARIABLE && (db->
d270: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 45  flags & SQLITE_E
d280: 6e 61 62 6c 65 51 50 53 47 29 3d 3d 30 20 29 7b  nableQPSG)==0 ){
d290: 0a 20 20 20 20 56 64 62 65 20 2a 76 3b 0a 20 20  .    Vdbe *v;.  
d2a0: 20 20 69 6e 74 20 69 42 69 6e 64 56 61 72 20 3d    int iBindVar =
d2b0: 20 70 45 78 70 72 2d 3e 69 43 6f 6c 75 6d 6e 3b   pExpr->iColumn;
d2c0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
d2d0: 53 65 74 56 61 72 6d 61 73 6b 28 70 50 61 72 73  SetVarmask(pPars
d2e0: 65 2d 3e 70 56 64 62 65 2c 20 69 42 69 6e 64 56  e->pVdbe, iBindV
d2f0: 61 72 29 3b 0a 20 20 20 20 69 66 28 20 28 76 20  ar);.    if( (v 
d300: 3d 20 70 50 61 72 73 65 2d 3e 70 52 65 70 72 65  = pParse->pRepre
d310: 70 61 72 65 29 21 3d 30 20 29 7b 0a 20 20 20 20  pare)!=0 ){.    
d320: 20 20 70 56 61 6c 20 3d 20 76 61 6c 75 65 4e 65    pVal = valueNe
d330: 77 28 64 62 2c 20 70 41 6c 6c 6f 63 29 3b 0a 20  w(db, pAlloc);. 
d340: 20 20 20 20 20 69 66 28 20 70 56 61 6c 20 29 7b       if( pVal ){
d350: 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
d360: 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79  lite3VdbeMemCopy
d370: 28 28 4d 65 6d 2a 29 70 56 61 6c 2c 20 26 76 2d  ((Mem*)pVal, &v-
d380: 3e 61 56 61 72 5b 69 42 69 6e 64 56 61 72 2d 31  >aVar[iBindVar-1
d390: 5d 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  ]);.        sqli
d3a0: 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66  te3ValueApplyAff
d3b0: 69 6e 69 74 79 28 70 56 61 6c 2c 20 61 66 66 69  inity(pVal, affi
d3c0: 6e 69 74 79 2c 20 45 4e 43 28 64 62 29 29 3b 0a  nity, ENC(db));.
d3d0: 20 20 20 20 20 20 20 20 70 56 61 6c 2d 3e 64 62          pVal->db
d3e0: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20   = pParse->db;. 
d3f0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
d400: 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 76  else{.    rc = v
d410: 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 64 62 2c  alueFromExpr(db,
d420: 20 70 45 78 70 72 2c 20 45 4e 43 28 64 62 29 2c   pExpr, ENC(db),
d430: 20 61 66 66 69 6e 69 74 79 2c 20 26 70 56 61 6c   affinity, &pVal
d440: 2c 20 70 41 6c 6c 6f 63 29 3b 0a 20 20 7d 0a 0a  , pAlloc);.  }..
d450: 20 20 61 73 73 65 72 74 28 20 70 56 61 6c 3d 3d    assert( pVal==
d460: 30 20 7c 7c 20 70 56 61 6c 2d 3e 64 62 3d 3d 64  0 || pVal->db==d
d470: 62 20 29 3b 0a 20 20 2a 70 70 56 61 6c 20 3d 20  b );.  *ppVal = 
d480: 70 56 61 6c 3b 0a 20 20 72 65 74 75 72 6e 20 72  pVal;.  return r
d490: 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  c;.}../*.** This
d4a0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65   function is use
d4b0: 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 61 6e  d to allocate an
d4c0: 64 20 70 6f 70 75 6c 61 74 65 20 55 6e 70 61 63  d populate Unpac
d4d0: 6b 65 64 52 65 63 6f 72 64 20 0a 2a 2a 20 73 74  kedRecord .** st
d4e0: 72 75 63 74 75 72 65 73 20 69 6e 74 65 6e 64 65  ructures intende
d4f0: 64 20 74 6f 20 62 65 20 63 6f 6d 70 61 72 65 64  d to be compared
d500: 20 61 67 61 69 6e 73 74 20 73 61 6d 70 6c 65 20   against sample 
d510: 69 6e 64 65 78 20 6b 65 79 73 20 73 74 6f 72 65  index keys store
d520: 64 20 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c  d .** in the sql
d530: 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 2e  ite_stat4 table.
d540: 0a 2a 2a 0a 2a 2a 20 41 20 73 69 6e 67 6c 65 20  .**.** A single 
d550: 63 61 6c 6c 20 74 6f 20 74 68 69 73 20 66 75 6e  call to this fun
d560: 63 74 69 6f 6e 20 70 6f 70 75 6c 61 74 65 73 20  ction populates 
d570: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 66 69 65  zero or more fie
d580: 6c 64 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  lds of the.** re
d590: 63 6f 72 64 20 73 74 61 72 74 69 6e 67 20 77 69  cord starting wi
d5a0: 74 68 20 66 69 65 6c 64 20 69 56 61 6c 20 28 66  th field iVal (f
d5b0: 69 65 6c 64 73 20 61 72 65 20 6e 75 6d 62 65 72  ields are number
d5c0: 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 0a  ed from left to.
d5d0: 2a 2a 20 72 69 67 68 74 20 73 74 61 72 74 69 6e  ** right startin
d5e0: 67 20 77 69 74 68 20 30 29 2e 20 41 20 73 69 6e  g with 0). A sin
d5f0: 67 6c 65 20 66 69 65 6c 64 20 69 73 20 70 6f 70  gle field is pop
d600: 75 6c 61 74 65 64 20 69 66 3a 0a 2a 2a 0a 2a 2a  ulated if:.**.**
d610: 20 20 2a 20 28 70 45 78 70 72 3d 3d 30 29 2e 20    * (pExpr==0). 
d620: 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
d630: 20 76 61 6c 75 65 20 69 73 20 61 73 73 75 6d 65   value is assume
d640: 64 20 74 6f 20 62 65 20 61 6e 20 53 51 4c 20 4e  d to be an SQL N
d650: 55 4c 4c 2c 0a 2a 2a 0a 2a 2a 20 20 2a 20 54 68  ULL,.**.**  * Th
d660: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
d670: 61 20 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65  a bound variable
d680: 2c 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20  , and this is a 
d690: 72 65 70 72 65 70 61 72 65 2c 20 6f 72 0a 2a 2a  reprepare, or.**
d6a0: 0a 2a 2a 20 20 2a 20 54 68 65 20 73 71 6c 69 74  .**  * The sqlit
d6b0: 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28  e3ValueFromExpr(
d6c0: 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 62  ) function is ab
d6d0: 6c 65 20 74 6f 20 65 78 74 72 61 63 74 20 61 20  le to extract a 
d6e0: 76 61 6c 75 65 20 0a 2a 2a 20 20 20 20 66 72 6f  value .**    fro
d6f0: 6d 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  m the expression
d700: 20 28 69 2e 65 2e 20 74 68 65 20 65 78 70 72 65   (i.e. the expre
d710: 73 73 69 6f 6e 20 69 73 20 61 20 6c 69 74 65 72  ssion is a liter
d720: 61 6c 20 76 61 6c 75 65 29 2e 0a 2a 2a 0a 2a 2a  al value)..**.**
d730: 20 4f 72 2c 20 69 66 20 70 45 78 70 72 20 69 73   Or, if pExpr is
d740: 20 61 20 54 4b 5f 56 45 43 54 4f 52 2c 20 6f 6e   a TK_VECTOR, on
d750: 65 20 66 69 65 6c 64 20 69 73 20 70 6f 70 75 6c  e field is popul
d760: 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 6f 66  ated for each of
d770: 20 74 68 65 0a 2a 2a 20 76 65 63 74 6f 72 20 63   the.** vector c
d780: 6f 6d 70 6f 6e 65 6e 74 73 20 74 68 61 74 20 6d  omponents that m
d790: 61 74 63 68 20 65 69 74 68 65 72 20 6f 66 20 74  atch either of t
d7a0: 68 65 20 74 77 6f 20 6c 61 74 74 65 72 20 63 72  he two latter cr
d7b0: 69 74 65 72 69 61 20 6c 69 73 74 65 64 0a 2a 2a  iteria listed.**
d7c0: 20 61 62 6f 76 65 2e 0a 2a 2a 0a 2a 2a 20 42 65   above..**.** Be
d7d0: 66 6f 72 65 20 61 6e 79 20 76 61 6c 75 65 20 69  fore any value i
d7e0: 73 20 61 70 70 65 6e 64 65 64 20 74 6f 20 74 68  s appended to th
d7f0: 65 20 72 65 63 6f 72 64 2c 20 74 68 65 20 61 66  e record, the af
d800: 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 0a 2a  finity of the .*
d810: 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
d820: 63 6f 6c 75 6d 6e 20 77 69 74 68 69 6e 20 69 6e  column within in
d830: 64 65 78 20 70 49 64 78 20 69 73 20 61 70 70 6c  dex pIdx is appl
d840: 69 65 64 20 74 6f 20 69 74 2e 20 42 65 66 6f 72  ied to it. Befor
d850: 65 0a 2a 2a 20 74 68 69 73 20 66 75 6e 63 74 69  e.** this functi
d860: 6f 6e 20 72 65 74 75 72 6e 73 2c 20 6f 75 74 70  on returns, outp
d870: 75 74 20 70 61 72 61 6d 65 74 65 72 20 2a 70 6e  ut parameter *pn
d880: 45 78 74 72 61 63 74 20 69 73 20 73 65 74 20 74  Extract is set t
d890: 6f 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  o the.** number 
d8a0: 6f 66 20 76 61 6c 75 65 73 20 61 70 70 65 6e 64  of values append
d8b0: 65 64 20 74 6f 20 74 68 65 20 72 65 63 6f 72 64  ed to the record
d8c0: 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 69  ..**.** When thi
d8d0: 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61  s function is ca
d8e0: 6c 6c 65 64 2c 20 2a 70 70 52 65 63 20 6d 75 73  lled, *ppRec mus
d8f0: 74 20 65 69 74 68 65 72 20 70 6f 69 6e 74 20 74  t either point t
d900: 6f 20 61 6e 20 6f 62 6a 65 63 74 0a 2a 2a 20 61  o an object.** a
d910: 6c 6c 6f 63 61 74 65 64 20 62 79 20 61 6e 20 65  llocated by an e
d920: 61 72 6c 69 65 72 20 63 61 6c 6c 20 74 6f 20 74  arlier call to t
d930: 68 69 73 20 66 75 6e 63 74 69 6f 6e 2c 20 6f 72  his function, or
d940: 20 6d 75 73 74 20 62 65 20 4e 55 4c 4c 2e 20 49   must be NULL. I
d950: 66 20 69 74 0a 2a 2a 20 69 73 20 4e 55 4c 4c 20  f it.** is NULL 
d960: 61 6e 64 20 61 20 76 61 6c 75 65 20 63 61 6e 20  and a value can 
d970: 62 65 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20  be successfully 
d980: 65 78 74 72 61 63 74 65 64 2c 20 61 20 6e 65 77  extracted, a new
d990: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 0a   UnpackedRecord.
d9a0: 2a 2a 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  ** is allocated 
d9b0: 28 61 6e 64 20 2a 70 70 52 65 63 20 73 65 74 20  (and *ppRec set 
d9c0: 74 6f 20 70 6f 69 6e 74 20 74 6f 20 69 74 29 20  to point to it) 
d9d0: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
d9e0: 2e 0a 2a 2a 0a 2a 2a 20 55 6e 6c 65 73 73 20 61  ..**.** Unless a
d9f0: 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75  n error is encou
da00: 6e 74 65 72 65 64 2c 20 53 51 4c 49 54 45 5f 4f  ntered, SQLITE_O
da10: 4b 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 49  K is returned. I
da20: 74 20 69 73 20 6e 6f 74 20 61 6e 0a 2a 2a 20 65  t is not an.** e
da30: 72 72 6f 72 20 69 66 20 61 20 76 61 6c 75 65 20  rror if a value 
da40: 63 61 6e 6e 6f 74 20 62 65 20 65 78 74 72 61 63  cannot be extrac
da50: 74 65 64 20 66 72 6f 6d 20 70 45 78 70 72 2e 20  ted from pExpr. 
da60: 49 66 20 61 6e 20 65 72 72 6f 72 20 64 6f 65 73  If an error does
da70: 0a 2a 2a 20 6f 63 63 75 72 2c 20 61 6e 20 53 51  .** occur, an SQ
da80: 4c 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65 20  Lite error code 
da90: 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a  is returned..*/.
daa0: 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
dab0: 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 0a 20  ProbeSetValue(. 
dac0: 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20   Parse *pParse, 
dad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dae0: 20 2f 2a 20 50 61 72 73 65 20 63 6f 6e 74 65 78   /* Parse contex
daf0: 74 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49  t */.  Index *pI
db00: 64 78 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  dx,             
db10: 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
db20: 62 65 69 6e 67 20 70 72 6f 62 65 64 20 2a 2f 0a  being probed */.
db30: 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
db40: 20 2a 2a 70 70 52 65 63 2c 20 20 20 20 20 20 20   **ppRec,       
db50: 20 20 2f 2a 20 49 4e 2f 4f 55 54 3a 20 50 72 6f    /* IN/OUT: Pro
db60: 62 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 45  be record */.  E
db70: 78 70 72 20 2a 70 45 78 70 72 2c 20 20 20 20 20  xpr *pExpr,     
db80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
db90: 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * The expression
dba0: 20 74 6f 20 65 78 74 72 61 63 74 20 61 20 76 61   to extract a va
dbb0: 6c 75 65 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e  lue from */.  in
dbc0: 74 20 6e 45 6c 65 6d 2c 20 20 20 20 20 20 20 20  t nElem,        
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
dbe0: 20 4d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   Maximum number 
dbf0: 6f 66 20 76 61 6c 75 65 73 20 74 6f 20 61 70 70  of values to app
dc00: 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 69 56 61  end */.  int iVa
dc10: 6c 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l,              
dc20: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61           /* Arra
dc30: 79 20 65 6c 65 6d 65 6e 74 20 74 6f 20 70 6f 70  y element to pop
dc40: 75 6c 61 74 65 20 2a 2f 0a 20 20 69 6e 74 20 2a  ulate */.  int *
dc50: 70 6e 45 78 74 72 61 63 74 20 20 20 20 20 20 20  pnExtract       
dc60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55             /* OU
dc70: 54 3a 20 56 61 6c 75 65 73 20 61 70 70 65 6e 64  T: Values append
dc80: 65 64 20 74 6f 20 74 68 65 20 72 65 63 6f 72 64  ed to the record
dc90: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 20   */.){.  int rc 
dca0: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69  = SQLITE_OK;.  i
dcb0: 6e 74 20 6e 45 78 74 72 61 63 74 20 3d 20 30 3b  nt nExtract = 0;
dcc0: 0a 0a 20 20 69 66 28 20 70 45 78 70 72 3d 3d 30  ..  if( pExpr==0
dcd0: 20 7c 7c 20 70 45 78 70 72 2d 3e 6f 70 21 3d 54   || pExpr->op!=T
dce0: 4b 5f 53 45 4c 45 43 54 20 29 7b 0a 20 20 20 20  K_SELECT ){.    
dcf0: 69 6e 74 20 69 3b 0a 20 20 20 20 73 74 72 75 63  int i;.    struc
dd00: 74 20 56 61 6c 75 65 4e 65 77 53 74 61 74 34 43  t ValueNewStat4C
dd10: 74 78 20 61 6c 6c 6f 63 3b 0a 0a 20 20 20 20 61  tx alloc;..    a
dd20: 6c 6c 6f 63 2e 70 50 61 72 73 65 20 3d 20 70 50  lloc.pParse = pP
dd30: 61 72 73 65 3b 0a 20 20 20 20 61 6c 6c 6f 63 2e  arse;.    alloc.
dd40: 70 49 64 78 20 3d 20 70 49 64 78 3b 0a 20 20 20  pIdx = pIdx;.   
dd50: 20 61 6c 6c 6f 63 2e 70 70 52 65 63 20 3d 20 70   alloc.ppRec = p
dd60: 70 52 65 63 3b 0a 0a 20 20 20 20 66 6f 72 28 69  pRec;..    for(i
dd70: 3d 30 3b 20 69 3c 6e 45 6c 65 6d 3b 20 69 2b 2b  =0; i<nElem; i++
dd80: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
dd90: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 20 3d 20 30  _value *pVal = 0
dda0: 3b 0a 20 20 20 20 20 20 45 78 70 72 20 2a 70 45  ;.      Expr *pE
ddb0: 6c 65 6d 20 3d 20 28 70 45 78 70 72 20 3f 20 73  lem = (pExpr ? s
ddc0: 71 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c  qlite3VectorFiel
ddd0: 64 53 75 62 65 78 70 72 28 70 45 78 70 72 2c 20  dSubexpr(pExpr, 
dde0: 69 29 20 3a 20 30 29 3b 0a 20 20 20 20 20 20 75  i) : 0);.      u
ddf0: 38 20 61 66 66 20 3d 20 73 71 6c 69 74 65 33 49  8 aff = sqlite3I
de00: 6e 64 65 78 43 6f 6c 75 6d 6e 41 66 66 69 6e 69  ndexColumnAffini
de10: 74 79 28 70 50 61 72 73 65 2d 3e 64 62 2c 20 70  ty(pParse->db, p
de20: 49 64 78 2c 20 69 56 61 6c 2b 69 29 3b 0a 20 20  Idx, iVal+i);.  
de30: 20 20 20 20 61 6c 6c 6f 63 2e 69 56 61 6c 20 3d      alloc.iVal =
de40: 20 69 56 61 6c 2b 69 3b 0a 20 20 20 20 20 20 72   iVal+i;.      r
de50: 63 20 3d 20 73 74 61 74 34 56 61 6c 75 65 46 72  c = stat4ValueFr
de60: 6f 6d 45 78 70 72 28 70 50 61 72 73 65 2c 20 70  omExpr(pParse, p
de70: 45 6c 65 6d 2c 20 61 66 66 2c 20 26 61 6c 6c 6f  Elem, aff, &allo
de80: 63 2c 20 26 70 56 61 6c 29 3b 0a 20 20 20 20 20  c, &pVal);.     
de90: 20 69 66 28 20 21 70 56 61 6c 20 29 20 62 72 65   if( !pVal ) bre
dea0: 61 6b 3b 0a 20 20 20 20 20 20 6e 45 78 74 72 61  ak;.      nExtra
deb0: 63 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ct++;.    }.  }.
dec0: 0a 20 20 2a 70 6e 45 78 74 72 61 63 74 20 3d 20  .  *pnExtract = 
ded0: 6e 45 78 74 72 61 63 74 3b 0a 20 20 72 65 74 75  nExtract;.  retu
dee0: 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
def0: 41 74 74 65 6d 70 74 20 74 6f 20 65 78 74 72 61  Attempt to extra
df00: 63 74 20 61 20 76 61 6c 75 65 20 66 72 6f 6d 20  ct a value from 
df10: 65 78 70 72 65 73 73 69 6f 6e 20 70 45 78 70 72  expression pExpr
df20: 20 75 73 69 6e 67 20 74 68 65 20 6d 65 74 68 6f   using the metho
df30: 64 73 0a 2a 2a 20 61 73 20 64 65 73 63 72 69 62  ds.** as describ
df40: 65 64 20 66 6f 72 20 73 71 6c 69 74 65 33 53 74  ed for sqlite3St
df50: 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65  at4ProbeSetValue
df60: 28 29 20 61 62 6f 76 65 2e 20 0a 2a 2a 0a 2a 2a  () above. .**.**
df70: 20 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20   If successful, 
df80: 73 65 74 20 2a 70 70 56 61 6c 20 74 6f 20 70 6f  set *ppVal to po
df90: 69 6e 74 20 74 6f 20 61 20 6e 65 77 20 76 61 6c  int to a new val
dfa0: 75 65 20 6f 62 6a 65 63 74 20 61 6e 64 20 72 65  ue object and re
dfb0: 74 75 72 6e 20 0a 2a 2a 20 53 51 4c 49 54 45 5f  turn .** SQLITE_
dfc0: 4f 4b 2e 20 49 66 20 6e 6f 20 76 61 6c 75 65 20  OK. If no value 
dfd0: 63 61 6e 20 62 65 20 65 78 74 72 61 63 74 65 64  can be extracted
dfe0: 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 65  , but no other e
dff0: 72 72 6f 72 20 6f 63 63 75 72 73 0a 2a 2a 20 28  rror occurs.** (
e000: 65 2e 67 2e 20 4f 4f 4d 29 2c 20 72 65 74 75 72  e.g. OOM), retur
e010: 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 61 6e 64 20  n SQLITE_OK and 
e020: 73 65 74 20 2a 70 70 56 61 6c 20 74 6f 20 4e 55  set *ppVal to NU
e030: 4c 4c 2e 20 4f 72 2c 20 69 66 20 61 6e 20 65 72  LL. Or, if an er
e040: 72 6f 72 0a 2a 2a 20 64 6f 65 73 20 6f 63 63 75  ror.** does occu
e050: 72 2c 20 72 65 74 75 72 6e 20 61 6e 20 53 51 4c  r, return an SQL
e060: 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65 2e 20  ite error code. 
e070: 54 68 65 20 66 69 6e 61 6c 20 76 61 6c 75 65 20  The final value 
e080: 6f 66 20 2a 70 70 56 61 6c 0a 2a 2a 20 69 73 20  of *ppVal.** is 
e090: 75 6e 64 65 66 69 6e 65 64 20 69 6e 20 74 68 69  undefined in thi
e0a0: 73 20 63 61 73 65 2e 0a 2a 2f 0a 69 6e 74 20 73  s case..*/.int s
e0b0: 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75 65  qlite3Stat4Value
e0c0: 46 72 6f 6d 45 78 70 72 28 0a 20 20 50 61 72 73  FromExpr(.  Pars
e0d0: 65 20 2a 70 50 61 72 73 65 2c 20 20 20 20 20 20  e *pParse,      
e0e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
e0f0: 61 72 73 65 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  arse context */.
e100: 20 20 45 78 70 72 20 2a 70 45 78 70 72 2c 20 20    Expr *pExpr,  
e110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e120: 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73    /* The express
e130: 69 6f 6e 20 74 6f 20 65 78 74 72 61 63 74 20 61  ion to extract a
e140: 20 76 61 6c 75 65 20 66 72 6f 6d 20 2a 2f 0a 20   value from */. 
e150: 20 75 38 20 61 66 66 69 6e 69 74 79 2c 20 20 20   u8 affinity,   
e160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e170: 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20   /* Affinity to 
e180: 75 73 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  use */.  sqlite3
e190: 5f 76 61 6c 75 65 20 2a 2a 70 70 56 61 6c 20 20  _value **ppVal  
e1a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a           /* OUT:
e1b0: 20 4e 65 77 20 76 61 6c 75 65 20 6f 62 6a 65 63   New value objec
e1c0: 74 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 29  t (or NULL) */.)
e1d0: 7b 0a 20 20 72 65 74 75 72 6e 20 73 74 61 74 34  {.  return stat4
e1e0: 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 70 50  ValueFromExpr(pP
e1f0: 61 72 73 65 2c 20 70 45 78 70 72 2c 20 61 66 66  arse, pExpr, aff
e200: 69 6e 69 74 79 2c 20 30 2c 20 70 70 56 61 6c 29  inity, 0, ppVal)
e210: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 74 72 61  ;.}../*.** Extra
e220: 63 74 20 74 68 65 20 69 43 6f 6c 2d 74 68 20 63  ct the iCol-th c
e230: 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20 6e  olumn from the n
e240: 52 65 63 2d 62 79 74 65 20 72 65 63 6f 72 64 20  Rec-byte record 
e250: 69 6e 20 70 52 65 63 2e 20 20 57 72 69 74 65 0a  in pRec.  Write.
e260: 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61  ** the column va
e270: 6c 75 65 20 69 6e 74 6f 20 2a 70 70 56 61 6c 2e  lue into *ppVal.
e280: 20 20 49 66 20 2a 70 70 56 61 6c 20 69 73 20 69    If *ppVal is i
e290: 6e 69 74 69 61 6c 6c 79 20 4e 55 4c 4c 20 74 68  nitially NULL th
e2a0: 65 6e 20 61 20 6e 65 77 0a 2a 2a 20 73 71 6c 69  en a new.** sqli
e2b0: 74 65 33 5f 76 61 6c 75 65 20 6f 62 6a 65 63 74  te3_value object
e2c0: 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 0a 2a   is allocated..*
e2d0: 2a 0a 2a 2a 20 49 66 20 2a 70 70 56 61 6c 20 69  *.** If *ppVal i
e2e0: 73 20 69 6e 69 74 69 61 6c 6c 79 20 4e 55 4c 4c  s initially NULL
e2f0: 20 74 68 65 6e 20 74 68 65 20 63 61 6c 6c 65 72   then the caller
e300: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
e310: 66 6f 72 20 0a 2a 2a 20 65 6e 73 75 72 69 6e 67  for .** ensuring
e320: 20 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 20   that the value 
e330: 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 2a 70 70  written into *pp
e340: 56 61 6c 20 69 73 20 65 76 65 6e 74 75 61 6c 6c  Val is eventuall
e350: 79 20 66 72 65 65 64 2e 0a 2a 2f 0a 69 6e 74 20  y freed..*/.int 
e360: 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75  sqlite3Stat4Colu
e370: 6d 6e 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  mn(.  sqlite3 *d
e380: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
e390: 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
e3a0: 65 20 68 61 6e 64 6c 65 20 2a 2f 0a 20 20 63 6f  e handle */.  co
e3b0: 6e 73 74 20 76 6f 69 64 20 2a 70 52 65 63 2c 20  nst void *pRec, 
e3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e3d0: 20 50 6f 69 6e 74 65 72 20 74 6f 20 62 75 66 66   Pointer to buff
e3e0: 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 65  er containing re
e3f0: 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  cord */.  int nR
e400: 65 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ec,             
e410: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
e420: 65 20 6f 66 20 62 75 66 66 65 72 20 70 52 65 63  e of buffer pRec
e430: 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 69   in bytes */.  i
e440: 6e 74 20 69 43 6f 6c 2c 20 20 20 20 20 20 20 20  nt iCol,        
e450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e460: 2a 20 43 6f 6c 75 6d 6e 20 74 6f 20 65 78 74 72  * Column to extr
e470: 61 63 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  act */.  sqlite3
e480: 5f 76 61 6c 75 65 20 2a 2a 70 70 56 61 6c 20 20  _value **ppVal  
e490: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a           /* OUT:
e4a0: 20 45 78 74 72 61 63 74 65 64 20 76 61 6c 75 65   Extracted value
e4b0: 20 2a 2f 0a 29 7b 0a 20 20 75 33 32 20 74 20 3d   */.){.  u32 t =
e4c0: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
e4d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 61 20 63 6f           /* a co
e4e0: 6c 75 6d 6e 20 74 79 70 65 20 63 6f 64 65 20 2a  lumn type code *
e4f0: 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20 20  /.  int nHdr;   
e500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e510: 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74      /* Size of t
e520: 68 65 20 68 65 61 64 65 72 20 69 6e 20 74 68 65  he header in the
e530: 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
e540: 20 69 48 64 72 3b 20 20 20 20 20 20 20 20 20 20   iHdr;          
e550: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e560: 4e 65 78 74 20 75 6e 72 65 61 64 20 68 65 61 64  Next unread head
e570: 65 72 20 62 79 74 65 20 2a 2f 0a 20 20 69 6e 74  er byte */.  int
e580: 20 69 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   iField;        
e590: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e5a0: 4e 65 78 74 20 75 6e 72 65 61 64 20 64 61 74 61  Next unread data
e5b0: 20 62 79 74 65 20 2a 2f 0a 20 20 69 6e 74 20 73   byte */.  int s
e5c0: 7a 46 69 65 6c 64 20 3d 20 30 3b 20 20 20 20 20  zField = 0;     
e5d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
e5e0: 7a 65 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ze of the curren
e5f0: 74 20 64 61 74 61 20 66 69 65 6c 64 20 2a 2f 0a  t data field */.
e600: 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
e610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e620: 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 6e 64 65    /* Column inde
e630: 78 20 2a 2f 0a 20 20 75 38 20 2a 61 20 3d 20 28  x */.  u8 *a = (
e640: 75 38 2a 29 70 52 65 63 3b 20 20 20 20 20 20 20  u8*)pRec;       
e650: 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 63 61         /* Typeca
e660: 73 74 20 62 79 74 65 20 61 72 72 61 79 20 2a 2f  st byte array */
e670: 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 2a  .  Mem *pMem = *
e680: 70 70 56 61 6c 3b 20 20 20 20 20 20 20 20 20 20  ppVal;          
e690: 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75     /* Write resu
e6a0: 6c 74 20 69 6e 74 6f 20 74 68 69 73 20 4d 65 6d  lt into this Mem
e6b0: 20 6f 62 6a 65 63 74 20 2a 2f 0a 0a 20 20 61 73   object */..  as
e6c0: 73 65 72 74 28 20 69 43 6f 6c 3e 30 20 29 3b 0a  sert( iCol>0 );.
e6d0: 20 20 69 48 64 72 20 3d 20 67 65 74 56 61 72 69    iHdr = getVari
e6e0: 6e 74 33 32 28 61 2c 20 6e 48 64 72 29 3b 0a 20  nt32(a, nHdr);. 
e6f0: 20 69 66 28 20 6e 48 64 72 3e 6e 52 65 63 20 7c   if( nHdr>nRec |
e700: 7c 20 69 48 64 72 3e 3d 6e 48 64 72 20 29 20 72  | iHdr>=nHdr ) r
e710: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 43 4f 52  eturn SQLITE_COR
e720: 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 69 46 69  RUPT_BKPT;.  iFi
e730: 65 6c 64 20 3d 20 6e 48 64 72 3b 0a 20 20 66 6f  eld = nHdr;.  fo
e740: 72 28 69 3d 30 3b 20 69 3c 3d 69 43 6f 6c 3b 20  r(i=0; i<=iCol; 
e750: 69 2b 2b 29 7b 0a 20 20 20 20 69 48 64 72 20 2b  i++){.    iHdr +
e760: 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 26 61  = getVarint32(&a
e770: 5b 69 48 64 72 5d 2c 20 74 29 3b 0a 20 20 20 20  [iHdr], t);.    
e780: 74 65 73 74 63 61 73 65 28 20 69 48 64 72 3d 3d  testcase( iHdr==
e790: 6e 48 64 72 20 29 3b 0a 20 20 20 20 74 65 73 74  nHdr );.    test
e7a0: 63 61 73 65 28 20 69 48 64 72 3d 3d 6e 48 64 72  case( iHdr==nHdr
e7b0: 2b 31 20 29 3b 0a 20 20 20 20 69 66 28 20 69 48  +1 );.    if( iH
e7c0: 64 72 3e 6e 48 64 72 20 29 20 72 65 74 75 72 6e  dr>nHdr ) return
e7d0: 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
e7e0: 42 4b 50 54 3b 0a 20 20 20 20 73 7a 46 69 65 6c  BKPT;.    szFiel
e7f0: 64 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  d = sqlite3VdbeS
e800: 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b  erialTypeLen(t);
e810: 0a 20 20 20 20 69 46 69 65 6c 64 20 2b 3d 20 73  .    iField += s
e820: 7a 46 69 65 6c 64 3b 0a 20 20 7d 0a 20 20 74 65  zField;.  }.  te
e830: 73 74 63 61 73 65 28 20 69 46 69 65 6c 64 3d 3d  stcase( iField==
e840: 6e 52 65 63 20 29 3b 0a 20 20 74 65 73 74 63 61  nRec );.  testca
e850: 73 65 28 20 69 46 69 65 6c 64 3d 3d 6e 52 65 63  se( iField==nRec
e860: 2b 31 20 29 3b 0a 20 20 69 66 28 20 69 46 69 65  +1 );.  if( iFie
e870: 6c 64 3e 6e 52 65 63 20 29 20 72 65 74 75 72 6e  ld>nRec ) return
e880: 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
e890: 42 4b 50 54 3b 0a 20 20 69 66 28 20 70 4d 65 6d  BKPT;.  if( pMem
e8a0: 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4d 65 6d 20  ==0 ){.    pMem 
e8b0: 3d 20 2a 70 70 56 61 6c 20 3d 20 73 71 6c 69 74  = *ppVal = sqlit
e8c0: 65 33 56 61 6c 75 65 4e 65 77 28 64 62 29 3b 0a  e3ValueNew(db);.
e8d0: 20 20 20 20 69 66 28 20 70 4d 65 6d 3d 3d 30 20      if( pMem==0 
e8e0: 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
e8f0: 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 7d 0a  NOMEM_BKPT;.  }.
e900: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
e910: 69 61 6c 47 65 74 28 26 61 5b 69 46 69 65 6c 64  ialGet(&a[iField
e920: 2d 73 7a 46 69 65 6c 64 5d 2c 20 74 2c 20 70 4d  -szField], t, pM
e930: 65 6d 29 3b 0a 20 20 70 4d 65 6d 2d 3e 65 6e 63  em);.  pMem->enc
e940: 20 3d 20 45 4e 43 28 64 62 29 3b 0a 20 20 72 65   = ENC(db);.  re
e950: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
e960: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 6e 6c 65 73 73 20  }../*.** Unless 
e970: 69 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  it is NULL, the 
e980: 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65  argument must be
e990: 20 61 6e 20 55 6e 70 61 63 6b 65 64 52 65 63 6f   an UnpackedReco
e9a0: 72 64 20 6f 62 6a 65 63 74 20 72 65 74 75 72 6e  rd object return
e9b0: 65 64 0a 2a 2a 20 62 79 20 61 6e 20 65 61 72 6c  ed.** by an earl
e9c0: 69 65 72 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69  ier call to sqli
e9d0: 74 65 33 53 74 61 74 34 50 72 6f 62 65 53 65 74  te3Stat4ProbeSet
e9e0: 56 61 6c 75 65 28 29 2e 20 54 68 69 73 20 63 61  Value(). This ca
e9f0: 6c 6c 20 64 65 6c 65 74 65 73 0a 2a 2a 20 74 68  ll deletes.** th
ea00: 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 76 6f 69  e object..*/.voi
ea10: 64 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  d sqlite3Stat4Pr
ea20: 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64  obeFree(Unpacked
ea30: 52 65 63 6f 72 64 20 2a 70 52 65 63 29 7b 0a 20  Record *pRec){. 
ea40: 20 69 66 28 20 70 52 65 63 20 29 7b 0a 20 20 20   if( pRec ){.   
ea50: 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20   int i;.    int 
ea60: 6e 43 6f 6c 20 3d 20 70 52 65 63 2d 3e 70 4b 65  nCol = pRec->pKe
ea70: 79 49 6e 66 6f 2d 3e 6e 41 6c 6c 46 69 65 6c 64  yInfo->nAllField
ea80: 3b 0a 20 20 20 20 4d 65 6d 20 2a 61 4d 65 6d 20  ;.    Mem *aMem 
ea90: 3d 20 70 52 65 63 2d 3e 61 4d 65 6d 3b 0a 20 20  = pRec->aMem;.  
eaa0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20    sqlite3 *db = 
eab0: 61 4d 65 6d 5b 30 5d 2e 64 62 3b 0a 20 20 20 20  aMem[0].db;.    
eac0: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b  for(i=0; i<nCol;
ead0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c   i++){.      sql
eae0: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
eaf0: 73 65 28 26 61 4d 65 6d 5b 69 5d 29 3b 0a 20 20  se(&aMem[i]);.  
eb00: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 4b    }.    sqlite3K
eb10: 65 79 49 6e 66 6f 55 6e 72 65 66 28 70 52 65 63  eyInfoUnref(pRec
eb20: 2d 3e 70 4b 65 79 49 6e 66 6f 29 3b 0a 20 20 20  ->pKeyInfo);.   
eb30: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e   sqlite3DbFreeNN
eb40: 28 64 62 2c 20 70 52 65 63 29 3b 0a 20 20 7d 0a  (db, pRec);.  }.
eb50: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 64 65  }.#endif /* ifde
eb60: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
eb70: 53 54 41 54 34 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  STAT4 */../*.** 
eb80: 43 68 61 6e 67 65 20 74 68 65 20 73 74 72 69 6e  Change the strin
eb90: 67 20 76 61 6c 75 65 20 6f 66 20 61 6e 20 73 71  g value of an sq
eba0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 6f 62 6a 65  lite3_value obje
ebb0: 63 74 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  ct.*/.void sqlit
ebc0: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 0a 20  e3ValueSetStr(. 
ebd0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
ebe0: 76 2c 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20  v,     /* Value 
ebf0: 74 6f 20 62 65 20 73 65 74 20 2a 2f 0a 20 20 69  to be set */.  i
ec00: 6e 74 20 6e 2c 20 20 20 20 20 20 20 20 20 20 20  nt n,           
ec10: 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
ec20: 66 20 73 74 72 69 6e 67 20 7a 20 2a 2f 0a 20 20  f string z */.  
ec30: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 2c 20 20  const void *z,  
ec40: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
ec50: 20 74 68 65 20 6e 65 77 20 73 74 72 69 6e 67 20   the new string 
ec60: 2a 2f 0a 20 20 75 38 20 65 6e 63 2c 20 20 20 20  */.  u8 enc,    
ec70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 6e             /* En
ec80: 63 6f 64 69 6e 67 20 74 6f 20 75 73 65 20 2a 2f  coding to use */
ec90: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28  .  void (*xDel)(
eca0: 76 6f 69 64 2a 29 20 20 20 2f 2a 20 44 65 73 74  void*)   /* Dest
ecb0: 72 75 63 74 6f 72 20 66 6f 72 20 74 68 65 20 73  ructor for the s
ecc0: 74 72 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66  tring */.){.  if
ecd0: 28 20 76 20 29 20 73 71 6c 69 74 65 33 56 64 62  ( v ) sqlite3Vdb
ece0: 65 4d 65 6d 53 65 74 53 74 72 28 28 4d 65 6d 20  eMemSetStr((Mem 
ecf0: 2a 29 76 2c 20 7a 2c 20 6e 2c 20 65 6e 63 2c 20  *)v, z, n, enc, 
ed00: 78 44 65 6c 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  xDel);.}../*.** 
ed10: 46 72 65 65 20 61 6e 20 73 71 6c 69 74 65 33 5f  Free an sqlite3_
ed20: 76 61 6c 75 65 20 6f 62 6a 65 63 74 0a 2a 2f 0a  value object.*/.
ed30: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
ed40: 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61  eFree(sqlite3_va
ed50: 6c 75 65 20 2a 76 29 7b 0a 20 20 69 66 28 20 21  lue *v){.  if( !
ed60: 76 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 73 71  v ) return;.  sq
ed70: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
ed80: 61 73 65 28 28 4d 65 6d 20 2a 29 76 29 3b 0a 20  ase((Mem *)v);. 
ed90: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e   sqlite3DbFreeNN
eda0: 28 28 28 4d 65 6d 2a 29 76 29 2d 3e 64 62 2c 20  (((Mem*)v)->db, 
edb0: 76 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  v);.}../*.** The
edc0: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74   sqlite3ValueByt
edd0: 65 73 28 29 20 72 6f 75 74 69 6e 65 20 72 65 74  es() routine ret
ede0: 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
edf0: 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 0a  of bytes in the.
ee00: 2a 2a 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ** sqlite3_value
ee10: 20 6f 62 6a 65 63 74 20 61 73 73 75 6d 69 6e 67   object assuming
ee20: 20 74 68 61 74 20 69 74 20 75 73 65 73 20 74 68   that it uses th
ee30: 65 20 65 6e 63 6f 64 69 6e 67 20 22 65 6e 63 22  e encoding "enc"
ee40: 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 42 79  ..** The valueBy
ee50: 74 65 73 28 29 20 72 6f 75 74 69 6e 65 20 69 73  tes() routine is
ee60: 20 61 20 68 65 6c 70 65 72 20 66 75 6e 63 74 69   a helper functi
ee70: 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 53 51  on..*/.static SQ
ee80: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 69 6e  LITE_NOINLINE in
ee90: 74 20 76 61 6c 75 65 42 79 74 65 73 28 73 71 6c  t valueBytes(sql
eea0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
eeb0: 2c 20 75 38 20 65 6e 63 29 7b 0a 20 20 72 65 74  , u8 enc){.  ret
eec0: 75 72 6e 20 76 61 6c 75 65 54 6f 54 65 78 74 28  urn valueToText(
eed0: 70 56 61 6c 2c 20 65 6e 63 29 21 3d 30 20 3f 20  pVal, enc)!=0 ? 
eee0: 70 56 61 6c 2d 3e 6e 20 3a 20 30 3b 0a 7d 0a 69  pVal->n : 0;.}.i
eef0: 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42  nt sqlite3ValueB
ef00: 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c  ytes(sqlite3_val
ef10: 75 65 20 2a 70 56 61 6c 2c 20 75 38 20 65 6e 63  ue *pVal, u8 enc
ef20: 29 7b 0a 20 20 4d 65 6d 20 2a 70 20 3d 20 28 4d  ){.  Mem *p = (M
ef30: 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 61 73 73 65  em*)pVal;.  asse
ef40: 72 74 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20  rt( (p->flags & 
ef50: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 7c 7c 20  MEM_Null)==0 || 
ef60: 28 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  (p->flags & (MEM
ef70: 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d  _Str|MEM_Blob))=
ef80: 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 2d 3e  =0 );.  if( (p->
ef90: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 29  flags & MEM_Str)
efa0: 21 3d 30 20 26 26 20 70 56 61 6c 2d 3e 65 6e 63  !=0 && pVal->enc
efb0: 3d 3d 65 6e 63 20 29 7b 0a 20 20 20 20 72 65 74  ==enc ){.    ret
efc0: 75 72 6e 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 20 20  urn p->n;.  }.  
efd0: 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20  if( (p->flags & 
efe0: 4d 45 4d 5f 42 6c 6f 62 29 21 3d 30 20 29 7b 0a  MEM_Blob)!=0 ){.
eff0: 20 20 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73      if( p->flags
f000: 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
f010: 20 20 20 20 20 72 65 74 75 72 6e 20 70 2d 3e 6e       return p->n
f020: 20 2b 20 70 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20   + p->u.nZero;. 
f030: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
f040: 72 65 74 75 72 6e 20 70 2d 3e 6e 3b 0a 20 20 20  return p->n;.   
f050: 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e   }.  }.  if( p->
f060: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
f070: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72   ) return 0;.  r
f080: 65 74 75 72 6e 20 76 61 6c 75 65 42 79 74 65 73  eturn valueBytes
f090: 28 70 56 61 6c 2c 20 65 6e 63 29 3b 0a 7d 0a     (pVal, enc);.}.