/ Hex Artifact Content
Login

Artifact 87b48c0bd68041a61fb3f4e18a1a696f5339d65e572d288a266a602a01863f1a:


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 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ob.             
0660: 20 20 20 20 20 20 20 20 20 20 20 20 7c 4d 45 4d              |MEM
0670: 5f 52 6f 77 53 65 74 7c 4d 45 4d 5f 46 72 61 6d  _RowSet|MEM_Fram
0680: 65 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29  e|MEM_Agg))==0 )
0690: 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 4d 45 4d  ;..    /* If MEM
06a0: 5f 4e 75 6c 6c 20 69 73 20 73 65 74 2c 20 74 68  _Null is set, th
06b0: 65 6e 20 65 69 74 68 65 72 20 74 68 65 20 76 61  en either the va
06c0: 6c 75 65 20 69 73 20 61 20 70 75 72 65 20 4e 55  lue is a pure NU
06d0: 4c 4c 20 28 74 68 65 20 75 73 75 61 6c 0a 20 20  LL (the usual.  
06e0: 20 20 2a 2a 20 63 61 73 65 29 20 6f 72 20 69 74    ** case) or it
06f0: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 73 65   is a pointer se
0700: 74 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  t using sqlite3_
0710: 62 69 6e 64 5f 70 6f 69 6e 74 65 72 28 29 20 6f  bind_pointer() o
0720: 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33  r.    ** sqlite3
0730: 5f 72 65 73 75 6c 74 5f 70 6f 69 6e 74 65 72 28  _result_pointer(
0740: 29 2e 20 20 49 66 20 61 20 70 6f 69 6e 74 65 72  ).  If a pointer
0750: 2c 20 74 68 65 6e 20 4d 45 4d 5f 54 65 72 6d 20  , then MEM_Term 
0760: 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 20 20 20  must also be.   
0770: 20 2a 2a 20 73 65 74 2e 0a 20 20 20 20 2a 2f 0a   ** set..    */.
0780: 20 20 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67      if( (p->flag
0790: 73 20 26 20 28 4d 45 4d 5f 54 65 72 6d 7c 4d 45  s & (MEM_Term|ME
07a0: 4d 5f 53 75 62 74 79 70 65 29 29 3d 3d 28 4d 45  M_Subtype))==(ME
07b0: 4d 5f 54 65 72 6d 7c 4d 45 4d 5f 53 75 62 74 79  M_Term|MEM_Subty
07c0: 70 65 29 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  pe) ){.      /* 
07d0: 54 68 69 73 20 69 73 20 61 20 70 6f 69 6e 74 65  This is a pointe
07e0: 72 20 74 79 70 65 2e 20 20 54 68 65 72 65 20 6d  r type.  There m
07f0: 61 79 20 62 65 20 61 20 66 6c 61 67 20 74 6f 20  ay be a flag to 
0800: 69 6e 64 69 63 61 74 65 20 77 68 61 74 20 74 6f  indicate what to
0810: 0a 20 20 20 20 20 20 2a 2a 20 64 6f 20 77 69 74  .      ** do wit
0820: 68 20 74 68 65 20 70 6f 69 6e 74 65 72 2e 20 2a  h the pointer. *
0830: 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
0840: 28 28 70 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44  ((p->flags&MEM_D
0850: 79 6e 29 21 3d 30 20 3f 20 31 20 3a 20 30 29 20  yn)!=0 ? 1 : 0) 
0860: 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  +.              
0870: 28 28 70 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45  ((p->flags&MEM_E
0880: 70 68 65 6d 29 21 3d 30 20 3f 20 31 20 3a 20 30  phem)!=0 ? 1 : 0
0890: 29 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) +.            
08a0: 20 20 28 28 70 2d 3e 66 6c 61 67 73 26 4d 45 4d    ((p->flags&MEM
08b0: 5f 53 74 61 74 69 63 29 21 3d 30 20 3f 20 31 20  _Static)!=0 ? 1 
08c0: 3a 20 30 29 20 3c 3d 20 31 20 29 3b 0a 0a 20 20  : 0) <= 1 );..  
08d0: 20 20 20 20 2f 2a 20 4e 6f 20 6f 74 68 65 72 20      /* No other 
08e0: 62 69 74 73 20 73 65 74 20 2a 2f 0a 20 20 20 20  bits set */.    
08f0: 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 66 6c    assert( (p->fl
0900: 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c  ags & ~(MEM_Null
0910: 7c 4d 45 4d 5f 54 65 72 6d 7c 4d 45 4d 5f 53 75  |MEM_Term|MEM_Su
0920: 62 74 79 70 65 0a 20 20 20 20 20 20 20 20 20 20  btype.          
0930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0940: 20 7c 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70   |MEM_Dyn|MEM_Ep
0950: 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63 29 29  hem|MEM_Static))
0960: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
0970: 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 70 75 72  {.      /* A pur
0980: 65 20 4e 55 4c 4c 20 6d 69 67 68 74 20 68 61 76  e NULL might hav
0990: 65 20 6f 74 68 65 72 20 66 6c 61 67 73 2c 20 73  e other flags, s
09a0: 75 63 68 20 61 73 20 4d 45 4d 5f 53 74 61 74 69  uch as MEM_Stati
09b0: 63 2c 20 4d 45 4d 5f 44 79 6e 2c 0a 20 20 20 20  c, MEM_Dyn,.    
09c0: 20 20 2a 2a 20 4d 45 4d 5f 45 70 68 65 6d 2c 20    ** MEM_Ephem, 
09d0: 4d 45 4d 5f 43 6c 65 61 72 65 64 2c 20 6f 72 20  MEM_Cleared, or 
09e0: 4d 45 4d 5f 53 75 62 74 79 70 65 20 2a 2f 0a 20  MEM_Subtype */. 
09f0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
0a00: 20 20 2f 2a 20 54 68 65 20 4d 45 4d 5f 43 6c 65    /* The MEM_Cle
0a10: 61 72 65 64 20 62 69 74 20 69 73 20 6f 6e 6c 79  ared bit is only
0a20: 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 4e 55 4c 4c   allowed on NULL
0a30: 73 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28  s */.    assert(
0a40: 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d   (p->flags & MEM
0a50: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a  _Cleared)==0 );.
0a60: 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 65 20 73 7a    }..  /* The sz
0a70: 4d 61 6c 6c 6f 63 20 66 69 65 6c 64 20 68 6f 6c  Malloc field hol
0a80: 64 73 20 74 68 65 20 63 6f 72 72 65 63 74 20 6d  ds the correct m
0a90: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
0aa0: 20 73 69 7a 65 20 2a 2f 0a 20 20 61 73 73 65 72   size */.  asser
0ab0: 74 28 20 70 2d 3e 73 7a 4d 61 6c 6c 6f 63 3d 3d  t( p->szMalloc==
0ac0: 30 0a 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e 73  0.       || p->s
0ad0: 7a 4d 61 6c 6c 6f 63 3d 3d 73 71 6c 69 74 65 33  zMalloc==sqlite3
0ae0: 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 70 2d 3e  DbMallocSize(p->
0af0: 64 62 2c 70 2d 3e 7a 4d 61 6c 6c 6f 63 29 20 29  db,p->zMalloc) )
0b00: 3b 0a 0a 20 20 2f 2a 20 49 66 20 70 20 68 6f 6c  ;..  /* If p hol
0b10: 64 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  ds a string or b
0b20: 6c 6f 62 2c 20 74 68 65 20 4d 65 6d 2e 7a 20 6d  lob, the Mem.z m
0b30: 75 73 74 20 70 6f 69 6e 74 20 74 6f 20 65 78 61  ust point to exa
0b40: 63 74 6c 79 0a 20 20 2a 2a 20 6f 6e 65 20 6f 66  ctly.  ** one of
0b50: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a   the following:.
0b60: 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 28 31 29 20    **.  **   (1) 
0b70: 4d 65 6d 6f 72 79 20 69 6e 20 4d 65 6d 2e 7a 4d  Memory in Mem.zM
0b80: 61 6c 6c 6f 63 20 61 6e 64 20 6d 61 6e 61 67 65  alloc and manage
0b90: 64 20 62 79 20 74 68 65 20 4d 65 6d 20 6f 62 6a  d by the Mem obj
0ba0: 65 63 74 0a 20 20 2a 2a 20 20 20 28 32 29 20 4d  ect.  **   (2) M
0bb0: 65 6d 6f 72 79 20 74 6f 20 62 65 20 66 72 65 65  emory to be free
0bc0: 64 20 75 73 69 6e 67 20 4d 65 6d 2e 78 44 65 6c  d using Mem.xDel
0bd0: 0a 20 20 2a 2a 20 20 20 28 33 29 20 41 6e 20 65  .  **   (3) An e
0be0: 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67 20  phemeral string 
0bf0: 6f 72 20 62 6c 6f 62 0a 20 20 2a 2a 20 20 20 28  or blob.  **   (
0c00: 34 29 20 41 20 73 74 61 74 69 63 20 73 74 72 69  4) A static stri
0c10: 6e 67 20 6f 72 20 62 6c 6f 62 0a 20 20 2a 2f 0a  ng or blob.  */.
0c20: 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20    if( (p->flags 
0c30: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
0c40: 6c 6f 62 29 29 20 26 26 20 70 2d 3e 6e 3e 30 20  lob)) && p->n>0 
0c50: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 0a  ){.    assert( .
0c60: 20 20 20 20 20 20 28 28 70 2d 3e 73 7a 4d 61 6c        ((p->szMal
0c70: 6c 6f 63 3e 30 20 26 26 20 70 2d 3e 7a 3d 3d 70  loc>0 && p->z==p
0c80: 2d 3e 7a 4d 61 6c 6c 6f 63 29 3f 20 31 20 3a 20  ->zMalloc)? 1 : 
0c90: 30 29 20 2b 0a 20 20 20 20 20 20 28 28 70 2d 3e  0) +.      ((p->
0ca0: 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 21 3d  flags&MEM_Dyn)!=
0cb0: 30 20 3f 20 31 20 3a 20 30 29 20 2b 0a 20 20 20  0 ? 1 : 0) +.   
0cc0: 20 20 20 28 28 70 2d 3e 66 6c 61 67 73 26 4d 45     ((p->flags&ME
0cd0: 4d 5f 45 70 68 65 6d 29 21 3d 30 20 3f 20 31 20  M_Ephem)!=0 ? 1 
0ce0: 3a 20 30 29 20 2b 0a 20 20 20 20 20 20 28 28 70  : 0) +.      ((p
0cf0: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 61 74  ->flags&MEM_Stat
0d00: 69 63 29 21 3d 30 20 3f 20 31 20 3a 20 30 29 20  ic)!=0 ? 1 : 0) 
0d10: 3d 3d 20 31 0a 20 20 20 20 29 3b 0a 20 20 7d 0a  == 1.    );.  }.
0d20: 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65    return 1;.}.#e
0d30: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
0d40: 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
0d50: 43 68 65 63 6b 20 74 68 61 74 20 73 74 72 69 6e  Check that strin
0d60: 67 20 76 61 6c 75 65 20 6f 66 20 70 4d 65 6d 20  g value of pMem 
0d70: 61 67 72 65 65 73 20 77 69 74 68 20 69 74 73 20  agrees with its 
0d80: 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c 20  integer or real 
0d90: 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 73  value..**.** A s
0da0: 69 6e 67 6c 65 20 69 6e 74 20 6f 72 20 72 65 61  ingle int or rea
0db0: 6c 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63  l value always c
0dc0: 6f 6e 76 65 72 74 73 20 74 6f 20 74 68 65 20 73  onverts to the s
0dd0: 61 6d 65 20 73 74 72 69 6e 67 73 2e 20 20 42 75  ame strings.  Bu
0de0: 74 0a 2a 2a 20 6d 61 6e 79 20 64 69 66 66 65 72  t.** many differ
0df0: 65 6e 74 20 73 74 72 69 6e 67 73 20 63 61 6e 20  ent strings can 
0e00: 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
0e10: 6f 20 74 68 65 20 73 61 6d 65 20 69 6e 74 20 6f  o the same int o
0e20: 72 20 72 65 61 6c 2e 0a 2a 2a 20 49 66 20 61 20  r real..** If a 
0e30: 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61  table contains a
0e40: 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 61   numeric value a
0e50: 6e 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20 62  nd an index is b
0e60: 61 73 65 64 20 6f 6e 20 74 68 65 0a 2a 2a 20 63  ased on the.** c
0e70: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 74 72  orresponding str
0e80: 69 6e 67 20 76 61 6c 75 65 2c 20 74 68 65 6e 20  ing value, then 
0e90: 69 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  it is important 
0ea0: 74 68 61 74 20 74 68 65 20 73 74 72 69 6e 67 20  that the string 
0eb0: 62 65 0a 2a 2a 20 64 65 72 69 76 65 64 20 66 72  be.** derived fr
0ec0: 6f 6d 20 74 68 65 20 6e 75 6d 65 72 69 63 20 76  om the numeric v
0ed0: 61 6c 75 65 2c 20 6e 6f 74 20 74 68 65 20 6f 74  alue, not the ot
0ee0: 68 65 72 20 77 61 79 20 61 72 6f 75 6e 64 2c 20  her way around, 
0ef0: 74 6f 20 65 6e 73 75 72 65 0a 2a 2a 20 74 68 61  to ensure.** tha
0f00: 74 20 74 68 65 20 69 6e 64 65 78 20 61 6e 64 20  t the index and 
0f10: 74 61 62 6c 65 20 61 72 65 20 63 6f 6e 73 69 73  table are consis
0f20: 74 65 6e 74 2e 20 20 53 65 65 20 74 69 63 6b 65  tent.  See ticke
0f30: 74 0a 2a 2a 20 68 74 74 70 73 3a 2f 2f 77 77 77  t.** https://www
0f40: 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f  .sqlite.org/src/
0f50: 69 6e 66 6f 2f 33 34 33 36 33 34 39 34 32 64 64  info/343634942dd
0f60: 35 34 61 62 20 28 32 30 31 38 2d 30 31 2d 33 31  54ab (2018-01-31
0f70: 29 20 66 6f 72 0a 2a 2a 20 61 6e 20 65 78 61 6d  ) for.** an exam
0f80: 70 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ple..**.** This 
0f90: 72 6f 75 74 69 6e 65 20 6c 6f 6f 6b 73 20 61 74  routine looks at
0fa0: 20 70 4d 65 6d 20 74 6f 20 76 65 72 69 66 79 20   pMem to verify 
0fb0: 74 68 61 74 20 69 66 20 69 74 20 68 61 73 20 62  that if it has b
0fc0: 6f 74 68 20 61 20 6e 75 6d 65 72 69 63 0a 2a 2a  oth a numeric.**
0fd0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
0fe0: 61 6e 64 20 61 20 73 74 72 69 6e 67 20 72 65 70  and a string rep
0ff0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 74 68 65 6e  resentation then
1000: 20 74 68 65 20 73 74 72 69 6e 67 20 72 65 70 20   the string rep 
1010: 68 61 73 0a 2a 2a 20 62 65 65 6e 20 64 65 72 69  has.** been deri
1020: 76 65 64 20 66 72 6f 6d 20 74 68 65 20 6e 75 6d  ved from the num
1030: 65 72 69 63 20 61 6e 64 20 6e 6f 74 20 74 68 65  eric and not the
1040: 20 6f 74 68 65 72 20 77 61 79 20 61 72 6f 75 6e   other way aroun
1050: 64 2e 20 20 49 74 20 72 65 74 75 72 6e 73 0a 2a  d.  It returns.*
1060: 2a 20 74 72 75 65 20 69 66 20 65 76 65 72 79 74  * true if everyt
1070: 68 69 6e 67 20 69 73 20 6f 6b 20 61 6e 64 20 66  hing is ok and f
1080: 61 6c 73 65 20 69 66 20 74 68 65 72 65 20 69 73  alse if there is
1090: 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a   a problem..**.*
10a0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  * This routine i
10b0: 73 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65  s for use inside
10c0: 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61   of assert() sta
10d0: 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e 0a 2a 2f  tements only..*/
10e0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
10f0: 4d 65 6d 43 6f 6e 73 69 73 74 65 6e 74 44 75 61  MemConsistentDua
1100: 6c 52 65 70 28 4d 65 6d 20 2a 70 29 7b 0a 20 20  lRep(Mem *p){.  
1110: 63 68 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b 0a  char zBuf[100];.
1120: 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 6e 74    char *z;.  int
1130: 20 69 2c 20 6a 2c 20 69 6e 63 72 3b 0a 20 20 69   i, j, incr;.  i
1140: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 4d  f( (p->flags & M
1150: 45 4d 5f 53 74 72 29 3d 3d 30 20 29 20 72 65 74  EM_Str)==0 ) ret
1160: 75 72 6e 20 31 3b 0a 20 20 69 66 28 20 28 70 2d  urn 1;.  if( (p-
1170: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
1180: 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20  t|MEM_Real))==0 
1190: 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 69 66  ) return 1;.  if
11a0: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
11b0: 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69  _Int ){.    sqli
11c0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
11d0: 65 6f 66 28 7a 42 75 66 29 2c 7a 42 75 66 2c 22  eof(zBuf),zBuf,"
11e0: 25 6c 6c 64 22 2c 70 2d 3e 75 2e 69 29 3b 0a 20  %lld",p->u.i);. 
11f0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
1200: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
1210: 65 6f 66 28 7a 42 75 66 29 2c 7a 42 75 66 2c 22  eof(zBuf),zBuf,"
1220: 25 21 2e 31 35 67 22 2c 70 2d 3e 75 2e 72 29 3b  %!.15g",p->u.r);
1230: 0a 20 20 7d 0a 20 20 7a 20 3d 20 70 2d 3e 7a 3b  .  }.  z = p->z;
1240: 0a 20 20 69 20 3d 20 6a 20 3d 20 30 3b 0a 20 20  .  i = j = 0;.  
1250: 69 6e 63 72 20 3d 20 31 3b 0a 20 20 69 66 28 20  incr = 1;.  if( 
1260: 70 2d 3e 65 6e 63 21 3d 53 51 4c 49 54 45 5f 55  p->enc!=SQLITE_U
1270: 54 46 38 20 29 7b 0a 20 20 20 20 69 6e 63 72 20  TF8 ){.    incr 
1280: 3d 20 32 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  = 2;.    if( p->
1290: 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
12a0: 36 42 45 20 29 20 7a 2b 2b 3b 0a 20 20 7d 0a 20  6BE ) z++;.  }. 
12b0: 20 77 68 69 6c 65 28 20 7a 42 75 66 5b 6a 5d 20   while( zBuf[j] 
12c0: 29 7b 0a 20 20 20 20 69 66 28 20 7a 42 75 66 5b  ){.    if( zBuf[
12d0: 6a 2b 2b 5d 21 3d 7a 5b 69 5d 20 29 20 72 65 74  j++]!=z[i] ) ret
12e0: 75 72 6e 20 30 3b 0a 20 20 20 20 69 20 2b 3d 20  urn 0;.    i += 
12f0: 69 6e 63 72 3b 0a 20 20 7d 0a 20 20 72 65 74 75  incr;.  }.  retu
1300: 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  rn 1;.}.#endif /
1310: 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
1320: 2f 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 70 4d 65 6d  /../*.** If pMem
1330: 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 77 69   is an object wi
1340: 74 68 20 61 20 76 61 6c 69 64 20 73 74 72 69 6e  th a valid strin
1350: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
1360: 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a  , this routine.*
1370: 2a 20 65 6e 73 75 72 65 73 20 74 68 65 20 69 6e  * ensures the in
1380: 74 65 72 6e 61 6c 20 65 6e 63 6f 64 69 6e 67 20  ternal encoding 
1390: 66 6f 72 20 74 68 65 20 73 74 72 69 6e 67 20 72  for the string r
13a0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
13b0: 0a 2a 2a 20 27 64 65 73 69 72 65 64 45 6e 63 27  .** 'desiredEnc'
13c0: 2c 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f  , one of SQLITE_
13d0: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46  UTF8, SQLITE_UTF
13e0: 31 36 4c 45 20 6f 72 20 53 51 4c 49 54 45 5f 55  16LE or SQLITE_U
13f0: 54 46 31 36 42 45 2e 0a 2a 2a 0a 2a 2a 20 49 66  TF16BE..**.** If
1400: 20 70 4d 65 6d 20 69 73 20 6e 6f 74 20 61 20 73   pMem is not a s
1410: 74 72 69 6e 67 20 6f 62 6a 65 63 74 2c 20 6f 72  tring object, or
1420: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
1430: 20 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20 72   the string.** r
1440: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
1450: 20 61 6c 72 65 61 64 79 20 73 74 6f 72 65 64 20   already stored 
1460: 75 73 69 6e 67 20 74 68 65 20 72 65 71 75 65 73  using the reques
1470: 74 65 64 20 65 6e 63 6f 64 69 6e 67 2c 20 74 68  ted encoding, th
1480: 65 6e 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69  en this.** routi
1490: 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  ne is a no-op..*
14a0: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4f 4b 20 69  *.** SQLITE_OK i
14b0: 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68  s returned if th
14c0: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20  e conversion is 
14d0: 73 75 63 63 65 73 73 66 75 6c 20 28 6f 72 20 6e  successful (or n
14e0: 6f 74 20 72 65 71 75 69 72 65 64 29 2e 0a 2a 2a  ot required)..**
14f0: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 6d 61   SQLITE_NOMEM ma
1500: 79 20 62 65 20 72 65 74 75 72 6e 65 64 20 69 66  y be returned if
1510: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
1520: 73 20 64 75 72 69 6e 67 20 63 6f 6e 76 65 72 73  s during convers
1530: 69 6f 6e 0a 2a 2a 20 62 65 74 77 65 65 6e 20 66  ion.** between f
1540: 6f 72 6d 61 74 73 2e 0a 2a 2f 0a 69 6e 74 20 73  ormats..*/.int s
1550: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
1560: 45 6e 63 6f 64 69 6e 67 28 4d 65 6d 20 2a 70 4d  Encoding(Mem *pM
1570: 65 6d 2c 20 69 6e 74 20 64 65 73 69 72 65 64 45  em, int desiredE
1580: 6e 63 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nc){.#ifndef SQL
1590: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
15a0: 20 69 6e 74 20 72 63 3b 0a 23 65 6e 64 69 66 0a   int rc;.#endif.
15b0: 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
15c0: 3e 66 6c 61 67 73 26 4d 45 4d 5f 52 6f 77 53 65  >flags&MEM_RowSe
15d0: 74 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  t)==0 );.  asser
15e0: 74 28 20 64 65 73 69 72 65 64 45 6e 63 3d 3d 53  t( desiredEnc==S
15f0: 51 4c 49 54 45 5f 55 54 46 38 20 7c 7c 20 64 65  QLITE_UTF8 || de
1600: 73 69 72 65 64 45 6e 63 3d 3d 53 51 4c 49 54 45  siredEnc==SQLITE
1610: 5f 55 54 46 31 36 4c 45 0a 20 20 20 20 20 20 20  _UTF16LE.       
1620: 20 20 20 20 7c 7c 20 64 65 73 69 72 65 64 45 6e      || desiredEn
1630: 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42  c==SQLITE_UTF16B
1640: 45 20 29 3b 0a 20 20 69 66 28 20 21 28 70 4d 65  E );.  if( !(pMe
1650: 6d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72  m->flags&MEM_Str
1660: 29 20 7c 7c 20 70 4d 65 6d 2d 3e 65 6e 63 3d 3d  ) || pMem->enc==
1670: 64 65 73 69 72 65 64 45 6e 63 20 29 7b 0a 20 20  desiredEnc ){.  
1680: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1690: 4f 4b 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  OK;.  }.  assert
16a0: 28 20 70 4d 65 6d 2d 3e 64 62 3d 3d 30 20 7c 7c  ( pMem->db==0 ||
16b0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
16c0: 65 6c 64 28 70 4d 65 6d 2d 3e 64 62 2d 3e 6d 75  eld(pMem->db->mu
16d0: 74 65 78 29 20 29 3b 0a 23 69 66 64 65 66 20 53  tex) );.#ifdef S
16e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
16f0: 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
1700: 5f 45 52 52 4f 52 3b 0a 23 65 6c 73 65 0a 0a 20  _ERROR;.#else.. 
1710: 20 2f 2a 20 4d 65 6d 54 72 61 6e 73 6c 61 74 65   /* MemTranslate
1720: 28 29 20 6d 61 79 20 72 65 74 75 72 6e 20 53 51  () may return SQ
1730: 4c 49 54 45 5f 4f 4b 20 6f 72 20 53 51 4c 49 54  LITE_OK or SQLIT
1740: 45 5f 4e 4f 4d 45 4d 2e 20 49 66 20 4e 4f 4d 45  E_NOMEM. If NOME
1750: 4d 20 69 73 20 72 65 74 75 72 6e 65 64 2c 0a 20  M is returned,. 
1760: 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 65 6e 63   ** then the enc
1770: 6f 64 69 6e 67 20 6f 66 20 74 68 65 20 76 61 6c  oding of the val
1780: 75 65 20 6d 61 79 20 6e 6f 74 20 68 61 76 65 20  ue may not have 
1790: 63 68 61 6e 67 65 64 2e 0a 20 20 2a 2f 0a 20 20  changed..  */.  
17a0: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
17b0: 4d 65 6d 54 72 61 6e 73 6c 61 74 65 28 70 4d 65  MemTranslate(pMe
17c0: 6d 2c 20 28 75 38 29 64 65 73 69 72 65 64 45 6e  m, (u8)desiredEn
17d0: 63 29 3b 0a 20 20 61 73 73 65 72 74 28 72 63 3d  c);.  assert(rc=
17e0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 20 20 20 7c 7c  =SQLITE_OK    ||
17f0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45   rc==SQLITE_NOME
1800: 4d 29 3b 0a 20 20 61 73 73 65 72 74 28 72 63 3d  M);.  assert(rc=
1810: 3d 53 51 4c 49 54 45 5f 4f 4b 20 20 20 20 7c 7c  =SQLITE_OK    ||
1820: 20 70 4d 65 6d 2d 3e 65 6e 63 21 3d 64 65 73 69   pMem->enc!=desi
1830: 72 65 64 45 6e 63 29 3b 0a 20 20 61 73 73 65 72  redEnc);.  asser
1840: 74 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d  t(rc==SQLITE_NOM
1850: 45 4d 20 7c 7c 20 70 4d 65 6d 2d 3e 65 6e 63 3d  EM || pMem->enc=
1860: 3d 64 65 73 69 72 65 64 45 6e 63 29 3b 0a 20 20  =desiredEnc);.  
1870: 72 65 74 75 72 6e 20 72 63 3b 0a 23 65 6e 64 69  return rc;.#endi
1880: 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20  f.}../*.** Make 
1890: 73 75 72 65 20 70 4d 65 6d 2d 3e 7a 20 70 6f 69  sure pMem->z poi
18a0: 6e 74 73 20 74 6f 20 61 20 77 72 69 74 61 62 6c  nts to a writabl
18b0: 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  e allocation of 
18c0: 61 74 20 6c 65 61 73 74 20 0a 2a 2a 20 6d 69 6e  at least .** min
18d0: 28 6e 2c 33 32 29 20 62 79 74 65 73 2e 0a 2a 2a  (n,32) bytes..**
18e0: 0a 2a 2a 20 49 66 20 74 68 65 20 62 50 72 65 73  .** If the bPres
18f0: 65 72 76 65 20 61 72 67 75 6d 65 6e 74 20 69 73  erve argument is
1900: 20 74 72 75 65 2c 20 74 68 65 6e 20 63 6f 70 79   true, then copy
1910: 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   of the content 
1920: 6f 66 0a 2a 2a 20 70 4d 65 6d 2d 3e 7a 20 69 6e  of.** pMem->z in
1930: 74 6f 20 74 68 65 20 6e 65 77 20 61 6c 6c 6f 63  to the new alloc
1940: 61 74 69 6f 6e 2e 20 20 70 4d 65 6d 20 6d 75 73  ation.  pMem mus
1950: 74 20 62 65 20 65 69 74 68 65 72 20 61 20 73 74  t be either a st
1960: 72 69 6e 67 20 6f 72 0a 2a 2a 20 62 6c 6f 62 20  ring or.** blob 
1970: 69 66 20 62 50 72 65 73 65 72 76 65 20 69 73 20  if bPreserve is 
1980: 74 72 75 65 2e 20 20 49 66 20 62 50 72 65 73 65  true.  If bPrese
1990: 72 76 65 20 69 73 20 66 61 6c 73 65 2c 20 61 6e  rve is false, an
19a0: 79 20 70 72 69 6f 72 20 63 6f 6e 74 65 6e 74 0a  y prior content.
19b0: 2a 2a 20 69 6e 20 70 4d 65 6d 2d 3e 7a 20 69 73  ** in pMem->z is
19c0: 20 64 69 73 63 61 72 64 65 64 2e 0a 2a 2f 0a 53   discarded..*/.S
19d0: 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 69  QLITE_NOINLINE i
19e0: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  nt sqlite3VdbeMe
19f0: 6d 47 72 6f 77 28 4d 65 6d 20 2a 70 4d 65 6d 2c  mGrow(Mem *pMem,
1a00: 20 69 6e 74 20 6e 2c 20 69 6e 74 20 62 50 72 65   int n, int bPre
1a10: 73 65 72 76 65 29 7b 0a 20 20 61 73 73 65 72 74  serve){.  assert
1a20: 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
1a30: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
1a40: 70 4d 65 6d 29 20 29 3b 0a 20 20 61 73 73 65 72  pMem) );.  asser
1a50: 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 26  t( (pMem->flags&
1a60: 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
1a70: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4d  ;.  testcase( pM
1a80: 65 6d 2d 3e 64 62 3d 3d 30 20 29 3b 0a 0a 20 20  em->db==0 );..  
1a90: 2f 2a 20 49 66 20 74 68 65 20 62 50 72 65 73 65  /* If the bPrese
1aa0: 72 76 65 20 66 6c 61 67 20 69 73 20 73 65 74 20  rve flag is set 
1ab0: 74 6f 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68  to true, then th
1ac0: 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 6d 75  e memory cell mu
1ad0: 73 74 20 61 6c 72 65 61 64 79 0a 20 20 2a 2a 20  st already.  ** 
1ae0: 63 6f 6e 74 61 69 6e 20 61 20 76 61 6c 69 64 20  contain a valid 
1af0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 76  string or blob v
1b00: 61 6c 75 65 2e 20 20 2a 2f 0a 20 20 61 73 73 65  alue.  */.  asse
1b10: 72 74 28 20 62 50 72 65 73 65 72 76 65 3d 3d 30  rt( bPreserve==0
1b20: 20 7c 7c 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 26   || pMem->flags&
1b30: 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74  (MEM_Blob|MEM_St
1b40: 72 29 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  r) );.  testcase
1b50: 28 20 62 50 72 65 73 65 72 76 65 20 26 26 20 70  ( bPreserve && p
1b60: 4d 65 6d 2d 3e 7a 3d 3d 30 20 29 3b 0a 0a 20 20  Mem->z==0 );..  
1b70: 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 73 7a  assert( pMem->sz
1b80: 4d 61 6c 6c 6f 63 3d 3d 30 0a 20 20 20 20 20 20  Malloc==0.      
1b90: 20 7c 7c 20 70 4d 65 6d 2d 3e 73 7a 4d 61 6c 6c   || pMem->szMall
1ba0: 6f 63 3d 3d 73 71 6c 69 74 65 33 44 62 4d 61 6c  oc==sqlite3DbMal
1bb0: 6c 6f 63 53 69 7a 65 28 70 4d 65 6d 2d 3e 64 62  locSize(pMem->db
1bc0: 2c 20 70 4d 65 6d 2d 3e 7a 4d 61 6c 6c 6f 63 29  , pMem->zMalloc)
1bd0: 20 29 3b 0a 20 20 69 66 28 20 6e 3c 33 32 20 29   );.  if( n<32 )
1be0: 20 6e 20 3d 20 33 32 3b 0a 20 20 69 66 28 20 70   n = 32;.  if( p
1bf0: 4d 65 6d 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20  Mem->szMalloc>0 
1c00: 26 26 20 62 50 72 65 73 65 72 76 65 20 26 26 20  && bPreserve && 
1c10: 70 4d 65 6d 2d 3e 7a 3d 3d 70 4d 65 6d 2d 3e 7a  pMem->z==pMem->z
1c20: 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 70 4d  Malloc ){.    pM
1c30: 65 6d 2d 3e 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 4d  em->z = pMem->zM
1c40: 61 6c 6c 6f 63 20 3d 20 73 71 6c 69 74 65 33 44  alloc = sqlite3D
1c50: 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 70  bReallocOrFree(p
1c60: 4d 65 6d 2d 3e 64 62 2c 20 70 4d 65 6d 2d 3e 7a  Mem->db, pMem->z
1c70: 2c 20 6e 29 3b 0a 20 20 20 20 62 50 72 65 73 65  , n);.    bPrese
1c80: 72 76 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65  rve = 0;.  }else
1c90: 7b 0a 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e  {.    if( pMem->
1ca0: 73 7a 4d 61 6c 6c 6f 63 3e 30 20 29 20 73 71 6c  szMalloc>0 ) sql
1cb0: 69 74 65 33 44 62 46 72 65 65 4e 4e 28 70 4d 65  ite3DbFreeNN(pMe
1cc0: 6d 2d 3e 64 62 2c 20 70 4d 65 6d 2d 3e 7a 4d 61  m->db, pMem->zMa
1cd0: 6c 6c 6f 63 29 3b 0a 20 20 20 20 70 4d 65 6d 2d  lloc);.    pMem-
1ce0: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 71 6c 69 74  >zMalloc = sqlit
1cf0: 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 70 4d  e3DbMallocRaw(pM
1d00: 65 6d 2d 3e 64 62 2c 20 6e 29 3b 0a 20 20 7d 0a  em->db, n);.  }.
1d10: 20 20 69 66 28 20 70 4d 65 6d 2d 3e 7a 4d 61 6c    if( pMem->zMal
1d20: 6c 6f 63 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  loc==0 ){.    sq
1d30: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
1d40: 75 6c 6c 28 70 4d 65 6d 29 3b 0a 20 20 20 20 70  ull(pMem);.    p
1d50: 4d 65 6d 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20  Mem->z = 0;.    
1d60: 70 4d 65 6d 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d  pMem->szMalloc =
1d70: 20 30 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   0;.    return S
1d80: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
1d90: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
1da0: 4d 65 6d 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d 20  Mem->szMalloc = 
1db0: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53  sqlite3DbMallocS
1dc0: 69 7a 65 28 70 4d 65 6d 2d 3e 64 62 2c 20 70 4d  ize(pMem->db, pM
1dd0: 65 6d 2d 3e 7a 4d 61 6c 6c 6f 63 29 3b 0a 20 20  em->zMalloc);.  
1de0: 7d 0a 0a 20 20 69 66 28 20 62 50 72 65 73 65 72  }..  if( bPreser
1df0: 76 65 20 26 26 20 70 4d 65 6d 2d 3e 7a 20 29 7b  ve && pMem->z ){
1e00: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 65  .    assert( pMe
1e10: 6d 2d 3e 7a 21 3d 70 4d 65 6d 2d 3e 7a 4d 61 6c  m->z!=pMem->zMal
1e20: 6c 6f 63 20 29 3b 0a 20 20 20 20 6d 65 6d 63 70  loc );.    memcp
1e30: 79 28 70 4d 65 6d 2d 3e 7a 4d 61 6c 6c 6f 63 2c  y(pMem->zMalloc,
1e40: 20 70 4d 65 6d 2d 3e 7a 2c 20 70 4d 65 6d 2d 3e   pMem->z, pMem->
1e50: 6e 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 28 70  n);.  }.  if( (p
1e60: 4d 65 6d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44  Mem->flags&MEM_D
1e70: 79 6e 29 21 3d 30 20 29 7b 0a 20 20 20 20 61 73  yn)!=0 ){.    as
1e80: 73 65 72 74 28 20 70 4d 65 6d 2d 3e 78 44 65 6c  sert( pMem->xDel
1e90: 21 3d 30 20 26 26 20 70 4d 65 6d 2d 3e 78 44 65  !=0 && pMem->xDe
1ea0: 6c 21 3d 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49  l!=SQLITE_DYNAMI
1eb0: 43 20 29 3b 0a 20 20 20 20 70 4d 65 6d 2d 3e 78  C );.    pMem->x
1ec0: 44 65 6c 28 28 76 6f 69 64 20 2a 29 28 70 4d 65  Del((void *)(pMe
1ed0: 6d 2d 3e 7a 29 29 3b 0a 20 20 7d 0a 0a 20 20 70  m->z));.  }..  p
1ee0: 4d 65 6d 2d 3e 7a 20 3d 20 70 4d 65 6d 2d 3e 7a  Mem->z = pMem->z
1ef0: 4d 61 6c 6c 6f 63 3b 0a 20 20 70 4d 65 6d 2d 3e  Malloc;.  pMem->
1f00: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 44  flags &= ~(MEM_D
1f10: 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 7c 4d 45 4d  yn|MEM_Ephem|MEM
1f20: 5f 53 74 61 74 69 63 29 3b 0a 20 20 72 65 74 75  _Static);.  retu
1f30: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
1f40: 0a 2f 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68  ./*.** Change th
1f50: 65 20 70 4d 65 6d 2d 3e 7a 4d 61 6c 6c 6f 63 20  e pMem->zMalloc 
1f60: 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 62 65  allocation to be
1f70: 20 61 74 20 6c 65 61 73 74 20 73 7a 4e 65 77 20   at least szNew 
1f80: 62 79 74 65 73 2e 0a 2a 2a 20 49 66 20 70 4d 65  bytes..** If pMe
1f90: 6d 2d 3e 7a 4d 61 6c 6c 6f 63 20 61 6c 72 65 61  m->zMalloc alrea
1fa0: 64 79 20 6d 65 65 74 73 20 6f 72 20 65 78 63 65  dy meets or exce
1fb0: 65 64 73 20 74 68 65 20 72 65 71 75 65 73 74 65  eds the requeste
1fc0: 64 20 73 69 7a 65 2c 20 74 68 69 73 0a 2a 2a 20  d size, this.** 
1fd0: 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d  routine is a no-
1fe0: 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41 6e 79 20 70 72  op..**.** Any pr
1ff0: 69 6f 72 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  ior string or bl
2000: 6f 62 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68  ob content in th
2010: 65 20 70 4d 65 6d 20 6f 62 6a 65 63 74 20 6d 61  e pMem object ma
2020: 79 20 62 65 20 64 69 73 63 61 72 64 65 64 2e 0a  y be discarded..
2030: 2a 2a 20 54 68 65 20 70 4d 65 6d 2d 3e 78 44 65  ** The pMem->xDe
2040: 6c 20 64 65 73 74 72 75 63 74 6f 72 20 69 73 20  l destructor is 
2050: 63 61 6c 6c 65 64 2c 20 69 66 20 69 74 20 65 78  called, if it ex
2060: 69 73 74 73 2e 20 20 54 68 6f 75 67 68 20 4d 45  ists.  Though ME
2070: 4d 5f 53 74 72 0a 2a 2a 20 61 6e 64 20 4d 45 4d  M_Str.** and MEM
2080: 5f 42 6c 6f 62 20 76 61 6c 75 65 73 20 6d 61 79  _Blob values may
2090: 20 62 65 20 64 69 73 63 61 72 64 65 64 2c 20 4d   be discarded, M
20a0: 45 4d 5f 49 6e 74 2c 20 4d 45 4d 5f 52 65 61 6c  EM_Int, MEM_Real
20b0: 2c 20 61 6e 64 20 4d 45 4d 5f 4e 75 6c 6c 0a 2a  , and MEM_Null.*
20c0: 2a 20 76 61 6c 75 65 73 20 61 72 65 20 70 72 65  * values are pre
20d0: 73 65 72 76 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 65  served..**.** Re
20e0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 6f  turn SQLITE_OK o
20f0: 6e 20 73 75 63 63 65 73 73 20 6f 72 20 61 6e 20  n success or an 
2100: 65 72 72 6f 72 20 63 6f 64 65 20 28 70 72 6f 62  error code (prob
2110: 61 62 6c 79 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  ably SQLITE_NOME
2120: 4d 29 0a 2a 2a 20 69 66 20 75 6e 61 62 6c 65 20  M).** if unable 
2130: 74 6f 20 63 6f 6d 70 6c 65 74 65 20 74 68 65 20  to complete the 
2140: 72 65 73 69 7a 69 6e 67 2e 0a 2a 2f 0a 69 6e 74  resizing..*/.int
2150: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
2160: 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 4d 65  learAndResize(Me
2170: 6d 20 2a 70 4d 65 6d 2c 20 69 6e 74 20 73 7a 4e  m *pMem, int szN
2180: 65 77 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73  ew){.  assert( s
2190: 7a 4e 65 77 3e 30 20 29 3b 0a 20 20 61 73 73 65  zNew>0 );.  asse
21a0: 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
21b0: 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 7c   & MEM_Dyn)==0 |
21c0: 7c 20 70 4d 65 6d 2d 3e 73 7a 4d 61 6c 6c 6f 63  | pMem->szMalloc
21d0: 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4d 65  ==0 );.  if( pMe
21e0: 6d 2d 3e 73 7a 4d 61 6c 6c 6f 63 3c 73 7a 4e 65  m->szMalloc<szNe
21f0: 77 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  w ){.    return 
2200: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
2210: 6f 77 28 70 4d 65 6d 2c 20 73 7a 4e 65 77 2c 20  ow(pMem, szNew, 
2220: 30 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  0);.  }.  assert
2230: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
2240: 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a   MEM_Dyn)==0 );.
2250: 20 20 70 4d 65 6d 2d 3e 7a 20 3d 20 70 4d 65 6d    pMem->z = pMem
2260: 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 70 4d 65  ->zMalloc;.  pMe
2270: 6d 2d 3e 66 6c 61 67 73 20 26 3d 20 28 4d 45 4d  m->flags &= (MEM
2280: 5f 4e 75 6c 6c 7c 4d 45 4d 5f 49 6e 74 7c 4d 45  _Null|MEM_Int|ME
2290: 4d 5f 52 65 61 6c 29 3b 0a 20 20 72 65 74 75 72  M_Real);.  retur
22a0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a  n SQLITE_OK;.}..
22b0: 2f 2a 0a 2a 2a 20 49 74 20 69 73 20 61 6c 72 65  /*.** It is alre
22c0: 61 64 79 20 6b 6e 6f 77 6e 20 74 68 61 74 20 70  ady known that p
22d0: 4d 65 6d 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20  Mem contains an 
22e0: 75 6e 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72  unterminated str
22f0: 69 6e 67 2e 0a 2a 2a 20 41 64 64 20 74 68 65 20  ing..** Add the 
2300: 7a 65 72 6f 20 74 65 72 6d 69 6e 61 74 6f 72 2e  zero terminator.
2310: 0a 2a 2f 0a 73 74 61 74 69 63 20 53 51 4c 49 54  .*/.static SQLIT
2320: 45 5f 4e 4f 49 4e 4c 49 4e 45 20 69 6e 74 20 76  E_NOINLINE int v
2330: 64 62 65 4d 65 6d 41 64 64 54 65 72 6d 69 6e 61  dbeMemAddTermina
2340: 74 6f 72 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a  tor(Mem *pMem){.
2350: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
2360: 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 70  eMemGrow(pMem, p
2370: 4d 65 6d 2d 3e 6e 2b 32 2c 20 31 29 20 29 7b 0a  Mem->n+2, 1) ){.
2380: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
2390: 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20  E_NOMEM_BKPT;.  
23a0: 7d 0a 20 20 70 4d 65 6d 2d 3e 7a 5b 70 4d 65 6d  }.  pMem->z[pMem
23b0: 2d 3e 6e 5d 20 3d 20 30 3b 0a 20 20 70 4d 65 6d  ->n] = 0;.  pMem
23c0: 2d 3e 7a 5b 70 4d 65 6d 2d 3e 6e 2b 31 5d 20 3d  ->z[pMem->n+1] =
23d0: 20 30 3b 0a 20 20 70 4d 65 6d 2d 3e 66 6c 61 67   0;.  pMem->flag
23e0: 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20  s |= MEM_Term;. 
23f0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
2400: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 61 6e  K;.}../*.** Chan
2410: 67 65 20 70 4d 65 6d 20 73 6f 20 74 68 61 74 20  ge pMem so that 
2420: 69 74 73 20 4d 45 4d 5f 53 74 72 20 6f 72 20 4d  its MEM_Str or M
2430: 45 4d 5f 42 6c 6f 62 20 76 61 6c 75 65 20 69 73  EM_Blob value is
2440: 20 73 74 6f 72 65 64 20 69 6e 0a 2a 2a 20 4d 45   stored in.** ME
2450: 4d 2e 7a 4d 61 6c 6c 6f 63 2c 20 77 68 65 72 65  M.zMalloc, where
2460: 20 69 74 20 63 61 6e 20 62 65 20 73 61 66 65 6c   it can be safel
2470: 79 20 77 72 69 74 74 65 6e 2e 0a 2a 2a 0a 2a 2a  y written..**.**
2480: 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   Return SQLITE_O
2490: 4b 20 6f 6e 20 73 75 63 63 65 73 73 20 6f 72 20  K on success or 
24a0: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 69 66 20  SQLITE_NOMEM if 
24b0: 6d 61 6c 6c 6f 63 20 66 61 69 6c 73 2e 0a 2a 2f  malloc fails..*/
24c0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
24d0: 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65  MemMakeWriteable
24e0: 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 61  (Mem *pMem){.  a
24f0: 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 64 62 3d  ssert( pMem->db=
2500: 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f 6d 75  =0 || sqlite3_mu
2510: 74 65 78 5f 68 65 6c 64 28 70 4d 65 6d 2d 3e 64  tex_held(pMem->d
2520: 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 61  b->mutex) );.  a
2530: 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
2540: 61 67 73 26 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  ags&MEM_RowSet)=
2550: 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 4d 65  =0 );.  if( (pMe
2560: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
2570: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 21 3d  Str|MEM_Blob))!=
2580: 30 20 29 7b 0a 20 20 20 20 69 66 28 20 45 78 70  0 ){.    if( Exp
2590: 61 6e 64 42 6c 6f 62 28 70 4d 65 6d 29 20 29 20  andBlob(pMem) ) 
25a0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f  return SQLITE_NO
25b0: 4d 45 4d 3b 0a 20 20 20 20 69 66 28 20 70 4d 65  MEM;.    if( pMe
25c0: 6d 2d 3e 73 7a 4d 61 6c 6c 6f 63 3d 3d 30 20 7c  m->szMalloc==0 |
25d0: 7c 20 70 4d 65 6d 2d 3e 7a 21 3d 70 4d 65 6d 2d  | pMem->z!=pMem-
25e0: 3e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20  >zMalloc ){.    
25f0: 20 20 69 6e 74 20 72 63 20 3d 20 76 64 62 65 4d    int rc = vdbeM
2600: 65 6d 41 64 64 54 65 72 6d 69 6e 61 74 6f 72 28  emAddTerminator(
2610: 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28  pMem);.      if(
2620: 20 72 63 20 29 20 72 65 74 75 72 6e 20 72 63 3b   rc ) return rc;
2630: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4d 65  .    }.  }.  pMe
2640: 6d 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d  m->flags &= ~MEM
2650: 5f 45 70 68 65 6d 3b 0a 23 69 66 64 65 66 20 53  _Ephem;.#ifdef S
2660: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 4d  QLITE_DEBUG.  pM
2670: 65 6d 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d  em->pScopyFrom =
2680: 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 72 65   0;.#endif..  re
2690: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
26a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  }../*.** If the 
26b0: 67 69 76 65 6e 20 4d 65 6d 2a 20 68 61 73 20 61  given Mem* has a
26c0: 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69   zero-filled tai
26d0: 6c 2c 20 74 75 72 6e 20 69 74 20 69 6e 74 6f 20  l, turn it into 
26e0: 61 6e 20 6f 72 64 69 6e 61 72 79 0a 2a 2a 20 62  an ordinary.** b
26f0: 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 64 79  lob stored in dy
2700: 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
2710: 74 65 64 20 73 70 61 63 65 2e 0a 2a 2f 0a 23 69  ted space..*/.#i
2720: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2730: 54 5f 49 4e 43 52 42 4c 4f 42 0a 69 6e 74 20 73  T_INCRBLOB.int s
2740: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
2750: 61 6e 64 42 6c 6f 62 28 4d 65 6d 20 2a 70 4d 65  andBlob(Mem *pMe
2760: 6d 29 7b 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b  m){.  int nByte;
2770: 0a 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d 2d  .  assert( pMem-
2780: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
2790: 6f 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  o );.  assert( p
27a0: 4d 65 6d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 42  Mem->flags&MEM_B
27b0: 6c 6f 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  lob );.  assert(
27c0: 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 26 4d 45   (pMem->flags&ME
27d0: 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 3b 0a  M_RowSet)==0 );.
27e0: 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e    assert( pMem->
27f0: 64 62 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33  db==0 || sqlite3
2800: 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 4d 65 6d  _mutex_held(pMem
2810: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a  ->db->mutex) );.
2820: 0a 20 20 2f 2a 20 53 65 74 20 6e 42 79 74 65 20  .  /* Set nByte 
2830: 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
2840: 20 62 79 74 65 73 20 72 65 71 75 69 72 65 64 20   bytes required 
2850: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 65 78 70  to store the exp
2860: 61 6e 64 65 64 20 62 6c 6f 62 2e 20 2a 2f 0a 20  anded blob. */. 
2870: 20 6e 42 79 74 65 20 3d 20 70 4d 65 6d 2d 3e 6e   nByte = pMem->n
2880: 20 2b 20 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f   + pMem->u.nZero
2890: 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3c 3d 30  ;.  if( nByte<=0
28a0: 20 29 7b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20   ){.    nByte = 
28b0: 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  1;.  }.  if( sql
28c0: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
28d0: 70 4d 65 6d 2c 20 6e 42 79 74 65 2c 20 31 29 20  pMem, nByte, 1) 
28e0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
28f0: 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b  LITE_NOMEM_BKPT;
2900: 0a 20 20 7d 0a 0a 20 20 6d 65 6d 73 65 74 28 26  .  }..  memset(&
2910: 70 4d 65 6d 2d 3e 7a 5b 70 4d 65 6d 2d 3e 6e 5d  pMem->z[pMem->n]
2920: 2c 20 30 2c 20 70 4d 65 6d 2d 3e 75 2e 6e 5a 65  , 0, pMem->u.nZe
2930: 72 6f 29 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 20 2b  ro);.  pMem->n +
2940: 3d 20 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 3b  = pMem->u.nZero;
2950: 0a 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  .  pMem->flags &
2960: 3d 20 7e 28 4d 45 4d 5f 5a 65 72 6f 7c 4d 45 4d  = ~(MEM_Zero|MEM
2970: 5f 54 65 72 6d 29 3b 0a 20 20 72 65 74 75 72 6e  _Term);.  return
2980: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65   SQLITE_OK;.}.#e
2990: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65  ndif../*.** Make
29a0: 20 73 75 72 65 20 74 68 65 20 67 69 76 65 6e 20   sure the given 
29b0: 4d 65 6d 20 69 73 20 5c 75 30 30 30 30 20 74 65  Mem is \u0000 te
29c0: 72 6d 69 6e 61 74 65 64 2e 0a 2a 2f 0a 69 6e 74  rminated..*/.int
29d0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
29e0: 75 6c 54 65 72 6d 69 6e 61 74 65 28 4d 65 6d 20  ulTerminate(Mem 
29f0: 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65 72 74  *pMem){.  assert
2a00: 28 20 70 4d 65 6d 2d 3e 64 62 3d 3d 30 20 7c 7c  ( pMem->db==0 ||
2a10: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
2a20: 65 6c 64 28 70 4d 65 6d 2d 3e 64 62 2d 3e 6d 75  eld(pMem->db->mu
2a30: 74 65 78 29 20 29 3b 0a 20 20 74 65 73 74 63 61  tex) );.  testca
2a40: 73 65 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  se( (pMem->flags
2a50: 20 26 20 28 4d 45 4d 5f 54 65 72 6d 7c 4d 45 4d   & (MEM_Term|MEM
2a60: 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 54 65 72  _Str))==(MEM_Ter
2a70: 6d 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20  m|MEM_Str) );.  
2a80: 74 65 73 74 63 61 73 65 28 20 28 70 4d 65 6d 2d  testcase( (pMem-
2a90: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 54 65  >flags & (MEM_Te
2aa0: 72 6d 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 30 20  rm|MEM_Str))==0 
2ab0: 29 3b 0a 20 20 69 66 28 20 28 70 4d 65 6d 2d 3e  );.  if( (pMem->
2ac0: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 54 65 72  flags & (MEM_Ter
2ad0: 6d 7c 4d 45 4d 5f 53 74 72 29 29 21 3d 4d 45 4d  m|MEM_Str))!=MEM
2ae0: 5f 53 74 72 20 29 7b 0a 20 20 20 20 72 65 74 75  _Str ){.    retu
2af0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20  rn SQLITE_OK;   
2b00: 2f 2a 20 4e 6f 74 68 69 6e 67 20 74 6f 20 64 6f  /* Nothing to do
2b10: 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
2b20: 20 72 65 74 75 72 6e 20 76 64 62 65 4d 65 6d 41   return vdbeMemA
2b30: 64 64 54 65 72 6d 69 6e 61 74 6f 72 28 70 4d 65  ddTerminator(pMe
2b40: 6d 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  m);.  }.}../*.**
2b50: 20 41 64 64 20 4d 45 4d 5f 53 74 72 20 74 6f 20   Add MEM_Str to 
2b60: 74 68 65 20 73 65 74 20 6f 66 20 72 65 70 72 65  the set of repre
2b70: 73 65 6e 74 61 74 69 6f 6e 73 20 66 6f 72 20 74  sentations for t
2b80: 68 65 20 67 69 76 65 6e 20 4d 65 6d 2e 20 20 4e  he given Mem.  N
2b90: 75 6d 62 65 72 73 0a 2a 2a 20 61 72 65 20 63 6f  umbers.** are co
2ba0: 6e 76 65 72 74 65 64 20 75 73 69 6e 67 20 73 71  nverted using sq
2bb0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 29  lite3_snprintf()
2bc0: 2e 20 20 43 6f 6e 76 65 72 74 69 6e 67 20 61 20  .  Converting a 
2bd0: 42 4c 4f 42 20 74 6f 20 61 20 73 74 72 69 6e 67  BLOB to a string
2be0: 0a 2a 2a 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a  .** is a no-op..
2bf0: 2a 2a 0a 2a 2a 20 45 78 69 73 74 69 6e 67 20 72  **.** Existing r
2c00: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 73 20 4d  epresentations M
2c10: 45 4d 5f 49 6e 74 20 61 6e 64 20 4d 45 4d 5f 52  EM_Int and MEM_R
2c20: 65 61 6c 20 61 72 65 20 69 6e 76 61 6c 69 64 61  eal are invalida
2c30: 74 65 64 20 69 66 0a 2a 2a 20 62 46 6f 72 63 65  ted if.** bForce
2c40: 20 69 73 20 74 72 75 65 20 62 75 74 20 61 72 65   is true but are
2c50: 20 72 65 74 61 69 6e 65 64 20 69 66 20 62 46 6f   retained if bFo
2c60: 72 63 65 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a  rce is false..**
2c70: 0a 2a 2a 20 41 20 4d 45 4d 5f 4e 75 6c 6c 20 76  .** A MEM_Null v
2c80: 61 6c 75 65 20 77 69 6c 6c 20 6e 65 76 65 72 20  alue will never 
2c90: 62 65 20 70 61 73 73 65 64 20 74 6f 20 74 68 69  be passed to thi
2ca0: 73 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73  s function. This
2cb0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 0a 2a 2a 20   function is.** 
2cc0: 75 73 65 64 20 66 6f 72 20 63 6f 6e 76 65 72 74  used for convert
2cd0: 69 6e 67 20 76 61 6c 75 65 73 20 74 6f 20 74 65  ing values to te
2ce0: 78 74 20 66 6f 72 20 72 65 74 75 72 6e 69 6e 67  xt for returning
2cf0: 20 74 6f 20 74 68 65 20 75 73 65 72 20 28 69 2e   to the user (i.
2d00: 65 2e 20 76 69 61 0a 2a 2a 20 73 71 6c 69 74 65  e. via.** sqlite
2d10: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 29 29 2c  3_value_text()),
2d20: 20 6f 72 20 66 6f 72 20 65 6e 73 75 72 69 6e 67   or for ensuring
2d30: 20 74 68 61 74 20 76 61 6c 75 65 73 20 74 6f 20   that values to 
2d40: 62 65 20 75 73 65 64 20 61 73 20 62 74 72 65 65  be used as btree
2d50: 0a 2a 2a 20 6b 65 79 73 20 61 72 65 20 73 74 72  .** keys are str
2d60: 69 6e 67 73 2e 20 49 6e 20 74 68 65 20 66 6f 72  ings. In the for
2d70: 6d 65 72 20 63 61 73 65 20 61 20 4e 55 4c 4c 20  mer case a NULL 
2d80: 70 6f 69 6e 74 65 72 20 69 73 20 72 65 74 75 72  pointer is retur
2d90: 6e 65 64 20 74 68 65 0a 2a 2a 20 75 73 65 72 20  ned the.** user 
2da0: 61 6e 64 20 74 68 65 20 6c 61 74 74 65 72 20 69  and the latter i
2db0: 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 20 70 72  s an internal pr
2dc0: 6f 67 72 61 6d 6d 69 6e 67 20 65 72 72 6f 72 2e  ogramming error.
2dd0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  .*/.int sqlite3V
2de0: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
2df0: 4d 65 6d 20 2a 70 4d 65 6d 2c 20 75 38 20 65 6e  Mem *pMem, u8 en
2e00: 63 2c 20 75 38 20 62 46 6f 72 63 65 29 7b 0a 20  c, u8 bForce){. 
2e10: 20 69 6e 74 20 66 67 20 3d 20 70 4d 65 6d 2d 3e   int fg = pMem->
2e20: 66 6c 61 67 73 3b 0a 20 20 63 6f 6e 73 74 20 69  flags;.  const i
2e30: 6e 74 20 6e 42 79 74 65 20 3d 20 33 32 3b 0a 0a  nt nByte = 32;..
2e40: 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e    assert( pMem->
2e50: 64 62 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33  db==0 || sqlite3
2e60: 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 4d 65 6d  _mutex_held(pMem
2e70: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a  ->db->mutex) );.
2e80: 20 20 61 73 73 65 72 74 28 20 21 28 66 67 26 4d    assert( !(fg&M
2e90: 45 4d 5f 5a 65 72 6f 29 20 29 3b 0a 20 20 61 73  EM_Zero) );.  as
2ea0: 73 65 72 74 28 20 21 28 66 67 26 28 4d 45 4d 5f  sert( !(fg&(MEM_
2eb0: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 20 29  Str|MEM_Blob)) )
2ec0: 3b 0a 20 20 61 73 73 65 72 74 28 20 66 67 26 28  ;.  assert( fg&(
2ed0: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
2ee0: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  ) );.  assert( (
2ef0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pMem->flags&MEM_
2f00: 52 6f 77 53 65 74 29 3d 3d 30 20 29 3b 0a 20 20  RowSet)==0 );.  
2f10: 61 73 73 65 72 74 28 20 45 49 47 48 54 5f 42 59  assert( EIGHT_BY
2f20: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 70 4d 65  TE_ALIGNMENT(pMe
2f30: 6d 29 20 29 3b 0a 0a 0a 20 20 69 66 28 20 73 71  m) );...  if( sq
2f40: 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61  lite3VdbeMemClea
2f50: 72 41 6e 64 52 65 73 69 7a 65 28 70 4d 65 6d 2c  rAndResize(pMem,
2f60: 20 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20 70   nByte) ){.    p
2f70: 4d 65 6d 2d 3e 65 6e 63 20 3d 20 30 3b 0a 20 20  Mem->enc = 0;.  
2f80: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
2f90: 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 7d 0a  NOMEM_BKPT;.  }.
2fa0: 0a 20 20 2f 2a 20 46 6f 72 20 61 20 52 65 61 6c  .  /* For a Real
2fb0: 20 6f 72 20 49 6e 74 65 67 65 72 2c 20 75 73 65   or Integer, use
2fc0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
2fd0: 66 28 29 20 74 6f 20 70 72 6f 64 75 63 65 20 74  f() to produce t
2fe0: 68 65 20 55 54 46 2d 38 0a 20 20 2a 2a 20 73 74  he UTF-8.  ** st
2ff0: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
3000: 69 6f 6e 20 6f 66 20 74 68 65 20 76 61 6c 75 65  ion of the value
3010: 2e 20 54 68 65 6e 2c 20 69 66 20 74 68 65 20 72  . Then, if the r
3020: 65 71 75 69 72 65 64 20 65 6e 63 6f 64 69 6e 67  equired encoding
3030: 0a 20 20 2a 2a 20 69 73 20 55 54 46 2d 31 36 6c  .  ** is UTF-16l
3040: 65 20 6f 72 20 55 54 46 2d 31 36 62 65 20 64 6f  e or UTF-16be do
3050: 20 61 20 74 72 61 6e 73 6c 61 74 69 6f 6e 2e 0a   a translation..
3060: 20 20 2a 2a 20 0a 20 20 2a 2a 20 46 49 58 20 4d    ** .  ** FIX M
3070: 45 3a 20 49 74 20 77 6f 75 6c 64 20 62 65 20 62  E: It would be b
3080: 65 74 74 65 72 20 69 66 20 73 71 6c 69 74 65 33  etter if sqlite3
3090: 5f 73 6e 70 72 69 6e 74 66 28 29 20 63 6f 75 6c  _snprintf() coul
30a0: 64 20 64 6f 20 55 54 46 2d 31 36 2e 0a 20 20 2a  d do UTF-16..  *
30b0: 2f 0a 20 20 69 66 28 20 66 67 20 26 20 4d 45 4d  /.  if( fg & MEM
30c0: 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69  _Int ){.    sqli
30d0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 6e 42 79  te3_snprintf(nBy
30e0: 74 65 2c 20 70 4d 65 6d 2d 3e 7a 2c 20 22 25 6c  te, pMem->z, "%l
30f0: 6c 64 22 2c 20 70 4d 65 6d 2d 3e 75 2e 69 29 3b  ld", pMem->u.i);
3100: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
3110: 73 65 72 74 28 20 66 67 20 26 20 4d 45 4d 5f 52  sert( fg & MEM_R
3120: 65 61 6c 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  eal );.    sqlit
3130: 65 33 5f 73 6e 70 72 69 6e 74 66 28 6e 42 79 74  e3_snprintf(nByt
3140: 65 2c 20 70 4d 65 6d 2d 3e 7a 2c 20 22 25 21 2e  e, pMem->z, "%!.
3150: 31 35 67 22 2c 20 70 4d 65 6d 2d 3e 75 2e 72 29  15g", pMem->u.r)
3160: 3b 0a 20 20 7d 0a 20 20 70 4d 65 6d 2d 3e 6e 20  ;.  }.  pMem->n 
3170: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
3180: 30 28 70 4d 65 6d 2d 3e 7a 29 3b 0a 20 20 70 4d  0(pMem->z);.  pM
3190: 65 6d 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  em->enc = SQLITE
31a0: 5f 55 54 46 38 3b 0a 20 20 70 4d 65 6d 2d 3e 66  _UTF8;.  pMem->f
31b0: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 72 7c  lags |= MEM_Str|
31c0: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 69 66 28 20  MEM_Term;.  if( 
31d0: 62 46 6f 72 63 65 20 29 20 70 4d 65 6d 2d 3e 66  bForce ) pMem->f
31e0: 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e  lags &= ~(MEM_In
31f0: 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 73  t|MEM_Real);.  s
3200: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
3210: 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65  Encoding(pMem, e
3220: 6e 63 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51  nc);.  return SQ
3230: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a  LITE_OK;.}../*.*
3240: 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 4d  * Memory cell pM
3250: 65 6d 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  em contains the 
3260: 63 6f 6e 74 65 78 74 20 6f 66 20 61 6e 20 61 67  context of an ag
3270: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
3280: 2e 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  ..** This routin
3290: 65 20 63 61 6c 6c 73 20 74 68 65 20 66 69 6e 61  e calls the fina
32a0: 6c 69 7a 65 20 6d 65 74 68 6f 64 20 66 6f 72 20  lize method for 
32b0: 74 68 61 74 20 66 75 6e 63 74 69 6f 6e 2e 20 20  that function.  
32c0: 54 68 65 0a 2a 2a 20 72 65 73 75 6c 74 20 6f 66  The.** result of
32d0: 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 69   the aggregate i
32e0: 73 20 73 74 6f 72 65 64 20 62 61 63 6b 20 69 6e  s stored back in
32f0: 74 6f 20 70 4d 65 6d 2e 0a 2a 2a 0a 2a 2a 20 52  to pMem..**.** R
3300: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
3310: 4f 52 20 69 66 20 74 68 65 20 66 69 6e 61 6c 69  OR if the finali
3320: 7a 65 72 20 72 65 70 6f 72 74 73 20 61 6e 20 65  zer reports an e
3330: 72 72 6f 72 2e 20 20 53 51 4c 49 54 45 5f 4f 4b  rror.  SQLITE_OK
3340: 0a 2a 2a 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a  .** otherwise..*
3350: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  /.int sqlite3Vdb
3360: 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 4d 65 6d  eMemFinalize(Mem
3370: 20 2a 70 4d 65 6d 2c 20 46 75 6e 63 44 65 66 20   *pMem, FuncDef 
3380: 2a 70 46 75 6e 63 29 7b 0a 20 20 73 71 6c 69 74  *pFunc){.  sqlit
3390: 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a  e3_context ctx;.
33a0: 20 20 4d 65 6d 20 74 3b 0a 20 20 61 73 73 65 72    Mem t;.  asser
33b0: 74 28 20 70 46 75 6e 63 21 3d 30 20 29 3b 0a 20  t( pFunc!=0 );. 
33c0: 20 61 73 73 65 72 74 28 20 70 46 75 6e 63 2d 3e   assert( pFunc->
33d0: 78 46 69 6e 61 6c 69 7a 65 21 3d 30 20 29 3b 0a  xFinalize!=0 );.
33e0: 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
33f0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
3400: 6c 29 21 3d 30 20 7c 7c 20 70 46 75 6e 63 3d 3d  l)!=0 || pFunc==
3410: 70 4d 65 6d 2d 3e 75 2e 70 44 65 66 20 29 3b 0a  pMem->u.pDef );.
3420: 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e    assert( pMem->
3430: 64 62 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33  db==0 || sqlite3
3440: 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 4d 65 6d  _mutex_held(pMem
3450: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a  ->db->mutex) );.
3460: 20 20 6d 65 6d 73 65 74 28 26 63 74 78 2c 20 30    memset(&ctx, 0
3470: 2c 20 73 69 7a 65 6f 66 28 63 74 78 29 29 3b 0a  , sizeof(ctx));.
3480: 20 20 6d 65 6d 73 65 74 28 26 74 2c 20 30 2c 20    memset(&t, 0, 
3490: 73 69 7a 65 6f 66 28 74 29 29 3b 0a 20 20 74 2e  sizeof(t));.  t.
34a0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
34b0: 3b 0a 20 20 74 2e 64 62 20 3d 20 70 4d 65 6d 2d  ;.  t.db = pMem-
34c0: 3e 64 62 3b 0a 20 20 63 74 78 2e 70 4f 75 74 20  >db;.  ctx.pOut 
34d0: 3d 20 26 74 3b 0a 20 20 63 74 78 2e 70 4d 65 6d  = &t;.  ctx.pMem
34e0: 20 3d 20 70 4d 65 6d 3b 0a 20 20 63 74 78 2e 70   = pMem;.  ctx.p
34f0: 46 75 6e 63 20 3d 20 70 46 75 6e 63 3b 0a 20 20  Func = pFunc;.  
3500: 70 46 75 6e 63 2d 3e 78 46 69 6e 61 6c 69 7a 65  pFunc->xFinalize
3510: 28 26 63 74 78 29 3b 20 2f 2a 20 49 4d 50 3a 20  (&ctx); /* IMP: 
3520: 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f  R-24505-23230 */
3530: 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d  .  assert( (pMem
3540: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79  ->flags & MEM_Dy
3550: 6e 29 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  n)==0 );.  if( p
3560: 4d 65 6d 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20  Mem->szMalloc>0 
3570: 29 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e  ) sqlite3DbFreeN
3580: 4e 28 70 4d 65 6d 2d 3e 64 62 2c 20 70 4d 65 6d  N(pMem->db, pMem
3590: 2d 3e 7a 4d 61 6c 6c 6f 63 29 3b 0a 20 20 6d 65  ->zMalloc);.  me
35a0: 6d 63 70 79 28 70 4d 65 6d 2c 20 26 74 2c 20 73  mcpy(pMem, &t, s
35b0: 69 7a 65 6f 66 28 74 29 29 3b 0a 20 20 72 65 74  izeof(t));.  ret
35c0: 75 72 6e 20 63 74 78 2e 69 73 45 72 72 6f 72 3b  urn ctx.isError;
35d0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4d 65 6d 6f 72 79  .}../*.** Memory
35e0: 20 63 65 6c 6c 20 70 41 63 63 75 6d 20 63 6f 6e   cell pAccum con
35f0: 74 61 69 6e 73 20 74 68 65 20 63 6f 6e 74 65 78  tains the contex
3600: 74 20 6f 66 20 61 6e 20 61 67 67 72 65 67 61 74  t of an aggregat
3610: 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 20 54  e function..** T
3620: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 61 6c 6c  his routine call
3630: 73 20 74 68 65 20 78 56 61 6c 75 65 20 6d 65 74  s the xValue met
3640: 68 6f 64 20 66 6f 72 20 74 68 61 74 20 66 75 6e  hod for that fun
3650: 63 74 69 6f 6e 20 61 6e 64 20 73 74 6f 72 65 73  ction and stores
3660: 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 73 20  .** the results 
3670: 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70  in memory cell p
3680: 4d 65 6d 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  Mem..**.** SQLIT
3690: 45 5f 45 52 52 4f 52 20 69 73 20 72 65 74 75 72  E_ERROR is retur
36a0: 6e 65 64 20 69 66 20 78 56 61 6c 75 65 28 29 20  ned if xValue() 
36b0: 72 65 70 6f 72 74 73 20 61 6e 20 65 72 72 6f 72  reports an error
36c0: 2e 20 53 51 4c 49 54 45 5f 4f 4b 20 0a 2a 2a 20  . SQLITE_OK .** 
36d0: 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2f 0a 23 69  otherwise..*/.#i
36e0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
36f0: 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 69 6e 74  T_WINDOWFUNC.int
3700: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41   sqlite3VdbeMemA
3710: 67 67 56 61 6c 75 65 28 4d 65 6d 20 2a 70 41 63  ggValue(Mem *pAc
3720: 63 75 6d 2c 20 4d 65 6d 20 2a 70 4f 75 74 2c 20  cum, Mem *pOut, 
3730: 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 29 7b  FuncDef *pFunc){
3740: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
3750: 78 74 20 63 74 78 3b 0a 20 20 4d 65 6d 20 74 3b  xt ctx;.  Mem t;
3760: 0a 20 20 61 73 73 65 72 74 28 20 70 46 75 6e 63  .  assert( pFunc
3770: 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
3780: 20 70 46 75 6e 63 2d 3e 78 56 61 6c 75 65 21 3d   pFunc->xValue!=
3790: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  0 );.  assert( (
37a0: 70 41 63 63 75 6d 2d 3e 66 6c 61 67 73 20 26 20  pAccum->flags & 
37b0: 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 7c 7c 20  MEM_Null)!=0 || 
37c0: 70 46 75 6e 63 3d 3d 70 41 63 63 75 6d 2d 3e 75  pFunc==pAccum->u
37d0: 2e 70 44 65 66 20 29 3b 0a 20 20 61 73 73 65 72  .pDef );.  asser
37e0: 74 28 20 70 41 63 63 75 6d 2d 3e 64 62 3d 3d 30  t( pAccum->db==0
37f0: 20 7c 7c 20 73 71 6c 69 74 65 33 5f 6d 75 74 65   || sqlite3_mute
3800: 78 5f 68 65 6c 64 28 70 41 63 63 75 6d 2d 3e 64  x_held(pAccum->d
3810: 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 6d  b->mutex) );.  m
3820: 65 6d 73 65 74 28 26 63 74 78 2c 20 30 2c 20 73  emset(&ctx, 0, s
3830: 69 7a 65 6f 66 28 63 74 78 29 29 3b 0a 20 20 6d  izeof(ctx));.  m
3840: 65 6d 73 65 74 28 26 74 2c 20 30 2c 20 73 69 7a  emset(&t, 0, siz
3850: 65 6f 66 28 74 29 29 3b 0a 20 20 74 2e 66 6c 61  eof(t));.  t.fla
3860: 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
3870: 20 74 2e 64 62 20 3d 20 70 41 63 63 75 6d 2d 3e   t.db = pAccum->
3880: 64 62 3b 0a 20 20 63 74 78 2e 70 4f 75 74 20 3d  db;.  ctx.pOut =
3890: 20 70 4f 75 74 3b 0a 20 20 63 74 78 2e 70 4d 65   pOut;.  ctx.pMe
38a0: 6d 20 3d 20 70 41 63 63 75 6d 3b 0a 20 20 63 74  m = pAccum;.  ct
38b0: 78 2e 70 46 75 6e 63 20 3d 20 70 46 75 6e 63 3b  x.pFunc = pFunc;
38c0: 0a 20 20 70 46 75 6e 63 2d 3e 78 56 61 6c 75 65  .  pFunc->xValue
38d0: 28 26 63 74 78 29 3b 0a 20 20 72 65 74 75 72 6e  (&ctx);.  return
38e0: 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 7d 0a   ctx.isError;.}.
38f0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
3900: 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43  _OMIT_WINDOWFUNC
3910: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68   */../*.** If th
3920: 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 63 6f  e memory cell co
3930: 6e 74 61 69 6e 73 20 61 20 76 61 6c 75 65 20 74  ntains a value t
3940: 68 61 74 20 6d 75 73 74 20 62 65 20 66 72 65 65  hat must be free
3950: 64 20 62 79 0a 2a 2a 20 69 6e 76 6f 6b 69 6e 67  d by.** invoking
3960: 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 63 61   the external ca
3970: 6c 6c 62 61 63 6b 20 69 6e 20 4d 65 6d 2e 78 44  llback in Mem.xD
3980: 65 6c 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f  el, then this ro
3990: 75 74 69 6e 65 0a 2a 2a 20 77 69 6c 6c 20 66 72  utine.** will fr
39a0: 65 65 20 74 68 61 74 20 76 61 6c 75 65 2e 20 20  ee that value.  
39b0: 49 74 20 61 6c 73 6f 20 73 65 74 73 20 4d 65 6d  It also sets Mem
39c0: 2e 66 6c 61 67 73 20 74 6f 20 4d 45 4d 5f 4e 75  .flags to MEM_Nu
39d0: 6c 6c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  ll..**.** This i
39e0: 73 20 61 20 68 65 6c 70 65 72 20 72 6f 75 74 69  s a helper routi
39f0: 6e 65 20 66 6f 72 20 73 71 6c 69 74 65 33 56 64  ne for sqlite3Vd
3a00: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 29 20 61  beMemSetNull() a
3a10: 6e 64 0a 2a 2a 20 66 6f 72 20 73 71 6c 69 74 65  nd.** for sqlite
3a20: 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
3a30: 29 2e 20 20 55 73 65 20 74 68 6f 73 65 20 6f 74  ).  Use those ot
3a40: 68 65 72 20 72 6f 75 74 69 6e 65 73 20 61 73 20  her routines as 
3a50: 74 68 65 0a 2a 2a 20 65 6e 74 72 79 20 70 6f 69  the.** entry poi
3a60: 6e 74 20 66 6f 72 20 72 65 6c 65 61 73 69 6e 67  nt for releasing
3a70: 20 4d 65 6d 20 72 65 73 6f 75 72 63 65 73 2e 0a   Mem resources..
3a80: 2a 2f 0a 73 74 61 74 69 63 20 53 51 4c 49 54 45  */.static SQLITE
3a90: 5f 4e 4f 49 4e 4c 49 4e 45 20 76 6f 69 64 20 76  _NOINLINE void v
3aa0: 64 62 65 4d 65 6d 43 6c 65 61 72 45 78 74 65 72  dbeMemClearExter
3ab0: 6e 41 6e 64 53 65 74 4e 75 6c 6c 28 4d 65 6d 20  nAndSetNull(Mem 
3ac0: 2a 70 29 7b 0a 20 20 61 73 73 65 72 74 28 20 70  *p){.  assert( p
3ad0: 2d 3e 64 62 3d 3d 30 20 7c 7c 20 73 71 6c 69 74  ->db==0 || sqlit
3ae0: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 2d  e3_mutex_held(p-
3af0: 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20  >db->mutex) );. 
3b00: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
3b10: 44 79 6e 61 6d 69 63 28 70 29 20 29 3b 0a 20 20  Dynamic(p) );.  
3b20: 69 66 28 20 70 2d 3e 66 6c 61 67 73 26 4d 45 4d  if( p->flags&MEM
3b30: 5f 41 67 67 20 29 7b 0a 20 20 20 20 73 71 6c 69  _Agg ){.    sqli
3b40: 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69  te3VdbeMemFinali
3b50: 7a 65 28 70 2c 20 70 2d 3e 75 2e 70 44 65 66 29  ze(p, p->u.pDef)
3b60: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
3b70: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 41 67  ->flags & MEM_Ag
3b80: 67 29 3d 3d 30 20 29 3b 0a 20 20 20 20 74 65 73  g)==0 );.    tes
3b90: 74 63 61 73 65 28 20 70 2d 3e 66 6c 61 67 73 20  tcase( p->flags 
3ba0: 26 20 4d 45 4d 5f 44 79 6e 20 29 3b 0a 20 20 7d  & MEM_Dyn );.  }
3bb0: 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 26  .  if( p->flags&
3bc0: 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 61  MEM_Dyn ){.    a
3bd0: 73 73 65 72 74 28 20 28 70 2d 3e 66 6c 61 67 73  ssert( (p->flags
3be0: 26 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20  &MEM_RowSet)==0 
3bf0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
3c00: 2d 3e 78 44 65 6c 21 3d 53 51 4c 49 54 45 5f 44  ->xDel!=SQLITE_D
3c10: 59 4e 41 4d 49 43 20 26 26 20 70 2d 3e 78 44 65  YNAMIC && p->xDe
3c20: 6c 21 3d 30 20 29 3b 0a 20 20 20 20 70 2d 3e 78  l!=0 );.    p->x
3c30: 44 65 6c 28 28 76 6f 69 64 20 2a 29 70 2d 3e 7a  Del((void *)p->z
3c40: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  );.  }else if( p
3c50: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 52 6f 77 53  ->flags&MEM_RowS
3c60: 65 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  et ){.    sqlite
3c70: 33 52 6f 77 53 65 74 43 6c 65 61 72 28 70 2d 3e  3RowSetClear(p->
3c80: 75 2e 70 52 6f 77 53 65 74 29 3b 0a 20 20 7d 65  u.pRowSet);.  }e
3c90: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3ca0: 26 4d 45 4d 5f 46 72 61 6d 65 20 29 7b 0a 20 20  &MEM_Frame ){.  
3cb0: 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
3cc0: 61 6d 65 20 3d 20 70 2d 3e 75 2e 70 46 72 61 6d  ame = p->u.pFram
3cd0: 65 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70  e;.    pFrame->p
3ce0: 50 61 72 65 6e 74 20 3d 20 70 46 72 61 6d 65 2d  Parent = pFrame-
3cf0: 3e 76 2d 3e 70 44 65 6c 46 72 61 6d 65 3b 0a 20  >v->pDelFrame;. 
3d00: 20 20 20 70 46 72 61 6d 65 2d 3e 76 2d 3e 70 44     pFrame->v->pD
3d10: 65 6c 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  elFrame = pFrame
3d20: 3b 0a 20 20 7d 0a 20 20 70 2d 3e 66 6c 61 67 73  ;.  }.  p->flags
3d30: 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 7d 0a 0a   = MEM_Null;.}..
3d40: 2f 2a 0a 2a 2a 20 52 65 6c 65 61 73 65 20 6d 65  /*.** Release me
3d50: 6d 6f 72 79 20 68 65 6c 64 20 62 79 20 74 68 65  mory held by the
3d60: 20 4d 65 6d 20 70 2c 20 62 6f 74 68 20 65 78 74   Mem p, both ext
3d70: 65 72 6e 61 6c 20 6d 65 6d 6f 72 79 20 63 6c 65  ernal memory cle
3d80: 61 72 65 64 0a 2a 2a 20 62 79 20 70 2d 3e 78 44  ared.** by p->xD
3d90: 65 6c 20 61 6e 64 20 6d 65 6d 6f 72 79 20 69 6e  el and memory in
3da0: 20 70 2d 3e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2a 0a   p->zMalloc..**.
3db0: 2a 2a 20 54 68 69 73 20 69 73 20 61 20 68 65 6c  ** This is a hel
3dc0: 70 65 72 20 72 6f 75 74 69 6e 65 20 69 6e 76 6f  per routine invo
3dd0: 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33 56 64  ked by sqlite3Vd
3de0: 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 29 20 69  beMemRelease() i
3df0: 6e 0a 2a 2a 20 74 68 65 20 75 6e 75 73 75 61 6c  n.** the unusual
3e00: 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65 72   case where ther
3e10: 65 20 72 65 61 6c 6c 79 20 69 73 20 6d 65 6d 6f  e really is memo
3e20: 72 79 20 69 6e 20 70 20 74 68 61 74 20 6e 65 65  ry in p that nee
3e30: 64 73 0a 2a 2a 20 74 6f 20 62 65 20 66 72 65 65  ds.** to be free
3e40: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 53 51 4c  d..*/.static SQL
3e50: 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 76 6f 69  ITE_NOINLINE voi
3e60: 64 20 76 64 62 65 4d 65 6d 43 6c 65 61 72 28 4d  d vdbeMemClear(M
3e70: 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 56 64  em *p){.  if( Vd
3e80: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 29 20  beMemDynamic(p) 
3e90: 29 7b 0a 20 20 20 20 76 64 62 65 4d 65 6d 43 6c  ){.    vdbeMemCl
3ea0: 65 61 72 45 78 74 65 72 6e 41 6e 64 53 65 74 4e  earExternAndSetN
3eb0: 75 6c 6c 28 70 29 3b 0a 20 20 7d 0a 20 20 69 66  ull(p);.  }.  if
3ec0: 28 20 70 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 29 7b  ( p->szMalloc ){
3ed0: 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
3ee0: 65 65 4e 4e 28 70 2d 3e 64 62 2c 20 70 2d 3e 7a  eeNN(p->db, p->z
3ef0: 4d 61 6c 6c 6f 63 29 3b 0a 20 20 20 20 70 2d 3e  Malloc);.    p->
3f00: 73 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  szMalloc = 0;.  
3f10: 7d 0a 20 20 70 2d 3e 7a 20 3d 20 30 3b 0a 7d 0a  }.  p->z = 0;.}.
3f20: 0a 2f 2a 0a 2a 2a 20 52 65 6c 65 61 73 65 20 61  ./*.** Release a
3f30: 6e 79 20 6d 65 6d 6f 72 79 20 72 65 73 6f 75 72  ny memory resour
3f40: 63 65 73 20 68 65 6c 64 20 62 79 20 74 68 65 20  ces held by the 
3f50: 4d 65 6d 2e 20 20 42 6f 74 68 20 74 68 65 20 6d  Mem.  Both the m
3f60: 65 6d 6f 72 79 20 74 68 61 74 20 69 73 0a 2a 2a  emory that is.**
3f70: 20 66 72 65 65 20 62 79 20 4d 65 6d 2e 78 44 65   free by Mem.xDe
3f80: 6c 20 61 6e 64 20 74 68 65 20 4d 65 6d 2e 7a 4d  l and the Mem.zM
3f90: 61 6c 6c 6f 63 20 61 6c 6c 6f 63 61 74 69 6f 6e  alloc allocation
3fa0: 20 61 72 65 20 66 72 65 65 64 2e 0a 2a 2a 0a 2a   are freed..**.*
3fb0: 2a 20 55 73 65 20 74 68 69 73 20 72 6f 75 74 69  * Use this routi
3fc0: 6e 65 20 70 72 69 6f 72 20 74 6f 20 63 6c 65 61  ne prior to clea
3fd0: 6e 20 75 70 20 70 72 69 6f 72 20 74 6f 20 61 62  n up prior to ab
3fe0: 61 6e 64 6f 6e 69 6e 67 20 61 20 4d 65 6d 2c 20  andoning a Mem, 
3ff0: 6f 72 20 74 6f 0a 2a 2a 20 72 65 73 65 74 20 61  or to.** reset a
4000: 20 4d 65 6d 20 62 61 63 6b 20 74 6f 20 69 74 73   Mem back to its
4010: 20 6d 69 6e 69 6d 75 6d 20 6d 65 6d 6f 72 79 20   minimum memory 
4020: 75 74 69 6c 69 7a 61 74 69 6f 6e 2e 0a 2a 2a 0a  utilization..**.
4030: 2a 2a 20 55 73 65 20 73 71 6c 69 74 65 33 56 64  ** Use sqlite3Vd
4040: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 29 20 74  beMemSetNull() t
4050: 6f 20 72 65 6c 65 61 73 65 20 6a 75 73 74 20 74  o release just t
4060: 68 65 20 4d 65 6d 2e 78 44 65 6c 20 73 70 61 63  he Mem.xDel spac
4070: 65 0a 2a 2a 20 70 72 69 6f 72 20 74 6f 20 69 6e  e.** prior to in
4080: 73 65 72 74 69 6e 67 20 6e 65 77 20 63 6f 6e 74  serting new cont
4090: 65 6e 74 20 69 6e 74 6f 20 74 68 65 20 4d 65 6d  ent into the Mem
40a0: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
40b0: 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
40c0: 4d 65 6d 20 2a 70 29 7b 0a 20 20 61 73 73 65 72  Mem *p){.  asser
40d0: 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  t( sqlite3VdbeCh
40e0: 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73  eckMemInvariants
40f0: 28 70 29 20 29 3b 0a 20 20 69 66 28 20 56 64 62  (p) );.  if( Vdb
4100: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 29 20 7c  eMemDynamic(p) |
4110: 7c 20 70 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 29 7b  | p->szMalloc ){
4120: 0a 20 20 20 20 76 64 62 65 4d 65 6d 43 6c 65 61  .    vdbeMemClea
4130: 72 28 70 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  r(p);.  }.}../*.
4140: 2a 2a 20 43 6f 6e 76 65 72 74 20 61 20 36 34 2d  ** Convert a 64-
4150: 62 69 74 20 49 45 45 45 20 64 6f 75 62 6c 65 20  bit IEEE double 
4160: 69 6e 74 6f 20 61 20 36 34 2d 62 69 74 20 73 69  into a 64-bit si
4170: 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 0a 2a 2a  gned integer..**
4180: 20 49 66 20 74 68 65 20 64 6f 75 62 6c 65 20 69   If the double i
4190: 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 20 6f  s out of range o
41a0: 66 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e 65  f a 64-bit signe
41b0: 64 20 69 6e 74 65 67 65 72 20 74 68 65 6e 0a 2a  d integer then.*
41c0: 2a 20 72 65 74 75 72 6e 20 74 68 65 20 63 6c 6f  * return the clo
41d0: 73 65 73 74 20 61 76 61 69 6c 61 62 6c 65 20 36  sest available 6
41e0: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
41f0: 65 67 65 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  eger..*/.static 
4200: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20  SQLITE_NOINLINE 
4210: 69 36 34 20 64 6f 75 62 6c 65 54 6f 49 6e 74 36  i64 doubleToInt6
4220: 34 28 64 6f 75 62 6c 65 20 72 29 7b 0a 23 69 66  4(double r){.#if
4230: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
4240: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
4250: 20 2f 2a 20 57 68 65 6e 20 66 6c 6f 61 74 69 6e   /* When floatin
4260: 67 2d 70 6f 69 6e 74 20 69 73 20 6f 6d 69 74 74  g-point is omitt
4270: 65 64 2c 20 64 6f 75 62 6c 65 20 61 6e 64 20 69  ed, double and i
4280: 6e 74 36 34 20 61 72 65 20 74 68 65 20 73 61 6d  nt64 are the sam
4290: 65 20 74 68 69 6e 67 20 2a 2f 0a 20 20 72 65 74  e thing */.  ret
42a0: 75 72 6e 20 72 3b 0a 23 65 6c 73 65 0a 20 20 2f  urn r;.#else.  /
42b0: 2a 0a 20 20 2a 2a 20 4d 61 6e 79 20 63 6f 6d 70  *.  ** Many comp
42c0: 69 6c 65 72 73 20 77 65 20 65 6e 63 6f 75 6e 74  ilers we encount
42d0: 65 72 20 64 6f 20 6e 6f 74 20 64 65 66 69 6e 65  er do not define
42e0: 20 63 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74   constants for t
42f0: 68 65 0a 20 20 2a 2a 20 6d 69 6e 69 6d 75 6d 20  he.  ** minimum 
4300: 61 6e 64 20 6d 61 78 69 6d 75 6d 20 36 34 2d 62  and maximum 64-b
4310: 69 74 20 69 6e 74 65 67 65 72 73 2c 20 6f 72 20  it integers, or 
4320: 74 68 65 79 20 64 65 66 69 6e 65 20 74 68 65 6d  they define them
4330: 0a 20 20 2a 2a 20 69 6e 63 6f 6e 73 69 73 74 65  .  ** inconsiste
4340: 6e 74 6c 79 2e 20 20 41 6e 64 20 6d 61 6e 79 20  ntly.  And many 
4350: 64 6f 20 6e 6f 74 20 75 6e 64 65 72 73 74 61 6e  do not understan
4360: 64 20 74 68 65 20 22 4c 4c 22 20 6e 6f 74 61 74  d the "LL" notat
4370: 69 6f 6e 2e 0a 20 20 2a 2a 20 53 6f 20 77 65 20  ion..  ** So we 
4380: 64 65 66 69 6e 65 20 6f 75 72 20 6f 77 6e 20 73  define our own s
4390: 74 61 74 69 63 20 63 6f 6e 73 74 61 6e 74 73 20  tatic constants 
43a0: 68 65 72 65 20 75 73 69 6e 67 20 6e 6f 74 68 69  here using nothi
43b0: 6e 67 0a 20 20 2a 2a 20 6c 61 72 67 65 72 20 74  ng.  ** larger t
43c0: 68 61 6e 20 61 20 33 32 2d 62 69 74 20 69 6e 74  han a 32-bit int
43d0: 65 67 65 72 20 63 6f 6e 73 74 61 6e 74 2e 0a 20  eger constant.. 
43e0: 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 6f 6e   */.  static con
43f0: 73 74 20 69 36 34 20 6d 61 78 49 6e 74 20 3d 20  st i64 maxInt = 
4400: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 3b 0a 20  LARGEST_INT64;. 
4410: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 36   static const i6
4420: 34 20 6d 69 6e 49 6e 74 20 3d 20 53 4d 41 4c 4c  4 minInt = SMALL
4430: 45 53 54 5f 49 4e 54 36 34 3b 0a 0a 20 20 69 66  EST_INT64;..  if
4440: 28 20 72 3c 3d 28 64 6f 75 62 6c 65 29 6d 69 6e  ( r<=(double)min
4450: 49 6e 74 20 29 7b 0a 20 20 20 20 72 65 74 75 72  Int ){.    retur
4460: 6e 20 6d 69 6e 49 6e 74 3b 0a 20 20 7d 65 6c 73  n minInt;.  }els
4470: 65 20 69 66 28 20 72 3e 3d 28 64 6f 75 62 6c 65  e if( r>=(double
4480: 29 6d 61 78 49 6e 74 20 29 7b 0a 20 20 20 20 72  )maxInt ){.    r
4490: 65 74 75 72 6e 20 6d 61 78 49 6e 74 3b 0a 20 20  eturn maxInt;.  
44a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72  }else{.    retur
44b0: 6e 20 28 69 36 34 29 72 3b 0a 20 20 7d 0a 23 65  n (i64)r;.  }.#e
44c0: 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  ndif.}../*.** Re
44d0: 74 75 72 6e 20 73 6f 6d 65 20 6b 69 6e 64 20 6f  turn some kind o
44e0: 66 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  f integer value 
44f0: 77 68 69 63 68 20 69 73 20 74 68 65 20 62 65 73  which is the bes
4500: 74 20 77 65 20 63 61 6e 20 64 6f 0a 2a 2a 20 61  t we can do.** a
4510: 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  t representing t
4520: 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 2a 70  he value that *p
4530: 4d 65 6d 20 64 65 73 63 72 69 62 65 73 20 61 73  Mem describes as
4540: 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 20   an integer..** 
4550: 49 66 20 70 4d 65 6d 20 69 73 20 61 6e 20 69 6e  If pMem is an in
4560: 74 65 67 65 72 2c 20 74 68 65 6e 20 74 68 65 20  teger, then the 
4570: 76 61 6c 75 65 20 69 73 20 65 78 61 63 74 2e 20  value is exact. 
4580: 20 49 66 20 70 4d 65 6d 20 69 73 0a 2a 2a 20 61   If pMem is.** a
4590: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20   floating-point 
45a0: 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72  then the value r
45b0: 65 74 75 72 6e 65 64 20 69 73 20 74 68 65 20 69  eturned is the i
45c0: 6e 74 65 67 65 72 20 70 61 72 74 2e 0a 2a 2a 20  nteger part..** 
45d0: 49 66 20 70 4d 65 6d 20 69 73 20 61 20 73 74 72  If pMem is a str
45e0: 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65  ing or blob, the
45f0: 6e 20 77 65 20 6d 61 6b 65 20 61 6e 20 61 74 74  n we make an att
4600: 65 6d 70 74 20 74 6f 20 63 6f 6e 76 65 72 74 0a  empt to convert.
4610: 2a 2a 20 69 74 20 69 6e 74 6f 20 61 6e 20 69 6e  ** it into an in
4620: 74 65 67 65 72 20 61 6e 64 20 72 65 74 75 72 6e  teger and return
4630: 20 74 68 61 74 2e 20 20 49 66 20 70 4d 65 6d 20   that.  If pMem 
4640: 72 65 70 72 65 73 65 6e 74 73 20 61 6e 0a 2a 2a  represents an.**
4650: 20 61 6e 20 53 51 4c 2d 4e 55 4c 4c 20 76 61 6c   an SQL-NULL val
4660: 75 65 2c 20 72 65 74 75 72 6e 20 30 2e 0a 2a 2a  ue, return 0..**
4670: 0a 2a 2a 20 49 66 20 70 4d 65 6d 20 72 65 70 72  .** If pMem repr
4680: 65 73 65 6e 74 73 20 61 20 73 74 72 69 6e 67 20  esents a string 
4690: 76 61 6c 75 65 2c 20 69 74 73 20 65 6e 63 6f 64  value, its encod
46a0: 69 6e 67 20 6d 69 67 68 74 20 62 65 20 63 68 61  ing might be cha
46b0: 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  nged..*/.static 
46c0: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20  SQLITE_NOINLINE 
46d0: 69 36 34 20 6d 65 6d 49 6e 74 56 61 6c 75 65 28  i64 memIntValue(
46e0: 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 36  Mem *pMem){.  i6
46f0: 34 20 76 61 6c 75 65 20 3d 20 30 3b 0a 20 20 73  4 value = 0;.  s
4700: 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d 65  qlite3Atoi64(pMe
4710: 6d 2d 3e 7a 2c 20 26 76 61 6c 75 65 2c 20 70 4d  m->z, &value, pM
4720: 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63  em->n, pMem->enc
4730: 29 3b 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 75  );.  return valu
4740: 65 3b 0a 7d 0a 69 36 34 20 73 71 6c 69 74 65 33  e;.}.i64 sqlite3
4750: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 4d 65 6d  VdbeIntValue(Mem
4760: 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74 20 66   *pMem){.  int f
4770: 6c 61 67 73 3b 0a 20 20 61 73 73 65 72 74 28 20  lags;.  assert( 
4780: 70 4d 65 6d 2d 3e 64 62 3d 3d 30 20 7c 7c 20 73  pMem->db==0 || s
4790: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c  qlite3_mutex_hel
47a0: 64 28 70 4d 65 6d 2d 3e 64 62 2d 3e 6d 75 74 65  d(pMem->db->mute
47b0: 78 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  x) );.  assert( 
47c0: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
47d0: 4d 45 4e 54 28 70 4d 65 6d 29 20 29 3b 0a 20 20  MENT(pMem) );.  
47e0: 66 6c 61 67 73 20 3d 20 70 4d 65 6d 2d 3e 66 6c  flags = pMem->fl
47f0: 61 67 73 3b 0a 20 20 69 66 28 20 66 6c 61 67 73  ags;.  if( flags
4800: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20   & MEM_Int ){.  
4810: 20 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 75    return pMem->u
4820: 2e 69 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  .i;.  }else if( 
4830: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
4840: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 64   ){.    return d
4850: 6f 75 62 6c 65 54 6f 49 6e 74 36 34 28 70 4d 65  oubleToInt64(pMe
4860: 6d 2d 3e 75 2e 72 29 3b 0a 20 20 7d 65 6c 73 65  m->u.r);.  }else
4870: 20 69 66 28 20 66 6c 61 67 73 20 26 20 28 4d 45   if( flags & (ME
4880: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20  M_Str|MEM_Blob) 
4890: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
48a0: 4d 65 6d 2d 3e 7a 20 7c 7c 20 70 4d 65 6d 2d 3e  Mem->z || pMem->
48b0: 6e 3d 3d 30 20 29 3b 0a 20 20 20 20 72 65 74 75  n==0 );.    retu
48c0: 72 6e 20 6d 65 6d 49 6e 74 56 61 6c 75 65 28 70  rn memIntValue(p
48d0: 4d 65 6d 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Mem);.  }else{. 
48e0: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
48f0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
4900: 20 74 68 65 20 62 65 73 74 20 72 65 70 72 65 73   the best repres
4910: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 70 4d 65 6d  entation of pMem
4920: 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 65 74   that we can get
4930: 20 69 6e 74 6f 20 61 0a 2a 2a 20 64 6f 75 62 6c   into a.** doubl
4940: 65 2e 20 20 49 66 20 70 4d 65 6d 20 69 73 20 61  e.  If pMem is a
4950: 6c 72 65 61 64 79 20 61 20 64 6f 75 62 6c 65 20  lready a double 
4960: 6f 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 72  or an integer, r
4970: 65 74 75 72 6e 20 69 74 73 0a 2a 2a 20 76 61 6c  eturn its.** val
4980: 75 65 2e 20 20 49 66 20 69 74 20 69 73 20 61 20  ue.  If it is a 
4990: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20  string or blob, 
49a0: 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  try to convert i
49b0: 74 20 74 6f 20 61 20 64 6f 75 62 6c 65 2e 0a 2a  t to a double..*
49c0: 2a 20 49 66 20 69 74 20 69 73 20 61 20 4e 55 4c  * If it is a NUL
49d0: 4c 2c 20 72 65 74 75 72 6e 20 30 2e 30 2e 0a 2a  L, return 0.0..*
49e0: 2f 0a 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f  /.static SQLITE_
49f0: 4e 4f 49 4e 4c 49 4e 45 20 64 6f 75 62 6c 65 20  NOINLINE double 
4a00: 6d 65 6d 52 65 61 6c 56 61 6c 75 65 28 4d 65 6d  memRealValue(Mem
4a10: 20 2a 70 4d 65 6d 29 7b 0a 20 20 2f 2a 20 28 64   *pMem){.  /* (d
4a20: 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20  ouble)0 In case 
4a30: 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  of SQLITE_OMIT_F
4a40: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e  LOATING_POINT...
4a50: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 76 61 6c   */.  double val
4a60: 20 3d 20 28 64 6f 75 62 6c 65 29 30 3b 0a 20 20   = (double)0;.  
4a70: 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65 6d  sqlite3AtoF(pMem
4a80: 2d 3e 7a 2c 20 26 76 61 6c 2c 20 70 4d 65 6d 2d  ->z, &val, pMem-
4a90: 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3b 0a  >n, pMem->enc);.
4aa0: 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a    return val;.}.
4ab0: 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 33 56 64  double sqlite3Vd
4ac0: 62 65 52 65 61 6c 56 61 6c 75 65 28 4d 65 6d 20  beRealValue(Mem 
4ad0: 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65 72 74  *pMem){.  assert
4ae0: 28 20 70 4d 65 6d 2d 3e 64 62 3d 3d 30 20 7c 7c  ( pMem->db==0 ||
4af0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
4b00: 65 6c 64 28 70 4d 65 6d 2d 3e 64 62 2d 3e 6d 75  eld(pMem->db->mu
4b10: 74 65 78 29 20 29 3b 0a 20 20 61 73 73 65 72 74  tex) );.  assert
4b20: 28 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  ( EIGHT_BYTE_ALI
4b30: 47 4e 4d 45 4e 54 28 70 4d 65 6d 29 20 29 3b 0a  GNMENT(pMem) );.
4b40: 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67    if( pMem->flag
4b50: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a  s & MEM_Real ){.
4b60: 20 20 20 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d      return pMem-
4b70: 3e 75 2e 72 3b 0a 20 20 7d 65 6c 73 65 20 69 66  >u.r;.  }else if
4b80: 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20  ( pMem->flags & 
4b90: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 72  MEM_Int ){.    r
4ba0: 65 74 75 72 6e 20 28 64 6f 75 62 6c 65 29 70 4d  eturn (double)pM
4bb0: 65 6d 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65  em->u.i;.  }else
4bc0: 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   if( pMem->flags
4bd0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
4be0: 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20 72 65 74  Blob) ){.    ret
4bf0: 75 72 6e 20 6d 65 6d 52 65 61 6c 56 61 6c 75 65  urn memRealValue
4c00: 28 70 4d 65 6d 29 3b 0a 20 20 7d 65 6c 73 65 7b  (pMem);.  }else{
4c10: 0a 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29  .    /* (double)
4c20: 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c  0 In case of SQL
4c30: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
4c40: 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20  G_POINT... */.  
4c50: 20 20 72 65 74 75 72 6e 20 28 64 6f 75 62 6c 65    return (double
4c60: 29 30 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  )0;.  }.}../*.**
4c70: 20 52 65 74 75 72 6e 20 31 20 69 66 20 70 4d 65   Return 1 if pMe
4c80: 6d 20 72 65 70 72 65 73 65 6e 74 73 20 74 72 75  m represents tru
4c90: 65 2c 20 61 6e 64 20 72 65 74 75 72 6e 20 30 20  e, and return 0 
4ca0: 69 66 20 70 4d 65 6d 20 72 65 70 72 65 73 65 6e  if pMem represen
4cb0: 74 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 52 65 74  ts false..** Ret
4cc0: 75 72 6e 20 74 68 65 20 76 61 6c 75 65 20 69 66  urn the value if
4cd0: 4e 75 6c 6c 20 69 66 20 70 4d 65 6d 20 69 73 20  Null if pMem is 
4ce0: 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73  NULL.  .*/.int s
4cf0: 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61  qlite3VdbeBoolea
4d00: 6e 56 61 6c 75 65 28 4d 65 6d 20 2a 70 4d 65 6d  nValue(Mem *pMem
4d10: 2c 20 69 6e 74 20 69 66 4e 75 6c 6c 29 7b 0a 20  , int ifNull){. 
4d20: 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   if( pMem->flags
4d30: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 20 72 65 74   & MEM_Int ) ret
4d40: 75 72 6e 20 70 4d 65 6d 2d 3e 75 2e 69 21 3d 30  urn pMem->u.i!=0
4d50: 3b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c  ;.  if( pMem->fl
4d60: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
4d70: 20 72 65 74 75 72 6e 20 69 66 4e 75 6c 6c 3b 0a   return ifNull;.
4d80: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
4d90: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 4d  VdbeRealValue(pM
4da0: 65 6d 29 21 3d 30 2e 30 3b 0a 7d 0a 0a 2f 2a 0a  em)!=0.0;.}../*.
4db0: 2a 2a 20 54 68 65 20 4d 45 4d 20 73 74 72 75 63  ** The MEM struc
4dc0: 74 75 72 65 20 69 73 20 61 6c 72 65 61 64 79 20  ture is already 
4dd0: 61 20 4d 45 4d 5f 52 65 61 6c 2e 20 20 54 72 79  a MEM_Real.  Try
4de0: 20 74 6f 20 61 6c 73 6f 20 6d 61 6b 65 20 69 74   to also make it
4df0: 20 61 0a 2a 2a 20 4d 45 4d 5f 49 6e 74 20 69 66   a.** MEM_Int if
4e00: 20 77 65 20 63 61 6e 2e 0a 2a 2f 0a 76 6f 69 64   we can..*/.void
4e10: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65   sqlite3VdbeInte
4e20: 67 65 72 41 66 66 69 6e 69 74 79 28 4d 65 6d 20  gerAffinity(Mem 
4e30: 2a 70 4d 65 6d 29 7b 0a 20 20 69 36 34 20 69 78  *pMem){.  i64 ix
4e40: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d  ;.  assert( pMem
4e50: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
4e60: 61 6c 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  al );.  assert( 
4e70: 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d  (pMem->flags & M
4e80: 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 3b  EM_RowSet)==0 );
4e90: 0a 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d 2d  .  assert( pMem-
4ea0: 3e 64 62 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65  >db==0 || sqlite
4eb0: 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 4d 65  3_mutex_held(pMe
4ec0: 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b  m->db->mutex) );
4ed0: 0a 20 20 61 73 73 65 72 74 28 20 45 49 47 48 54  .  assert( EIGHT
4ee0: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
4ef0: 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 69 78 20 3d  pMem) );..  ix =
4f00: 20 64 6f 75 62 6c 65 54 6f 49 6e 74 36 34 28 70   doubleToInt64(p
4f10: 4d 65 6d 2d 3e 75 2e 72 29 3b 0a 0a 20 20 2f 2a  Mem->u.r);..  /*
4f20: 20 4f 6e 6c 79 20 6d 61 72 6b 20 74 68 65 20 76   Only mark the v
4f30: 61 6c 75 65 20 61 73 20 61 6e 20 69 6e 74 65 67  alue as an integ
4f40: 65 72 20 69 66 0a 20 20 2a 2a 0a 20 20 2a 2a 20  er if.  **.  ** 
4f50: 20 20 20 28 31 29 20 74 68 65 20 72 6f 75 6e 64     (1) the round
4f60: 2d 74 72 69 70 20 63 6f 6e 76 65 72 73 69 6f 6e  -trip conversion
4f70: 20 72 65 61 6c 2d 3e 69 6e 74 2d 3e 72 65 61 6c   real->int->real
4f80: 20 69 73 20 61 20 6e 6f 2d 6f 70 2c 20 61 6e 64   is a no-op, and
4f90: 0a 20 20 2a 2a 20 20 20 20 28 32 29 20 54 68 65  .  **    (2) The
4fa0: 20 69 6e 74 65 67 65 72 20 69 73 20 6e 65 69 74   integer is neit
4fb0: 68 65 72 20 74 68 65 20 6c 61 72 67 65 73 74 20  her the largest 
4fc0: 6e 6f 72 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  nor the smallest
4fd0: 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 70 6f 73  .  **        pos
4fe0: 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20 28 74  sible integer (t
4ff0: 69 63 6b 65 74 20 23 33 39 32 32 29 0a 20 20 2a  icket #3922).  *
5000: 2a 0a 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e  *.  ** The secon
5010: 64 20 61 6e 64 20 74 68 69 72 64 20 74 65 72 6d  d and third term
5020: 73 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  s in the followi
5030: 6e 67 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 65  ng conditional e
5040: 6e 66 6f 72 63 65 73 0a 20 20 2a 2a 20 74 68 65  nforces.  ** the
5050: 20 73 65 63 6f 6e 64 20 63 6f 6e 64 69 74 69 6f   second conditio
5060: 6e 20 75 6e 64 65 72 20 74 68 65 20 61 73 73 75  n under the assu
5070: 6d 70 74 69 6f 6e 20 74 68 61 74 20 61 64 64 69  mption that addi
5080: 74 69 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 63 61  tion overflow ca
5090: 75 73 65 73 0a 20 20 2a 2a 20 76 61 6c 75 65 73  uses.  ** values
50a0: 20 74 6f 20 77 72 61 70 20 61 72 6f 75 6e 64 2e   to wrap around.
50b0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 4d 65 6d  .  */.  if( pMem
50c0: 2d 3e 75 2e 72 3d 3d 69 78 20 26 26 20 69 78 3e  ->u.r==ix && ix>
50d0: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 26  SMALLEST_INT64 &
50e0: 26 20 69 78 3c 4c 41 52 47 45 53 54 5f 49 4e 54  & ix<LARGEST_INT
50f0: 36 34 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e  64 ){.    pMem->
5100: 75 2e 69 20 3d 20 69 78 3b 0a 20 20 20 20 4d 65  u.i = ix;.    Me
5110: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4d 65  mSetTypeFlag(pMe
5120: 6d 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  m, MEM_Int);.  }
5130: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72  .}../*.** Conver
5140: 74 20 70 4d 65 6d 20 74 6f 20 74 79 70 65 20 69  t pMem to type i
5150: 6e 74 65 67 65 72 2e 20 20 49 6e 76 61 6c 69 64  nteger.  Invalid
5160: 61 74 65 20 61 6e 79 20 70 72 69 6f 72 20 72 65  ate any prior re
5170: 70 72 65 73 65 6e 74 61 74 69 6f 6e 73 2e 0a 2a  presentations..*
5180: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  /.int sqlite3Vdb
5190: 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 4d  eMemIntegerify(M
51a0: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73  em *pMem){.  ass
51b0: 65 72 74 28 20 70 4d 65 6d 2d 3e 64 62 3d 3d 30  ert( pMem->db==0
51c0: 20 7c 7c 20 73 71 6c 69 74 65 33 5f 6d 75 74 65   || sqlite3_mute
51d0: 78 5f 68 65 6c 64 28 70 4d 65 6d 2d 3e 64 62 2d  x_held(pMem->db-
51e0: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 61 73 73  >mutex) );.  ass
51f0: 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
5200: 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
5210: 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
5220: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
5230: 4d 45 4e 54 28 70 4d 65 6d 29 20 29 3b 0a 0a 20  MENT(pMem) );.. 
5240: 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 73 71 6c   pMem->u.i = sql
5250: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
5260: 28 70 4d 65 6d 29 3b 0a 20 20 4d 65 6d 53 65 74  (pMem);.  MemSet
5270: 54 79 70 65 46 6c 61 67 28 70 4d 65 6d 2c 20 4d  TypeFlag(pMem, M
5280: 45 4d 5f 49 6e 74 29 3b 0a 20 20 72 65 74 75 72  EM_Int);.  retur
5290: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a  n SQLITE_OK;.}..
52a0: 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 70 4d  /*.** Convert pM
52b0: 65 6d 20 73 6f 20 74 68 61 74 20 69 74 20 69 73  em so that it is
52c0: 20 6f 66 20 74 79 70 65 20 4d 45 4d 5f 52 65 61   of type MEM_Rea
52d0: 6c 2e 0a 2a 2a 20 49 6e 76 61 6c 69 64 61 74 65  l..** Invalidate
52e0: 20 61 6e 79 20 70 72 69 6f 72 20 72 65 70 72 65   any prior repre
52f0: 73 65 6e 74 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 69  sentations..*/.i
5300: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  nt sqlite3VdbeMe
5310: 6d 52 65 61 6c 69 66 79 28 4d 65 6d 20 2a 70 4d  mRealify(Mem *pM
5320: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 70  em){.  assert( p
5330: 4d 65 6d 2d 3e 64 62 3d 3d 30 20 7c 7c 20 73 71  Mem->db==0 || sq
5340: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64  lite3_mutex_held
5350: 28 70 4d 65 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78  (pMem->db->mutex
5360: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 45  ) );.  assert( E
5370: 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d  IGHT_BYTE_ALIGNM
5380: 45 4e 54 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20  ENT(pMem) );..  
5390: 70 4d 65 6d 2d 3e 75 2e 72 20 3d 20 73 71 6c 69  pMem->u.r = sqli
53a0: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
53b0: 28 70 4d 65 6d 29 3b 0a 20 20 4d 65 6d 53 65 74  (pMem);.  MemSet
53c0: 54 79 70 65 46 6c 61 67 28 70 4d 65 6d 2c 20 4d  TypeFlag(pMem, M
53d0: 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 72 65 74 75  EM_Real);.  retu
53e0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
53f0: 0a 2f 2a 20 43 6f 6d 70 61 72 65 20 61 20 66 6c  ./* Compare a fl
5400: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
5410: 75 65 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ue to an integer
5420: 2e 20 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  .  Return true i
5430: 66 20 74 68 65 20 74 77 6f 0a 2a 2a 20 76 61 6c  f the two.** val
5440: 75 65 73 20 61 72 65 20 74 68 65 20 73 61 6d 65  ues are the same
5450: 20 77 69 74 68 69 6e 20 74 68 65 20 70 72 65 63   within the prec
5460: 69 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6c 6f  ision of the flo
5470: 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
5480: 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 73 6f 6d  e..**.** For som
5490: 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 47 43  e versions of GC
54a0: 43 20 6f 6e 20 33 32 2d 62 69 74 20 6d 61 63 68  C on 32-bit mach
54b0: 69 6e 65 73 2c 20 69 66 20 79 6f 75 20 64 6f 20  ines, if you do 
54c0: 74 68 65 20 6d 6f 72 65 20 6f 62 76 69 6f 75 73  the more obvious
54d0: 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  .** comparison o
54e0: 66 20 22 72 31 3d 3d 28 64 6f 75 62 6c 65 29 69  f "r1==(double)i
54f0: 22 20 79 6f 75 20 73 6f 6d 65 74 69 6d 65 73 20  " you sometimes 
5500: 67 65 74 20 61 6e 20 61 6e 73 77 65 72 20 6f 66  get an answer of
5510: 20 66 61 6c 73 65 20 65 76 65 6e 0a 2a 2a 20 74   false even.** t
5520: 68 6f 75 67 68 20 74 68 65 20 72 31 20 61 6e 64  hough the r1 and
5530: 20 28 64 6f 75 62 6c 65 29 69 20 76 61 6c 75 65   (double)i value
5540: 73 20 61 72 65 20 62 69 74 2d 66 6f 72 2d 62 69  s are bit-for-bi
5550: 74 20 74 68 65 20 73 61 6d 65 2e 0a 2a 2f 0a 73  t the same..*/.s
5560: 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65  tatic int sqlite
5570: 33 52 65 61 6c 53 61 6d 65 41 73 49 6e 74 28 64  3RealSameAsInt(d
5580: 6f 75 62 6c 65 20 72 31 2c 20 73 71 6c 69 74 65  ouble r1, sqlite
5590: 33 5f 69 6e 74 36 34 20 69 29 7b 0a 20 20 64 6f  3_int64 i){.  do
55a0: 75 62 6c 65 20 72 32 20 3d 20 28 64 6f 75 62 6c  uble r2 = (doubl
55b0: 65 29 69 3b 0a 20 20 72 65 74 75 72 6e 20 6d 65  e)i;.  return me
55c0: 6d 63 6d 70 28 26 72 31 2c 20 26 72 32 2c 20 73  mcmp(&r1, &r2, s
55d0: 69 7a 65 6f 66 28 72 31 29 29 3d 3d 30 3b 0a 7d  izeof(r1))==0;.}
55e0: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20  ../*.** Convert 
55f0: 70 4d 65 6d 20 73 6f 20 74 68 61 74 20 69 74 20  pMem so that it 
5600: 68 61 73 20 74 79 70 65 73 20 4d 45 4d 5f 52 65  has types MEM_Re
5610: 61 6c 20 6f 72 20 4d 45 4d 5f 49 6e 74 20 6f 72  al or MEM_Int or
5620: 20 62 6f 74 68 2e 0a 2a 2a 20 49 6e 76 61 6c 69   both..** Invali
5630: 64 61 74 65 20 61 6e 79 20 70 72 69 6f 72 20 72  date any prior r
5640: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 73 2e 0a  epresentations..
5650: 2a 2a 0a 2a 2a 20 45 76 65 72 79 20 65 66 66 6f  **.** Every effo
5660: 72 74 20 69 73 20 6d 61 64 65 20 74 6f 20 66 6f  rt is made to fo
5670: 72 63 65 20 74 68 65 20 63 6f 6e 76 65 72 73 69  rce the conversi
5680: 6f 6e 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20  on, even if the 
5690: 69 6e 70 75 74 0a 2a 2a 20 69 73 20 61 20 73 74  input.** is a st
56a0: 72 69 6e 67 20 74 68 61 74 20 64 6f 65 73 20 6e  ring that does n
56b0: 6f 74 20 6c 6f 6f 6b 20 63 6f 6d 70 6c 65 74 65  ot look complete
56c0: 6c 79 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72  ly like a number
56d0: 2e 20 20 43 6f 6e 76 65 72 74 0a 2a 2a 20 61 73  .  Convert.** as
56e0: 20 6d 75 63 68 20 6f 66 20 74 68 65 20 73 74 72   much of the str
56f0: 69 6e 67 20 61 73 20 77 65 20 63 61 6e 20 61 6e  ing as we can an
5700: 64 20 69 67 6e 6f 72 65 20 74 68 65 20 72 65 73  d ignore the res
5710: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
5720: 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79  3VdbeMemNumerify
5730: 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69  (Mem *pMem){.  i
5740: 66 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  f( (pMem->flags 
5750: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
5760: 65 61 6c 7c 4d 45 4d 5f 4e 75 6c 6c 29 29 3d 3d  eal|MEM_Null))==
5770: 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b  0 ){.    int rc;
5780: 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d  .    assert( (pM
5790: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  em->flags & (MEM
57a0: 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 29 21  _Blob|MEM_Str))!
57b0: 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
57c0: 28 20 70 4d 65 6d 2d 3e 64 62 3d 3d 30 20 7c 7c  ( pMem->db==0 ||
57d0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
57e0: 65 6c 64 28 70 4d 65 6d 2d 3e 64 62 2d 3e 6d 75  eld(pMem->db->mu
57f0: 74 65 78 29 20 29 3b 0a 20 20 20 20 72 63 20 3d  tex) );.    rc =
5800: 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70   sqlite3Atoi64(p
5810: 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75  Mem->z, &pMem->u
5820: 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65  .i, pMem->n, pMe
5830: 6d 2d 3e 65 6e 63 29 3b 0a 20 20 20 20 69 66 28  m->enc);.    if(
5840: 20 72 63 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20   rc==0 ){.      
5850: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
5860: 4d 65 6d 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Mem, MEM_Int);. 
5870: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
5880: 69 36 34 20 69 20 3d 20 70 4d 65 6d 2d 3e 75 2e  i64 i = pMem->u.
5890: 69 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  i;.      sqlite3
58a0: 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70  AtoF(pMem->z, &p
58b0: 4d 65 6d 2d 3e 75 2e 72 2c 20 70 4d 65 6d 2d 3e  Mem->u.r, pMem->
58c0: 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3b 0a 20  n, pMem->enc);. 
58d0: 20 20 20 20 20 69 66 28 20 72 63 3d 3d 31 20 26       if( rc==1 &
58e0: 26 20 73 71 6c 69 74 65 33 52 65 61 6c 53 61 6d  & sqlite3RealSam
58f0: 65 41 73 49 6e 74 28 70 4d 65 6d 2d 3e 75 2e 72  eAsInt(pMem->u.r
5900: 2c 20 69 29 20 29 7b 0a 20 20 20 20 20 20 20 20  , i) ){.        
5910: 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 69 3b 0a 20  pMem->u.i = i;. 
5920: 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70         MemSetTyp
5930: 65 46 6c 61 67 28 70 4d 65 6d 2c 20 4d 45 4d 5f  eFlag(pMem, MEM_
5940: 49 6e 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Int);.      }els
5950: 65 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65  e{.        MemSe
5960: 74 54 79 70 65 46 6c 61 67 28 70 4d 65 6d 2c 20  tTypeFlag(pMem, 
5970: 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 20  MEM_Real);.     
5980: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61   }.    }.  }.  a
5990: 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
59a0: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
59b0: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 4e 75 6c 6c  EM_Real|MEM_Null
59c0: 29 29 21 3d 30 20 29 3b 0a 20 20 70 4d 65 6d 2d  ))!=0 );.  pMem-
59d0: 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
59e0: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d  Str|MEM_Blob|MEM
59f0: 5f 5a 65 72 6f 29 3b 0a 20 20 72 65 74 75 72 6e  _Zero);.  return
5a00: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f   SQLITE_OK;.}../
5a10: 2a 0a 2a 2a 20 43 61 73 74 20 74 68 65 20 64 61  *.** Cast the da
5a20: 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 76 61  tatype of the va
5a30: 6c 75 65 20 69 6e 20 70 4d 65 6d 20 61 63 63 6f  lue in pMem acco
5a40: 72 64 69 6e 67 20 74 6f 20 74 68 65 20 61 66 66  rding to the aff
5a50: 69 6e 69 74 79 0a 2a 2a 20 22 61 66 66 22 2e 20  inity.** "aff". 
5a60: 20 43 61 73 74 69 6e 67 20 69 73 20 64 69 66 66   Casting is diff
5a70: 65 72 65 6e 74 20 66 72 6f 6d 20 61 70 70 6c 79  erent from apply
5a80: 69 6e 67 20 61 66 66 69 6e 69 74 79 20 69 6e 20  ing affinity in 
5a90: 74 68 61 74 20 61 20 63 61 73 74 0a 2a 2a 20 69  that a cast.** i
5aa0: 73 20 66 6f 72 63 65 64 2e 20 20 49 6e 20 6f 74  s forced.  In ot
5ab0: 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 76  her words, the v
5ac0: 61 6c 75 65 20 69 73 20 63 6f 6e 76 65 72 74 65  alue is converte
5ad0: 64 20 69 6e 74 6f 20 74 68 65 20 64 65 73 69 72  d into the desir
5ae0: 65 64 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 65  ed.** affinity e
5af0: 76 65 6e 20 69 66 20 74 68 61 74 20 72 65 73 75  ven if that resu
5b00: 6c 74 73 20 69 6e 20 6c 6f 73 73 20 6f 66 20 64  lts in loss of d
5b10: 61 74 61 2e 20 20 54 68 69 73 20 72 6f 75 74 69  ata.  This routi
5b20: 6e 65 20 69 73 0a 2a 2a 20 75 73 65 64 20 28 66  ne is.** used (f
5b30: 6f 72 20 65 78 61 6d 70 6c 65 29 20 74 6f 20 69  or example) to i
5b40: 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 53 51 4c  mplement the SQL
5b50: 20 22 63 61 73 74 28 29 22 20 6f 70 65 72 61 74   "cast()" operat
5b60: 6f 72 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  or..*/.void sqli
5b70: 74 65 33 56 64 62 65 4d 65 6d 43 61 73 74 28 4d  te3VdbeMemCast(M
5b80: 65 6d 20 2a 70 4d 65 6d 2c 20 75 38 20 61 66 66  em *pMem, u8 aff
5b90: 2c 20 75 38 20 65 6e 63 6f 64 69 6e 67 29 7b 0a  , u8 encoding){.
5ba0: 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67    if( pMem->flag
5bb0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 72  s & MEM_Null ) r
5bc0: 65 74 75 72 6e 3b 0a 20 20 73 77 69 74 63 68 28  eturn;.  switch(
5bd0: 20 61 66 66 20 29 7b 0a 20 20 20 20 63 61 73 65   aff ){.    case
5be0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42   SQLITE_AFF_BLOB
5bf0: 3a 20 7b 20 20 20 2f 2a 20 52 65 61 6c 6c 79 20  : {   /* Really 
5c00: 61 20 63 61 73 74 20 74 6f 20 42 4c 4f 42 20 2a  a cast to BLOB *
5c10: 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 4d 65  /.      if( (pMe
5c20: 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  m->flags & MEM_B
5c30: 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  lob)==0 ){.     
5c40: 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41     sqlite3ValueA
5c50: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 4d 65  pplyAffinity(pMe
5c60: 6d 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  m, SQLITE_AFF_TE
5c70: 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  XT, encoding);. 
5c80: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5c90: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
5ca0: 5f 53 74 72 20 7c 7c 20 70 4d 65 6d 2d 3e 64 62  _Str || pMem->db
5cb0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
5cc0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4d  ;.        if( pM
5cd0: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  em->flags & MEM_
5ce0: 53 74 72 20 29 20 4d 65 6d 53 65 74 54 79 70 65  Str ) MemSetType
5cf0: 46 6c 61 67 28 70 4d 65 6d 2c 20 4d 45 4d 5f 42  Flag(pMem, MEM_B
5d00: 6c 6f 62 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  lob);.      }els
5d10: 65 7b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 2d  e{.        pMem-
5d20: 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
5d30: 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d 5f 42 6c  TypeMask&~MEM_Bl
5d40: 6f 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ob);.      }.   
5d50: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
5d60: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
5d70: 41 46 46 5f 4e 55 4d 45 52 49 43 3a 20 7b 0a 20  AFF_NUMERIC: {. 
5d80: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
5d90: 4d 65 6d 4e 75 6d 65 72 69 66 79 28 70 4d 65 6d  MemNumerify(pMem
5da0: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
5db0: 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 53      }.    case S
5dc0: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
5dd0: 52 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  R: {.      sqlit
5de0: 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
5df0: 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20  ify(pMem);.     
5e00: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
5e10: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 41 46    case SQLITE_AF
5e20: 46 5f 52 45 41 4c 3a 20 7b 0a 20 20 20 20 20 20  F_REAL: {.      
5e30: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
5e40: 61 6c 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20  alify(pMem);.   
5e50: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
5e60: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20      default: {. 
5e70: 20 20 20 20 20 61 73 73 65 72 74 28 20 61 66 66       assert( aff
5e80: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  ==SQLITE_AFF_TEX
5e90: 54 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  T );.      asser
5ea0: 74 28 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d  t( MEM_Str==(MEM
5eb0: 5f 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20 20  _Blob>>3) );.   
5ec0: 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 7c     pMem->flags |
5ed0: 3d 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 26 4d  = (pMem->flags&M
5ee0: 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20 20  EM_Blob)>>3;.   
5ef0: 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41     sqlite3ValueA
5f00: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 4d 65  pplyAffinity(pMe
5f10: 6d 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  m, SQLITE_AFF_TE
5f20: 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  XT, encoding);. 
5f30: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 65       assert( pMe
5f40: 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  m->flags & MEM_S
5f50: 74 72 20 7c 7c 20 70 4d 65 6d 2d 3e 64 62 2d 3e  tr || pMem->db->
5f60: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
5f70: 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67        pMem->flag
5f80: 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d  s &= ~(MEM_Int|M
5f90: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62  EM_Real|MEM_Blob
5fa0: 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 20 20  |MEM_Zero);.    
5fb0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
5fc0: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69 74   }.}../*.** Init
5fd0: 69 61 6c 69 7a 65 20 62 75 6c 6b 20 6d 65 6d 6f  ialize bulk memo
5fe0: 72 79 20 74 6f 20 62 65 20 61 20 63 6f 6e 73 69  ry to be a consi
5ff0: 73 74 65 6e 74 20 4d 65 6d 20 6f 62 6a 65 63 74  stent Mem object
6000: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 69 6e 69  ..**.** The mini
6010: 6d 75 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 69 6e  mum amount of in
6020: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 66 65 61  itialization fea
6030: 73 69 62 6c 65 20 69 73 20 70 65 72 66 6f 72 6d  sible is perform
6040: 65 64 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  ed..*/.void sqli
6050: 74 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28 4d  te3VdbeMemInit(M
6060: 65 6d 20 2a 70 4d 65 6d 2c 20 73 71 6c 69 74 65  em *pMem, sqlite
6070: 33 20 2a 64 62 2c 20 75 31 36 20 66 6c 61 67 73  3 *db, u16 flags
6080: 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28 66 6c  ){.  assert( (fl
6090: 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d  ags & ~MEM_TypeM
60a0: 61 73 6b 29 3d 3d 30 20 29 3b 0a 20 20 70 4d 65  ask)==0 );.  pMe
60b0: 6d 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73  m->flags = flags
60c0: 3b 0a 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64  ;.  pMem->db = d
60d0: 62 3b 0a 20 20 70 4d 65 6d 2d 3e 73 7a 4d 61 6c  b;.  pMem->szMal
60e0: 6c 6f 63 20 3d 20 30 3b 0a 7d 0a 0a 0a 2f 2a 0a  loc = 0;.}.../*.
60f0: 2a 2a 20 44 65 6c 65 74 65 20 61 6e 79 20 70 72  ** Delete any pr
6100: 65 76 69 6f 75 73 20 76 61 6c 75 65 20 61 6e 64  evious value and
6110: 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 73   set the value s
6120: 74 6f 72 65 64 20 69 6e 20 2a 70 4d 65 6d 20 74  tored in *pMem t
6130: 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68  o NULL..**.** Th
6140: 69 73 20 72 6f 75 74 69 6e 65 20 63 61 6c 6c 73  is routine calls
6150: 20 74 68 65 20 4d 65 6d 2e 78 44 65 6c 20 64 65   the Mem.xDel de
6160: 73 74 72 75 63 74 6f 72 20 74 6f 20 64 69 73 70  structor to disp
6170: 6f 73 65 20 6f 66 20 76 61 6c 75 65 73 20 74 68  ose of values th
6180: 61 74 0a 2a 2a 20 72 65 71 75 69 72 65 20 74 68  at.** require th
6190: 65 20 64 65 73 74 72 75 63 74 6f 72 2e 20 20 42  e destructor.  B
61a0: 75 74 20 69 74 20 70 72 65 73 65 72 76 65 73 20  ut it preserves 
61b0: 74 68 65 20 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20  the Mem.zMalloc 
61c0: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
61d0: 6e 2e 0a 2a 2a 20 54 6f 20 66 72 65 65 20 61 6c  n..** To free al
61e0: 6c 20 72 65 73 6f 75 72 63 65 73 2c 20 75 73 65  l resources, use
61f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
6200: 65 6c 65 61 73 65 28 29 2c 20 77 68 69 63 68 20  elease(), which 
6210: 62 6f 74 68 20 63 61 6c 6c 73 20 74 68 69 73 0a  both calls this.
6220: 2a 2a 20 72 6f 75 74 69 6e 65 20 74 6f 20 69 6e  ** routine to in
6230: 76 6f 6b 65 20 74 68 65 20 64 65 73 74 72 75 63  voke the destruc
6240: 74 6f 72 20 61 6e 64 20 64 65 61 6c 6c 6f 63 61  tor and dealloca
6250: 74 65 73 20 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 2e  tes Mem.zMalloc.
6260: 0a 2a 2a 0a 2a 2a 20 55 73 65 20 74 68 69 73 20  .**.** Use this 
6270: 72 6f 75 74 69 6e 65 20 74 6f 20 72 65 73 65 74  routine to reset
6280: 20 74 68 65 20 4d 65 6d 20 70 72 69 6f 72 20 74   the Mem prior t
6290: 6f 20 69 6e 73 65 72 74 20 61 20 6e 65 77 20 76  o insert a new v
62a0: 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 55 73 65 20  alue..**.** Use 
62b0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
62c0: 6c 65 61 73 65 28 29 20 74 6f 20 63 6f 6d 70 6c  lease() to compl
62d0: 65 74 65 20 65 72 61 73 65 20 74 68 65 20 4d 65  ete erase the Me
62e0: 6d 20 70 72 69 6f 72 20 74 6f 20 61 62 61 6e 64  m prior to aband
62f0: 6f 6e 69 6e 67 20 69 74 2e 0a 2a 2f 0a 76 6f 69  oning it..*/.voi
6300: 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  d sqlite3VdbeMem
6310: 53 65 74 4e 75 6c 6c 28 4d 65 6d 20 2a 70 4d 65  SetNull(Mem *pMe
6320: 6d 29 7b 0a 20 20 69 66 28 20 56 64 62 65 4d 65  m){.  if( VdbeMe
6330: 6d 44 79 6e 61 6d 69 63 28 70 4d 65 6d 29 20 29  mDynamic(pMem) )
6340: 7b 0a 20 20 20 20 76 64 62 65 4d 65 6d 43 6c 65  {.    vdbeMemCle
6350: 61 72 45 78 74 65 72 6e 41 6e 64 53 65 74 4e 75  arExternAndSetNu
6360: 6c 6c 28 70 4d 65 6d 29 3b 0a 20 20 7d 65 6c 73  ll(pMem);.  }els
6370: 65 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61  e{.    pMem->fla
6380: 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
6390: 20 7d 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65   }.}.void sqlite
63a0: 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71  3ValueSetNull(sq
63b0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 29 7b  lite3_value *p){
63c0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
63d0: 6d 53 65 74 4e 75 6c 6c 28 28 4d 65 6d 2a 29 70  mSetNull((Mem*)p
63e0: 29 3b 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 6c  ); .}../*.** Del
63f0: 65 74 65 20 61 6e 79 20 70 72 65 76 69 6f 75 73  ete any previous
6400: 20 76 61 6c 75 65 20 61 6e 64 20 73 65 74 20 74   value and set t
6410: 68 65 20 76 61 6c 75 65 20 74 6f 20 62 65 20 61  he value to be a
6420: 20 42 4c 4f 42 20 6f 66 20 6c 65 6e 67 74 68 0a   BLOB of length.
6430: 2a 2a 20 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ** n containing 
6440: 61 6c 6c 20 7a 65 72 6f 73 2e 0a 2a 2f 0a 76 6f  all zeros..*/.vo
6450: 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  id sqlite3VdbeMe
6460: 6d 53 65 74 5a 65 72 6f 42 6c 6f 62 28 4d 65 6d  mSetZeroBlob(Mem
6470: 20 2a 70 4d 65 6d 2c 20 69 6e 74 20 6e 29 7b 0a   *pMem, int n){.
6480: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
6490: 52 65 6c 65 61 73 65 28 70 4d 65 6d 29 3b 0a 20  Release(pMem);. 
64a0: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d   pMem->flags = M
64b0: 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72 6f  EM_Blob|MEM_Zero
64c0: 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 20 3d 20 30 3b  ;.  pMem->n = 0;
64d0: 0a 20 20 69 66 28 20 6e 3c 30 20 29 20 6e 20 3d  .  if( n<0 ) n =
64e0: 20 30 3b 0a 20 20 70 4d 65 6d 2d 3e 75 2e 6e 5a   0;.  pMem->u.nZ
64f0: 65 72 6f 20 3d 20 6e 3b 0a 20 20 70 4d 65 6d 2d  ero = n;.  pMem-
6500: 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
6510: 46 38 3b 0a 20 20 70 4d 65 6d 2d 3e 7a 20 3d 20  F8;.  pMem->z = 
6520: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  0;.}../*.** The 
6530: 70 4d 65 6d 20 69 73 20 6b 6e 6f 77 6e 20 74 6f  pMem is known to
6540: 20 63 6f 6e 74 61 69 6e 20 63 6f 6e 74 65 6e 74   contain content
6550: 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62   that needs to b
6560: 65 20 64 65 73 74 72 6f 79 65 64 20 70 72 69 6f  e destroyed prio
6570: 72 0a 2a 2a 20 74 6f 20 61 20 76 61 6c 75 65 20  r.** to a value 
6580: 63 68 61 6e 67 65 2e 20 20 53 6f 20 69 6e 76 6f  change.  So invo
6590: 6b 65 20 74 68 65 20 64 65 73 74 72 75 63 74 6f  ke the destructo
65a0: 72 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65 20  r, then set the 
65b0: 76 61 6c 75 65 20 74 6f 0a 2a 2a 20 61 20 36 34  value to.** a 64
65c0: 2d 62 69 74 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  -bit integer..*/
65d0: 0a 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e  .static SQLITE_N
65e0: 4f 49 4e 4c 49 4e 45 20 76 6f 69 64 20 76 64 62  OINLINE void vdb
65f0: 65 52 65 6c 65 61 73 65 41 6e 64 53 65 74 49 6e  eReleaseAndSetIn
6600: 74 36 34 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 69  t64(Mem *pMem, i
6610: 36 34 20 76 61 6c 29 7b 0a 20 20 73 71 6c 69 74  64 val){.  sqlit
6620: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
6630: 28 70 4d 65 6d 29 3b 0a 20 20 70 4d 65 6d 2d 3e  (pMem);.  pMem->
6640: 75 2e 69 20 3d 20 76 61 6c 3b 0a 20 20 70 4d 65  u.i = val;.  pMe
6650: 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  m->flags = MEM_I
6660: 6e 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 6c  nt;.}../*.** Del
6670: 65 74 65 20 61 6e 79 20 70 72 65 76 69 6f 75 73  ete any previous
6680: 20 76 61 6c 75 65 20 61 6e 64 20 73 65 74 20 74   value and set t
6690: 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
66a0: 69 6e 20 2a 70 4d 65 6d 20 74 6f 20 76 61 6c 2c  in *pMem to val,
66b0: 0a 2a 2a 20 6d 61 6e 69 66 65 73 74 20 74 79 70  .** manifest typ
66c0: 65 20 49 4e 54 45 47 45 52 2e 0a 2a 2f 0a 76 6f  e INTEGER..*/.vo
66d0: 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  id sqlite3VdbeMe
66e0: 6d 53 65 74 49 6e 74 36 34 28 4d 65 6d 20 2a 70  mSetInt64(Mem *p
66f0: 4d 65 6d 2c 20 69 36 34 20 76 61 6c 29 7b 0a 20  Mem, i64 val){. 
6700: 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e 61   if( VdbeMemDyna
6710: 6d 69 63 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20  mic(pMem) ){.   
6720: 20 76 64 62 65 52 65 6c 65 61 73 65 41 6e 64 53   vdbeReleaseAndS
6730: 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20 76 61  etInt64(pMem, va
6740: 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  l);.  }else{.   
6750: 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 61 6c   pMem->u.i = val
6760: 3b 0a 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67  ;.    pMem->flag
6770: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  s = MEM_Int;.  }
6780: 0a 7d 0a 0a 2f 2a 20 41 20 6e 6f 2d 6f 70 20 64  .}../* A no-op d
6790: 65 73 74 72 75 63 74 6f 72 20 2a 2f 0a 76 6f 69  estructor */.voi
67a0: 64 20 73 71 6c 69 74 65 33 4e 6f 6f 70 44 65 73  d sqlite3NoopDes
67b0: 74 72 75 63 74 6f 72 28 76 6f 69 64 20 2a 70 29  tructor(void *p)
67c0: 7b 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54  { UNUSED_PARAMET
67d0: 45 52 28 70 29 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20  ER(p); }../*.** 
67e0: 53 65 74 20 74 68 65 20 76 61 6c 75 65 20 73 74  Set the value st
67f0: 6f 72 65 64 20 69 6e 20 2a 70 4d 65 6d 20 73 68  ored in *pMem sh
6800: 6f 75 6c 64 20 61 6c 72 65 61 64 79 20 62 65 20  ould already be 
6810: 61 20 4e 55 4c 4c 2e 0a 2a 2a 20 41 6c 73 6f 20  a NULL..** Also 
6820: 73 74 6f 72 65 20 61 20 70 6f 69 6e 74 65 72 20  store a pointer 
6830: 74 6f 20 67 6f 20 77 69 74 68 20 69 74 2e 0a 2a  to go with it..*
6840: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  /.void sqlite3Vd
6850: 62 65 4d 65 6d 53 65 74 50 6f 69 6e 74 65 72 28  beMemSetPointer(
6860: 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 2c 0a 20 20  .  Mem *pMem,.  
6870: 76 6f 69 64 20 2a 70 50 74 72 2c 0a 20 20 63 6f  void *pPtr,.  co
6880: 6e 73 74 20 63 68 61 72 20 2a 7a 50 54 79 70 65  nst char *zPType
6890: 2c 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  ,.  void (*xDest
68a0: 72 75 63 74 6f 72 29 28 76 6f 69 64 2a 29 0a 29  ructor)(void*).)
68b0: 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d  {.  assert( pMem
68c0: 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c  ->flags==MEM_Nul
68d0: 6c 20 29 3b 0a 20 20 70 4d 65 6d 2d 3e 75 2e 7a  l );.  pMem->u.z
68e0: 50 54 79 70 65 20 3d 20 7a 50 54 79 70 65 20 3f  PType = zPType ?
68f0: 20 7a 50 54 79 70 65 20 3a 20 22 22 3b 0a 20 20   zPType : "";.  
6900: 70 4d 65 6d 2d 3e 7a 20 3d 20 70 50 74 72 3b 0a  pMem->z = pPtr;.
6910: 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20    pMem->flags = 
6920: 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 44 79 6e  MEM_Null|MEM_Dyn
6930: 7c 4d 45 4d 5f 53 75 62 74 79 70 65 7c 4d 45 4d  |MEM_Subtype|MEM
6940: 5f 54 65 72 6d 3b 0a 20 20 70 4d 65 6d 2d 3e 65  _Term;.  pMem->e
6950: 53 75 62 74 79 70 65 20 3d 20 27 70 27 3b 0a 20  Subtype = 'p';. 
6960: 20 70 4d 65 6d 2d 3e 78 44 65 6c 20 3d 20 78 44   pMem->xDel = xD
6970: 65 73 74 72 75 63 74 6f 72 20 3f 20 78 44 65 73  estructor ? xDes
6980: 74 72 75 63 74 6f 72 20 3a 20 73 71 6c 69 74 65  tructor : sqlite
6990: 33 4e 6f 6f 70 44 65 73 74 72 75 63 74 6f 72 3b  3NoopDestructor;
69a0: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
69b0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
69c0: 5f 50 4f 49 4e 54 0a 2f 2a 0a 2a 2a 20 44 65 6c  _POINT./*.** Del
69d0: 65 74 65 20 61 6e 79 20 70 72 65 76 69 6f 75 73  ete any previous
69e0: 20 76 61 6c 75 65 20 61 6e 64 20 73 65 74 20 74   value and set t
69f0: 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
6a00: 69 6e 20 2a 70 4d 65 6d 20 74 6f 20 76 61 6c 2c  in *pMem to val,
6a10: 0a 2a 2a 20 6d 61 6e 69 66 65 73 74 20 74 79 70  .** manifest typ
6a20: 65 20 52 45 41 4c 2e 0a 2a 2f 0a 76 6f 69 64 20  e REAL..*/.void 
6a30: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
6a40: 74 44 6f 75 62 6c 65 28 4d 65 6d 20 2a 70 4d 65  tDouble(Mem *pMe
6a50: 6d 2c 20 64 6f 75 62 6c 65 20 76 61 6c 29 7b 0a  m, double val){.
6a60: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
6a70: 53 65 74 4e 75 6c 6c 28 70 4d 65 6d 29 3b 0a 20  SetNull(pMem);. 
6a80: 20 69 66 28 20 21 73 71 6c 69 74 65 33 49 73 4e   if( !sqlite3IsN
6a90: 61 4e 28 76 61 6c 29 20 29 7b 0a 20 20 20 20 70  aN(val) ){.    p
6aa0: 4d 65 6d 2d 3e 75 2e 72 20 3d 20 76 61 6c 3b 0a  Mem->u.r = val;.
6ab0: 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20      pMem->flags 
6ac0: 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 7d 0a  = MEM_Real;.  }.
6ad0: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
6ae0: 44 65 6c 65 74 65 20 61 6e 79 20 70 72 65 76 69  Delete any previ
6af0: 6f 75 73 20 76 61 6c 75 65 20 61 6e 64 20 73 65  ous value and se
6b00: 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70  t the value of p
6b10: 4d 65 6d 20 74 6f 20 62 65 20 61 6e 0a 2a 2a 20  Mem to be an.** 
6b20: 65 6d 70 74 79 20 62 6f 6f 6c 65 61 6e 20 69 6e  empty boolean in
6b30: 64 65 78 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  dex..*/.void sql
6b40: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
6b50: 77 53 65 74 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b  wSet(Mem *pMem){
6b60: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
6b70: 20 70 4d 65 6d 2d 3e 64 62 3b 0a 20 20 61 73 73   pMem->db;.  ass
6b80: 65 72 74 28 20 64 62 21 3d 30 20 29 3b 0a 20 20  ert( db!=0 );.  
6b90: 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66  assert( (pMem->f
6ba0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
6bb0: 74 29 3d 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74  t)==0 );.  sqlit
6bc0: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
6bd0: 28 70 4d 65 6d 29 3b 0a 20 20 70 4d 65 6d 2d 3e  (pMem);.  pMem->
6be0: 7a 4d 61 6c 6c 6f 63 20 3d 20 73 71 6c 69 74 65  zMalloc = sqlite
6bf0: 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64  3DbMallocRawNN(d
6c00: 62 2c 20 36 34 29 3b 0a 20 20 69 66 28 20 64 62  b, 64);.  if( db
6c10: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
6c20: 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67  {.    pMem->flag
6c30: 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
6c40: 20 20 70 4d 65 6d 2d 3e 73 7a 4d 61 6c 6c 6f 63    pMem->szMalloc
6c50: 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
6c60: 20 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d 2d     assert( pMem-
6c70: 3e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20  >zMalloc );.    
6c80: 70 4d 65 6d 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d  pMem->szMalloc =
6c90: 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
6ca0: 53 69 7a 65 28 64 62 2c 20 70 4d 65 6d 2d 3e 7a  Size(db, pMem->z
6cb0: 4d 61 6c 6c 6f 63 29 3b 0a 20 20 20 20 70 4d 65  Malloc);.    pMe
6cc0: 6d 2d 3e 75 2e 70 52 6f 77 53 65 74 20 3d 20 73  m->u.pRowSet = s
6cd0: 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74  qlite3RowSetInit
6ce0: 28 64 62 2c 20 70 4d 65 6d 2d 3e 7a 4d 61 6c 6c  (db, pMem->zMall
6cf0: 6f 63 2c 20 70 4d 65 6d 2d 3e 73 7a 4d 61 6c 6c  oc, pMem->szMall
6d00: 6f 63 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  oc);.    assert(
6d10: 20 70 4d 65 6d 2d 3e 75 2e 70 52 6f 77 53 65 74   pMem->u.pRowSet
6d20: 21 3d 30 20 29 3b 0a 20 20 20 20 70 4d 65 6d 2d  !=0 );.    pMem-
6d30: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 6f 77  >flags = MEM_Row
6d40: 53 65 74 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  Set;.  }.}../*.*
6d50: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
6d60: 20 74 68 65 20 4d 65 6d 20 6f 62 6a 65 63 74 20   the Mem object 
6d70: 63 6f 6e 74 61 69 6e 73 20 61 20 54 45 58 54 20  contains a TEXT 
6d80: 6f 72 20 42 4c 4f 42 20 74 68 61 74 20 69 73 0a  or BLOB that is.
6d90: 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 2d 20 77  ** too large - w
6da0: 68 6f 73 65 20 73 69 7a 65 20 65 78 63 65 65 64  hose size exceed
6db0: 73 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e  s SQLITE_MAX_LEN
6dc0: 47 54 48 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  GTH..*/.int sqli
6dd0: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
6de0: 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 61 73 73 65  (Mem *p){.  asse
6df0: 72 74 28 20 70 2d 3e 64 62 21 3d 30 20 29 3b 0a  rt( p->db!=0 );.
6e00: 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26    if( p->flags &
6e10: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
6e20: 6f 62 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 6e  ob) ){.    int n
6e30: 20 3d 20 70 2d 3e 6e 3b 0a 20 20 20 20 69 66 28   = p->n;.    if(
6e40: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
6e50: 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 6e 20  Zero ){.      n 
6e60: 2b 3d 20 70 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  += p->u.nZero;. 
6e70: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
6e80: 6e 3e 70 2d 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  n>p->db->aLimit[
6e90: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
6ea0: 47 54 48 5d 3b 0a 20 20 7d 0a 20 20 72 65 74 75  GTH];.  }.  retu
6eb0: 72 6e 20 30 3b 20 0a 7d 0a 0a 23 69 66 64 65 66  rn 0; .}..#ifdef
6ec0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
6ed0: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
6ee0: 20 70 72 65 70 61 72 65 73 20 61 20 6d 65 6d 6f   prepares a memo
6ef0: 72 79 20 63 65 6c 6c 20 66 6f 72 20 6d 6f 64 69  ry cell for modi
6f00: 66 69 63 61 74 69 6f 6e 20 62 79 20 62 72 65 61  fication by brea
6f10: 6b 69 6e 67 0a 2a 2a 20 69 74 73 20 6c 69 6e 6b  king.** its link
6f20: 20 74 6f 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f   to a shallow co
6f30: 70 79 20 61 6e 64 20 62 79 20 6d 61 72 6b 69 6e  py and by markin
6f40: 67 20 61 6e 79 20 63 75 72 72 65 6e 74 20 73 68  g any current sh
6f50: 61 6c 6c 6f 77 0a 2a 2a 20 63 6f 70 69 65 73 20  allow.** copies 
6f60: 6f 66 20 74 68 69 73 20 63 65 6c 6c 20 61 73 20  of this cell as 
6f70: 69 6e 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 54  invalid..**.** T
6f80: 68 69 73 20 69 73 20 75 73 65 64 20 66 6f 72 20  his is used for 
6f90: 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75  testing and debu
6fa0: 67 67 69 6e 67 20 6f 6e 6c 79 20 2d 20 74 6f 20  gging only - to 
6fb0: 6d 61 6b 65 20 73 75 72 65 20 73 68 61 6c 6c 6f  make sure shallo
6fc0: 77 0a 2a 2a 20 63 6f 70 69 65 73 20 61 72 65 20  w.** copies are 
6fd0: 6e 6f 74 20 6d 69 73 75 73 65 64 2e 0a 2a 2f 0a  not misused..*/.
6fe0: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
6ff0: 4d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  MemAboutToChange
7000: 28 56 64 62 65 20 2a 70 56 64 62 65 2c 20 4d 65  (Vdbe *pVdbe, Me
7010: 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74 20  m *pMem){.  int 
7020: 69 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 20 20  i;.  Mem *pX;.  
7030: 66 6f 72 28 69 3d 30 2c 20 70 58 3d 70 56 64 62  for(i=0, pX=pVdb
7040: 65 2d 3e 61 4d 65 6d 3b 20 69 3c 70 56 64 62 65  e->aMem; i<pVdbe
7050: 2d 3e 6e 4d 65 6d 3b 20 69 2b 2b 2c 20 70 58 2b  ->nMem; i++, pX+
7060: 2b 29 7b 0a 20 20 20 20 69 66 28 20 70 58 2d 3e  +){.    if( pX->
7070: 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 70 4d 65 6d  pScopyFrom==pMem
7080: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   ){.      /* If 
7090: 70 58 20 69 73 20 6d 61 72 6b 65 64 20 61 73 20  pX is marked as 
70a0: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
70b0: 66 20 70 4d 65 6d 2c 20 74 68 65 6e 20 76 65 72  f pMem, then ver
70c0: 69 66 79 20 74 68 61 74 0a 20 20 20 20 20 20 2a  ify that.      *
70d0: 2a 20 6e 6f 20 73 69 67 6e 69 66 69 63 61 6e 74  * no significant
70e0: 20 63 68 61 6e 67 65 73 20 68 61 76 65 20 62 65   changes have be
70f0: 65 6e 20 6d 61 64 65 20 74 6f 20 70 58 20 73 69  en made to pX si
7100: 6e 63 65 20 74 68 65 20 4f 50 5f 53 43 6f 70 79  nce the OP_SCopy
7110: 2e 0a 20 20 20 20 20 20 2a 2a 20 41 20 73 69 67  ..      ** A sig
7120: 6e 69 66 69 63 61 6e 74 20 63 68 61 6e 67 65 20  nificant change 
7130: 77 6f 75 6c 64 20 69 6e 64 69 63 61 74 65 64 20  would indicated 
7140: 61 20 6d 69 73 73 65 64 20 63 61 6c 6c 20 74 6f  a missed call to
7150: 20 74 68 69 73 0a 20 20 20 20 20 20 2a 2a 20 66   this.      ** f
7160: 75 6e 63 74 69 6f 6e 20 66 6f 72 20 70 58 2e 20  unction for pX. 
7170: 20 4d 69 6e 6f 72 20 63 68 61 6e 67 65 73 2c 20   Minor changes, 
7180: 73 75 63 68 20 61 73 20 61 64 64 69 6e 67 20 6f  such as adding o
7190: 72 20 72 65 6d 6f 76 69 6e 67 20 61 0a 20 20 20  r removing a.   
71a0: 20 20 20 2a 2a 20 64 75 61 6c 20 74 79 70 65 2c     ** dual type,
71b0: 20 61 72 65 20 61 6c 6c 6f 77 65 64 2c 20 61 73   are allowed, as
71c0: 20 6c 6f 6e 67 20 61 73 20 74 68 65 20 75 6e 64   long as the und
71d0: 65 72 6c 79 69 6e 67 20 76 61 6c 75 65 20 69 73  erlying value is
71e0: 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 73 61   the.      ** sa
71f0: 6d 65 2e 20 2a 2f 0a 20 20 20 20 20 20 75 31 36  me. */.      u16
7200: 20 6d 46 6c 61 67 73 20 3d 20 70 4d 65 6d 2d 3e   mFlags = pMem->
7210: 66 6c 61 67 73 20 26 20 70 58 2d 3e 66 6c 61 67  flags & pX->flag
7220: 73 20 26 20 70 58 2d 3e 6d 53 63 6f 70 79 46 6c  s & pX->mScopyFl
7230: 61 67 73 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ags;.      asser
7240: 74 28 20 28 6d 46 6c 61 67 73 26 4d 45 4d 5f 49  t( (mFlags&MEM_I
7250: 6e 74 29 3d 3d 30 20 7c 7c 20 70 4d 65 6d 2d 3e  nt)==0 || pMem->
7260: 75 2e 69 3d 3d 70 58 2d 3e 75 2e 69 20 29 3b 0a  u.i==pX->u.i );.
7270: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 6d        assert( (m
7280: 46 6c 61 67 73 26 4d 45 4d 5f 52 65 61 6c 29 3d  Flags&MEM_Real)=
7290: 3d 30 20 7c 7c 20 70 4d 65 6d 2d 3e 75 2e 72 3d  =0 || pMem->u.r=
72a0: 3d 70 58 2d 3e 75 2e 72 20 29 3b 0a 20 20 20 20  =pX->u.r );.    
72b0: 20 20 61 73 73 65 72 74 28 20 28 6d 46 6c 61 67    assert( (mFlag
72c0: 73 26 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 20 7c  s&MEM_Str)==0  |
72d0: 7c 20 28 70 4d 65 6d 2d 3e 6e 3d 3d 70 58 2d 3e  | (pMem->n==pX->
72e0: 6e 20 26 26 20 70 4d 65 6d 2d 3e 7a 3d 3d 70 58  n && pMem->z==pX
72f0: 2d 3e 7a 29 20 29 3b 0a 20 20 20 20 20 20 61 73  ->z) );.      as
7300: 73 65 72 74 28 20 28 6d 46 6c 61 67 73 26 4d 45  sert( (mFlags&ME
7310: 4d 5f 42 6c 6f 62 29 3d 3d 30 20 20 7c 7c 20 73  M_Blob)==0  || s
7320: 71 6c 69 74 65 33 42 6c 6f 62 43 6f 6d 70 61 72  qlite3BlobCompar
7330: 65 28 70 4d 65 6d 2c 70 58 29 3d 3d 30 20 29 3b  e(pMem,pX)==0 );
7340: 0a 20 20 20 20 20 20 0a 20 20 20 20 20 20 2f 2a  .      .      /*
7350: 20 70 4d 65 6d 20 69 73 20 74 68 65 20 72 65 67   pMem is the reg
7360: 69 73 74 65 72 20 74 68 61 74 20 69 73 20 63 68  ister that is ch
7370: 61 6e 67 69 6e 67 2e 20 20 42 75 74 20 61 6c 73  anging.  But als
7380: 6f 20 6d 61 72 6b 20 70 58 20 61 73 0a 20 20 20  o mark pX as.   
7390: 20 20 20 2a 2a 20 75 6e 64 65 66 69 6e 65 64 20     ** undefined 
73a0: 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 71  so that we can q
73b0: 75 69 63 6b 6c 79 20 64 65 74 65 63 74 20 74 68  uickly detect th
73c0: 65 20 73 68 61 6c 6c 6f 77 2d 63 6f 70 79 20 65  e shallow-copy e
73d0: 72 72 6f 72 20 2a 2f 0a 20 20 20 20 20 20 70 58  rror */.      pX
73e0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
73f0: 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20 20 70  defined;.      p
7400: 58 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20  X->pScopyFrom = 
7410: 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  0;.    }.  }.  p
7420: 4d 65 6d 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Mem->pScopyFrom 
7430: 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 0;.#ifdef SQLI
7440: 54 45 5f 44 45 42 55 47 5f 43 4f 4c 55 4d 4e 5f  TE_DEBUG_COLUMN_
7450: 43 41 43 48 45 0a 20 20 70 4d 65 6d 2d 3e 69 54  CACHE.  pMem->iT
7460: 61 62 43 6f 6c 48 61 73 68 20 3d 20 30 3b 0a 23  abColHash = 0;.#
7470: 65 6e 64 69 66 0a 7d 0a 23 65 6e 64 69 66 20 2f  endif.}.#endif /
7480: 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
7490: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 61  /.../*.** Make a
74a0: 6e 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  n shallow copy o
74b0: 66 20 70 46 72 6f 6d 20 69 6e 74 6f 20 70 54 6f  f pFrom into pTo
74c0: 2e 20 20 50 72 69 6f 72 20 63 6f 6e 74 65 6e 74  .  Prior content
74d0: 73 20 6f 66 0a 2a 2a 20 70 54 6f 20 61 72 65 20  s of.** pTo are 
74e0: 66 72 65 65 64 2e 20 20 54 68 65 20 70 46 72 6f  freed.  The pFro
74f0: 6d 2d 3e 7a 20 66 69 65 6c 64 20 69 73 20 6e 6f  m->z field is no
7500: 74 20 64 75 70 6c 69 63 61 74 65 64 2e 20 20 49  t duplicated.  I
7510: 66 0a 2a 2a 20 70 46 72 6f 6d 2d 3e 7a 20 69 73  f.** pFrom->z is
7520: 20 75 73 65 64 2c 20 74 68 65 6e 20 70 54 6f 2d   used, then pTo-
7530: 3e 7a 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  >z points to the
7540: 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 70   same thing as p
7550: 46 72 6f 6d 2d 3e 7a 0a 2a 2a 20 61 6e 64 20 66  From->z.** and f
7560: 6c 61 67 73 20 67 65 74 73 20 73 72 63 54 79 70  lags gets srcTyp
7570: 65 20 28 65 69 74 68 65 72 20 4d 45 4d 5f 45 70  e (either MEM_Ep
7580: 68 65 6d 20 6f 72 20 4d 45 4d 5f 53 74 61 74 69  hem or MEM_Stati
7590: 63 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 53 51  c)..*/.static SQ
75a0: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 76 6f  LITE_NOINLINE vo
75b0: 69 64 20 76 64 62 65 43 6c 72 43 6f 70 79 28 4d  id vdbeClrCopy(M
75c0: 65 6d 20 2a 70 54 6f 2c 20 63 6f 6e 73 74 20 4d  em *pTo, const M
75d0: 65 6d 20 2a 70 46 72 6f 6d 2c 20 69 6e 74 20 65  em *pFrom, int e
75e0: 54 79 70 65 29 7b 0a 20 20 76 64 62 65 4d 65 6d  Type){.  vdbeMem
75f0: 43 6c 65 61 72 45 78 74 65 72 6e 41 6e 64 53 65  ClearExternAndSe
7600: 74 4e 75 6c 6c 28 70 54 6f 29 3b 0a 20 20 61 73  tNull(pTo);.  as
7610: 73 65 72 74 28 20 21 56 64 62 65 4d 65 6d 44 79  sert( !VdbeMemDy
7620: 6e 61 6d 69 63 28 70 54 6f 29 20 29 3b 0a 20 20  namic(pTo) );.  
7630: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
7640: 61 6c 6c 6f 77 43 6f 70 79 28 70 54 6f 2c 20 70  allowCopy(pTo, p
7650: 46 72 6f 6d 2c 20 65 54 79 70 65 29 3b 0a 7d 0a  From, eType);.}.
7660: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
7670: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 4d  MemShallowCopy(M
7680: 65 6d 20 2a 70 54 6f 2c 20 63 6f 6e 73 74 20 4d  em *pTo, const M
7690: 65 6d 20 2a 70 46 72 6f 6d 2c 20 69 6e 74 20 73  em *pFrom, int s
76a0: 72 63 54 79 70 65 29 7b 0a 20 20 61 73 73 65 72  rcType){.  asser
76b0: 74 28 20 28 70 46 72 6f 6d 2d 3e 66 6c 61 67 73  t( (pFrom->flags
76c0: 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
76d0: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
76e0: 54 6f 2d 3e 64 62 3d 3d 70 46 72 6f 6d 2d 3e 64  To->db==pFrom->d
76f0: 62 20 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d  b );.  if( VdbeM
7700: 65 6d 44 79 6e 61 6d 69 63 28 70 54 6f 29 20 29  emDynamic(pTo) )
7710: 7b 20 76 64 62 65 43 6c 72 43 6f 70 79 28 70 54  { vdbeClrCopy(pT
7720: 6f 2c 70 46 72 6f 6d 2c 73 72 63 54 79 70 65 29  o,pFrom,srcType)
7730: 3b 20 72 65 74 75 72 6e 3b 20 7d 0a 20 20 6d 65  ; return; }.  me
7740: 6d 63 70 79 28 70 54 6f 2c 20 70 46 72 6f 6d 2c  mcpy(pTo, pFrom,
7750: 20 4d 45 4d 43 45 4c 4c 53 49 5a 45 29 3b 0a 23   MEMCELLSIZE);.#
7760: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
7770: 55 47 5f 43 4f 4c 55 4d 4e 43 41 43 48 45 0a 20  UG_COLUMNCACHE. 
7780: 20 70 54 6f 2d 3e 69 54 61 62 43 6f 6c 48 61 73   pTo->iTabColHas
7790: 68 20 3d 20 70 46 72 6f 6d 2d 3e 69 54 61 62 43  h = pFrom->iTabC
77a0: 6f 6c 48 61 73 68 3b 0a 23 65 6e 64 69 66 0a 20  olHash;.#endif. 
77b0: 20 69 66 28 20 28 70 46 72 6f 6d 2d 3e 66 6c 61   if( (pFrom->fla
77c0: 67 73 26 4d 45 4d 5f 53 74 61 74 69 63 29 3d 3d  gs&MEM_Static)==
77d0: 30 20 29 7b 0a 20 20 20 20 70 54 6f 2d 3e 66 6c  0 ){.    pTo->fl
77e0: 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 44 79 6e  ags &= ~(MEM_Dyn
77f0: 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
7800: 45 70 68 65 6d 29 3b 0a 20 20 20 20 61 73 73 65  Ephem);.    asse
7810: 72 74 28 20 73 72 63 54 79 70 65 3d 3d 4d 45 4d  rt( srcType==MEM
7820: 5f 45 70 68 65 6d 20 7c 7c 20 73 72 63 54 79 70  _Ephem || srcTyp
7830: 65 3d 3d 4d 45 4d 5f 53 74 61 74 69 63 20 29 3b  e==MEM_Static );
7840: 0a 20 20 20 20 70 54 6f 2d 3e 66 6c 61 67 73 20  .    pTo->flags 
7850: 7c 3d 20 73 72 63 54 79 70 65 3b 0a 20 20 7d 0a  |= srcType;.  }.
7860: 7d 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20  }../*.** Make a 
7870: 66 75 6c 6c 20 63 6f 70 79 20 6f 66 20 70 46 72  full copy of pFr
7880: 6f 6d 20 69 6e 74 6f 20 70 54 6f 2e 20 20 50 72  om into pTo.  Pr
7890: 69 6f 72 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  ior contents of 
78a0: 70 54 6f 20 61 72 65 0a 2a 2a 20 66 72 65 65 64  pTo are.** freed
78b0: 20 62 65 66 6f 72 65 20 74 68 65 20 63 6f 70 79   before the copy
78c0: 20 69 73 20 6d 61 64 65 2e 0a 2a 2f 0a 69 6e 74   is made..*/.int
78d0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
78e0: 6f 70 79 28 4d 65 6d 20 2a 70 54 6f 2c 20 63 6f  opy(Mem *pTo, co
78f0: 6e 73 74 20 4d 65 6d 20 2a 70 46 72 6f 6d 29 7b  nst Mem *pFrom){
7900: 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49  .  int rc = SQLI
7910: 54 45 5f 4f 4b 3b 0a 0a 20 20 61 73 73 65 72 74  TE_OK;..  assert
7920: 28 20 28 70 46 72 6f 6d 2d 3e 66 6c 61 67 73 20  ( (pFrom->flags 
7930: 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
7940: 20 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65   );.  if( VdbeMe
7950: 6d 44 79 6e 61 6d 69 63 28 70 54 6f 29 20 29 20  mDynamic(pTo) ) 
7960: 76 64 62 65 4d 65 6d 43 6c 65 61 72 45 78 74 65  vdbeMemClearExte
7970: 72 6e 41 6e 64 53 65 74 4e 75 6c 6c 28 70 54 6f  rnAndSetNull(pTo
7980: 29 3b 0a 20 20 6d 65 6d 63 70 79 28 70 54 6f 2c  );.  memcpy(pTo,
7990: 20 70 46 72 6f 6d 2c 20 4d 45 4d 43 45 4c 4c 53   pFrom, MEMCELLS
79a0: 49 5a 45 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  IZE);.#ifdef SQL
79b0: 49 54 45 5f 44 45 42 55 47 5f 43 4f 4c 55 4d 4e  ITE_DEBUG_COLUMN
79c0: 43 41 43 48 45 0a 20 20 70 54 6f 2d 3e 69 54 61  CACHE.  pTo->iTa
79d0: 62 43 6f 6c 48 61 73 68 20 3d 20 70 46 72 6f 6d  bColHash = pFrom
79e0: 2d 3e 69 54 61 62 43 6f 6c 48 61 73 68 3b 0a 23  ->iTabColHash;.#
79f0: 65 6e 64 69 66 0a 20 20 70 54 6f 2d 3e 66 6c 61  endif.  pTo->fla
7a00: 67 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a  gs &= ~MEM_Dyn;.
7a10: 20 20 69 66 28 20 70 54 6f 2d 3e 66 6c 61 67 73    if( pTo->flags
7a20: 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c  &(MEM_Str|MEM_Bl
7a30: 6f 62 29 20 29 7b 0a 20 20 20 20 69 66 28 20 30  ob) ){.    if( 0
7a40: 3d 3d 28 70 46 72 6f 6d 2d 3e 66 6c 61 67 73 26  ==(pFrom->flags&
7a50: 4d 45 4d 5f 53 74 61 74 69 63 29 20 29 7b 0a 20  MEM_Static) ){. 
7a60: 20 20 20 20 20 70 54 6f 2d 3e 66 6c 61 67 73 20       pTo->flags 
7a70: 7c 3d 20 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20  |= MEM_Ephem;.  
7a80: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
7a90: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
7aa0: 61 62 6c 65 28 70 54 6f 29 3b 0a 20 20 20 20 7d  able(pTo);.    }
7ab0: 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 72  .  }..  return r
7ac0: 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 61 6e  c;.}../*.** Tran
7ad0: 73 66 65 72 20 74 68 65 20 63 6f 6e 74 65 6e 74  sfer the content
7ae0: 73 20 6f 66 20 70 46 72 6f 6d 20 74 6f 20 70 54  s of pFrom to pT
7af0: 6f 2e 20 41 6e 79 20 65 78 69 73 74 69 6e 67 20  o. Any existing 
7b00: 76 61 6c 75 65 20 69 6e 20 70 54 6f 20 69 73 0a  value in pTo is.
7b10: 2a 2a 20 66 72 65 65 64 2e 20 49 66 20 70 46 72  ** freed. If pFr
7b20: 6f 6d 20 63 6f 6e 74 61 69 6e 73 20 65 70 68 65  om contains ephe
7b30: 6d 65 72 61 6c 20 64 61 74 61 2c 20 61 20 63 6f  meral data, a co
7b40: 70 79 20 69 73 20 6d 61 64 65 2e 0a 2a 2a 0a 2a  py is made..**.*
7b50: 2a 20 70 46 72 6f 6d 20 63 6f 6e 74 61 69 6e 73  * pFrom contains
7b60: 20 61 6e 20 53 51 4c 20 4e 55 4c 4c 20 77 68 65   an SQL NULL whe
7b70: 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72  n this routine r
7b80: 65 74 75 72 6e 73 2e 0a 2a 2f 0a 76 6f 69 64 20  eturns..*/.void 
7b90: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
7ba0: 76 65 28 4d 65 6d 20 2a 70 54 6f 2c 20 4d 65 6d  ve(Mem *pTo, Mem
7bb0: 20 2a 70 46 72 6f 6d 29 7b 0a 20 20 61 73 73 65   *pFrom){.  asse
7bc0: 72 74 28 20 70 46 72 6f 6d 2d 3e 64 62 3d 3d 30  rt( pFrom->db==0
7bd0: 20 7c 7c 20 73 71 6c 69 74 65 33 5f 6d 75 74 65   || sqlite3_mute
7be0: 78 5f 68 65 6c 64 28 70 46 72 6f 6d 2d 3e 64 62  x_held(pFrom->db
7bf0: 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 61 73  ->mutex) );.  as
7c00: 73 65 72 74 28 20 70 54 6f 2d 3e 64 62 3d 3d 30  sert( pTo->db==0
7c10: 20 7c 7c 20 73 71 6c 69 74 65 33 5f 6d 75 74 65   || sqlite3_mute
7c20: 78 5f 68 65 6c 64 28 70 54 6f 2d 3e 64 62 2d 3e  x_held(pTo->db->
7c30: 6d 75 74 65 78 29 20 29 3b 0a 20 20 61 73 73 65  mutex) );.  asse
7c40: 72 74 28 20 70 46 72 6f 6d 2d 3e 64 62 3d 3d 30  rt( pFrom->db==0
7c50: 20 7c 7c 20 70 54 6f 2d 3e 64 62 3d 3d 30 20 7c   || pTo->db==0 |
7c60: 7c 20 70 46 72 6f 6d 2d 3e 64 62 3d 3d 70 54 6f  | pFrom->db==pTo
7c70: 2d 3e 64 62 20 29 3b 0a 0a 20 20 73 71 6c 69 74  ->db );..  sqlit
7c80: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
7c90: 28 70 54 6f 29 3b 0a 20 20 6d 65 6d 63 70 79 28  (pTo);.  memcpy(
7ca0: 70 54 6f 2c 20 70 46 72 6f 6d 2c 20 73 69 7a 65  pTo, pFrom, size
7cb0: 6f 66 28 4d 65 6d 29 29 3b 0a 20 20 70 46 72 6f  of(Mem));.  pFro
7cc0: 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  m->flags = MEM_N
7cd0: 75 6c 6c 3b 0a 20 20 70 46 72 6f 6d 2d 3e 73 7a  ull;.  pFrom->sz
7ce0: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 7d 0a 0a 2f  Malloc = 0;.}../
7cf0: 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20  *.** Change the 
7d00: 76 61 6c 75 65 20 6f 66 20 61 20 4d 65 6d 20 74  value of a Mem t
7d10: 6f 20 62 65 20 61 20 73 74 72 69 6e 67 20 6f 72  o be a string or
7d20: 20 61 20 42 4c 4f 42 2e 0a 2a 2a 0a 2a 2a 20 54   a BLOB..**.** T
7d30: 68 65 20 6d 65 6d 6f 72 79 20 6d 61 6e 61 67 65  he memory manage
7d40: 6d 65 6e 74 20 73 74 72 61 74 65 67 79 20 64 65  ment strategy de
7d50: 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 76 61 6c  pends on the val
7d60: 75 65 20 6f 66 20 74 68 65 20 78 44 65 6c 0a 2a  ue of the xDel.*
7d70: 2a 20 70 61 72 61 6d 65 74 65 72 2e 20 49 66 20  * parameter. If 
7d80: 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65 64  the value passed
7d90: 20 69 73 20 53 51 4c 49 54 45 5f 54 52 41 4e 53   is SQLITE_TRANS
7da0: 49 45 4e 54 2c 20 74 68 65 6e 20 74 68 65 20 0a  IENT, then the .
7db0: 2a 2a 20 73 74 72 69 6e 67 20 69 73 20 63 6f 70  ** string is cop
7dc0: 69 65 64 20 69 6e 74 6f 20 61 20 28 70 6f 73 73  ied into a (poss
7dd0: 69 62 6c 79 20 65 78 69 73 74 69 6e 67 29 20 62  ibly existing) b
7de0: 75 66 66 65 72 20 6d 61 6e 61 67 65 64 20 62 79  uffer managed by
7df0: 20 74 68 65 20 0a 2a 2a 20 4d 65 6d 20 73 74 72   the .** Mem str
7e00: 75 63 74 75 72 65 2e 20 4f 74 68 65 72 77 69 73  ucture. Otherwis
7e10: 65 2c 20 61 6e 79 20 65 78 69 73 74 69 6e 67 20  e, any existing 
7e20: 62 75 66 66 65 72 20 69 73 20 66 72 65 65 64 20  buffer is freed 
7e30: 61 6e 64 20 74 68 65 0a 2a 2a 20 70 6f 69 6e 74  and the.** point
7e40: 65 72 20 63 6f 70 69 65 64 2e 0a 2a 2a 0a 2a 2a  er copied..**.**
7e50: 20 49 66 20 74 68 65 20 73 74 72 69 6e 67 20 69   If the string i
7e60: 73 20 74 6f 6f 20 6c 61 72 67 65 20 28 69 66 20  s too large (if 
7e70: 69 74 20 65 78 63 65 65 64 73 20 74 68 65 20 53  it exceeds the S
7e80: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
7e90: 54 48 0a 2a 2a 20 73 69 7a 65 20 6c 69 6d 69 74  TH.** size limit
7ea0: 29 20 74 68 65 6e 20 6e 6f 20 6d 65 6d 6f 72 79  ) then no memory
7eb0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 63 63 75   allocation occu
7ec0: 72 73 2e 20 20 49 66 20 74 68 65 20 73 74 72 69  rs.  If the stri
7ed0: 6e 67 20 63 61 6e 20 62 65 0a 2a 2a 20 73 74 6f  ng can be.** sto
7ee0: 72 65 64 20 77 69 74 68 6f 75 74 20 61 6c 6c 6f  red without allo
7ef0: 63 61 74 69 6e 67 20 6d 65 6d 6f 72 79 2c 20 74  cating memory, t
7f00: 68 65 6e 20 69 74 20 69 73 2e 20 20 49 66 20 61  hen it is.  If a
7f10: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
7f20: 6f 6e 0a 2a 2a 20 69 73 20 72 65 71 75 69 72 65  on.** is require
7f30: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73  d to store the s
7f40: 74 72 69 6e 67 2c 20 74 68 65 6e 20 76 61 6c 75  tring, then valu
7f50: 65 20 6f 66 20 70 4d 65 6d 20 69 73 20 75 6e 63  e of pMem is unc
7f60: 68 61 6e 67 65 64 2e 20 20 49 6e 0a 2a 2a 20 65  hanged.  In.** e
7f70: 69 74 68 65 72 20 63 61 73 65 2c 20 53 51 4c 49  ither case, SQLI
7f80: 54 45 5f 54 4f 4f 42 49 47 20 69 73 20 72 65 74  TE_TOOBIG is ret
7f90: 75 72 6e 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71  urned..*/.int sq
7fa0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
7fb0: 74 72 28 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 2c  tr(.  Mem *pMem,
7fc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
7fd0: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 73 65 74 20  ory cell to set 
7fe0: 74 6f 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20  to string value 
7ff0: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
8000: 2a 7a 2c 20 20 20 20 20 20 2f 2a 20 53 74 72 69  *z,      /* Stri
8010: 6e 67 20 70 6f 69 6e 74 65 72 20 2a 2f 0a 20 20  ng pointer */.  
8020: 69 6e 74 20 6e 2c 20 20 20 20 20 20 20 20 20 20  int n,          
8030: 20 20 20 20 2f 2a 20 42 79 74 65 73 20 69 6e 20      /* Bytes in 
8040: 73 74 72 69 6e 67 2c 20 6f 72 20 6e 65 67 61 74  string, or negat
8050: 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 2c  ive */.  u8 enc,
8060: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8070: 45 6e 63 6f 64 69 6e 67 20 6f 66 20 7a 2e 20 20  Encoding of z.  
8080: 30 20 66 6f 72 20 42 4c 4f 42 73 20 2a 2f 0a 20  0 for BLOBs */. 
8090: 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
80a0: 69 64 2a 29 20 2f 2a 20 44 65 73 74 72 75 63 74  id*) /* Destruct
80b0: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29  or function */.)
80c0: 7b 0a 20 20 69 6e 74 20 6e 42 79 74 65 20 3d 20  {.  int nByte = 
80d0: 6e 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76  n;      /* New v
80e0: 61 6c 75 65 20 66 6f 72 20 70 4d 65 6d 2d 3e 6e  alue for pMem->n
80f0: 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74   */.  int iLimit
8100: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78  ;         /* Max
8110: 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 73 74 72  imum allowed str
8120: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 73 69 7a 65  ing or blob size
8130: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 20   */.  u16 flags 
8140: 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77  = 0;      /* New
8150: 20 76 61 6c 75 65 20 66 6f 72 20 70 4d 65 6d 2d   value for pMem-
8160: 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 61 73 73  >flags */..  ass
8170: 65 72 74 28 20 70 4d 65 6d 2d 3e 64 62 3d 3d 30  ert( pMem->db==0
8180: 20 7c 7c 20 73 71 6c 69 74 65 33 5f 6d 75 74 65   || sqlite3_mute
8190: 78 5f 68 65 6c 64 28 70 4d 65 6d 2d 3e 64 62 2d  x_held(pMem->db-
81a0: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 61 73 73  >mutex) );.  ass
81b0: 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
81c0: 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
81d0: 3d 30 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 7a  =0 );..  /* If z
81e0: 20 69 73 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74   is a NULL point
81f0: 65 72 2c 20 73 65 74 20 70 4d 65 6d 20 74 6f 20  er, set pMem to 
8200: 63 6f 6e 74 61 69 6e 20 61 6e 20 53 51 4c 20 4e  contain an SQL N
8210: 55 4c 4c 2e 20 2a 2f 0a 20 20 69 66 28 20 21 7a  ULL. */.  if( !z
8220: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
8230: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4d  dbeMemSetNull(pM
8240: 65 6d 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  em);.    return 
8250: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 0a  SQLITE_OK;.  }..
8260: 20 20 69 66 28 20 70 4d 65 6d 2d 3e 64 62 20 29    if( pMem->db )
8270: 7b 0a 20 20 20 20 69 4c 69 6d 69 74 20 3d 20 70  {.    iLimit = p
8280: 4d 65 6d 2d 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  Mem->db->aLimit[
8290: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
82a0: 47 54 48 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  GTH];.  }else{. 
82b0: 20 20 20 69 4c 69 6d 69 74 20 3d 20 53 51 4c 49     iLimit = SQLI
82c0: 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 3b 0a 20  TE_MAX_LENGTH;. 
82d0: 20 7d 0a 20 20 66 6c 61 67 73 20 3d 20 28 65 6e   }.  flags = (en
82e0: 63 3d 3d 30 3f 4d 45 4d 5f 42 6c 6f 62 3a 4d 45  c==0?MEM_Blob:ME
82f0: 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 6e 42  M_Str);.  if( nB
8300: 79 74 65 3c 30 20 29 7b 0a 20 20 20 20 61 73 73  yte<0 ){.    ass
8310: 65 72 74 28 20 65 6e 63 21 3d 30 20 29 3b 0a 20  ert( enc!=0 );. 
8320: 20 20 20 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49     if( enc==SQLI
8330: 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 20  TE_UTF8 ){.     
8340: 20 6e 42 79 74 65 20 3d 20 30 78 37 66 66 66 66   nByte = 0x7ffff
8350: 66 66 66 20 26 20 28 69 6e 74 29 73 74 72 6c 65  fff & (int)strle
8360: 6e 28 7a 29 3b 0a 20 20 20 20 20 20 69 66 28 20  n(z);.      if( 
8370: 6e 42 79 74 65 3e 69 4c 69 6d 69 74 20 29 20 6e  nByte>iLimit ) n
8380: 42 79 74 65 20 3d 20 69 4c 69 6d 69 74 2b 31 3b  Byte = iLimit+1;
8390: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
83a0: 20 20 66 6f 72 28 6e 42 79 74 65 3d 30 3b 20 6e    for(nByte=0; n
83b0: 42 79 74 65 3c 3d 69 4c 69 6d 69 74 20 26 26 20  Byte<=iLimit && 
83c0: 28 7a 5b 6e 42 79 74 65 5d 20 7c 20 7a 5b 6e 42  (z[nByte] | z[nB
83d0: 79 74 65 2b 31 5d 29 3b 20 6e 42 79 74 65 2b 3d  yte+1]); nByte+=
83e0: 32 29 7b 7d 0a 20 20 20 20 7d 0a 20 20 20 20 66  2){}.    }.    f
83f0: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d  lags |= MEM_Term
8400: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 65 20  ;.  }..  /* The 
8410: 66 6f 6c 6c 6f 77 69 6e 67 20 62 6c 6f 63 6b 20  following block 
8420: 73 65 74 73 20 74 68 65 20 6e 65 77 20 76 61 6c  sets the new val
8430: 75 65 73 20 6f 66 20 4d 65 6d 2e 7a 20 61 6e 64  ues of Mem.z and
8440: 20 4d 65 6d 2e 78 44 65 6c 2e 20 49 74 0a 20 20   Mem.xDel. It.  
8450: 2a 2a 20 61 6c 73 6f 20 73 65 74 73 20 61 20 66  ** also sets a f
8460: 6c 61 67 20 69 6e 20 6c 6f 63 61 6c 20 76 61 72  lag in local var
8470: 69 61 62 6c 65 20 22 66 6c 61 67 73 22 20 74 6f  iable "flags" to
8480: 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 6d 65   indicate the me
8490: 6d 6f 72 79 0a 20 20 2a 2a 20 6d 61 6e 61 67 65  mory.  ** manage
84a0: 6d 65 6e 74 20 28 6f 6e 65 20 6f 66 20 4d 45 4d  ment (one of MEM
84b0: 5f 44 79 6e 20 6f 72 20 4d 45 4d 5f 53 74 61 74  _Dyn or MEM_Stat
84c0: 69 63 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ic)..  */.  if( 
84d0: 78 44 65 6c 3d 3d 53 51 4c 49 54 45 5f 54 52 41  xDel==SQLITE_TRA
84e0: 4e 53 49 45 4e 54 20 29 7b 0a 20 20 20 20 69 6e  NSIENT ){.    in
84f0: 74 20 6e 41 6c 6c 6f 63 20 3d 20 6e 42 79 74 65  t nAlloc = nByte
8500: 3b 0a 20 20 20 20 69 66 28 20 66 6c 61 67 73 26  ;.    if( flags&
8510: 4d 45 4d 5f 54 65 72 6d 20 29 7b 0a 20 20 20 20  MEM_Term ){.    
8520: 20 20 6e 41 6c 6c 6f 63 20 2b 3d 20 28 65 6e 63    nAlloc += (enc
8530: 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 3f 31 3a  ==SQLITE_UTF8?1:
8540: 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  2);.    }.    if
8550: 28 20 6e 42 79 74 65 3e 69 4c 69 6d 69 74 20 29  ( nByte>iLimit )
8560: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
8570: 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20  QLITE_TOOBIG;.  
8580: 20 20 7d 0a 20 20 20 20 74 65 73 74 63 61 73 65    }.    testcase
8590: 28 20 6e 41 6c 6c 6f 63 3d 3d 30 20 29 3b 0a 20  ( nAlloc==0 );. 
85a0: 20 20 20 74 65 73 74 63 61 73 65 28 20 6e 41 6c     testcase( nAl
85b0: 6c 6f 63 3d 3d 33 31 20 29 3b 0a 20 20 20 20 74  loc==31 );.    t
85c0: 65 73 74 63 61 73 65 28 20 6e 41 6c 6c 6f 63 3d  estcase( nAlloc=
85d0: 3d 33 32 20 29 3b 0a 20 20 20 20 69 66 28 20 73  =32 );.    if( s
85e0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
85f0: 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4d 65 6d  arAndResize(pMem
8600: 2c 20 4d 41 58 28 6e 41 6c 6c 6f 63 2c 33 32 29  , MAX(nAlloc,32)
8610: 29 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  ) ){.      retur
8620: 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  n SQLITE_NOMEM_B
8630: 4b 50 54 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6d  KPT;.    }.    m
8640: 65 6d 63 70 79 28 70 4d 65 6d 2d 3e 7a 2c 20 7a  emcpy(pMem->z, z
8650: 2c 20 6e 41 6c 6c 6f 63 29 3b 0a 20 20 7d 65 6c  , nAlloc);.  }el
8660: 73 65 20 69 66 28 20 78 44 65 6c 3d 3d 53 51 4c  se if( xDel==SQL
8670: 49 54 45 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20  ITE_DYNAMIC ){. 
8680: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
8690: 6d 52 65 6c 65 61 73 65 28 70 4d 65 6d 29 3b 0a  mRelease(pMem);.
86a0: 20 20 20 20 70 4d 65 6d 2d 3e 7a 4d 61 6c 6c 6f      pMem->zMallo
86b0: 63 20 3d 20 70 4d 65 6d 2d 3e 7a 20 3d 20 28 63  c = pMem->z = (c
86c0: 68 61 72 20 2a 29 7a 3b 0a 20 20 20 20 70 4d 65  har *)z;.    pMe
86d0: 6d 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d 20 73 71  m->szMalloc = sq
86e0: 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a  lite3DbMallocSiz
86f0: 65 28 70 4d 65 6d 2d 3e 64 62 2c 20 70 4d 65 6d  e(pMem->db, pMem
8700: 2d 3e 7a 4d 61 6c 6c 6f 63 29 3b 0a 20 20 7d 65  ->zMalloc);.  }e
8710: 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
8720: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
8730: 4d 65 6d 29 3b 0a 20 20 20 20 70 4d 65 6d 2d 3e  Mem);.    pMem->
8740: 7a 20 3d 20 28 63 68 61 72 20 2a 29 7a 3b 0a 20  z = (char *)z;. 
8750: 20 20 20 70 4d 65 6d 2d 3e 78 44 65 6c 20 3d 20     pMem->xDel = 
8760: 78 44 65 6c 3b 0a 20 20 20 20 66 6c 61 67 73 20  xDel;.    flags 
8770: 7c 3d 20 28 28 78 44 65 6c 3d 3d 53 51 4c 49 54  |= ((xDel==SQLIT
8780: 45 5f 53 54 41 54 49 43 29 3f 4d 45 4d 5f 53 74  E_STATIC)?MEM_St
8790: 61 74 69 63 3a 4d 45 4d 5f 44 79 6e 29 3b 0a 20  atic:MEM_Dyn);. 
87a0: 20 7d 0a 0a 20 20 70 4d 65 6d 2d 3e 6e 20 3d 20   }..  pMem->n = 
87b0: 6e 42 79 74 65 3b 0a 20 20 70 4d 65 6d 2d 3e 66  nByte;.  pMem->f
87c0: 6c 61 67 73 20 3d 20 66 6c 61 67 73 3b 0a 20 20  lags = flags;.  
87d0: 70 4d 65 6d 2d 3e 65 6e 63 20 3d 20 28 65 6e 63  pMem->enc = (enc
87e0: 3d 3d 30 20 3f 20 53 51 4c 49 54 45 5f 55 54 46  ==0 ? SQLITE_UTF
87f0: 38 20 3a 20 65 6e 63 29 3b 0a 0a 23 69 66 6e 64  8 : enc);..#ifnd
8800: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
8810: 54 46 31 36 0a 20 20 69 66 28 20 70 4d 65 6d 2d  TF16.  if( pMem-
8820: 3e 65 6e 63 21 3d 53 51 4c 49 54 45 5f 55 54 46  >enc!=SQLITE_UTF
8830: 38 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65  8 && sqlite3Vdbe
8840: 4d 65 6d 48 61 6e 64 6c 65 42 6f 6d 28 70 4d 65  MemHandleBom(pMe
8850: 6d 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  m) ){.    return
8860: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
8870: 50 54 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  PT;.  }.#endif..
8880: 20 20 69 66 28 20 6e 42 79 74 65 3e 69 4c 69 6d    if( nByte>iLim
8890: 69 74 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  it ){.    return
88a0: 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a   SQLITE_TOOBIG;.
88b0: 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 53 51    }..  return SQ
88c0: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a  LITE_OK;.}../*.*
88d0: 2a 20 4d 6f 76 65 20 64 61 74 61 20 6f 75 74 20  * Move data out 
88e0: 6f 66 20 61 20 62 74 72 65 65 20 6b 65 79 20 6f  of a btree key o
88f0: 72 20 64 61 74 61 20 66 69 65 6c 64 20 61 6e 64  r data field and
8900: 20 69 6e 74 6f 20 61 20 4d 65 6d 20 73 74 72 75   into a Mem stru
8910: 63 74 75 72 65 2e 0a 2a 2a 20 54 68 65 20 64 61  cture..** The da
8920: 74 61 20 69 73 20 70 61 79 6c 6f 61 64 20 66 72  ta is payload fr
8930: 6f 6d 20 74 68 65 20 65 6e 74 72 79 20 74 68 61  om the entry tha
8940: 74 20 70 43 75 72 20 69 73 20 63 75 72 72 65 6e  t pCur is curren
8950: 74 6c 79 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20  tly pointing.** 
8960: 74 6f 2e 20 20 6f 66 66 73 65 74 20 61 6e 64 20  to.  offset and 
8970: 61 6d 74 20 64 65 74 65 72 6d 69 6e 65 20 77 68  amt determine wh
8980: 61 74 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68  at portion of th
8990: 65 20 64 61 74 61 20 6f 72 20 6b 65 79 20 74 6f  e data or key to
89a0: 20 72 65 74 72 69 65 76 65 2e 0a 2a 2a 20 54 68   retrieve..** Th
89b0: 65 20 72 65 73 75 6c 74 20 69 73 20 77 72 69 74  e result is writ
89c0: 74 65 6e 20 69 6e 74 6f 20 74 68 65 20 70 4d 65  ten into the pMe
89d0: 6d 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  m element..**.**
89e0: 20 54 68 65 20 70 4d 65 6d 20 6f 62 6a 65 63 74   The pMem object
89f0: 20 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20   must have been 
8a00: 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 54 68  initialized.  Th
8a10: 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20  is routine will 
8a20: 75 73 65 0a 2a 2a 20 70 4d 65 6d 2d 3e 7a 4d 61  use.** pMem->zMa
8a30: 6c 6c 6f 63 20 74 6f 20 68 6f 6c 64 20 74 68 65  lloc to hold the
8a40: 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 74 68   content from th
8a50: 65 20 62 74 72 65 65 2c 20 69 66 20 70 6f 73 73  e btree, if poss
8a60: 69 62 6c 65 2e 20 20 4e 65 77 0a 2a 2a 20 70 4d  ible.  New.** pM
8a70: 65 6d 2d 3e 7a 4d 61 6c 6c 6f 63 20 73 70 61 63  em->zMalloc spac
8a80: 65 20 77 69 6c 6c 20 62 65 20 61 6c 6c 6f 63 61  e will be alloca
8a90: 74 65 64 20 69 66 20 6e 65 63 65 73 73 61 72 79  ted if necessary
8aa0: 2e 20 20 54 68 65 20 63 61 6c 6c 69 6e 67 20 72  .  The calling r
8ab0: 6f 75 74 69 6e 65 0a 2a 2a 20 69 73 20 72 65 73  outine.** is res
8ac0: 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 6d 61 6b  ponsible for mak
8ad0: 69 6e 67 20 73 75 72 65 20 74 68 61 74 20 74 68  ing sure that th
8ae0: 65 20 70 4d 65 6d 20 6f 62 6a 65 63 74 20 69 73  e pMem object is
8af0: 20 65 76 65 6e 74 75 61 6c 6c 79 0a 2a 2a 20 64   eventually.** d
8b00: 65 73 74 72 6f 79 65 64 2e 0a 2a 2a 0a 2a 2a 20  estroyed..**.** 
8b10: 49 66 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  If this routine 
8b20: 66 61 69 6c 73 20 66 6f 72 20 61 6e 79 20 72 65  fails for any re
8b30: 61 73 6f 6e 20 28 6d 61 6c 6c 6f 63 20 72 65 74  ason (malloc ret
8b40: 75 72 6e 73 20 4e 55 4c 4c 20 6f 72 20 75 6e 61  urns NULL or una
8b50: 62 6c 65 0a 2a 2a 20 74 6f 20 72 65 61 64 20 66  ble.** to read f
8b60: 72 6f 6d 20 74 68 65 20 64 69 73 6b 29 20 74 68  rom the disk) th
8b70: 65 6e 20 74 68 65 20 70 4d 65 6d 20 69 73 20 6c  en the pMem is l
8b80: 65 66 74 20 69 6e 20 61 6e 20 69 6e 63 6f 6e 73  eft in an incons
8b90: 69 73 74 65 6e 74 20 73 74 61 74 65 2e 0a 2a 2f  istent state..*/
8ba0: 0a 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e  .static SQLITE_N
8bb0: 4f 49 4e 4c 49 4e 45 20 69 6e 74 20 76 64 62 65  OINLINE int vdbe
8bc0: 4d 65 6d 46 72 6f 6d 42 74 72 65 65 52 65 73 69  MemFromBtreeResi
8bd0: 7a 65 28 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  ze(.  BtCursor *
8be0: 70 43 75 72 2c 20 20 20 2f 2a 20 43 75 72 73 6f  pCur,   /* Curso
8bf0: 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 72 65  r pointing at re
8c00: 63 6f 72 64 20 74 6f 20 72 65 74 72 69 65 76 65  cord to retrieve
8c10: 2e 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65  . */.  u32 offse
8c20: 74 2c 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73  t,       /* Offs
8c30: 65 74 20 66 72 6f 6d 20 74 68 65 20 73 74 61 72  et from the star
8c40: 74 20 6f 66 20 64 61 74 61 20 74 6f 20 72 65 74  t of data to ret
8c50: 75 72 6e 20 62 79 74 65 73 20 66 72 6f 6d 2e 20  urn bytes from. 
8c60: 2a 2f 0a 20 20 75 33 32 20 61 6d 74 2c 20 20 20  */.  u32 amt,   
8c70: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
8c80: 20 6f 66 20 62 79 74 65 73 20 74 6f 20 72 65 74   of bytes to ret
8c90: 75 72 6e 2e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  urn. */.  Mem *p
8ca0: 4d 65 6d 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  Mem         /* O
8cb0: 55 54 3a 20 52 65 74 75 72 6e 20 64 61 74 61 20  UT: Return data 
8cc0: 69 6e 20 74 68 69 73 20 4d 65 6d 20 73 74 72 75  in this Mem stru
8cd0: 63 74 75 72 65 2e 20 2a 2f 0a 29 7b 0a 20 20 69  cture. */.){.  i
8ce0: 6e 74 20 72 63 3b 0a 20 20 70 4d 65 6d 2d 3e 66  nt rc;.  pMem->f
8cf0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
8d00: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
8d10: 3d 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  ==(rc = sqlite3V
8d20: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
8d30: 73 69 7a 65 28 70 4d 65 6d 2c 20 61 6d 74 2b 31  size(pMem, amt+1
8d40: 29 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  )) ){.    rc = s
8d50: 71 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f  qlite3BtreePaylo
8d60: 61 64 28 70 43 75 72 2c 20 6f 66 66 73 65 74 2c  ad(pCur, offset,
8d70: 20 61 6d 74 2c 20 70 4d 65 6d 2d 3e 7a 29 3b 0a   amt, pMem->z);.
8d80: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
8d90: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 70  TE_OK ){.      p
8da0: 4d 65 6d 2d 3e 7a 5b 61 6d 74 5d 20 3d 20 30 3b  Mem->z[amt] = 0;
8db0: 20 20 20 2f 2a 20 4f 76 65 72 72 75 6e 20 61 72     /* Overrun ar
8dc0: 65 61 20 75 73 65 64 20 77 68 65 6e 20 72 65 61  ea used when rea
8dd0: 64 69 6e 67 20 6d 61 6c 66 6f 72 6d 65 64 20 72  ding malformed r
8de0: 65 63 6f 72 64 73 20 2a 2f 0a 20 20 20 20 20 20  ecords */.      
8df0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pMem->flags = ME
8e00: 4d 5f 42 6c 6f 62 3b 0a 20 20 20 20 20 20 70 4d  M_Blob;.      pM
8e10: 65 6d 2d 3e 6e 20 3d 20 28 69 6e 74 29 61 6d 74  em->n = (int)amt
8e20: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
8e30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
8e40: 6d 52 65 6c 65 61 73 65 28 70 4d 65 6d 29 3b 0a  mRelease(pMem);.
8e50: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
8e60: 72 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c  rn rc;.}.int sql
8e70: 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
8e80: 74 72 65 65 28 0a 20 20 42 74 43 75 72 73 6f 72  tree(.  BtCursor
8e90: 20 2a 70 43 75 72 2c 20 20 20 2f 2a 20 43 75 72   *pCur,   /* Cur
8ea0: 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  sor pointing at 
8eb0: 72 65 63 6f 72 64 20 74 6f 20 72 65 74 72 69 65  record to retrie
8ec0: 76 65 2e 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66  ve. */.  u32 off
8ed0: 73 65 74 2c 20 20 20 20 20 20 20 2f 2a 20 4f 66  set,       /* Of
8ee0: 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 73 74  fset from the st
8ef0: 61 72 74 20 6f 66 20 64 61 74 61 20 74 6f 20 72  art of data to r
8f00: 65 74 75 72 6e 20 62 79 74 65 73 20 66 72 6f 6d  eturn bytes from
8f10: 2e 20 2a 2f 0a 20 20 75 33 32 20 61 6d 74 2c 20  . */.  u32 amt, 
8f20: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
8f30: 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20 72  er of bytes to r
8f40: 65 74 75 72 6e 2e 20 2a 2f 0a 20 20 4d 65 6d 20  eturn. */.  Mem 
8f50: 2a 70 4d 65 6d 20 20 20 20 20 20 20 20 20 2f 2a  *pMem         /*
8f60: 20 4f 55 54 3a 20 52 65 74 75 72 6e 20 64 61 74   OUT: Return dat
8f70: 61 20 69 6e 20 74 68 69 73 20 4d 65 6d 20 73 74  a in this Mem st
8f80: 72 75 63 74 75 72 65 2e 20 2a 2f 0a 29 7b 0a 20  ructure. */.){. 
8f90: 20 63 68 61 72 20 2a 7a 44 61 74 61 3b 20 20 20   char *zData;   
8fa0: 20 20 20 20 20 2f 2a 20 44 61 74 61 20 66 72 6f       /* Data fro
8fb0: 6d 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65  m the btree laye
8fc0: 72 20 2a 2f 0a 20 20 75 33 32 20 61 76 61 69 6c  r */.  u32 avail
8fd0: 61 62 6c 65 20 3d 20 30 3b 20 20 2f 2a 20 4e 75  able = 0;  /* Nu
8fe0: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 61 76  mber of bytes av
8ff0: 61 69 6c 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c  ailable on the l
9000: 6f 63 61 6c 20 62 74 72 65 65 20 70 61 67 65 20  ocal btree page 
9010: 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  */.  int rc = SQ
9020: 4c 49 54 45 5f 4f 4b 3b 20 2f 2a 20 52 65 74 75  LITE_OK; /* Retu
9030: 72 6e 20 63 6f 64 65 20 2a 2f 0a 0a 20 20 61 73  rn code */..  as
9040: 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
9050: 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
9060: 70 43 75 72 29 20 29 3b 0a 20 20 61 73 73 65 72  pCur) );.  asser
9070: 74 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d  t( !VdbeMemDynam
9080: 69 63 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 2f  ic(pMem) );..  /
9090: 2a 20 4e 6f 74 65 3a 20 74 68 65 20 63 61 6c 6c  * Note: the call
90a0: 73 20 74 6f 20 42 74 72 65 65 4b 65 79 46 65 74  s to BtreeKeyFet
90b0: 63 68 28 29 20 61 6e 64 20 44 61 74 61 46 65 74  ch() and DataFet
90c0: 63 68 28 29 20 62 65 6c 6f 77 20 61 73 73 65 72  ch() below asser
90d0: 74 28 29 20 0a 20 20 2a 2a 20 74 68 61 74 20 62  t() .  ** that b
90e0: 6f 74 68 20 74 68 65 20 42 74 53 68 61 72 65 64  oth the BtShared
90f0: 20 61 6e 64 20 64 61 74 61 62 61 73 65 20 68 61   and database ha
9100: 6e 64 6c 65 20 6d 75 74 65 78 65 73 20 61 72 65  ndle mutexes are
9110: 20 68 65 6c 64 2e 20 2a 2f 0a 20 20 61 73 73 65   held. */.  asse
9120: 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
9130: 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
9140: 30 20 29 3b 0a 20 20 7a 44 61 74 61 20 3d 20 28  0 );.  zData = (
9150: 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 42 74  char *)sqlite3Bt
9160: 72 65 65 50 61 79 6c 6f 61 64 46 65 74 63 68 28  reePayloadFetch(
9170: 70 43 75 72 2c 20 26 61 76 61 69 6c 61 62 6c 65  pCur, &available
9180: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 44 61  );.  assert( zDa
9190: 74 61 21 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20  ta!=0 );..  if( 
91a0: 6f 66 66 73 65 74 2b 61 6d 74 3c 3d 61 76 61 69  offset+amt<=avai
91b0: 6c 61 62 6c 65 20 29 7b 0a 20 20 20 20 70 4d 65  lable ){.    pMe
91c0: 6d 2d 3e 7a 20 3d 20 26 7a 44 61 74 61 5b 6f 66  m->z = &zData[of
91d0: 66 73 65 74 5d 3b 0a 20 20 20 20 70 4d 65 6d 2d  fset];.    pMem-
91e0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f  >flags = MEM_Blo
91f0: 62 7c 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20  b|MEM_Ephem;.   
9200: 20 70 4d 65 6d 2d 3e 6e 20 3d 20 28 69 6e 74 29   pMem->n = (int)
9210: 61 6d 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  amt;.  }else{.  
9220: 20 20 72 63 20 3d 20 76 64 62 65 4d 65 6d 46 72    rc = vdbeMemFr
9230: 6f 6d 42 74 72 65 65 52 65 73 69 7a 65 28 70 43  omBtreeResize(pC
9240: 75 72 2c 20 6f 66 66 73 65 74 2c 20 61 6d 74 2c  ur, offset, amt,
9250: 20 70 4d 65 6d 29 3b 0a 20 20 7d 0a 0a 20 20 72   pMem);.  }..  r
9260: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
9270: 2a 2a 20 54 68 65 20 70 56 61 6c 20 61 72 67 75  ** The pVal argu
9280: 6d 65 6e 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f  ment is known to
9290: 20 62 65 20 61 20 76 61 6c 75 65 20 6f 74 68 65   be a value othe
92a0: 72 20 74 68 61 6e 20 4e 55 4c 4c 2e 0a 2a 2a 20  r than NULL..** 
92b0: 43 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20  Convert it into 
92c0: 61 20 73 74 72 69 6e 67 20 77 69 74 68 20 65 6e  a string with en
92d0: 63 6f 64 69 6e 67 20 65 6e 63 20 61 6e 64 20 72  coding enc and r
92e0: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 0a  eturn a pointer.
92f0: 2a 2a 20 74 6f 20 61 20 7a 65 72 6f 2d 74 65 72  ** to a zero-ter
9300: 6d 69 6e 61 74 65 64 20 76 65 72 73 69 6f 6e 20  minated version 
9310: 6f 66 20 74 68 61 74 20 73 74 72 69 6e 67 2e 0a  of that string..
9320: 2a 2f 0a 73 74 61 74 69 63 20 53 51 4c 49 54 45  */.static SQLITE
9330: 5f 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6e 73 74 20  _NOINLINE const 
9340: 76 6f 69 64 20 2a 76 61 6c 75 65 54 6f 54 65 78  void *valueToTex
9350: 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t(sqlite3_value*
9360: 20 70 56 61 6c 2c 20 75 38 20 65 6e 63 29 7b 0a   pVal, u8 enc){.
9370: 20 20 61 73 73 65 72 74 28 20 70 56 61 6c 21 3d    assert( pVal!=
9380: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
9390: 56 61 6c 2d 3e 64 62 3d 3d 30 20 7c 7c 20 73 71  Val->db==0 || sq
93a0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64  lite3_mutex_held
93b0: 28 70 56 61 6c 2d 3e 64 62 2d 3e 6d 75 74 65 78  (pVal->db->mutex
93c0: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  ) );.  assert( (
93d0: 65 6e 63 26 33 29 3d 3d 28 65 6e 63 26 7e 53 51  enc&3)==(enc&~SQ
93e0: 4c 49 54 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e  LITE_UTF16_ALIGN
93f0: 45 44 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ED) );.  assert(
9400: 20 28 70 56 61 6c 2d 3e 66 6c 61 67 73 20 26 20   (pVal->flags & 
9410: 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
9420: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 56 61  ;.  assert( (pVa
9430: 6c 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  l->flags & (MEM_
9440: 4e 75 6c 6c 29 29 3d 3d 30 20 29 3b 0a 20 20 69  Null))==0 );.  i
9450: 66 28 20 70 56 61 6c 2d 3e 66 6c 61 67 73 20 26  f( pVal->flags &
9460: 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53   (MEM_Blob|MEM_S
9470: 74 72 29 20 29 7b 0a 20 20 20 20 69 66 28 20 45  tr) ){.    if( E
9480: 78 70 61 6e 64 42 6c 6f 62 28 70 56 61 6c 29 20  xpandBlob(pVal) 
9490: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
94a0: 70 56 61 6c 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pVal->flags |= M
94b0: 45 4d 5f 53 74 72 3b 0a 20 20 20 20 69 66 28 20  EM_Str;.    if( 
94c0: 70 56 61 6c 2d 3e 65 6e 63 20 21 3d 20 28 65 6e  pVal->enc != (en
94d0: 63 20 26 20 7e 53 51 4c 49 54 45 5f 55 54 46 31  c & ~SQLITE_UTF1
94e0: 36 5f 41 4c 49 47 4e 45 44 29 20 29 7b 0a 20 20  6_ALIGNED) ){.  
94f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
9500: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 56  hangeEncoding(pV
9510: 61 6c 2c 20 65 6e 63 20 26 20 7e 53 51 4c 49 54  al, enc & ~SQLIT
9520: 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45 44 29  E_UTF16_ALIGNED)
9530: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
9540: 28 65 6e 63 20 26 20 53 51 4c 49 54 45 5f 55 54  (enc & SQLITE_UT
9550: 46 31 36 5f 41 4c 49 47 4e 45 44 29 21 3d 30 20  F16_ALIGNED)!=0 
9560: 26 26 20 31 3d 3d 28 31 26 53 51 4c 49 54 45 5f  && 1==(1&SQLITE_
9570: 50 54 52 5f 54 4f 5f 49 4e 54 28 70 56 61 6c 2d  PTR_TO_INT(pVal-
9580: 3e 7a 29 29 20 29 7b 0a 20 20 20 20 20 20 61 73  >z)) ){.      as
9590: 73 65 72 74 28 20 28 70 56 61 6c 2d 3e 66 6c 61  sert( (pVal->fla
95a0: 67 73 20 26 20 28 4d 45 4d 5f 45 70 68 65 6d 7c  gs & (MEM_Ephem|
95b0: 4d 45 4d 5f 53 74 61 74 69 63 29 29 21 3d 30 20  MEM_Static))!=0 
95c0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  );.      if( sql
95d0: 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57  ite3VdbeMemMakeW
95e0: 72 69 74 65 61 62 6c 65 28 70 56 61 6c 29 21 3d  riteable(pVal)!=
95f0: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
9600: 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20       return 0;. 
9610: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
9620: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
9630: 75 6c 54 65 72 6d 69 6e 61 74 65 28 70 56 61 6c  ulTerminate(pVal
9640: 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 31 32  ); /* IMP: R-312
9650: 37 35 2d 34 34 30 36 30 20 2a 2f 0a 20 20 7d 65  75-44060 */.  }e
9660: 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
9670: 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79  VdbeMemStringify
9680: 28 70 56 61 6c 2c 20 65 6e 63 2c 20 30 29 3b 0a  (pVal, enc, 0);.
9690: 20 20 20 20 61 73 73 65 72 74 28 20 30 3d 3d 28      assert( 0==(
96a0: 31 26 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  1&SQLITE_PTR_TO_
96b0: 49 4e 54 28 70 56 61 6c 2d 3e 7a 29 29 20 29 3b  INT(pVal->z)) );
96c0: 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 70 56  .  }.  assert(pV
96d0: 61 6c 2d 3e 65 6e 63 3d 3d 28 65 6e 63 20 26 20  al->enc==(enc & 
96e0: 7e 53 51 4c 49 54 45 5f 55 54 46 31 36 5f 41 4c  ~SQLITE_UTF16_AL
96f0: 49 47 4e 45 44 29 20 7c 7c 20 70 56 61 6c 2d 3e  IGNED) || pVal->
9700: 64 62 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20  db==0.          
9710: 20 20 20 20 7c 7c 20 70 56 61 6c 2d 3e 64 62 2d      || pVal->db-
9720: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
9730: 0a 20 20 69 66 28 20 70 56 61 6c 2d 3e 65 6e 63  .  if( pVal->enc
9740: 3d 3d 28 65 6e 63 20 26 20 7e 53 51 4c 49 54 45  ==(enc & ~SQLITE
9750: 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45 44 29 20  _UTF16_ALIGNED) 
9760: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  ){.    assert( s
9770: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 6e  qlite3VdbeMemCon
9780: 73 69 73 74 65 6e 74 44 75 61 6c 52 65 70 28 70  sistentDualRep(p
9790: 56 61 6c 29 20 29 3b 0a 20 20 20 20 72 65 74 75  Val) );.    retu
97a0: 72 6e 20 70 56 61 6c 2d 3e 7a 3b 0a 20 20 7d 65  rn pVal->z;.  }e
97b0: 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  lse{.    return 
97c0: 30 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 54 68 69  0;.  }.}../* Thi
97d0: 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e  s function is on
97e0: 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 74  ly available int
97f0: 65 72 6e 61 6c 6c 79 2c 20 69 74 20 69 73 20 6e  ernally, it is n
9800: 6f 74 20 70 61 72 74 20 6f 66 20 74 68 65 0a 2a  ot part of the.*
9810: 2a 20 65 78 74 65 72 6e 61 6c 20 41 50 49 2e 20  * external API. 
9820: 49 74 20 77 6f 72 6b 73 20 69 6e 20 61 20 73 69  It works in a si
9830: 6d 69 6c 61 72 20 77 61 79 20 74 6f 20 73 71 6c  milar way to sql
9840: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
9850: 29 2c 0a 2a 2a 20 65 78 63 65 70 74 20 74 68 65  ),.** except the
9860: 20 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 69   data returned i
9870: 73 20 69 6e 20 74 68 65 20 65 6e 63 6f 64 69 6e  s in the encodin
9880: 67 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  g specified by t
9890: 68 65 20 73 65 63 6f 6e 64 0a 2a 2a 20 70 61 72  he second.** par
98a0: 61 6d 65 74 65 72 2c 20 77 68 69 63 68 20 6d 75  ameter, which mu
98b0: 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 53 51 4c  st be one of SQL
98c0: 49 54 45 5f 55 54 46 31 36 42 45 2c 20 53 51 4c  ITE_UTF16BE, SQL
98d0: 49 54 45 5f 55 54 46 31 36 4c 45 20 6f 72 0a 2a  ITE_UTF16LE or.*
98e0: 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2e 0a 2a  * SQLITE_UTF8..*
98f0: 2a 0a 2a 2a 20 28 32 30 30 36 2d 30 32 2d 31 36  *.** (2006-02-16
9900: 3a 29 20 20 54 68 65 20 65 6e 63 20 76 61 6c 75  :)  The enc valu
9910: 65 20 63 61 6e 20 62 65 20 6f 72 2d 65 64 20 77  e can be or-ed w
9920: 69 74 68 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ith SQLITE_UTF16
9930: 5f 41 4c 49 47 4e 45 44 2e 0a 2a 2a 20 49 66 20  _ALIGNED..** If 
9940: 74 68 61 74 20 69 73 20 74 68 65 20 63 61 73 65  that is the case
9950: 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
9960: 74 20 6d 75 73 74 20 62 65 20 61 6c 69 67 6e 65  t must be aligne
9970: 64 20 6f 6e 20 61 6e 20 65 76 65 6e 20 62 79 74  d on an even byt
9980: 65 0a 2a 2a 20 62 6f 75 6e 64 61 72 79 2e 0a 2a  e.** boundary..*
9990: 2f 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  /.const void *sq
99a0: 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73  lite3ValueText(s
99b0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 20 70 56  qlite3_value* pV
99c0: 61 6c 2c 20 75 38 20 65 6e 63 29 7b 0a 20 20 69  al, u8 enc){.  i
99d0: 66 28 20 21 70 56 61 6c 20 29 20 72 65 74 75 72  f( !pVal ) retur
99e0: 6e 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  n 0;.  assert( p
99f0: 56 61 6c 2d 3e 64 62 3d 3d 30 20 7c 7c 20 73 71  Val->db==0 || sq
9a00: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64  lite3_mutex_held
9a10: 28 70 56 61 6c 2d 3e 64 62 2d 3e 6d 75 74 65 78  (pVal->db->mutex
9a20: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  ) );.  assert( (
9a30: 65 6e 63 26 33 29 3d 3d 28 65 6e 63 26 7e 53 51  enc&3)==(enc&~SQ
9a40: 4c 49 54 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e  LITE_UTF16_ALIGN
9a50: 45 44 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ED) );.  assert(
9a60: 20 28 70 56 61 6c 2d 3e 66 6c 61 67 73 20 26 20   (pVal->flags & 
9a70: 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
9a80: 3b 0a 20 20 69 66 28 20 28 70 56 61 6c 2d 3e 66  ;.  if( (pVal->f
9a90: 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45  lags&(MEM_Str|ME
9aa0: 4d 5f 54 65 72 6d 29 29 3d 3d 28 4d 45 4d 5f 53  M_Term))==(MEM_S
9ab0: 74 72 7c 4d 45 4d 5f 54 65 72 6d 29 20 26 26 20  tr|MEM_Term) && 
9ac0: 70 56 61 6c 2d 3e 65 6e 63 3d 3d 65 6e 63 20 29  pVal->enc==enc )
9ad0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  {.    assert( sq
9ae0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 6e 73  lite3VdbeMemCons
9af0: 69 73 74 65 6e 74 44 75 61 6c 52 65 70 28 70 56  istentDualRep(pV
9b00: 61 6c 29 20 29 3b 0a 20 20 20 20 72 65 74 75 72  al) );.    retur
9b10: 6e 20 70 56 61 6c 2d 3e 7a 3b 0a 20 20 7d 0a 20  n pVal->z;.  }. 
9b20: 20 69 66 28 20 70 56 61 6c 2d 3e 66 6c 61 67 73   if( pVal->flags
9b30: 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20  &MEM_Null ){.   
9b40: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
9b50: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 54 6f 54   return valueToT
9b60: 65 78 74 28 70 56 61 6c 2c 20 65 6e 63 29 3b 0a  ext(pVal, enc);.
9b70: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20  }../*.** Create 
9b80: 61 20 6e 65 77 20 73 71 6c 69 74 65 33 5f 76 61  a new sqlite3_va
9b90: 6c 75 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 73  lue object..*/.s
9ba0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71  qlite3_value *sq
9bb0: 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71  lite3ValueNew(sq
9bc0: 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 4d 65  lite3 *db){.  Me
9bd0: 6d 20 2a 70 20 3d 20 73 71 6c 69 74 65 33 44 62  m *p = sqlite3Db
9be0: 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 73  MallocZero(db, s
9bf0: 69 7a 65 6f 66 28 2a 70 29 29 3b 0a 20 20 69 66  izeof(*p));.  if
9c00: 28 20 70 20 29 7b 0a 20 20 20 20 70 2d 3e 66 6c  ( p ){.    p->fl
9c10: 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
9c20: 20 20 20 20 70 2d 3e 64 62 20 3d 20 64 62 3b 0a      p->db = db;.
9c30: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 3b 0a    }.  return p;.
9c40: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74  }../*.** Context
9c50: 20 6f 62 6a 65 63 74 20 70 61 73 73 65 64 20 62   object passed b
9c60: 79 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  y sqlite3Stat4Pr
9c70: 6f 62 65 53 65 74 56 61 6c 75 65 28 29 20 74 68  obeSetValue() th
9c80: 72 6f 75 67 68 20 74 6f 20 0a 2a 2a 20 76 61 6c  rough to .** val
9c90: 75 65 4e 65 77 28 29 2e 20 53 65 65 20 63 6f 6d  ueNew(). See com
9ca0: 6d 65 6e 74 73 20 61 62 6f 76 65 20 76 61 6c 75  ments above valu
9cb0: 65 4e 65 77 28 29 20 66 6f 72 20 64 65 74 61 69  eNew() for detai
9cc0: 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 61  ls..*/.struct Va
9cd0: 6c 75 65 4e 65 77 53 74 61 74 34 43 74 78 20 7b  lueNewStat4Ctx {
9ce0: 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
9cf0: 3b 0a 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b  ;.  Index *pIdx;
9d00: 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
9d10: 64 20 2a 2a 70 70 52 65 63 3b 0a 20 20 69 6e 74  d **ppRec;.  int
9d20: 20 69 56 61 6c 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a   iVal;.};../*.**
9d30: 20 41 6c 6c 6f 63 61 74 65 20 61 6e 64 20 72 65   Allocate and re
9d40: 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74  turn a pointer t
9d50: 6f 20 61 20 6e 65 77 20 73 71 6c 69 74 65 33 5f  o a new sqlite3_
9d60: 76 61 6c 75 65 20 6f 62 6a 65 63 74 2e 20 49 66  value object. If
9d70: 0a 2a 2a 20 74 68 65 20 73 65 63 6f 6e 64 20 61  .** the second a
9d80: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 69 73 20  rgument to this 
9d90: 66 75 6e 63 74 69 6f 6e 20 69 73 20 4e 55 4c 4c  function is NULL
9da0: 2c 20 74 68 65 20 6f 62 6a 65 63 74 20 69 73 20  , the object is 
9db0: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 79 20  allocated.** by 
9dc0: 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 56  calling sqlite3V
9dd0: 61 6c 75 65 4e 65 77 28 29 2e 0a 2a 2a 0a 2a 2a  alueNew()..**.**
9de0: 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74   Otherwise, if t
9df0: 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65  he second argume
9e00: 6e 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  nt is non-zero, 
9e10: 74 68 65 6e 20 74 68 69 73 20 66 75 6e 63 74 69  then this functi
9e20: 6f 6e 20 69 73 20 0a 2a 2a 20 62 65 69 6e 67 20  on is .** being 
9e30: 63 61 6c 6c 65 64 20 69 6e 64 69 72 65 63 74 6c  called indirectl
9e40: 79 20 62 79 20 73 71 6c 69 74 65 33 53 74 61 74  y by sqlite3Stat
9e50: 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 29  4ProbeSetValue()
9e60: 2e 20 49 66 20 69 74 20 68 61 73 20 6e 6f 74 0a  . If it has not.
9e70: 2a 2a 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  ** already been 
9e80: 61 6c 6c 6f 63 61 74 65 64 2c 20 61 6c 6c 6f 63  allocated, alloc
9e90: 61 74 65 20 74 68 65 20 55 6e 70 61 63 6b 65 64  ate the Unpacked
9ea0: 52 65 63 6f 72 64 20 73 74 72 75 63 74 75 72 65  Record structure
9eb0: 20 74 68 61 74 20 0a 2a 2a 20 74 68 61 74 20 66   that .** that f
9ec0: 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74  unction will ret
9ed0: 75 72 6e 20 74 6f 20 69 74 73 20 63 61 6c 6c 65  urn to its calle
9ee0: 72 20 68 65 72 65 2e 20 54 68 65 6e 20 72 65 74  r here. Then ret
9ef0: 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  urn a pointer to
9f00: 0a 2a 2a 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  .** an sqlite3_v
9f10: 61 6c 75 65 20 77 69 74 68 69 6e 20 74 68 65 20  alue within the 
9f20: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2e 61  UnpackedRecord.a
9f30: 5b 5d 20 61 72 72 61 79 2e 0a 2a 2f 0a 73 74 61  [] array..*/.sta
9f40: 74 69 63 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  tic sqlite3_valu
9f50: 65 20 2a 76 61 6c 75 65 4e 65 77 28 73 71 6c 69  e *valueNew(sqli
9f60: 74 65 33 20 2a 64 62 2c 20 73 74 72 75 63 74 20  te3 *db, struct 
9f70: 56 61 6c 75 65 4e 65 77 53 74 61 74 34 43 74 78  ValueNewStat4Ctx
9f80: 20 2a 70 29 7b 0a 23 69 66 64 65 66 20 53 51 4c   *p){.#ifdef SQL
9f90: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
9fa0: 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 66 28 20  _OR_STAT4.  if( 
9fb0: 70 20 29 7b 0a 20 20 20 20 55 6e 70 61 63 6b 65  p ){.    Unpacke
9fc0: 64 52 65 63 6f 72 64 20 2a 70 52 65 63 20 3d 20  dRecord *pRec = 
9fd0: 70 2d 3e 70 70 52 65 63 5b 30 5d 3b 0a 0a 20 20  p->ppRec[0];..  
9fe0: 20 20 69 66 28 20 70 52 65 63 3d 3d 30 20 29 7b    if( pRec==0 ){
9ff0: 0a 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49  .      Index *pI
a000: 64 78 20 3d 20 70 2d 3e 70 49 64 78 3b 20 20 20  dx = p->pIdx;   
a010: 20 20 20 2f 2a 20 49 6e 64 65 78 20 62 65 69 6e     /* Index bein
a020: 67 20 70 72 6f 62 65 64 20 2a 2f 0a 20 20 20 20  g probed */.    
a030: 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20    int nByte;    
a040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a050: 20 42 79 74 65 73 20 6f 66 20 73 70 61 63 65 20   Bytes of space 
a060: 74 6f 20 61 6c 6c 6f 63 61 74 65 20 2a 2f 0a 20  to allocate */. 
a070: 20 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20       int i;     
a080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a090: 20 2f 2a 20 43 6f 75 6e 74 65 72 20 76 61 72 69   /* Counter vari
a0a0: 61 62 6c 65 20 2a 2f 0a 20 20 20 20 20 20 69 6e  able */.      in
a0b0: 74 20 6e 43 6f 6c 20 3d 20 70 49 64 78 2d 3e 6e  t nCol = pIdx->n
a0c0: 43 6f 6c 75 6d 6e 3b 20 20 20 2f 2a 20 4e 75 6d  Column;   /* Num
a0d0: 62 65 72 20 6f 66 20 69 6e 64 65 78 20 63 6f 6c  ber of index col
a0e0: 75 6d 6e 73 20 69 6e 63 6c 75 64 69 6e 67 20 72  umns including r
a0f0: 6f 77 69 64 20 2a 2f 0a 20 20 0a 20 20 20 20 20  owid */.  .     
a100: 20 6e 42 79 74 65 20 3d 20 73 69 7a 65 6f 66 28   nByte = sizeof(
a110: 4d 65 6d 29 20 2a 20 6e 43 6f 6c 20 2b 20 52 4f  Mem) * nCol + RO
a120: 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e 70 61  UND8(sizeof(Unpa
a130: 63 6b 65 64 52 65 63 6f 72 64 29 29 3b 0a 20 20  ckedRecord));.  
a140: 20 20 20 20 70 52 65 63 20 3d 20 28 55 6e 70 61      pRec = (Unpa
a150: 63 6b 65 64 52 65 63 6f 72 64 2a 29 73 71 6c 69  ckedRecord*)sqli
a160: 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
a170: 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20  db, nByte);.    
a180: 20 20 69 66 28 20 70 52 65 63 20 29 7b 0a 20 20    if( pRec ){.  
a190: 20 20 20 20 20 20 70 52 65 63 2d 3e 70 4b 65 79        pRec->pKey
a1a0: 49 6e 66 6f 20 3d 20 73 71 6c 69 74 65 33 4b 65  Info = sqlite3Ke
a1b0: 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 70 2d 3e  yInfoOfIndex(p->
a1c0: 70 50 61 72 73 65 2c 20 70 49 64 78 29 3b 0a 20  pParse, pIdx);. 
a1d0: 20 20 20 20 20 20 20 69 66 28 20 70 52 65 63 2d         if( pRec-
a1e0: 3e 70 4b 65 79 49 6e 66 6f 20 29 7b 0a 20 20 20  >pKeyInfo ){.   
a1f0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
a200: 52 65 63 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 6e  Rec->pKeyInfo->n
a210: 41 6c 6c 46 69 65 6c 64 3d 3d 6e 43 6f 6c 20 29  AllField==nCol )
a220: 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  ;.          asse
a230: 72 74 28 20 70 52 65 63 2d 3e 70 4b 65 79 49 6e  rt( pRec->pKeyIn
a240: 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29  fo->enc==ENC(db)
a250: 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 52   );.          pR
a260: 65 63 2d 3e 61 4d 65 6d 20 3d 20 28 4d 65 6d 20  ec->aMem = (Mem 
a270: 2a 29 28 28 75 38 2a 29 70 52 65 63 20 2b 20 52  *)((u8*)pRec + R
a280: 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e 70  OUND8(sizeof(Unp
a290: 61 63 6b 65 64 52 65 63 6f 72 64 29 29 29 3b 0a  ackedRecord)));.
a2a0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d            for(i=
a2b0: 30 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b 29 7b  0; i<nCol; i++){
a2c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 52 65  .            pRe
a2d0: 63 2d 3e 61 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73  c->aMem[i].flags
a2e0: 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
a2f0: 20 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e 61           pRec->a
a300: 4d 65 6d 5b 69 5d 2e 64 62 20 3d 20 64 62 3b 0a  Mem[i].db = db;.
a310: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
a320: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
a330: 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
a340: 65 65 4e 4e 28 64 62 2c 20 70 52 65 63 29 3b 0a  eeNN(db, pRec);.
a350: 20 20 20 20 20 20 20 20 20 20 70 52 65 63 20 3d            pRec =
a360: 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   0;.        }.  
a370: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
a380: 70 52 65 63 3d 3d 30 20 29 20 72 65 74 75 72 6e  pRec==0 ) return
a390: 20 30 3b 0a 20 20 20 20 20 20 70 2d 3e 70 70 52   0;.      p->ppR
a3a0: 65 63 5b 30 5d 20 3d 20 70 52 65 63 3b 0a 20 20  ec[0] = pRec;.  
a3b0: 20 20 7d 0a 20 20 0a 20 20 20 20 70 52 65 63 2d    }.  .    pRec-
a3c0: 3e 6e 46 69 65 6c 64 20 3d 20 70 2d 3e 69 56 61  >nField = p->iVa
a3d0: 6c 2b 31 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  l+1;.    return 
a3e0: 26 70 52 65 63 2d 3e 61 4d 65 6d 5b 70 2d 3e 69  &pRec->aMem[p->i
a3f0: 56 61 6c 5d 3b 0a 20 20 7d 0a 23 65 6c 73 65 0a  Val];.  }.#else.
a400: 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54    UNUSED_PARAMET
a410: 45 52 28 70 29 3b 0a 23 65 6e 64 69 66 20 2f 2a  ER(p);.#endif /*
a420: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
a430: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
a440: 53 54 41 54 34 29 20 2a 2f 0a 20 20 72 65 74 75  STAT4) */.  retu
a450: 72 6e 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e  rn sqlite3ValueN
a460: 65 77 28 64 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ew(db);.}../*.**
a470: 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   The expression 
a480: 6f 62 6a 65 63 74 20 69 6e 64 69 63 61 74 65 64  object indicated
a490: 20 62 79 20 74 68 65 20 73 65 63 6f 6e 64 20 61   by the second a
a4a0: 72 67 75 6d 65 6e 74 20 69 73 20 67 75 61 72 61  rgument is guara
a4b0: 6e 74 65 65 64 0a 2a 2a 20 74 6f 20 62 65 20 61  nteed.** to be a
a4c0: 20 73 63 61 6c 61 72 20 53 51 4c 20 66 75 6e 63   scalar SQL func
a4d0: 74 69 6f 6e 2e 20 49 66 0a 2a 2a 0a 2a 2a 20 20  tion. If.**.**  
a4e0: 20 2a 20 61 6c 6c 20 66 75 6e 63 74 69 6f 6e 20   * all function 
a4f0: 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 53 51  arguments are SQ
a500: 4c 20 6c 69 74 65 72 61 6c 73 2c 0a 2a 2a 20 20  L literals,.**  
a510: 20 2a 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51   * one of the SQ
a520: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
a530: 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66  NT or _SLOCHNG f
a540: 75 6e 63 74 69 6f 6e 20 66 6c 61 67 73 20 69 73  unction flags is
a550: 20 73 65 74 2c 20 61 6e 64 0a 2a 2a 20 20 20 2a   set, and.**   *
a560: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
a570: 5f 4e 45 45 44 43 4f 4c 4c 20 66 75 6e 63 74 69  _NEEDCOLL functi
a580: 6f 6e 20 66 6c 61 67 20 69 73 20 6e 6f 74 20 73  on flag is not s
a590: 65 74 2c 0a 2a 2a 0a 2a 2a 20 74 68 65 6e 20 74  et,.**.** then t
a5a0: 68 69 73 20 72 6f 75 74 69 6e 65 20 61 74 74 65  his routine atte
a5b0: 6d 70 74 73 20 74 6f 20 69 6e 76 6f 6b 65 20 74  mpts to invoke t
a5c0: 68 65 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2e  he SQL function.
a5d0: 20 41 73 73 75 6d 69 6e 67 20 6e 6f 0a 2a 2a 20   Assuming no.** 
a5e0: 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 6f 75  error occurs, ou
a5f0: 74 70 75 74 20 70 61 72 61 6d 65 74 65 72 20 28  tput parameter (
a600: 2a 70 70 56 61 6c 29 20 69 73 20 73 65 74 20 74  *ppVal) is set t
a610: 6f 20 70 6f 69 6e 74 20 74 6f 20 61 20 76 61 6c  o point to a val
a620: 75 65 20 0a 2a 2a 20 6f 62 6a 65 63 74 20 63 6f  ue .** object co
a630: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73  ntaining the res
a640: 75 6c 74 20 62 65 66 6f 72 65 20 72 65 74 75 72  ult before retur
a650: 6e 69 6e 67 20 53 51 4c 49 54 45 5f 4f 4b 2e 0a  ning SQLITE_OK..
a660: 2a 2a 0a 2a 2a 20 41 66 66 69 6e 69 74 79 20 61  **.** Affinity a
a670: 66 66 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f  ff is applied to
a680: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
a690: 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 66 6f  he function befo
a6a0: 72 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a 2a 2a  re returning..**
a6b0: 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   If the result i
a6c0: 73 20 61 20 74 65 78 74 20 76 61 6c 75 65 2c 20  s a text value, 
a6d0: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  the sqlite3_valu
a6e0: 65 20 6f 62 6a 65 63 74 20 75 73 65 73 20 65 6e  e object uses en
a6f0: 63 6f 64 69 6e 67 20 0a 2a 2a 20 65 6e 63 2e 0a  coding .** enc..
a700: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6e  **.** If the con
a710: 64 69 74 69 6f 6e 73 20 61 62 6f 76 65 20 61 72  ditions above ar
a720: 65 20 6e 6f 74 20 6d 65 74 2c 20 74 68 69 73 20  e not met, this 
a730: 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
a740: 20 53 51 4c 49 54 45 5f 4f 4b 0a 2a 2a 20 61 6e   SQLITE_OK.** an
a750: 64 20 73 65 74 73 20 28 2a 70 70 56 61 6c 29 20  d sets (*ppVal) 
a760: 74 6f 20 4e 55 4c 4c 2e 20 4f 72 2c 20 69 66 20  to NULL. Or, if 
a770: 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c  an error occurs,
a780: 20 28 2a 70 70 56 61 6c 29 20 69 73 20 73 65 74   (*ppVal) is set
a790: 20 74 6f 0a 2a 2a 20 4e 55 4c 4c 20 61 6e 64 20   to.** NULL and 
a7a0: 61 6e 20 53 51 4c 69 74 65 20 65 72 72 6f 72 20  an SQLite error 
a7b0: 63 6f 64 65 20 72 65 74 75 72 6e 65 64 2e 0a 2a  code returned..*
a7c0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
a7d0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
a7e0: 53 54 41 54 34 0a 73 74 61 74 69 63 20 69 6e 74  STAT4.static int
a7f0: 20 76 61 6c 75 65 46 72 6f 6d 46 75 6e 63 74 69   valueFromFuncti
a800: 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  on(.  sqlite3 *d
a810: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
a820: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
a830: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
a840: 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 2c 20 20   */.  Expr *p,  
a850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a860: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70        /* The exp
a870: 72 65 73 73 69 6f 6e 20 74 6f 20 65 76 61 6c 75  ression to evalu
a880: 61 74 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 2c  ate */.  u8 enc,
a890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 45 6e 63 6f           /* Enco
a8b0: 64 69 6e 67 20 74 6f 20 75 73 65 20 2a 2f 0a 20  ding to use */. 
a8c0: 20 75 38 20 61 66 66 2c 20 20 20 20 20 20 20 20   u8 aff,        
a8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8e0: 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20   /* Affinity to 
a8f0: 75 73 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  use */.  sqlite3
a900: 5f 76 61 6c 75 65 20 2a 2a 70 70 56 61 6c 2c 20  _value **ppVal, 
a910: 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74           /* Writ
a920: 65 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20  e the new value 
a930: 68 65 72 65 20 2a 2f 0a 20 20 73 74 72 75 63 74  here */.  struct
a940: 20 56 61 6c 75 65 4e 65 77 53 74 61 74 34 43 74   ValueNewStat4Ct
a950: 78 20 2a 70 43 74 78 20 20 20 2f 2a 20 53 65 63  x *pCtx   /* Sec
a960: 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 66 6f 72  ond argument for
a970: 20 76 61 6c 75 65 4e 65 77 28 29 20 2a 2f 0a 29   valueNew() */.)
a980: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  {.  sqlite3_cont
a990: 65 78 74 20 63 74 78 3b 20 20 20 20 20 20 20 20  ext ctx;        
a9a0: 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 6f      /* Context o
a9b0: 62 6a 65 63 74 20 66 6f 72 20 66 75 6e 63 74 69  bject for functi
a9c0: 6f 6e 20 69 6e 76 6f 63 61 74 69 6f 6e 20 2a 2f  on invocation */
a9d0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
a9e0: 20 2a 2a 61 70 56 61 6c 20 3d 20 30 3b 20 20 20   **apVal = 0;   
a9f0: 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 61     /* Function a
aa00: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e  rguments */.  in
aa10: 74 20 6e 56 61 6c 20 3d 20 30 3b 20 20 20 20 20  t nVal = 0;     
aa20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
aa30: 20 53 69 7a 65 20 6f 66 20 61 70 56 61 6c 5b 5d   Size of apVal[]
aa40: 20 61 72 72 61 79 20 2a 2f 0a 20 20 46 75 6e 63   array */.  Func
aa50: 44 65 66 20 2a 70 46 75 6e 63 20 3d 20 30 3b 20  Def *pFunc = 0; 
aa60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
aa70: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
aa80: 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  on */.  sqlite3_
aa90: 76 61 6c 75 65 20 2a 70 56 61 6c 20 3d 20 30 3b  value *pVal = 0;
aaa0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76          /* New v
aab0: 61 6c 75 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63  alue */.  int rc
aac0: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20   = SQLITE_OK;   
aad0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74            /* Ret
aae0: 75 72 6e 20 63 6f 64 65 20 2a 2f 0a 20 20 45 78  urn code */.  Ex
aaf0: 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 20 3d 20  prList *pList = 
ab00: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  0;            /*
ab10: 20 46 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65   Function argume
ab20: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20  nts */.  int i; 
ab30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab40: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 74 65 72           /* Iter
ab50: 61 74 6f 72 20 76 61 72 69 61 62 6c 65 20 2a 2f  ator variable */
ab60: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 43 74 78  ..  assert( pCtx
ab70: 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
ab80: 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 45 50 5f   (p->flags & EP_
ab90: 54 6f 6b 65 6e 4f 6e 6c 79 29 3d 3d 30 20 29 3b  TokenOnly)==0 );
aba0: 0a 20 20 70 4c 69 73 74 20 3d 20 70 2d 3e 78 2e  .  pList = p->x.
abb0: 70 4c 69 73 74 3b 0a 20 20 69 66 28 20 70 4c 69  pList;.  if( pLi
abc0: 73 74 20 29 20 6e 56 61 6c 20 3d 20 70 4c 69 73  st ) nVal = pLis
abd0: 74 2d 3e 6e 45 78 70 72 3b 0a 20 20 70 46 75 6e  t->nExpr;.  pFun
abe0: 63 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 46  c = sqlite3FindF
abf0: 75 6e 63 74 69 6f 6e 28 64 62 2c 20 70 2d 3e 75  unction(db, p->u
ac00: 2e 7a 54 6f 6b 65 6e 2c 20 6e 56 61 6c 2c 20 65  .zToken, nVal, e
ac10: 6e 63 2c 20 30 29 3b 0a 20 20 61 73 73 65 72 74  nc, 0);.  assert
ac20: 28 20 70 46 75 6e 63 20 29 3b 0a 20 20 69 66 28  ( pFunc );.  if(
ac30: 20 28 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61   (pFunc->funcFla
ac40: 67 73 20 26 20 28 53 51 4c 49 54 45 5f 46 55 4e  gs & (SQLITE_FUN
ac50: 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
ac60: 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 29 29  E_FUNC_SLOCHNG))
ac70: 3d 3d 30 20 0a 20 20 20 7c 7c 20 28 70 46 75 6e  ==0 .   || (pFun
ac80: 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26 20 53  c->funcFlags & S
ac90: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
aca0: 4f 4c 4c 29 0a 20 20 29 7b 0a 20 20 20 20 72 65  OLL).  ){.    re
acb0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
acc0: 20 20 7d 0a 0a 20 20 69 66 28 20 70 4c 69 73 74    }..  if( pList
acd0: 20 29 7b 0a 20 20 20 20 61 70 56 61 6c 20 3d 20   ){.    apVal = 
ace0: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  (sqlite3_value**
acf0: 29 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  )sqlite3DbMalloc
ad00: 5a 65 72 6f 28 64 62 2c 20 73 69 7a 65 6f 66 28  Zero(db, sizeof(
ad10: 61 70 56 61 6c 5b 30 5d 29 20 2a 20 6e 56 61 6c  apVal[0]) * nVal
ad20: 29 3b 0a 20 20 20 20 69 66 28 20 61 70 56 61 6c  );.    if( apVal
ad30: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
ad40: 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  = SQLITE_NOMEM_B
ad50: 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  KPT;.      goto 
ad60: 76 61 6c 75 65 5f 66 72 6f 6d 5f 66 75 6e 63 74  value_from_funct
ad70: 69 6f 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20  ion_out;.    }. 
ad80: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 56     for(i=0; i<nV
ad90: 61 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  al; i++){.      
ada0: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75  rc = sqlite3Valu
adb0: 65 46 72 6f 6d 45 78 70 72 28 64 62 2c 20 70 4c  eFromExpr(db, pL
adc0: 69 73 74 2d 3e 61 5b 69 5d 2e 70 45 78 70 72 2c  ist->a[i].pExpr,
add0: 20 65 6e 63 2c 20 61 66 66 2c 20 26 61 70 56 61   enc, aff, &apVa
ade0: 6c 5b 69 5d 29 3b 0a 20 20 20 20 20 20 69 66 28  l[i]);.      if(
adf0: 20 61 70 56 61 6c 5b 69 5d 3d 3d 30 20 7c 7c 20   apVal[i]==0 || 
ae00: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
ae10: 67 6f 74 6f 20 76 61 6c 75 65 5f 66 72 6f 6d 5f  goto value_from_
ae20: 66 75 6e 63 74 69 6f 6e 5f 6f 75 74 3b 0a 20 20  function_out;.  
ae30: 20 20 7d 0a 20 20 7d 0a 0a 20 20 70 56 61 6c 20    }.  }..  pVal 
ae40: 3d 20 76 61 6c 75 65 4e 65 77 28 64 62 2c 20 70  = valueNew(db, p
ae50: 43 74 78 29 3b 0a 20 20 69 66 28 20 70 56 61 6c  Ctx);.  if( pVal
ae60: 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==0 ){.    rc = 
ae70: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50  SQLITE_NOMEM_BKP
ae80: 54 3b 0a 20 20 20 20 67 6f 74 6f 20 76 61 6c 75  T;.    goto valu
ae90: 65 5f 66 72 6f 6d 5f 66 75 6e 63 74 69 6f 6e 5f  e_from_function_
aea0: 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  out;.  }..  asse
aeb0: 72 74 28 20 70 43 74 78 2d 3e 70 50 61 72 73 65  rt( pCtx->pParse
aec0: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
aed0: 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 63 74 78  );.  memset(&ctx
aee0: 2c 20 30 2c 20 73 69 7a 65 6f 66 28 63 74 78 29  , 0, sizeof(ctx)
aef0: 29 3b 0a 20 20 63 74 78 2e 70 4f 75 74 20 3d 20  );.  ctx.pOut = 
af00: 70 56 61 6c 3b 0a 20 20 63 74 78 2e 70 46 75 6e  pVal;.  ctx.pFun
af10: 63 20 3d 20 70 46 75 6e 63 3b 0a 20 20 70 46 75  c = pFunc;.  pFu
af20: 6e 63 2d 3e 78 53 46 75 6e 63 28 26 63 74 78 2c  nc->xSFunc(&ctx,
af30: 20 6e 56 61 6c 2c 20 61 70 56 61 6c 29 3b 0a 20   nVal, apVal);. 
af40: 20 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72   if( ctx.isError
af50: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 63 74 78   ){.    rc = ctx
af60: 2e 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 73 71  .isError;.    sq
af70: 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 43  lite3ErrorMsg(pC
af80: 74 78 2d 3e 70 50 61 72 73 65 2c 20 22 25 73 22  tx->pParse, "%s"
af90: 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
afa0: 74 65 78 74 28 70 56 61 6c 29 29 3b 0a 20 20 7d  text(pVal));.  }
afb0: 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
afc0: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
afd0: 69 74 79 28 70 56 61 6c 2c 20 61 66 66 2c 20 53  ity(pVal, aff, S
afe0: 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 20  QLITE_UTF8);.   
aff0: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
b000: 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 72 63  ITE_OK );.    rc
b010: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
b020: 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 56 61  angeEncoding(pVa
b030: 6c 2c 20 65 6e 63 29 3b 0a 20 20 20 20 69 66 28  l, enc);.    if(
b040: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
b050: 26 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  & sqlite3VdbeMem
b060: 54 6f 6f 42 69 67 28 70 56 61 6c 29 20 29 7b 0a  TooBig(pVal) ){.
b070: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
b080: 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 20 20 20 20  E_TOOBIG;.      
b090: 70 43 74 78 2d 3e 70 50 61 72 73 65 2d 3e 6e 45  pCtx->pParse->nE
b0a0: 72 72 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  rr++;.    }.  }.
b0b0: 20 20 70 43 74 78 2d 3e 70 50 61 72 73 65 2d 3e    pCtx->pParse->
b0c0: 72 63 20 3d 20 72 63 3b 0a 0a 20 76 61 6c 75 65  rc = rc;.. value
b0d0: 5f 66 72 6f 6d 5f 66 75 6e 63 74 69 6f 6e 5f 6f  _from_function_o
b0e0: 75 74 3a 0a 20 20 69 66 28 20 72 63 21 3d 53 51  ut:.  if( rc!=SQ
b0f0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 70  LITE_OK ){.    p
b100: 56 61 6c 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  Val = 0;.  }.  i
b110: 66 28 20 61 70 56 61 6c 20 29 7b 0a 20 20 20 20  f( apVal ){.    
b120: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 56 61 6c 3b  for(i=0; i<nVal;
b130: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c   i++){.      sql
b140: 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 61 70  ite3ValueFree(ap
b150: 56 61 6c 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20  Val[i]);.    }. 
b160: 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
b170: 4e 4e 28 64 62 2c 20 61 70 56 61 6c 29 3b 0a 20  NN(db, apVal);. 
b180: 20 7d 0a 0a 20 20 2a 70 70 56 61 6c 20 3d 20 70   }..  *ppVal = p
b190: 56 61 6c 3b 0a 20 20 72 65 74 75 72 6e 20 72 63  Val;.  return rc
b1a0: 3b 0a 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ;.}.#else.# defi
b1b0: 6e 65 20 76 61 6c 75 65 46 72 6f 6d 46 75 6e 63  ne valueFromFunc
b1c0: 74 69 6f 6e 28 61 2c 62 2c 63 2c 64 2c 65 2c 66  tion(a,b,c,d,e,f
b1d0: 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64  ) SQLITE_OK.#end
b1e0: 69 66 20 2f 2a 20 64 65 66 69 6e 65 64 28 53 51  if /* defined(SQ
b1f0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
b200: 33 5f 4f 52 5f 53 54 41 54 34 29 20 2a 2f 0a 0a  3_OR_STAT4) */..
b210: 2f 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 61 20  /*.** Extract a 
b220: 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 73  value from the s
b230: 75 70 70 6c 69 65 64 20 65 78 70 72 65 73 73 69  upplied expressi
b240: 6f 6e 20 69 6e 20 74 68 65 20 6d 61 6e 6e 65 72  on in the manner
b250: 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 61 62   described.** ab
b260: 6f 76 65 20 73 71 6c 69 74 65 33 56 61 6c 75 65  ove sqlite3Value
b270: 46 72 6f 6d 45 78 70 72 28 29 2e 20 41 6c 6c 6f  FromExpr(). Allo
b280: 63 61 74 65 20 74 68 65 20 73 71 6c 69 74 65 33  cate the sqlite3
b290: 5f 76 61 6c 75 65 20 6f 62 6a 65 63 74 0a 2a 2a  _value object.**
b2a0: 20 75 73 69 6e 67 20 76 61 6c 75 65 4e 65 77 28   using valueNew(
b2b0: 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 70 43 74 78  )..**.** If pCtx
b2c0: 20 69 73 20 4e 55 4c 4c 20 61 6e 64 20 61 6e 20   is NULL and an 
b2d0: 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61 66 74  error occurs aft
b2e0: 65 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  er the sqlite3_v
b2f0: 61 6c 75 65 20 6f 62 6a 65 63 74 0a 2a 2a 20 68  alue object.** h
b300: 61 73 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65  as been allocate
b310: 64 2c 20 69 74 20 69 73 20 66 72 65 65 64 20 62  d, it is freed b
b320: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e  efore returning.
b330: 20 4f 72 2c 20 69 66 20 70 43 74 78 20 69 73 20   Or, if pCtx is 
b340: 6e 6f 74 0a 2a 2a 20 4e 55 4c 4c 2c 20 69 74 20  not.** NULL, it 
b350: 69 73 20 61 73 73 75 6d 65 64 20 74 68 61 74 20  is assumed that 
b360: 74 68 65 20 63 61 6c 6c 65 72 20 77 69 6c 6c 20  the caller will 
b370: 66 72 65 65 20 61 6e 79 20 61 6c 6c 6f 63 61 74  free any allocat
b380: 65 64 20 6f 62 6a 65 63 74 0a 2a 2a 20 69 6e 20  ed object.** in 
b390: 61 6c 6c 20 63 61 73 65 73 2e 0a 2a 2f 0a 73 74  all cases..*/.st
b3a0: 61 74 69 63 20 69 6e 74 20 76 61 6c 75 65 46 72  atic int valueFr
b3b0: 6f 6d 45 78 70 72 28 0a 20 20 73 71 6c 69 74 65  omExpr(.  sqlite
b3c0: 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20  3 *db,          
b3d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
b3e0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
b3f0: 74 69 6f 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a  tion */.  Expr *
b400: 70 45 78 70 72 2c 20 20 20 20 20 20 20 20 20 20  pExpr,          
b410: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
b420: 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20 65   expression to e
b430: 76 61 6c 75 61 74 65 20 2a 2f 0a 20 20 75 38 20  valuate */.  u8 
b440: 65 6e 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  enc,            
b450: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b460: 45 6e 63 6f 64 69 6e 67 20 74 6f 20 75 73 65 20  Encoding to use 
b470: 2a 2f 0a 20 20 75 38 20 61 66 66 69 6e 69 74 79  */.  u8 affinity
b480: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
b490: 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79       /* Affinity
b4a0: 20 74 6f 20 75 73 65 20 2a 2f 0a 20 20 73 71 6c   to use */.  sql
b4b0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 70 70 56  ite3_value **ppV
b4c0: 61 6c 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20  al,          /* 
b4d0: 57 72 69 74 65 20 74 68 65 20 6e 65 77 20 76 61  Write the new va
b4e0: 6c 75 65 20 68 65 72 65 20 2a 2f 0a 20 20 73 74  lue here */.  st
b4f0: 72 75 63 74 20 56 61 6c 75 65 4e 65 77 53 74 61  ruct ValueNewSta
b500: 74 34 43 74 78 20 2a 70 43 74 78 20 20 20 2f 2a  t4Ctx *pCtx   /*
b510: 20 53 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74   Second argument
b520: 20 66 6f 72 20 76 61 6c 75 65 4e 65 77 28 29 20   for valueNew() 
b530: 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 6f 70 3b 0a  */.){.  int op;.
b540: 20 20 63 68 61 72 20 2a 7a 56 61 6c 20 3d 20 30    char *zVal = 0
b550: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
b560: 65 20 2a 70 56 61 6c 20 3d 20 30 3b 0a 20 20 69  e *pVal = 0;.  i
b570: 6e 74 20 6e 65 67 49 6e 74 20 3d 20 31 3b 0a 20  nt negInt = 1;. 
b580: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 65   const char *zNe
b590: 67 20 3d 20 22 22 3b 0a 20 20 69 6e 74 20 72 63  g = "";.  int rc
b5a0: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 0a 20   = SQLITE_OK;.. 
b5b0: 20 61 73 73 65 72 74 28 20 70 45 78 70 72 21 3d   assert( pExpr!=
b5c0: 30 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 28 6f  0 );.  while( (o
b5d0: 70 20 3d 20 70 45 78 70 72 2d 3e 6f 70 29 3d 3d  p = pExpr->op)==
b5e0: 54 4b 5f 55 50 4c 55 53 20 7c 7c 20 6f 70 3d 3d  TK_UPLUS || op==
b5f0: 54 4b 5f 53 50 41 4e 20 29 20 70 45 78 70 72 20  TK_SPAN ) pExpr 
b600: 3d 20 70 45 78 70 72 2d 3e 70 4c 65 66 74 3b 0a  = pExpr->pLeft;.
b610: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
b620: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
b630: 4f 52 5f 53 54 41 54 34 29 0a 20 20 69 66 28 20  OR_STAT4).  if( 
b640: 6f 70 3d 3d 54 4b 5f 52 45 47 49 53 54 45 52 20  op==TK_REGISTER 
b650: 29 20 6f 70 20 3d 20 70 45 78 70 72 2d 3e 6f 70  ) op = pExpr->op
b660: 32 3b 0a 23 65 6c 73 65 0a 20 20 69 66 28 20 4e  2;.#else.  if( N
b670: 45 56 45 52 28 6f 70 3d 3d 54 4b 5f 52 45 47 49  EVER(op==TK_REGI
b680: 53 54 45 52 29 20 29 20 6f 70 20 3d 20 70 45 78  STER) ) op = pEx
b690: 70 72 2d 3e 6f 70 32 3b 0a 23 65 6e 64 69 66 0a  pr->op2;.#endif.
b6a0: 0a 20 20 2f 2a 20 43 6f 6d 70 72 65 73 73 65 64  .  /* Compressed
b6b0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 6c   expressions onl
b6c0: 79 20 61 70 70 65 61 72 20 77 68 65 6e 20 70 61  y appear when pa
b6d0: 72 73 69 6e 67 20 74 68 65 20 44 45 46 41 55 4c  rsing the DEFAUL
b6e0: 54 20 63 6c 61 75 73 65 0a 20 20 2a 2a 20 6f 6e  T clause.  ** on
b6f0: 20 61 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20   a table column 
b700: 64 65 66 69 6e 69 74 69 6f 6e 2c 20 61 6e 64 20  definition, and 
b710: 68 65 6e 63 65 20 6f 6e 6c 79 20 77 68 65 6e 20  hence only when 
b720: 70 43 74 78 3d 3d 30 2e 20 20 54 68 69 73 0a 20  pCtx==0.  This. 
b730: 20 2a 2a 20 63 68 65 63 6b 20 65 6e 73 75 72 65   ** check ensure
b740: 73 20 74 68 61 74 20 61 6e 20 45 50 5f 54 6f 6b  s that an EP_Tok
b750: 65 6e 4f 6e 6c 79 20 65 78 70 72 65 73 73 69 6f  enOnly expressio
b760: 6e 20 69 73 20 6e 65 76 65 72 20 70 61 73 73 65  n is never passe
b770: 64 20 64 6f 77 6e 0a 20 20 2a 2a 20 69 6e 74 6f  d down.  ** into
b780: 20 76 61 6c 75 65 46 72 6f 6d 46 75 6e 63 74 69   valueFromFuncti
b790: 6f 6e 28 29 2e 20 2a 2f 0a 20 20 61 73 73 65 72  on(). */.  asser
b7a0: 74 28 20 28 70 45 78 70 72 2d 3e 66 6c 61 67 73  t( (pExpr->flags
b7b0: 20 26 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 29   & EP_TokenOnly)
b7c0: 3d 3d 30 20 7c 7c 20 70 43 74 78 3d 3d 30 20 29  ==0 || pCtx==0 )
b7d0: 3b 0a 0a 20 20 69 66 28 20 6f 70 3d 3d 54 4b 5f  ;..  if( op==TK_
b7e0: 43 41 53 54 20 29 7b 0a 20 20 20 20 75 38 20 61  CAST ){.    u8 a
b7f0: 66 66 20 3d 20 73 71 6c 69 74 65 33 41 66 66 69  ff = sqlite3Affi
b800: 6e 69 74 79 54 79 70 65 28 70 45 78 70 72 2d 3e  nityType(pExpr->
b810: 75 2e 7a 54 6f 6b 65 6e 2c 30 29 3b 0a 20 20 20  u.zToken,0);.   
b820: 20 72 63 20 3d 20 76 61 6c 75 65 46 72 6f 6d 45   rc = valueFromE
b830: 78 70 72 28 64 62 2c 20 70 45 78 70 72 2d 3e 70  xpr(db, pExpr->p
b840: 4c 65 66 74 2c 20 65 6e 63 2c 20 61 66 66 2c 20  Left, enc, aff, 
b850: 70 70 56 61 6c 2c 20 70 43 74 78 29 3b 0a 20 20  ppVal, pCtx);.  
b860: 20 20 74 65 73 74 63 61 73 65 28 20 72 63 21 3d    testcase( rc!=
b870: 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20  SQLITE_OK );.   
b880: 20 69 66 28 20 2a 70 70 56 61 6c 20 29 7b 0a 20   if( *ppVal ){. 
b890: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b8a0: 4d 65 6d 43 61 73 74 28 2a 70 70 56 61 6c 2c 20  MemCast(*ppVal, 
b8b0: 61 66 66 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  aff, SQLITE_UTF8
b8c0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
b8d0: 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
b8e0: 74 79 28 2a 70 70 56 61 6c 2c 20 61 66 66 69 6e  ty(*ppVal, affin
b8f0: 69 74 79 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  ity, SQLITE_UTF8
b900: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  );.    }.    ret
b910: 75 72 6e 20 72 63 3b 0a 20 20 7d 0a 0a 20 20 2f  urn rc;.  }..  /
b920: 2a 20 48 61 6e 64 6c 65 20 6e 65 67 61 74 69 76  * Handle negativ
b930: 65 20 69 6e 74 65 67 65 72 73 20 69 6e 20 61 20  e integers in a 
b940: 73 69 6e 67 6c 65 20 73 74 65 70 2e 20 20 54 68  single step.  Th
b950: 69 73 20 69 73 20 6e 65 65 64 65 64 20 69 6e 20  is is needed in 
b960: 74 68 65 0a 20 20 2a 2a 20 63 61 73 65 20 77 68  the.  ** case wh
b970: 65 6e 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  en the value is 
b980: 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
b990: 35 38 30 38 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  5808..  */.  if(
b9a0: 20 6f 70 3d 3d 54 4b 5f 55 4d 49 4e 55 53 0a 20   op==TK_UMINUS. 
b9b0: 20 20 26 26 20 28 70 45 78 70 72 2d 3e 70 4c 65    && (pExpr->pLe
b9c0: 66 74 2d 3e 6f 70 3d 3d 54 4b 5f 49 4e 54 45 47  ft->op==TK_INTEG
b9d0: 45 52 20 7c 7c 20 70 45 78 70 72 2d 3e 70 4c 65  ER || pExpr->pLe
b9e0: 66 74 2d 3e 6f 70 3d 3d 54 4b 5f 46 4c 4f 41 54  ft->op==TK_FLOAT
b9f0: 29 20 29 7b 0a 20 20 20 20 70 45 78 70 72 20 3d  ) ){.    pExpr =
ba00: 20 70 45 78 70 72 2d 3e 70 4c 65 66 74 3b 0a 20   pExpr->pLeft;. 
ba10: 20 20 20 6f 70 20 3d 20 70 45 78 70 72 2d 3e 6f     op = pExpr->o
ba20: 70 3b 0a 20 20 20 20 6e 65 67 49 6e 74 20 3d 20  p;.    negInt = 
ba30: 2d 31 3b 0a 20 20 20 20 7a 4e 65 67 20 3d 20 22  -1;.    zNeg = "
ba40: 2d 22 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 6f  -";.  }..  if( o
ba50: 70 3d 3d 54 4b 5f 53 54 52 49 4e 47 20 7c 7c 20  p==TK_STRING || 
ba60: 6f 70 3d 3d 54 4b 5f 46 4c 4f 41 54 20 7c 7c 20  op==TK_FLOAT || 
ba70: 6f 70 3d 3d 54 4b 5f 49 4e 54 45 47 45 52 20 29  op==TK_INTEGER )
ba80: 7b 0a 20 20 20 20 70 56 61 6c 20 3d 20 76 61 6c  {.    pVal = val
ba90: 75 65 4e 65 77 28 64 62 2c 20 70 43 74 78 29 3b  ueNew(db, pCtx);
baa0: 0a 20 20 20 20 69 66 28 20 70 56 61 6c 3d 3d 30  .    if( pVal==0
bab0: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
bac0: 20 20 20 20 69 66 28 20 45 78 70 72 48 61 73 50      if( ExprHasP
bad0: 72 6f 70 65 72 74 79 28 70 45 78 70 72 2c 20 45  roperty(pExpr, E
bae0: 50 5f 49 6e 74 56 61 6c 75 65 29 20 29 7b 0a 20  P_IntValue) ){. 
baf0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
bb00: 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 56 61 6c  MemSetInt64(pVal
bb10: 2c 20 28 69 36 34 29 70 45 78 70 72 2d 3e 75 2e  , (i64)pExpr->u.
bb20: 69 56 61 6c 75 65 2a 6e 65 67 49 6e 74 29 3b 0a  iValue*negInt);.
bb30: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
bb40: 20 7a 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 4d   zVal = sqlite3M
bb50: 50 72 69 6e 74 66 28 64 62 2c 20 22 25 73 25 73  Printf(db, "%s%s
bb60: 22 2c 20 7a 4e 65 67 2c 20 70 45 78 70 72 2d 3e  ", zNeg, pExpr->
bb70: 75 2e 7a 54 6f 6b 65 6e 29 3b 0a 20 20 20 20 20  u.zToken);.     
bb80: 20 69 66 28 20 7a 56 61 6c 3d 3d 30 20 29 20 67   if( zVal==0 ) g
bb90: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
bba0: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
bbb0: 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20 7a  tStr(pVal, -1, z
bbc0: 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Val, SQLITE_UTF8
bbd0: 2c 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43  , SQLITE_DYNAMIC
bbe0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
bbf0: 20 28 6f 70 3d 3d 54 4b 5f 49 4e 54 45 47 45 52   (op==TK_INTEGER
bc00: 20 7c 7c 20 6f 70 3d 3d 54 4b 5f 46 4c 4f 41 54   || op==TK_FLOAT
bc10: 20 29 20 26 26 20 61 66 66 69 6e 69 74 79 3d 3d   ) && affinity==
bc20: 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20  SQLITE_AFF_BLOB 
bc30: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
bc40: 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
bc50: 74 79 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f  ty(pVal, SQLITE_
bc60: 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 53 51 4c  AFF_NUMERIC, SQL
bc70: 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 20 20 7d  ITE_UTF8);.    }
bc80: 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69  else{.      sqli
bc90: 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66  te3ValueApplyAff
bca0: 69 6e 69 74 79 28 70 56 61 6c 2c 20 61 66 66 69  inity(pVal, affi
bcb0: 6e 69 74 79 2c 20 53 51 4c 49 54 45 5f 55 54 46  nity, SQLITE_UTF
bcc0: 38 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  8);.    }.    if
bcd0: 28 20 70 56 61 6c 2d 3e 66 6c 61 67 73 20 26 20  ( pVal->flags & 
bce0: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
bcf0: 6c 29 20 29 20 70 56 61 6c 2d 3e 66 6c 61 67 73  l) ) pVal->flags
bd00: 20 26 3d 20 7e 4d 45 4d 5f 53 74 72 3b 0a 20 20   &= ~MEM_Str;.  
bd10: 20 20 69 66 28 20 65 6e 63 21 3d 53 51 4c 49 54    if( enc!=SQLIT
bd20: 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 20 20  E_UTF8 ){.      
bd30: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
bd40: 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
bd50: 56 61 6c 2c 20 65 6e 63 29 3b 0a 20 20 20 20 7d  Val, enc);.    }
bd60: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d  .  }else if( op=
bd70: 3d 54 4b 5f 55 4d 49 4e 55 53 20 29 20 7b 0a 20  =TK_UMINUS ) {. 
bd80: 20 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63     /* This branc
bd90: 68 20 68 61 70 70 65 6e 73 20 66 6f 72 20 6d 75  h happens for mu
bda0: 6c 74 69 70 6c 65 20 6e 65 67 61 74 69 76 65 20  ltiple negative 
bdb0: 73 69 67 6e 73 2e 20 20 45 78 3a 20 2d 28 2d 35  signs.  Ex: -(-5
bdc0: 29 20 2a 2f 0a 20 20 20 20 69 66 28 20 53 51 4c  ) */.    if( SQL
bdd0: 49 54 45 5f 4f 4b 3d 3d 76 61 6c 75 65 46 72 6f  ITE_OK==valueFro
bde0: 6d 45 78 70 72 28 64 62 2c 70 45 78 70 72 2d 3e  mExpr(db,pExpr->
bdf0: 70 4c 65 66 74 2c 65 6e 63 2c 61 66 66 69 6e 69  pLeft,enc,affini
be00: 74 79 2c 26 70 56 61 6c 2c 70 43 74 78 29 20 0a  ty,&pVal,pCtx) .
be10: 20 20 20 20 20 26 26 20 70 56 61 6c 21 3d 30 0a       && pVal!=0.
be20: 20 20 20 20 29 7b 0a 20 20 20 20 20 20 73 71 6c      ){.      sql
be30: 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72  ite3VdbeMemNumer
be40: 69 66 79 28 70 56 61 6c 29 3b 0a 20 20 20 20 20  ify(pVal);.     
be50: 20 69 66 28 20 70 56 61 6c 2d 3e 66 6c 61 67 73   if( pVal->flags
be60: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
be70: 20 20 20 20 20 20 20 70 56 61 6c 2d 3e 75 2e 72         pVal->u.r
be80: 20 3d 20 2d 70 56 61 6c 2d 3e 75 2e 72 3b 0a 20   = -pVal->u.r;. 
be90: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70       }else if( p
bea0: 56 61 6c 2d 3e 75 2e 69 3d 3d 53 4d 41 4c 4c 45  Val->u.i==SMALLE
beb0: 53 54 5f 49 4e 54 36 34 20 29 7b 0a 20 20 20 20  ST_INT64 ){.    
bec0: 20 20 20 20 70 56 61 6c 2d 3e 75 2e 72 20 3d 20      pVal->u.r = 
bed0: 2d 28 64 6f 75 62 6c 65 29 53 4d 41 4c 4c 45 53  -(double)SMALLES
bee0: 54 5f 49 4e 54 36 34 3b 0a 20 20 20 20 20 20 20  T_INT64;.       
bef0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
bf00: 70 56 61 6c 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b  pVal, MEM_Real);
bf10: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
bf20: 20 20 20 20 20 20 70 56 61 6c 2d 3e 75 2e 69 20        pVal->u.i 
bf30: 3d 20 2d 70 56 61 6c 2d 3e 75 2e 69 3b 0a 20 20  = -pVal->u.i;.  
bf40: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
bf50: 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66  te3ValueApplyAff
bf60: 69 6e 69 74 79 28 70 56 61 6c 2c 20 61 66 66 69  inity(pVal, affi
bf70: 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 20 20 20 20  nity, enc);.    
bf80: 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70  }.  }else if( op
bf90: 3d 3d 54 4b 5f 4e 55 4c 4c 20 29 7b 0a 20 20 20  ==TK_NULL ){.   
bfa0: 20 70 56 61 6c 20 3d 20 76 61 6c 75 65 4e 65 77   pVal = valueNew
bfb0: 28 64 62 2c 20 70 43 74 78 29 3b 0a 20 20 20 20  (db, pCtx);.    
bfc0: 69 66 28 20 70 56 61 6c 3d 3d 30 20 29 20 67 6f  if( pVal==0 ) go
bfd0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 73  to no_mem;.    s
bfe0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d  qlite3VdbeMemNum
bff0: 65 72 69 66 79 28 70 56 61 6c 29 3b 0a 20 20 7d  erify(pVal);.  }
c000: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
c010: 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41  OMIT_BLOB_LITERA
c020: 4c 0a 20 20 65 6c 73 65 20 69 66 28 20 6f 70 3d  L.  else if( op=
c030: 3d 54 4b 5f 42 4c 4f 42 20 29 7b 0a 20 20 20 20  =TK_BLOB ){.    
c040: 69 6e 74 20 6e 56 61 6c 3b 0a 20 20 20 20 61 73  int nVal;.    as
c050: 73 65 72 74 28 20 70 45 78 70 72 2d 3e 75 2e 7a  sert( pExpr->u.z
c060: 54 6f 6b 65 6e 5b 30 5d 3d 3d 27 78 27 20 7c 7c  Token[0]=='x' ||
c070: 20 70 45 78 70 72 2d 3e 75 2e 7a 54 6f 6b 65 6e   pExpr->u.zToken
c080: 5b 30 5d 3d 3d 27 58 27 20 29 3b 0a 20 20 20 20  [0]=='X' );.    
c090: 61 73 73 65 72 74 28 20 70 45 78 70 72 2d 3e 75  assert( pExpr->u
c0a0: 2e 7a 54 6f 6b 65 6e 5b 31 5d 3d 3d 27 5c 27 27  .zToken[1]=='\''
c0b0: 20 29 3b 0a 20 20 20 20 70 56 61 6c 20 3d 20 76   );.    pVal = v
c0c0: 61 6c 75 65 4e 65 77 28 64 62 2c 20 70 43 74 78  alueNew(db, pCtx
c0d0: 29 3b 0a 20 20 20 20 69 66 28 20 21 70 56 61 6c  );.    if( !pVal
c0e0: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
c0f0: 20 20 20 20 7a 56 61 6c 20 3d 20 26 70 45 78 70      zVal = &pExp
c100: 72 2d 3e 75 2e 7a 54 6f 6b 65 6e 5b 32 5d 3b 0a  r->u.zToken[2];.
c110: 20 20 20 20 6e 56 61 6c 20 3d 20 73 71 6c 69 74      nVal = sqlit
c120: 65 33 53 74 72 6c 65 6e 33 30 28 7a 56 61 6c 29  e3Strlen30(zVal)
c130: 2d 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  -1;.    assert( 
c140: 7a 56 61 6c 5b 6e 56 61 6c 5d 3d 3d 27 5c 27 27  zVal[nVal]=='\''
c150: 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
c160: 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 56 61  dbeMemSetStr(pVa
c170: 6c 2c 20 73 71 6c 69 74 65 33 48 65 78 54 6f 42  l, sqlite3HexToB
c180: 6c 6f 62 28 64 62 2c 20 7a 56 61 6c 2c 20 6e 56  lob(db, zVal, nV
c190: 61 6c 29 2c 20 6e 56 61 6c 2f 32 2c 0a 20 20 20  al), nVal/2,.   
c1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1b0: 20 20 20 20 20 20 30 2c 20 53 51 4c 49 54 45 5f        0, SQLITE_
c1c0: 44 59 4e 41 4d 49 43 29 3b 0a 20 20 7d 0a 23 65  DYNAMIC);.  }.#e
c1d0: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
c1e0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
c1f0: 4f 52 5f 53 54 41 54 34 0a 20 20 65 6c 73 65 20  OR_STAT4.  else 
c200: 69 66 28 20 6f 70 3d 3d 54 4b 5f 46 55 4e 43 54  if( op==TK_FUNCT
c210: 49 4f 4e 20 26 26 20 70 43 74 78 21 3d 30 20 29  ION && pCtx!=0 )
c220: 7b 0a 20 20 20 20 72 63 20 3d 20 76 61 6c 75 65  {.    rc = value
c230: 46 72 6f 6d 46 75 6e 63 74 69 6f 6e 28 64 62 2c  FromFunction(db,
c240: 20 70 45 78 70 72 2c 20 65 6e 63 2c 20 61 66 66   pExpr, enc, aff
c250: 69 6e 69 74 79 2c 20 26 70 56 61 6c 2c 20 70 43  inity, &pVal, pC
c260: 74 78 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  tx);.  }.#endif.
c270: 20 20 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d 54    else if( op==T
c280: 4b 5f 54 52 55 45 46 41 4c 53 45 20 29 7b 0a 20  K_TRUEFALSE ){. 
c290: 20 20 20 20 70 56 61 6c 20 3d 20 76 61 6c 75 65      pVal = value
c2a0: 4e 65 77 28 64 62 2c 20 70 43 74 78 29 3b 0a 20  New(db, pCtx);. 
c2b0: 20 20 20 20 70 56 61 6c 2d 3e 66 6c 61 67 73 20      pVal->flags 
c2c0: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 20  = MEM_Int;.     
c2d0: 70 56 61 6c 2d 3e 75 2e 69 20 3d 20 70 45 78 70  pVal->u.i = pExp
c2e0: 72 2d 3e 75 2e 7a 54 6f 6b 65 6e 5b 34 5d 3d 3d  r->u.zToken[4]==
c2f0: 30 3b 0a 20 20 7d 0a 0a 20 20 2a 70 70 56 61 6c  0;.  }..  *ppVal
c300: 20 3d 20 70 56 61 6c 3b 0a 20 20 72 65 74 75 72   = pVal;.  retur
c310: 6e 20 72 63 3b 0a 0a 6e 6f 5f 6d 65 6d 3a 0a 23  n rc;..no_mem:.#
c320: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
c330: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
c340: 54 34 0a 20 20 69 66 28 20 70 43 74 78 3d 3d 30  T4.  if( pCtx==0
c350: 20 7c 7c 20 70 43 74 78 2d 3e 70 50 61 72 73 65   || pCtx->pParse
c360: 2d 3e 6e 45 72 72 3d 3d 30 20 29 0a 23 65 6e 64  ->nErr==0 ).#end
c370: 69 66 0a 20 20 20 20 73 71 6c 69 74 65 33 4f 6f  if.    sqlite3Oo
c380: 6d 46 61 75 6c 74 28 64 62 29 3b 0a 20 20 73 71  mFault(db);.  sq
c390: 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
c3a0: 7a 56 61 6c 29 3b 0a 20 20 61 73 73 65 72 74 28  zVal);.  assert(
c3b0: 20 2a 70 70 56 61 6c 3d 3d 30 20 29 3b 0a 23 69   *ppVal==0 );.#i
c3c0: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
c3d0: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
c3e0: 34 0a 20 20 69 66 28 20 70 43 74 78 3d 3d 30 20  4.  if( pCtx==0 
c3f0: 29 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  ) sqlite3ValueFr
c400: 65 65 28 70 56 61 6c 29 3b 0a 23 65 6c 73 65 0a  ee(pVal);.#else.
c410: 20 20 61 73 73 65 72 74 28 20 70 43 74 78 3d 3d    assert( pCtx==
c420: 30 20 29 3b 20 73 71 6c 69 74 65 33 56 61 6c 75  0 ); sqlite3Valu
c430: 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 23 65 6e  eFree(pVal);.#en
c440: 64 69 66 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  dif.  return SQL
c450: 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a  ITE_NOMEM_BKPT;.
c460: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20  }../*.** Create 
c470: 61 20 6e 65 77 20 73 71 6c 69 74 65 33 5f 76 61  a new sqlite3_va
c480: 6c 75 65 20 6f 62 6a 65 63 74 2c 20 63 6f 6e 74  lue object, cont
c490: 61 69 6e 69 6e 67 20 74 68 65 20 76 61 6c 75 65  aining the value
c4a0: 20 6f 66 20 70 45 78 70 72 2e 0a 2a 2a 0a 2a 2a   of pExpr..**.**
c4b0: 20 54 68 69 73 20 6f 6e 6c 79 20 77 6f 72 6b 73   This only works
c4c0: 20 66 6f 72 20 76 65 72 79 20 73 69 6d 70 6c 65   for very simple
c4d0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
c4e0: 74 20 63 6f 6e 73 69 73 74 20 6f 66 20 6f 6e 65  t consist of one
c4f0: 20 63 6f 6e 73 74 61 6e 74 0a 2a 2a 20 74 6f 6b   constant.** tok
c500: 65 6e 20 28 69 2e 65 2e 20 22 35 22 2c 20 22 35  en (i.e. "5", "5
c510: 2e 31 22 2c 20 22 27 61 20 73 74 72 69 6e 67 27  .1", "'a string'
c520: 22 29 2e 20 49 66 20 74 68 65 20 65 78 70 72 65  "). If the expre
c530: 73 73 69 6f 6e 20 63 61 6e 0a 2a 2a 20 62 65 20  ssion can.** be 
c540: 63 6f 6e 76 65 72 74 65 64 20 64 69 72 65 63 74  converted direct
c550: 6c 79 20 69 6e 74 6f 20 61 20 76 61 6c 75 65 2c  ly into a value,
c560: 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
c570: 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64  is allocated and
c580: 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 77 72  .** a pointer wr
c590: 69 74 74 65 6e 20 74 6f 20 2a 70 70 56 61 6c 2e  itten to *ppVal.
c5a0: 20 54 68 65 20 63 61 6c 6c 65 72 20 69 73 20 72   The caller is r
c5b0: 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 64  esponsible for d
c5c0: 65 61 6c 6c 6f 63 61 74 69 6e 67 0a 2a 2a 20 74  eallocating.** t
c5d0: 68 65 20 76 61 6c 75 65 20 62 79 20 70 61 73 73  he value by pass
c5e0: 69 6e 67 20 69 74 20 74 6f 20 73 71 6c 69 74 65  ing it to sqlite
c5f0: 33 56 61 6c 75 65 46 72 65 65 28 29 20 6c 61 74  3ValueFree() lat
c600: 65 72 20 6f 6e 2e 20 49 66 20 74 68 65 20 65 78  er on. If the ex
c610: 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 63 61 6e 6e  pression.** cann
c620: 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
c630: 74 6f 20 61 20 76 61 6c 75 65 2c 20 74 68 65 6e  to a value, then
c640: 20 2a 70 70 56 61 6c 20 69 73 20 73 65 74 20 74   *ppVal is set t
c650: 6f 20 4e 55 4c 4c 2e 0a 2a 2f 0a 69 6e 74 20 73  o NULL..*/.int s
c660: 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45  qlite3ValueFromE
c670: 78 70 72 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  xpr(.  sqlite3 *
c680: 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  db,             
c690: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
c6a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20   connection */. 
c6b0: 20 45 78 70 72 20 2a 70 45 78 70 72 2c 20 20 20   Expr *pExpr,   
c6c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
c6d0: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20  e expression to 
c6e0: 65 76 61 6c 75 61 74 65 20 2a 2f 0a 20 20 75 38  evaluate */.  u8
c6f0: 20 65 6e 63 2c 20 20 20 20 20 20 20 20 20 20 20   enc,           
c700: 20 20 20 20 20 20 20 20 2f 2a 20 45 6e 63 6f 64          /* Encod
c710: 69 6e 67 20 74 6f 20 75 73 65 20 2a 2f 0a 20 20  ing to use */.  
c720: 75 38 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20  u8 affinity,    
c730: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 66 66            /* Aff
c740: 69 6e 69 74 79 20 74 6f 20 75 73 65 20 2a 2f 0a  inity to use */.
c750: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
c760: 2a 2a 70 70 56 61 6c 20 20 20 20 20 2f 2a 20 57  **ppVal     /* W
c770: 72 69 74 65 20 74 68 65 20 6e 65 77 20 76 61 6c  rite the new val
c780: 75 65 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20 20  ue here */.){.  
c790: 72 65 74 75 72 6e 20 70 45 78 70 72 20 3f 20 76  return pExpr ? v
c7a0: 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 64 62 2c  alueFromExpr(db,
c7b0: 20 70 45 78 70 72 2c 20 65 6e 63 2c 20 61 66 66   pExpr, enc, aff
c7c0: 69 6e 69 74 79 2c 20 70 70 56 61 6c 2c 20 30 29  inity, ppVal, 0)
c7d0: 20 3a 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20   : 0;.}..#ifdef 
c7e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
c7f0: 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2f 2a 0a  AT3_OR_STAT4./*.
c800: 2a 2a 20 54 68 65 20 69 6d 70 6c 65 6d 65 6e 74  ** The implement
c810: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 71 6c  ation of the sql
c820: 69 74 65 5f 72 65 63 6f 72 64 28 29 20 66 75 6e  ite_record() fun
c830: 63 74 69 6f 6e 2e 20 54 68 69 73 20 66 75 6e 63  ction. This func
c840: 74 69 6f 6e 20 61 63 63 65 70 74 73 0a 2a 2a 20  tion accepts.** 
c850: 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e  a single argumen
c860: 74 20 6f 66 20 61 6e 79 20 74 79 70 65 2e 20 54  t of any type. T
c870: 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20  he return value 
c880: 69 73 20 61 20 66 6f 72 6d 61 74 74 65 64 20 64  is a formatted d
c890: 61 74 61 62 61 73 65 20 0a 2a 2a 20 72 65 63 6f  atabase .** reco
c8a0: 72 64 20 28 61 20 62 6c 6f 62 29 20 63 6f 6e 74  rd (a blob) cont
c8b0: 61 69 6e 69 6e 67 20 74 68 65 20 61 72 67 75 6d  aining the argum
c8c0: 65 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  ent value..**.**
c8d0: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f   This is used to
c8e0: 20 63 6f 6e 76 65 72 74 20 74 68 65 20 76 61 6c   convert the val
c8f0: 75 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  ue stored in the
c900: 20 27 73 61 6d 70 6c 65 27 20 63 6f 6c 75 6d 6e   'sample' column
c910: 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   of the.** sqlit
c920: 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 74 6f  e_stat3 table to
c930: 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d   the record form
c940: 61 74 20 53 51 4c 69 74 65 20 75 73 65 73 20 69  at SQLite uses i
c950: 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 73 74  nternally..*/.st
c960: 61 74 69 63 20 76 6f 69 64 20 72 65 63 6f 72 64  atic void record
c970: 46 75 6e 63 28 0a 20 20 73 71 6c 69 74 65 33 5f  Func(.  sqlite3_
c980: 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74  context *context
c990: 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20  ,.  int argc,.  
c9a0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
c9b0: 61 72 67 76 0a 29 7b 0a 20 20 63 6f 6e 73 74 20  argv.){.  const 
c9c0: 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20  int file_format 
c9d0: 3d 20 31 3b 0a 20 20 75 33 32 20 69 53 65 72 69  = 1;.  u32 iSeri
c9e0: 61 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  al;             
c9f0: 20 20 20 20 20 20 20 2f 2a 20 53 65 72 69 61 6c         /* Serial
ca00: 20 74 79 70 65 20 2a 2f 0a 20 20 69 6e 74 20 6e   type */.  int n
ca10: 53 65 72 69 61 6c 3b 20 20 20 20 20 20 20 20 20  Serial;         
ca20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79             /* By
ca30: 74 65 73 20 6f 66 20 73 70 61 63 65 20 66 6f 72  tes of space for
ca40: 20 69 53 65 72 69 61 6c 20 61 73 20 76 61 72 69   iSerial as vari
ca50: 6e 74 20 2a 2f 0a 20 20 75 33 32 20 6e 56 61 6c  nt */.  u32 nVal
ca60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ca70: 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73          /* Bytes
ca80: 20 6f 66 20 73 70 61 63 65 20 72 65 71 75 69 72   of space requir
ca90: 65 64 20 66 6f 72 20 61 72 67 76 5b 30 5d 20 2a  ed for argv[0] *
caa0: 2f 0a 20 20 69 6e 74 20 6e 52 65 74 3b 0a 20 20  /.  int nRet;.  
cab0: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 75  sqlite3 *db;.  u
cac0: 38 20 2a 61 52 65 74 3b 0a 0a 20 20 55 4e 55 53  8 *aRet;..  UNUS
cad0: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 20 61 72  ED_PARAMETER( ar
cae0: 67 63 20 29 3b 0a 20 20 69 53 65 72 69 61 6c 20  gc );.  iSerial 
caf0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
cb00: 69 61 6c 54 79 70 65 28 61 72 67 76 5b 30 5d 2c  ialType(argv[0],
cb10: 20 66 69 6c 65 5f 66 6f 72 6d 61 74 2c 20 26 6e   file_format, &n
cb20: 56 61 6c 29 3b 0a 20 20 6e 53 65 72 69 61 6c 20  Val);.  nSerial 
cb30: 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  = sqlite3VarintL
cb40: 65 6e 28 69 53 65 72 69 61 6c 29 3b 0a 20 20 64  en(iSerial);.  d
cb50: 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  b = sqlite3_cont
cb60: 65 78 74 5f 64 62 5f 68 61 6e 64 6c 65 28 63 6f  ext_db_handle(co
cb70: 6e 74 65 78 74 29 3b 0a 0a 20 20 6e 52 65 74 20  ntext);..  nRet 
cb80: 3d 20 31 20 2b 20 6e 53 65 72 69 61 6c 20 2b 20  = 1 + nSerial + 
cb90: 6e 56 61 6c 3b 0a 20 20 61 52 65 74 20 3d 20 73  nVal;.  aRet = s
cba0: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
cbb0: 77 4e 4e 28 64 62 2c 20 6e 52 65 74 29 3b 0a 20  wNN(db, nRet);. 
cbc0: 20 69 66 28 20 61 52 65 74 3d 3d 30 20 29 7b 0a   if( aRet==0 ){.
cbd0: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
cbe0: 6c 74 5f 65 72 72 6f 72 5f 6e 6f 6d 65 6d 28 63  lt_error_nomem(c
cbf0: 6f 6e 74 65 78 74 29 3b 0a 20 20 7d 65 6c 73 65  ontext);.  }else
cc00: 7b 0a 20 20 20 20 61 52 65 74 5b 30 5d 20 3d 20  {.    aRet[0] = 
cc10: 6e 53 65 72 69 61 6c 2b 31 3b 0a 20 20 20 20 70  nSerial+1;.    p
cc20: 75 74 56 61 72 69 6e 74 33 32 28 26 61 52 65 74  utVarint32(&aRet
cc30: 5b 31 5d 2c 20 69 53 65 72 69 61 6c 29 3b 0a 20  [1], iSerial);. 
cc40: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
cc50: 72 69 61 6c 50 75 74 28 26 61 52 65 74 5b 31 2b  rialPut(&aRet[1+
cc60: 6e 53 65 72 69 61 6c 5d 2c 20 61 72 67 76 5b 30  nSerial], argv[0
cc70: 5d 2c 20 69 53 65 72 69 61 6c 29 3b 0a 20 20 20  ], iSerial);.   
cc80: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
cc90: 62 6c 6f 62 28 63 6f 6e 74 65 78 74 2c 20 61 52  blob(context, aR
cca0: 65 74 2c 20 6e 52 65 74 2c 20 53 51 4c 49 54 45  et, nRet, SQLITE
ccb0: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
ccc0: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e   sqlite3DbFreeNN
ccd0: 28 64 62 2c 20 61 52 65 74 29 3b 0a 20 20 7d 0a  (db, aRet);.  }.
cce0: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65  }../*.** Registe
ccf0: 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74  r built-in funct
cd00: 69 6f 6e 73 20 75 73 65 64 20 74 6f 20 68 65 6c  ions used to hel
cd10: 70 20 72 65 61 64 20 41 4e 41 4c 59 5a 45 20 64  p read ANALYZE d
cd20: 61 74 61 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  ata..*/.void sql
cd30: 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74  ite3AnalyzeFunct
cd40: 69 6f 6e 73 28 76 6f 69 64 29 7b 0a 20 20 73 74  ions(void){.  st
cd50: 61 74 69 63 20 46 75 6e 63 44 65 66 20 61 41 6e  atic FuncDef aAn
cd60: 61 6c 79 7a 65 54 61 62 6c 65 46 75 6e 63 73 5b  alyzeTableFuncs[
cd70: 5d 20 3d 20 7b 0a 20 20 20 20 46 55 4e 43 54 49  ] = {.    FUNCTI
cd80: 4f 4e 28 73 71 6c 69 74 65 5f 72 65 63 6f 72 64  ON(sqlite_record
cd90: 2c 20 20 20 31 2c 20 30 2c 20 30 2c 20 72 65 63  ,   1, 0, 0, rec
cda0: 6f 72 64 46 75 6e 63 29 2c 0a 20 20 7d 3b 0a 20  ordFunc),.  };. 
cdb0: 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 42 75   sqlite3InsertBu
cdc0: 69 6c 74 69 6e 46 75 6e 63 73 28 61 41 6e 61 6c  iltinFuncs(aAnal
cdd0: 79 7a 65 54 61 62 6c 65 46 75 6e 63 73 2c 20 41  yzeTableFuncs, A
cde0: 72 72 61 79 53 69 7a 65 28 61 41 6e 61 6c 79 7a  rraySize(aAnalyz
cdf0: 65 54 61 62 6c 65 46 75 6e 63 73 29 29 3b 0a 7d  eTableFuncs));.}
ce00: 0a 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70 74 20  ../*.** Attempt 
ce10: 74 6f 20 65 78 74 72 61 63 74 20 61 20 76 61 6c  to extract a val
ce20: 75 65 20 66 72 6f 6d 20 70 45 78 70 72 20 61 6e  ue from pExpr an
ce30: 64 20 75 73 65 20 69 74 20 74 6f 20 63 6f 6e 73  d use it to cons
ce40: 74 72 75 63 74 20 2a 70 70 56 61 6c 2e 0a 2a 2a  truct *ppVal..**
ce50: 0a 2a 2a 20 49 66 20 70 41 6c 6c 6f 63 20 69 73  .** If pAlloc is
ce60: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
ce70: 61 6e 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  an UnpackedRecor
ce80: 64 20 6f 62 6a 65 63 74 20 69 73 20 63 72 65 61  d object is crea
ce90: 74 65 64 20 66 6f 72 0a 2a 2a 20 70 41 6c 6c 6f  ted for.** pAllo
cea0: 63 20 69 66 20 6f 6e 65 20 64 6f 65 73 20 6e 6f  c if one does no
ceb0: 74 20 65 78 69 73 74 20 61 6e 64 20 74 68 65 20  t exist and the 
cec0: 6e 65 77 20 76 61 6c 75 65 20 69 73 20 61 64 64  new value is add
ced0: 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 55 6e 70  ed to the.** Unp
cee0: 61 63 6b 65 64 52 65 63 6f 72 64 20 6f 62 6a 65  ackedRecord obje
cef0: 63 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 76 61 6c 75  ct..**.** A valu
cf00: 65 20 69 73 20 65 78 74 72 61 63 74 65 64 20 69  e is extracted i
cf10: 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
cf20: 63 61 73 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 2a 20  cases:.**.**  * 
cf30: 28 70 45 78 70 72 3d 3d 30 29 2e 20 49 6e 20 74  (pExpr==0). In t
cf40: 68 69 73 20 63 61 73 65 20 74 68 65 20 76 61 6c  his case the val
cf50: 75 65 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  ue is assumed to
cf60: 20 62 65 20 61 6e 20 53 51 4c 20 4e 55 4c 4c 2c   be an SQL NULL,
cf70: 0a 2a 2a 0a 2a 2a 20 20 2a 20 54 68 65 20 65 78  .**.**  * The ex
cf80: 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 62 6f  pression is a bo
cf90: 75 6e 64 20 76 61 72 69 61 62 6c 65 2c 20 61 6e  und variable, an
cfa0: 64 20 74 68 69 73 20 69 73 20 61 20 72 65 70 72  d this is a repr
cfb0: 65 70 61 72 65 2c 20 6f 72 0a 2a 2a 0a 2a 2a 20  epare, or.**.** 
cfc0: 20 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f   * The expressio
cfd0: 6e 20 69 73 20 61 20 6c 69 74 65 72 61 6c 20 76  n is a literal v
cfe0: 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 20 73  alue..**.** On s
cff0: 75 63 63 65 73 73 2c 20 2a 70 70 56 61 6c 20 69  uccess, *ppVal i
d000: 73 20 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20  s made to point 
d010: 74 6f 20 74 68 65 20 65 78 74 72 61 63 74 65 64  to the extracted
d020: 20 76 61 6c 75 65 2e 20 20 54 68 65 20 63 61 6c   value.  The cal
d030: 6c 65 72 0a 2a 2a 20 69 73 20 72 65 73 70 6f 6e  ler.** is respon
d040: 73 69 62 6c 65 20 66 6f 72 20 65 6e 73 75 72 69  sible for ensuri
d050: 6e 67 20 74 68 61 74 20 74 68 65 20 76 61 6c 75  ng that the valu
d060: 65 20 69 73 20 65 76 65 6e 74 75 61 6c 6c 79 20  e is eventually 
d070: 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  freed..*/.static
d080: 20 69 6e 74 20 73 74 61 74 34 56 61 6c 75 65 46   int stat4ValueF
d090: 72 6f 6d 45 78 70 72 28 0a 20 20 50 61 72 73 65  romExpr(.  Parse
d0a0: 20 2a 70 50 61 72 73 65 2c 20 20 20 20 20 20 20   *pParse,       
d0b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
d0c0: 72 73 65 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  rse context */. 
d0d0: 20 45 78 70 72 20 2a 70 45 78 70 72 2c 20 20 20   Expr *pExpr,   
d0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0f0: 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73 69   /* The expressi
d100: 6f 6e 20 74 6f 20 65 78 74 72 61 63 74 20 61 20  on to extract a 
d110: 76 61 6c 75 65 20 66 72 6f 6d 20 2a 2f 0a 20 20  value from */.  
d120: 75 38 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20  u8 affinity,    
d130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d140: 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75  /* Affinity to u
d150: 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56  se */.  struct V
d160: 61 6c 75 65 4e 65 77 53 74 61 74 34 43 74 78 20  alueNewStat4Ctx 
d170: 2a 70 41 6c 6c 6f 63 2c 2f 2a 20 48 6f 77 20 74  *pAlloc,/* How t
d180: 6f 20 61 6c 6c 6f 63 61 74 65 20 73 70 61 63 65  o allocate space
d190: 2e 20 20 4f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  .  Or NULL */.  
d1a0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
d1b0: 70 70 56 61 6c 20 20 20 20 20 20 20 20 20 20 20  ppVal           
d1c0: 2f 2a 20 4f 55 54 3a 20 4e 65 77 20 76 61 6c 75  /* OUT: New valu
d1d0: 65 20 6f 62 6a 65 63 74 20 28 6f 72 20 4e 55 4c  e object (or NUL
d1e0: 4c 29 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72  L) */.){.  int r
d1f0: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
d200: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
d210: 70 56 61 6c 20 3d 20 30 3b 0a 20 20 73 71 6c 69  pVal = 0;.  sqli
d220: 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72 73 65  te3 *db = pParse
d230: 2d 3e 64 62 3b 0a 0a 20 20 2f 2a 20 53 6b 69 70  ->db;..  /* Skip
d240: 20 6f 76 65 72 20 61 6e 79 20 54 4b 5f 43 4f 4c   over any TK_COL
d250: 4c 41 54 45 20 6e 6f 64 65 73 20 2a 2f 0a 20 20  LATE nodes */.  
d260: 70 45 78 70 72 20 3d 20 73 71 6c 69 74 65 33 45  pExpr = sqlite3E
d270: 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 70  xprSkipCollate(p
d280: 45 78 70 72 29 3b 0a 0a 20 20 61 73 73 65 72 74  Expr);..  assert
d290: 28 20 70 45 78 70 72 3d 3d 30 20 7c 7c 20 70 45  ( pExpr==0 || pE
d2a0: 78 70 72 2d 3e 6f 70 21 3d 54 4b 5f 52 45 47 49  xpr->op!=TK_REGI
d2b0: 53 54 45 52 20 7c 7c 20 70 45 78 70 72 2d 3e 6f  STER || pExpr->o
d2c0: 70 32 21 3d 54 4b 5f 56 41 52 49 41 42 4c 45 20  p2!=TK_VARIABLE 
d2d0: 29 3b 0a 20 20 69 66 28 20 21 70 45 78 70 72 20  );.  if( !pExpr 
d2e0: 29 7b 0a 20 20 20 20 70 56 61 6c 20 3d 20 76 61  ){.    pVal = va
d2f0: 6c 75 65 4e 65 77 28 64 62 2c 20 70 41 6c 6c 6f  lueNew(db, pAllo
d300: 63 29 3b 0a 20 20 20 20 69 66 28 20 70 56 61 6c  c);.    if( pVal
d310: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
d320: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
d330: 28 4d 65 6d 2a 29 70 56 61 6c 29 3b 0a 20 20 20  (Mem*)pVal);.   
d340: 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70   }.  }else if( p
d350: 45 78 70 72 2d 3e 6f 70 3d 3d 54 4b 5f 56 41 52  Expr->op==TK_VAR
d360: 49 41 42 4c 45 20 26 26 20 28 64 62 2d 3e 66 6c  IABLE && (db->fl
d370: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 45 6e 61  ags & SQLITE_Ena
d380: 62 6c 65 51 50 53 47 29 3d 3d 30 20 29 7b 0a 20  bleQPSG)==0 ){. 
d390: 20 20 20 56 64 62 65 20 2a 76 3b 0a 20 20 20 20     Vdbe *v;.    
d3a0: 69 6e 74 20 69 42 69 6e 64 56 61 72 20 3d 20 70  int iBindVar = p
d3b0: 45 78 70 72 2d 3e 69 43 6f 6c 75 6d 6e 3b 0a 20  Expr->iColumn;. 
d3c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
d3d0: 74 56 61 72 6d 61 73 6b 28 70 50 61 72 73 65 2d  tVarmask(pParse-
d3e0: 3e 70 56 64 62 65 2c 20 69 42 69 6e 64 56 61 72  >pVdbe, iBindVar
d3f0: 29 3b 0a 20 20 20 20 69 66 28 20 28 76 20 3d 20  );.    if( (v = 
d400: 70 50 61 72 73 65 2d 3e 70 52 65 70 72 65 70 61  pParse->pReprepa
d410: 72 65 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  re)!=0 ){.      
d420: 70 56 61 6c 20 3d 20 76 61 6c 75 65 4e 65 77 28  pVal = valueNew(
d430: 64 62 2c 20 70 41 6c 6c 6f 63 29 3b 0a 20 20 20  db, pAlloc);.   
d440: 20 20 20 69 66 28 20 70 56 61 6c 20 29 7b 0a 20     if( pVal ){. 
d450: 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
d460: 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28 28  te3VdbeMemCopy((
d470: 4d 65 6d 2a 29 70 56 61 6c 2c 20 26 76 2d 3e 61  Mem*)pVal, &v->a
d480: 56 61 72 5b 69 42 69 6e 64 56 61 72 2d 31 5d 29  Var[iBindVar-1])
d490: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d4a0: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
d4b0: 69 74 79 28 70 56 61 6c 2c 20 61 66 66 69 6e 69  ity(pVal, affini
d4c0: 74 79 2c 20 45 4e 43 28 64 62 29 29 3b 0a 20 20  ty, ENC(db));.  
d4d0: 20 20 20 20 20 20 70 56 61 6c 2d 3e 64 62 20 3d        pVal->db =
d4e0: 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20 20 20   pParse->db;.   
d4f0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
d500: 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 76 61 6c  se{.    rc = val
d510: 75 65 46 72 6f 6d 45 78 70 72 28 64 62 2c 20 70  ueFromExpr(db, p
d520: 45 78 70 72 2c 20 45 4e 43 28 64 62 29 2c 20 61  Expr, ENC(db), a
d530: 66 66 69 6e 69 74 79 2c 20 26 70 56 61 6c 2c 20  ffinity, &pVal, 
d540: 70 41 6c 6c 6f 63 29 3b 0a 20 20 7d 0a 0a 20 20  pAlloc);.  }..  
d550: 61 73 73 65 72 74 28 20 70 56 61 6c 3d 3d 30 20  assert( pVal==0 
d560: 7c 7c 20 70 56 61 6c 2d 3e 64 62 3d 3d 64 62 20  || pVal->db==db 
d570: 29 3b 0a 20 20 2a 70 70 56 61 6c 20 3d 20 70 56  );.  *ppVal = pV
d580: 61 6c 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  al;.  return rc;
d590: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  .}../*.** This f
d5a0: 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20  unction is used 
d5b0: 74 6f 20 61 6c 6c 6f 63 61 74 65 20 61 6e 64 20  to allocate and 
d5c0: 70 6f 70 75 6c 61 74 65 20 55 6e 70 61 63 6b 65  populate Unpacke
d5d0: 64 52 65 63 6f 72 64 20 0a 2a 2a 20 73 74 72 75  dRecord .** stru
d5e0: 63 74 75 72 65 73 20 69 6e 74 65 6e 64 65 64 20  ctures intended 
d5f0: 74 6f 20 62 65 20 63 6f 6d 70 61 72 65 64 20 61  to be compared a
d600: 67 61 69 6e 73 74 20 73 61 6d 70 6c 65 20 69 6e  gainst sample in
d610: 64 65 78 20 6b 65 79 73 20 73 74 6f 72 65 64 20  dex keys stored 
d620: 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74  .** in the sqlit
d630: 65 5f 73 74 61 74 34 20 74 61 62 6c 65 2e 0a 2a  e_stat4 table..*
d640: 2a 0a 2a 2a 20 41 20 73 69 6e 67 6c 65 20 63 61  *.** A single ca
d650: 6c 6c 20 74 6f 20 74 68 69 73 20 66 75 6e 63 74  ll to this funct
d660: 69 6f 6e 20 70 6f 70 75 6c 61 74 65 73 20 7a 65  ion populates ze
d670: 72 6f 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64  ro or more field
d680: 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f  s of the.** reco
d690: 72 64 20 73 74 61 72 74 69 6e 67 20 77 69 74 68  rd starting with
d6a0: 20 66 69 65 6c 64 20 69 56 61 6c 20 28 66 69 65   field iVal (fie
d6b0: 6c 64 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64  lds are numbered
d6c0: 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 0a 2a 2a   from left to.**
d6d0: 20 72 69 67 68 74 20 73 74 61 72 74 69 6e 67 20   right starting 
d6e0: 77 69 74 68 20 30 29 2e 20 41 20 73 69 6e 67 6c  with 0). A singl
d6f0: 65 20 66 69 65 6c 64 20 69 73 20 70 6f 70 75 6c  e field is popul
d700: 61 74 65 64 20 69 66 3a 0a 2a 2a 0a 2a 2a 20 20  ated if:.**.**  
d710: 2a 20 28 70 45 78 70 72 3d 3d 30 29 2e 20 49 6e  * (pExpr==0). In
d720: 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 76   this case the v
d730: 61 6c 75 65 20 69 73 20 61 73 73 75 6d 65 64 20  alue is assumed 
d740: 74 6f 20 62 65 20 61 6e 20 53 51 4c 20 4e 55 4c  to be an SQL NUL
d750: 4c 2c 0a 2a 2a 0a 2a 2a 20 20 2a 20 54 68 65 20  L,.**.**  * The 
d760: 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
d770: 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 2c 20  bound variable, 
d780: 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 72 65  and this is a re
d790: 70 72 65 70 61 72 65 2c 20 6f 72 0a 2a 2a 0a 2a  prepare, or.**.*
d7a0: 2a 20 20 2a 20 54 68 65 20 73 71 6c 69 74 65 33  *  * The sqlite3
d7b0: 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 29 20  ValueFromExpr() 
d7c0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 62 6c 65  function is able
d7d0: 20 74 6f 20 65 78 74 72 61 63 74 20 61 20 76 61   to extract a va
d7e0: 6c 75 65 20 0a 2a 2a 20 20 20 20 66 72 6f 6d 20  lue .**    from 
d7f0: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28  the expression (
d800: 69 2e 65 2e 20 74 68 65 20 65 78 70 72 65 73 73  i.e. the express
d810: 69 6f 6e 20 69 73 20 61 20 6c 69 74 65 72 61 6c  ion is a literal
d820: 20 76 61 6c 75 65 29 2e 0a 2a 2a 0a 2a 2a 20 4f   value)..**.** O
d830: 72 2c 20 69 66 20 70 45 78 70 72 20 69 73 20 61  r, if pExpr is a
d840: 20 54 4b 5f 56 45 43 54 4f 52 2c 20 6f 6e 65 20   TK_VECTOR, one 
d850: 66 69 65 6c 64 20 69 73 20 70 6f 70 75 6c 61 74  field is populat
d860: 65 64 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74  ed for each of t
d870: 68 65 0a 2a 2a 20 76 65 63 74 6f 72 20 63 6f 6d  he.** vector com
d880: 70 6f 6e 65 6e 74 73 20 74 68 61 74 20 6d 61 74  ponents that mat
d890: 63 68 20 65 69 74 68 65 72 20 6f 66 20 74 68 65  ch either of the
d8a0: 20 74 77 6f 20 6c 61 74 74 65 72 20 63 72 69 74   two latter crit
d8b0: 65 72 69 61 20 6c 69 73 74 65 64 0a 2a 2a 20 61  eria listed.** a
d8c0: 62 6f 76 65 2e 0a 2a 2a 0a 2a 2a 20 42 65 66 6f  bove..**.** Befo
d8d0: 72 65 20 61 6e 79 20 76 61 6c 75 65 20 69 73 20  re any value is 
d8e0: 61 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65 20  appended to the 
d8f0: 72 65 63 6f 72 64 2c 20 74 68 65 20 61 66 66 69  record, the affi
d900: 6e 69 74 79 20 6f 66 20 74 68 65 20 0a 2a 2a 20  nity of the .** 
d910: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f  corresponding co
d920: 6c 75 6d 6e 20 77 69 74 68 69 6e 20 69 6e 64 65  lumn within inde
d930: 78 20 70 49 64 78 20 69 73 20 61 70 70 6c 69 65  x pIdx is applie
d940: 64 20 74 6f 20 69 74 2e 20 42 65 66 6f 72 65 0a  d to it. Before.
d950: 2a 2a 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  ** this function
d960: 20 72 65 74 75 72 6e 73 2c 20 6f 75 74 70 75 74   returns, output
d970: 20 70 61 72 61 6d 65 74 65 72 20 2a 70 6e 45 78   parameter *pnEx
d980: 74 72 61 63 74 20 69 73 20 73 65 74 20 74 6f 20  tract is set to 
d990: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  the.** number of
d9a0: 20 76 61 6c 75 65 73 20 61 70 70 65 6e 64 65 64   values appended
d9b0: 20 74 6f 20 74 68 65 20 72 65 63 6f 72 64 2e 0a   to the record..
d9c0: 2a 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 69 73 20  **.** When this 
d9d0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c  function is call
d9e0: 65 64 2c 20 2a 70 70 52 65 63 20 6d 75 73 74 20  ed, *ppRec must 
d9f0: 65 69 74 68 65 72 20 70 6f 69 6e 74 20 74 6f 20  either point to 
da00: 61 6e 20 6f 62 6a 65 63 74 0a 2a 2a 20 61 6c 6c  an object.** all
da10: 6f 63 61 74 65 64 20 62 79 20 61 6e 20 65 61 72  ocated by an ear
da20: 6c 69 65 72 20 63 61 6c 6c 20 74 6f 20 74 68 69  lier call to thi
da30: 73 20 66 75 6e 63 74 69 6f 6e 2c 20 6f 72 20 6d  s function, or m
da40: 75 73 74 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20  ust be NULL. If 
da50: 69 74 0a 2a 2a 20 69 73 20 4e 55 4c 4c 20 61 6e  it.** is NULL an
da60: 64 20 61 20 76 61 6c 75 65 20 63 61 6e 20 62 65  d a value can be
da70: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 65 78   successfully ex
da80: 74 72 61 63 74 65 64 2c 20 61 20 6e 65 77 20 55  tracted, a new U
da90: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 0a 2a 2a  npackedRecord.**
daa0: 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 28 61   is allocated (a
dab0: 6e 64 20 2a 70 70 52 65 63 20 73 65 74 20 74 6f  nd *ppRec set to
dac0: 20 70 6f 69 6e 74 20 74 6f 20 69 74 29 20 62 65   point to it) be
dad0: 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a  fore returning..
dae0: 2a 2a 0a 2a 2a 20 55 6e 6c 65 73 73 20 61 6e 20  **.** Unless an 
daf0: 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74  error is encount
db00: 65 72 65 64 2c 20 53 51 4c 49 54 45 5f 4f 4b 20  ered, SQLITE_OK 
db10: 69 73 20 72 65 74 75 72 6e 65 64 2e 20 49 74 20  is returned. It 
db20: 69 73 20 6e 6f 74 20 61 6e 0a 2a 2a 20 65 72 72  is not an.** err
db30: 6f 72 20 69 66 20 61 20 76 61 6c 75 65 20 63 61  or if a value ca
db40: 6e 6e 6f 74 20 62 65 20 65 78 74 72 61 63 74 65  nnot be extracte
db50: 64 20 66 72 6f 6d 20 70 45 78 70 72 2e 20 49 66  d from pExpr. If
db60: 20 61 6e 20 65 72 72 6f 72 20 64 6f 65 73 0a 2a   an error does.*
db70: 2a 20 6f 63 63 75 72 2c 20 61 6e 20 53 51 4c 69  * occur, an SQLi
db80: 74 65 20 65 72 72 6f 72 20 63 6f 64 65 20 69 73  te error code is
db90: 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 69 6e   returned..*/.in
dba0: 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  t sqlite3Stat4Pr
dbb0: 6f 62 65 53 65 74 56 61 6c 75 65 28 0a 20 20 50  obeSetValue(.  P
dbc0: 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 20 20  arse *pParse,   
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
dbe0: 2a 20 50 61 72 73 65 20 63 6f 6e 74 65 78 74 20  * Parse context 
dbf0: 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 64 78  */.  Index *pIdx
dc00: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
dc10: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 62 65       /* Index be
dc20: 69 6e 67 20 70 72 6f 62 65 64 20 2a 2f 0a 20 20  ing probed */.  
dc30: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a  UnpackedRecord *
dc40: 2a 70 70 52 65 63 2c 20 20 20 20 20 20 20 20 20  *ppRec,         
dc50: 2f 2a 20 49 4e 2f 4f 55 54 3a 20 50 72 6f 62 65  /* IN/OUT: Probe
dc60: 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 45 78 70   record */.  Exp
dc70: 72 20 2a 70 45 78 70 72 2c 20 20 20 20 20 20 20  r *pExpr,       
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
dc90: 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  The expression t
dca0: 6f 20 65 78 74 72 61 63 74 20 61 20 76 61 6c 75  o extract a valu
dcb0: 65 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20  e from */.  int 
dcc0: 6e 45 6c 65 6d 2c 20 20 20 20 20 20 20 20 20 20  nElem,          
dcd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
dce0: 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
dcf0: 20 76 61 6c 75 65 73 20 74 6f 20 61 70 70 65 6e   values to appen
dd00: 64 20 2a 2f 0a 20 20 69 6e 74 20 69 56 61 6c 2c  d */.  int iVal,
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd20: 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
dd30: 65 6c 65 6d 65 6e 74 20 74 6f 20 70 6f 70 75 6c  element to popul
dd40: 61 74 65 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e  ate */.  int *pn
dd50: 45 78 74 72 61 63 74 20 20 20 20 20 20 20 20 20  Extract         
dd60: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a           /* OUT:
dd70: 20 56 61 6c 75 65 73 20 61 70 70 65 6e 64 65 64   Values appended
dd80: 20 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a   to the record *
dd90: 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d 20  /.){.  int rc = 
dda0: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 6e 74  SQLITE_OK;.  int
ddb0: 20 6e 45 78 74 72 61 63 74 20 3d 20 30 3b 0a 0a   nExtract = 0;..
ddc0: 20 20 69 66 28 20 70 45 78 70 72 3d 3d 30 20 7c    if( pExpr==0 |
ddd0: 7c 20 70 45 78 70 72 2d 3e 6f 70 21 3d 54 4b 5f  | pExpr->op!=TK_
dde0: 53 45 4c 45 43 54 20 29 7b 0a 20 20 20 20 69 6e  SELECT ){.    in
ddf0: 74 20 69 3b 0a 20 20 20 20 73 74 72 75 63 74 20  t i;.    struct 
de00: 56 61 6c 75 65 4e 65 77 53 74 61 74 34 43 74 78  ValueNewStat4Ctx
de10: 20 61 6c 6c 6f 63 3b 0a 0a 20 20 20 20 61 6c 6c   alloc;..    all
de20: 6f 63 2e 70 50 61 72 73 65 20 3d 20 70 50 61 72  oc.pParse = pPar
de30: 73 65 3b 0a 20 20 20 20 61 6c 6c 6f 63 2e 70 49  se;.    alloc.pI
de40: 64 78 20 3d 20 70 49 64 78 3b 0a 20 20 20 20 61  dx = pIdx;.    a
de50: 6c 6c 6f 63 2e 70 70 52 65 63 20 3d 20 70 70 52  lloc.ppRec = ppR
de60: 65 63 3b 0a 0a 20 20 20 20 66 6f 72 28 69 3d 30  ec;..    for(i=0
de70: 3b 20 69 3c 6e 45 6c 65 6d 3b 20 69 2b 2b 29 7b  ; i<nElem; i++){
de80: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76  .      sqlite3_v
de90: 61 6c 75 65 20 2a 70 56 61 6c 20 3d 20 30 3b 0a  alue *pVal = 0;.
dea0: 20 20 20 20 20 20 45 78 70 72 20 2a 70 45 6c 65        Expr *pEle
deb0: 6d 20 3d 20 28 70 45 78 70 72 20 3f 20 73 71 6c  m = (pExpr ? sql
dec0: 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c 64 53  ite3VectorFieldS
ded0: 75 62 65 78 70 72 28 70 45 78 70 72 2c 20 69 29  ubexpr(pExpr, i)
dee0: 20 3a 20 30 29 3b 0a 20 20 20 20 20 20 75 38 20   : 0);.      u8 
def0: 61 66 66 20 3d 20 73 71 6c 69 74 65 33 49 6e 64  aff = sqlite3Ind
df00: 65 78 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79  exColumnAffinity
df10: 28 70 50 61 72 73 65 2d 3e 64 62 2c 20 70 49 64  (pParse->db, pId
df20: 78 2c 20 69 56 61 6c 2b 69 29 3b 0a 20 20 20 20  x, iVal+i);.    
df30: 20 20 61 6c 6c 6f 63 2e 69 56 61 6c 20 3d 20 69    alloc.iVal = i
df40: 56 61 6c 2b 69 3b 0a 20 20 20 20 20 20 72 63 20  Val+i;.      rc 
df50: 3d 20 73 74 61 74 34 56 61 6c 75 65 46 72 6f 6d  = stat4ValueFrom
df60: 45 78 70 72 28 70 50 61 72 73 65 2c 20 70 45 6c  Expr(pParse, pEl
df70: 65 6d 2c 20 61 66 66 2c 20 26 61 6c 6c 6f 63 2c  em, aff, &alloc,
df80: 20 26 70 56 61 6c 29 3b 0a 20 20 20 20 20 20 69   &pVal);.      i
df90: 66 28 20 21 70 56 61 6c 20 29 20 62 72 65 61 6b  f( !pVal ) break
dfa0: 3b 0a 20 20 20 20 20 20 6e 45 78 74 72 61 63 74  ;.      nExtract
dfb0: 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  ++;.    }.  }.. 
dfc0: 20 2a 70 6e 45 78 74 72 61 63 74 20 3d 20 6e 45   *pnExtract = nE
dfd0: 78 74 72 61 63 74 3b 0a 20 20 72 65 74 75 72 6e  xtract;.  return
dfe0: 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 74   rc;.}../*.** At
dff0: 74 65 6d 70 74 20 74 6f 20 65 78 74 72 61 63 74  tempt to extract
e000: 20 61 20 76 61 6c 75 65 20 66 72 6f 6d 20 65 78   a value from ex
e010: 70 72 65 73 73 69 6f 6e 20 70 45 78 70 72 20 75  pression pExpr u
e020: 73 69 6e 67 20 74 68 65 20 6d 65 74 68 6f 64 73  sing the methods
e030: 0a 2a 2a 20 61 73 20 64 65 73 63 72 69 62 65 64  .** as described
e040: 20 66 6f 72 20 73 71 6c 69 74 65 33 53 74 61 74   for sqlite3Stat
e050: 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 29  4ProbeSetValue()
e060: 20 61 62 6f 76 65 2e 20 0a 2a 2a 0a 2a 2a 20 49   above. .**.** I
e070: 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 73 65  f successful, se
e080: 74 20 2a 70 70 56 61 6c 20 74 6f 20 70 6f 69 6e  t *ppVal to poin
e090: 74 20 74 6f 20 61 20 6e 65 77 20 76 61 6c 75 65  t to a new value
e0a0: 20 6f 62 6a 65 63 74 20 61 6e 64 20 72 65 74 75   object and retu
e0b0: 72 6e 20 0a 2a 2a 20 53 51 4c 49 54 45 5f 4f 4b  rn .** SQLITE_OK
e0c0: 2e 20 49 66 20 6e 6f 20 76 61 6c 75 65 20 63 61  . If no value ca
e0d0: 6e 20 62 65 20 65 78 74 72 61 63 74 65 64 2c 20  n be extracted, 
e0e0: 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 65 72 72  but no other err
e0f0: 6f 72 20 6f 63 63 75 72 73 0a 2a 2a 20 28 65 2e  or occurs.** (e.
e100: 67 2e 20 4f 4f 4d 29 2c 20 72 65 74 75 72 6e 20  g. OOM), return 
e110: 53 51 4c 49 54 45 5f 4f 4b 20 61 6e 64 20 73 65  SQLITE_OK and se
e120: 74 20 2a 70 70 56 61 6c 20 74 6f 20 4e 55 4c 4c  t *ppVal to NULL
e130: 2e 20 4f 72 2c 20 69 66 20 61 6e 20 65 72 72 6f  . Or, if an erro
e140: 72 0a 2a 2a 20 64 6f 65 73 20 6f 63 63 75 72 2c  r.** does occur,
e150: 20 72 65 74 75 72 6e 20 61 6e 20 53 51 4c 69 74   return an SQLit
e160: 65 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 54 68  e error code. Th
e170: 65 20 66 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66  e final value of
e180: 20 2a 70 70 56 61 6c 0a 2a 2a 20 69 73 20 75 6e   *ppVal.** is un
e190: 64 65 66 69 6e 65 64 20 69 6e 20 74 68 69 73 20  defined in this 
e1a0: 63 61 73 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  case..*/.int sql
e1b0: 69 74 65 33 53 74 61 74 34 56 61 6c 75 65 46 72  ite3Stat4ValueFr
e1c0: 6f 6d 45 78 70 72 28 0a 20 20 50 61 72 73 65 20  omExpr(.  Parse 
e1d0: 2a 70 50 61 72 73 65 2c 20 20 20 20 20 20 20 20  *pParse,        
e1e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
e1f0: 73 65 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  se context */.  
e200: 45 78 70 72 20 2a 70 45 78 70 72 2c 20 20 20 20  Expr *pExpr,    
e210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e220: 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f  /* The expressio
e230: 6e 20 74 6f 20 65 78 74 72 61 63 74 20 61 20 76  n to extract a v
e240: 61 6c 75 65 20 66 72 6f 6d 20 2a 2f 0a 20 20 75  alue from */.  u
e250: 38 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20  8 affinity,     
e260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e270: 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73  * Affinity to us
e280: 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  e */.  sqlite3_v
e290: 61 6c 75 65 20 2a 2a 70 70 56 61 6c 20 20 20 20  alue **ppVal    
e2a0: 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 4e         /* OUT: N
e2b0: 65 77 20 76 61 6c 75 65 20 6f 62 6a 65 63 74 20  ew value object 
e2c0: 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 29 7b 0a  (or NULL) */.){.
e2d0: 20 20 72 65 74 75 72 6e 20 73 74 61 74 34 56 61    return stat4Va
e2e0: 6c 75 65 46 72 6f 6d 45 78 70 72 28 70 50 61 72  lueFromExpr(pPar
e2f0: 73 65 2c 20 70 45 78 70 72 2c 20 61 66 66 69 6e  se, pExpr, affin
e300: 69 74 79 2c 20 30 2c 20 70 70 56 61 6c 29 3b 0a  ity, 0, ppVal);.
e310: 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 74 72 61 63 74  }../*.** Extract
e320: 20 74 68 65 20 69 43 6f 6c 2d 74 68 20 63 6f 6c   the iCol-th col
e330: 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20 6e 52 65  umn from the nRe
e340: 63 2d 62 79 74 65 20 72 65 63 6f 72 64 20 69 6e  c-byte record in
e350: 20 70 52 65 63 2e 20 20 57 72 69 74 65 0a 2a 2a   pRec.  Write.**
e360: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75   the column valu
e370: 65 20 69 6e 74 6f 20 2a 70 70 56 61 6c 2e 20 20  e into *ppVal.  
e380: 49 66 20 2a 70 70 56 61 6c 20 69 73 20 69 6e 69  If *ppVal is ini
e390: 74 69 61 6c 6c 79 20 4e 55 4c 4c 20 74 68 65 6e  tially NULL then
e3a0: 20 61 20 6e 65 77 0a 2a 2a 20 73 71 6c 69 74 65   a new.** sqlite
e3b0: 33 5f 76 61 6c 75 65 20 6f 62 6a 65 63 74 20 69  3_value object i
e3c0: 73 20 61 6c 6c 6f 63 61 74 65 64 2e 0a 2a 2a 0a  s allocated..**.
e3d0: 2a 2a 20 49 66 20 2a 70 70 56 61 6c 20 69 73 20  ** If *ppVal is 
e3e0: 69 6e 69 74 69 61 6c 6c 79 20 4e 55 4c 4c 20 74  initially NULL t
e3f0: 68 65 6e 20 74 68 65 20 63 61 6c 6c 65 72 20 69  hen the caller i
e400: 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  s responsible fo
e410: 72 20 0a 2a 2a 20 65 6e 73 75 72 69 6e 67 20 74  r .** ensuring t
e420: 68 61 74 20 74 68 65 20 76 61 6c 75 65 20 77 72  hat the value wr
e430: 69 74 74 65 6e 20 69 6e 74 6f 20 2a 70 70 56 61  itten into *ppVa
e440: 6c 20 69 73 20 65 76 65 6e 74 75 61 6c 6c 79 20  l is eventually 
e450: 66 72 65 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71  freed..*/.int sq
e460: 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e  lite3Stat4Column
e470: 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  (.  sqlite3 *db,
e480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e490: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
e4a0: 68 61 6e 64 6c 65 20 2a 2f 0a 20 20 63 6f 6e 73  handle */.  cons
e4b0: 74 20 76 6f 69 64 20 2a 70 52 65 63 2c 20 20 20  t void *pRec,   
e4c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
e4d0: 6f 69 6e 74 65 72 20 74 6f 20 62 75 66 66 65 72  ointer to buffer
e4e0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 65 63 6f   containing reco
e4f0: 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 63  rd */.  int nRec
e500: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
e510: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
e520: 6f 66 20 62 75 66 66 65 72 20 70 52 65 63 20 69  of buffer pRec i
e530: 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 69 6e 74  n bytes */.  int
e540: 20 69 43 6f 6c 2c 20 20 20 20 20 20 20 20 20 20   iCol,          
e550: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e560: 43 6f 6c 75 6d 6e 20 74 6f 20 65 78 74 72 61 63  Column to extrac
e570: 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  t */.  sqlite3_v
e580: 61 6c 75 65 20 2a 2a 70 70 56 61 6c 20 20 20 20  alue **ppVal    
e590: 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 45         /* OUT: E
e5a0: 78 74 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a  xtracted value *
e5b0: 2f 0a 29 7b 0a 20 20 75 33 32 20 74 3b 20 20 20  /.){.  u32 t;   
e5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5d0: 20 20 20 20 20 20 20 2f 2a 20 61 20 63 6f 6c 75         /* a colu
e5e0: 6d 6e 20 74 79 70 65 20 63 6f 64 65 20 2a 2f 0a  mn type code */.
e5f0: 20 20 69 6e 74 20 6e 48 64 72 3b 20 20 20 20 20    int nHdr;     
e600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e610: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65    /* Size of the
e620: 20 68 65 61 64 65 72 20 69 6e 20 74 68 65 20 72   header in the r
e630: 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ecord */.  int i
e640: 48 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Hdr;            
e650: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
e660: 78 74 20 75 6e 72 65 61 64 20 68 65 61 64 65 72  xt unread header
e670: 20 62 79 74 65 20 2a 2f 0a 20 20 69 6e 74 20 69   byte */.  int i
e680: 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20  Field;          
e690: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
e6a0: 78 74 20 75 6e 72 65 61 64 20 64 61 74 61 20 62  xt unread data b
e6b0: 79 74 65 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 46  yte */.  int szF
e6c0: 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20  ield;           
e6d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
e6e0: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
e6f0: 64 61 74 61 20 66 69 65 6c 64 20 2a 2f 0a 20 20  data field */.  
e700: 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
e710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e720: 2f 2a 20 43 6f 6c 75 6d 6e 20 69 6e 64 65 78 20  /* Column index 
e730: 2a 2f 0a 20 20 75 38 20 2a 61 20 3d 20 28 75 38  */.  u8 *a = (u8
e740: 2a 29 70 52 65 63 3b 20 20 20 20 20 20 20 20 20  *)pRec;         
e750: 20 20 20 20 20 2f 2a 20 54 79 70 65 63 61 73 74       /* Typecast
e760: 20 62 79 74 65 20 61 72 72 61 79 20 2a 2f 0a 20   byte array */. 
e770: 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 2a 70 70   Mem *pMem = *pp
e780: 56 61 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Val;            
e790: 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74   /* Write result
e7a0: 20 69 6e 74 6f 20 74 68 69 73 20 4d 65 6d 20 6f   into this Mem o
e7b0: 62 6a 65 63 74 20 2a 2f 0a 0a 20 20 61 73 73 65  bject */..  asse
e7c0: 72 74 28 20 69 43 6f 6c 3e 30 20 29 3b 0a 20 20  rt( iCol>0 );.  
e7d0: 69 48 64 72 20 3d 20 67 65 74 56 61 72 69 6e 74  iHdr = getVarint
e7e0: 33 32 28 61 2c 20 6e 48 64 72 29 3b 0a 20 20 69  32(a, nHdr);.  i
e7f0: 66 28 20 6e 48 64 72 3e 6e 52 65 63 20 7c 7c 20  f( nHdr>nRec || 
e800: 69 48 64 72 3e 3d 6e 48 64 72 20 29 20 72 65 74  iHdr>=nHdr ) ret
e810: 75 72 6e 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  urn SQLITE_CORRU
e820: 50 54 5f 42 4b 50 54 3b 0a 20 20 69 46 69 65 6c  PT_BKPT;.  iFiel
e830: 64 20 3d 20 6e 48 64 72 3b 0a 20 20 66 6f 72 28  d = nHdr;.  for(
e840: 69 3d 30 3b 20 69 3c 3d 69 43 6f 6c 3b 20 69 2b  i=0; i<=iCol; i+
e850: 2b 29 7b 0a 20 20 20 20 69 48 64 72 20 2b 3d 20  +){.    iHdr += 
e860: 67 65 74 56 61 72 69 6e 74 33 32 28 26 61 5b 69  getVarint32(&a[i
e870: 48 64 72 5d 2c 20 74 29 3b 0a 20 20 20 20 74 65  Hdr], t);.    te
e880: 73 74 63 61 73 65 28 20 69 48 64 72 3d 3d 6e 48  stcase( iHdr==nH
e890: 64 72 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61  dr );.    testca
e8a0: 73 65 28 20 69 48 64 72 3d 3d 6e 48 64 72 2b 31  se( iHdr==nHdr+1
e8b0: 20 29 3b 0a 20 20 20 20 69 66 28 20 69 48 64 72   );.    if( iHdr
e8c0: 3e 6e 48 64 72 20 29 20 72 65 74 75 72 6e 20 53  >nHdr ) return S
e8d0: 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
e8e0: 50 54 3b 0a 20 20 20 20 73 7a 46 69 65 6c 64 20  PT;.    szField 
e8f0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
e900: 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20  ialTypeLen(t);. 
e910: 20 20 20 69 46 69 65 6c 64 20 2b 3d 20 73 7a 46     iField += szF
e920: 69 65 6c 64 3b 0a 20 20 7d 0a 20 20 74 65 73 74  ield;.  }.  test
e930: 63 61 73 65 28 20 69 46 69 65 6c 64 3d 3d 6e 52  case( iField==nR
e940: 65 63 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  ec );.  testcase
e950: 28 20 69 46 69 65 6c 64 3d 3d 6e 52 65 63 2b 31  ( iField==nRec+1
e960: 20 29 3b 0a 20 20 69 66 28 20 69 46 69 65 6c 64   );.  if( iField
e970: 3e 6e 52 65 63 20 29 20 72 65 74 75 72 6e 20 53  >nRec ) return S
e980: 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
e990: 50 54 3b 0a 20 20 69 66 28 20 70 4d 65 6d 3d 3d  PT;.  if( pMem==
e9a0: 30 20 29 7b 0a 20 20 20 20 70 4d 65 6d 20 3d 20  0 ){.    pMem = 
e9b0: 2a 70 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33  *ppVal = sqlite3
e9c0: 56 61 6c 75 65 4e 65 77 28 64 62 29 3b 0a 20 20  ValueNew(db);.  
e9d0: 20 20 69 66 28 20 70 4d 65 6d 3d 3d 30 20 29 20    if( pMem==0 ) 
e9e0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f  return SQLITE_NO
e9f0: 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 7d 0a 20 20  MEM_BKPT;.  }.  
ea00: 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
ea10: 6c 47 65 74 28 26 61 5b 69 46 69 65 6c 64 2d 73  lGet(&a[iField-s
ea20: 7a 46 69 65 6c 64 5d 2c 20 74 2c 20 70 4d 65 6d  zField], t, pMem
ea30: 29 3b 0a 20 20 70 4d 65 6d 2d 3e 65 6e 63 20 3d  );.  pMem->enc =
ea40: 20 45 4e 43 28 64 62 29 3b 0a 20 20 72 65 74 75   ENC(db);.  retu
ea50: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
ea60: 0a 2f 2a 0a 2a 2a 20 55 6e 6c 65 73 73 20 69 74  ./*.** Unless it
ea70: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 61 72   is NULL, the ar
ea80: 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 61  gument must be a
ea90: 6e 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  n UnpackedRecord
eaa0: 20 6f 62 6a 65 63 74 20 72 65 74 75 72 6e 65 64   object returned
eab0: 0a 2a 2a 20 62 79 20 61 6e 20 65 61 72 6c 69 65  .** by an earlie
eac0: 72 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  r call to sqlite
ead0: 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61  3Stat4ProbeSetVa
eae0: 6c 75 65 28 29 2e 20 54 68 69 73 20 63 61 6c 6c  lue(). This call
eaf0: 20 64 65 6c 65 74 65 73 0a 2a 2a 20 74 68 65 20   deletes.** the 
eb00: 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 76 6f 69 64 20  object..*/.void 
eb10: 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
eb20: 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65  eFree(UnpackedRe
eb30: 63 6f 72 64 20 2a 70 52 65 63 29 7b 0a 20 20 69  cord *pRec){.  i
eb40: 66 28 20 70 52 65 63 20 29 7b 0a 20 20 20 20 69  f( pRec ){.    i
eb50: 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 6e 43  nt i;.    int nC
eb60: 6f 6c 20 3d 20 70 52 65 63 2d 3e 70 4b 65 79 49  ol = pRec->pKeyI
eb70: 6e 66 6f 2d 3e 6e 41 6c 6c 46 69 65 6c 64 3b 0a  nfo->nAllField;.
eb80: 20 20 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20      Mem *aMem = 
eb90: 70 52 65 63 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20  pRec->aMem;.    
eba0: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 61 4d  sqlite3 *db = aM
ebb0: 65 6d 5b 30 5d 2e 64 62 3b 0a 20 20 20 20 66 6f  em[0].db;.    fo
ebc0: 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b 20 69  r(i=0; i<nCol; i
ebd0: 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ++){.      sqlit
ebe0: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
ebf0: 28 26 61 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&aMem[i]);.    
ec00: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 4b 65 79  }.    sqlite3Key
ec10: 49 6e 66 6f 55 6e 72 65 66 28 70 52 65 63 2d 3e  InfoUnref(pRec->
ec20: 70 4b 65 79 49 6e 66 6f 29 3b 0a 20 20 20 20 73  pKeyInfo);.    s
ec30: 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e 28 64  qlite3DbFreeNN(d
ec40: 62 2c 20 70 52 65 63 29 3b 0a 20 20 7d 0a 7d 0a  b, pRec);.  }.}.
ec50: 23 65 6e 64 69 66 20 2f 2a 20 69 66 64 65 66 20  #endif /* ifdef 
ec60: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
ec70: 41 54 34 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 68  AT4 */../*.** Ch
ec80: 61 6e 67 65 20 74 68 65 20 73 74 72 69 6e 67 20  ange the string 
ec90: 76 61 6c 75 65 20 6f 66 20 61 6e 20 73 71 6c 69  value of an sqli
eca0: 74 65 33 5f 76 61 6c 75 65 20 6f 62 6a 65 63 74  te3_value object
ecb0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
ecc0: 56 61 6c 75 65 53 65 74 53 74 72 28 0a 20 20 73  ValueSetStr(.  s
ecd0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 76 2c  qlite3_value *v,
ece0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
ecf0: 20 62 65 20 73 65 74 20 2a 2f 0a 20 20 69 6e 74   be set */.  int
ed00: 20 6e 2c 20 20 20 20 20 20 20 20 20 20 20 20 20   n,             
ed10: 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20     /* Length of 
ed20: 73 74 72 69 6e 67 20 7a 20 2a 2f 0a 20 20 63 6f  string z */.  co
ed30: 6e 73 74 20 76 6f 69 64 20 2a 7a 2c 20 20 20 20  nst void *z,    
ed40: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
ed50: 68 65 20 6e 65 77 20 73 74 72 69 6e 67 20 2a 2f  he new string */
ed60: 0a 20 20 75 38 20 65 6e 63 2c 20 20 20 20 20 20  .  u8 enc,      
ed70: 20 20 20 20 20 20 20 20 20 2f 2a 20 45 6e 63 6f           /* Enco
ed80: 64 69 6e 67 20 74 6f 20 75 73 65 20 2a 2f 0a 20  ding to use */. 
ed90: 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
eda0: 69 64 2a 29 20 20 20 2f 2a 20 44 65 73 74 72 75  id*)   /* Destru
edb0: 63 74 6f 72 20 66 6f 72 20 74 68 65 20 73 74 72  ctor for the str
edc0: 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20  ing */.){.  if( 
edd0: 76 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d  v ) sqlite3VdbeM
ede0: 65 6d 53 65 74 53 74 72 28 28 4d 65 6d 20 2a 29  emSetStr((Mem *)
edf0: 76 2c 20 7a 2c 20 6e 2c 20 65 6e 63 2c 20 78 44  v, z, n, enc, xD
ee00: 65 6c 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46 72  el);.}../*.** Fr
ee10: 65 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 61  ee an sqlite3_va
ee20: 6c 75 65 20 6f 62 6a 65 63 74 0a 2a 2f 0a 76 6f  lue object.*/.vo
ee30: 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  id sqlite3ValueF
ee40: 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ree(sqlite3_valu
ee50: 65 20 2a 76 29 7b 0a 20 20 69 66 28 20 21 76 20  e *v){.  if( !v 
ee60: 29 20 72 65 74 75 72 6e 3b 0a 20 20 73 71 6c 69  ) return;.  sqli
ee70: 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
ee80: 65 28 28 4d 65 6d 20 2a 29 76 29 3b 0a 20 20 73  e((Mem *)v);.  s
ee90: 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e 28 28  qlite3DbFreeNN((
eea0: 28 4d 65 6d 2a 29 76 29 2d 3e 64 62 2c 20 76 29  (Mem*)v)->db, v)
eeb0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73  ;.}../*.** The s
eec0: 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73  qlite3ValueBytes
eed0: 28 29 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72  () routine retur
eee0: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
eef0: 20 62 79 74 65 73 20 69 6e 20 74 68 65 0a 2a 2a   bytes in the.**
ef00: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 6f   sqlite3_value o
ef10: 62 6a 65 63 74 20 61 73 73 75 6d 69 6e 67 20 74  bject assuming t
ef20: 68 61 74 20 69 74 20 75 73 65 73 20 74 68 65 20  hat it uses the 
ef30: 65 6e 63 6f 64 69 6e 67 20 22 65 6e 63 22 2e 0a  encoding "enc"..
ef40: 2a 2a 20 54 68 65 20 76 61 6c 75 65 42 79 74 65  ** The valueByte
ef50: 73 28 29 20 72 6f 75 74 69 6e 65 20 69 73 20 61  s() routine is a
ef60: 20 68 65 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e   helper function
ef70: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 53 51 4c 49  ..*/.static SQLI
ef80: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 69 6e 74 20  TE_NOINLINE int 
ef90: 76 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74  valueBytes(sqlit
efa0: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 2c 20  e3_value *pVal, 
efb0: 75 38 20 65 6e 63 29 7b 0a 20 20 72 65 74 75 72  u8 enc){.  retur
efc0: 6e 20 76 61 6c 75 65 54 6f 54 65 78 74 28 70 56  n valueToText(pV
efd0: 61 6c 2c 20 65 6e 63 29 21 3d 30 20 3f 20 70 56  al, enc)!=0 ? pV
efe0: 61 6c 2d 3e 6e 20 3a 20 30 3b 0a 7d 0a 69 6e 74  al->n : 0;.}.int
eff0: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74   sqlite3ValueByt
f000: 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  es(sqlite3_value
f010: 20 2a 70 56 61 6c 2c 20 75 38 20 65 6e 63 29 7b   *pVal, u8 enc){
f020: 0a 20 20 4d 65 6d 20 2a 70 20 3d 20 28 4d 65 6d  .  Mem *p = (Mem
f030: 2a 29 70 56 61 6c 3b 0a 20 20 61 73 73 65 72 74  *)pVal;.  assert
f040: 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  ( (p->flags & ME
f050: 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 7c 7c 20 28 70  M_Null)==0 || (p
f060: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
f070: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30  tr|MEM_Blob))==0
f080: 20 29 3b 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c   );.  if( (p->fl
f090: 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 29 21 3d  ags & MEM_Str)!=
f0a0: 30 20 26 26 20 70 56 61 6c 2d 3e 65 6e 63 3d 3d  0 && pVal->enc==
f0b0: 65 6e 63 20 29 7b 0a 20 20 20 20 72 65 74 75 72  enc ){.    retur
f0c0: 6e 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 20 20 69 66  n p->n;.  }.  if
f0d0: 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  ( (p->flags & ME
f0e0: 4d 5f 42 6c 6f 62 29 21 3d 30 20 29 7b 0a 20 20  M_Blob)!=0 ){.  
f0f0: 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26    if( p->flags &
f100: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
f110: 20 20 20 72 65 74 75 72 6e 20 70 2d 3e 6e 20 2b     return p->n +
f120: 20 70 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20   p->u.nZero;.   
f130: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65   }else{.      re
f140: 74 75 72 6e 20 70 2d 3e 6e 3b 0a 20 20 20 20 7d  turn p->n;.    }
f150: 0a 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e 66 6c  .  }.  if( p->fl
f160: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
f170: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65 74   return 0;.  ret
f180: 75 72 6e 20 76 61 6c 75 65 42 79 74 65 73 28 70  urn valueBytes(p
f190: 56 61 6c 2c 20 65 6e 63 29 3b 0a 7d 0a           Val, enc);.}.