/ Hex Artifact Content
Login

Artifact 411649a35686f54268ccabeda175322c4697f5a6:


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: 2f 2a 0a 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74  /*.** Call sqlit
02a0: 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42  e3VdbeMemExpandB
02b0: 6c 6f 62 28 29 20 6f 6e 20 74 68 65 20 73 75 70  lob() on the sup
02c0: 70 6c 69 65 64 20 76 61 6c 75 65 20 28 74 79 70  plied value (typ
02d0: 65 20 4d 65 6d 2a 29 0a 2a 2a 20 50 20 69 66 20  e Mem*).** P if 
02e0: 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 23 64 65  required..*/.#de
02f0: 66 69 6e 65 20 65 78 70 61 6e 64 42 6c 6f 62 28  fine expandBlob(
0300: 50 29 20 28 28 28 50 29 2d 3e 66 6c 61 67 73 26  P) (((P)->flags&
0310: 4d 45 4d 5f 5a 65 72 6f 29 3f 73 71 6c 69 74 65  MEM_Zero)?sqlite
0320: 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
0330: 6f 62 28 50 29 3a 30 29 0a 0a 2f 2a 0a 2a 2a 20  ob(P):0)../*.** 
0340: 49 66 20 70 4d 65 6d 20 69 73 20 61 6e 20 6f 62  If pMem is an ob
0350: 6a 65 63 74 20 77 69 74 68 20 61 20 76 61 6c 69  ject with a vali
0360: 64 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65  d string represe
0370: 6e 74 61 74 69 6f 6e 2c 20 74 68 69 73 20 72 6f  ntation, this ro
0380: 75 74 69 6e 65 0a 2a 2a 20 65 6e 73 75 72 65 73  utine.** ensures
0390: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 65 6e   the internal en
03a0: 63 6f 64 69 6e 67 20 66 6f 72 20 74 68 65 20 73  coding for the s
03b0: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
03c0: 74 69 6f 6e 20 69 73 0a 2a 2a 20 27 64 65 73 69  tion is.** 'desi
03d0: 72 65 64 45 6e 63 27 2c 20 6f 6e 65 20 6f 66 20  redEnc', one of 
03e0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
03f0: 49 54 45 5f 55 54 46 31 36 4c 45 20 6f 72 20 53  ITE_UTF16LE or S
0400: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2e 0a 2a  QLITE_UTF16BE..*
0410: 2a 0a 2a 2a 20 49 66 20 70 4d 65 6d 20 69 73 20  *.** If pMem is 
0420: 6e 6f 74 20 61 20 73 74 72 69 6e 67 20 6f 62 6a  not a string obj
0430: 65 63 74 2c 20 6f 72 20 74 68 65 20 65 6e 63 6f  ect, or the enco
0440: 64 69 6e 67 20 6f 66 20 74 68 65 20 73 74 72 69  ding of the stri
0450: 6e 67 0a 2a 2a 20 72 65 70 72 65 73 65 6e 74 61  ng.** representa
0460: 74 69 6f 6e 20 69 73 20 61 6c 72 65 61 64 79 20  tion is already 
0470: 73 74 6f 72 65 64 20 75 73 69 6e 67 20 74 68 65  stored using the
0480: 20 72 65 71 75 65 73 74 65 64 20 65 6e 63 6f 64   requested encod
0490: 69 6e 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a  ing, then this.*
04a0: 2a 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e  * routine is a n
04b0: 6f 2d 6f 70 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49  o-op..**.** SQLI
04c0: 54 45 5f 4f 4b 20 69 73 20 72 65 74 75 72 6e 65  TE_OK is returne
04d0: 64 20 69 66 20 74 68 65 20 63 6f 6e 76 65 72 73  d if the convers
04e0: 69 6f 6e 20 69 73 20 73 75 63 63 65 73 73 66 75  ion is successfu
04f0: 6c 20 28 6f 72 20 6e 6f 74 20 72 65 71 75 69 72  l (or not requir
0500: 65 64 29 2e 0a 2a 2a 20 53 51 4c 49 54 45 5f 4e  ed)..** SQLITE_N
0510: 4f 4d 45 4d 20 6d 61 79 20 62 65 20 72 65 74 75  OMEM may be retu
0520: 72 6e 65 64 20 69 66 20 61 20 6d 61 6c 6c 6f 63  rned if a malloc
0530: 28 29 20 66 61 69 6c 73 20 64 75 72 69 6e 67 20  () fails during 
0540: 63 6f 6e 76 65 72 73 69 6f 6e 0a 2a 2a 20 62 65  conversion.** be
0550: 74 77 65 65 6e 20 66 6f 72 6d 61 74 73 2e 0a 2a  tween formats..*
0560: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  /.int sqlite3Vdb
0570: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
0580: 4d 65 6d 20 2a 70 4d 65 6d 2c 20 69 6e 74 20 64  Mem *pMem, int d
0590: 65 73 69 72 65 64 45 6e 63 29 7b 0a 20 20 69 6e  esiredEnc){.  in
05a0: 74 20 72 63 3b 0a 20 20 61 73 73 65 72 74 28 20  t rc;.  assert( 
05b0: 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pMem->flags&MEM
05c0: 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 3b 0a 20  _RowSet)==0 );. 
05d0: 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
05e0: 45 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38  Enc==SQLITE_UTF8
05f0: 20 7c 7c 20 64 65 73 69 72 65 64 45 6e 63 3d 3d   || desiredEnc==
0600: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 20  SQLITE_UTF16LE. 
0610: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 64 65 73            || des
0620: 69 72 65 64 45 6e 63 3d 3d 53 51 4c 49 54 45 5f  iredEnc==SQLITE_
0630: 55 54 46 31 36 42 45 20 29 3b 0a 20 20 69 66 28  UTF16BE );.  if(
0640: 20 21 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 26 4d   !(pMem->flags&M
0650: 45 4d 5f 53 74 72 29 20 7c 7c 20 70 4d 65 6d 2d  EM_Str) || pMem-
0660: 3e 65 6e 63 3d 3d 64 65 73 69 72 65 64 45 6e 63  >enc==desiredEnc
0670: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
0680: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20  QLITE_OK;.  }.  
0690: 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 64 62  assert( pMem->db
06a0: 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f 6d  ==0 || sqlite3_m
06b0: 75 74 65 78 5f 68 65 6c 64 28 70 4d 65 6d 2d 3e  utex_held(pMem->
06c0: 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 23 69  db->mutex) );.#i
06d0: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
06e0: 5f 55 54 46 31 36 0a 20 20 72 65 74 75 72 6e 20  _UTF16.  return 
06f0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 23 65  SQLITE_ERROR;.#e
0700: 6c 73 65 0a 0a 20 20 2f 2a 20 4d 65 6d 54 72 61  lse..  /* MemTra
0710: 6e 73 6c 61 74 65 28 29 20 6d 61 79 20 72 65 74  nslate() may ret
0720: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 6f 72  urn SQLITE_OK or
0730: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2e 20 49   SQLITE_NOMEM. I
0740: 66 20 4e 4f 4d 45 4d 20 69 73 20 72 65 74 75 72  f NOMEM is retur
0750: 6e 65 64 2c 0a 20 20 2a 2a 20 74 68 65 6e 20 74  ned,.  ** then t
0760: 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74  he encoding of t
0770: 68 65 20 76 61 6c 75 65 20 6d 61 79 20 6e 6f 74  he value may not
0780: 20 68 61 76 65 20 63 68 61 6e 67 65 64 2e 0a 20   have changed.. 
0790: 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
07a0: 65 33 56 64 62 65 4d 65 6d 54 72 61 6e 73 6c 61  e3VdbeMemTransla
07b0: 74 65 28 70 4d 65 6d 2c 20 28 75 38 29 64 65 73  te(pMem, (u8)des
07c0: 69 72 65 64 45 6e 63 29 3b 0a 20 20 61 73 73 65  iredEnc);.  asse
07d0: 72 74 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  rt(rc==SQLITE_OK
07e0: 20 20 20 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54      || rc==SQLIT
07f0: 45 5f 4e 4f 4d 45 4d 29 3b 0a 20 20 61 73 73 65  E_NOMEM);.  asse
0800: 72 74 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  rt(rc==SQLITE_OK
0810: 20 20 20 20 7c 7c 20 70 4d 65 6d 2d 3e 65 6e 63      || pMem->enc
0820: 21 3d 64 65 73 69 72 65 64 45 6e 63 29 3b 0a 20  !=desiredEnc);. 
0830: 20 61 73 73 65 72 74 28 72 63 3d 3d 53 51 4c 49   assert(rc==SQLI
0840: 54 45 5f 4e 4f 4d 45 4d 20 7c 7c 20 70 4d 65 6d  TE_NOMEM || pMem
0850: 2d 3e 65 6e 63 3d 3d 64 65 73 69 72 65 64 45 6e  ->enc==desiredEn
0860: 63 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  c);.  return rc;
0870: 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a  .#endif.}../*.**
0880: 20 4d 61 6b 65 20 73 75 72 65 20 70 4d 65 6d 2d   Make sure pMem-
0890: 3e 7a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 77  >z points to a w
08a0: 72 69 74 61 62 6c 65 20 61 6c 6c 6f 63 61 74 69  ritable allocati
08b0: 6f 6e 20 6f 66 20 61 74 20 6c 65 61 73 74 20 0a  on of at least .
08c0: 2a 2a 20 6e 20 62 79 74 65 73 2e 0a 2a 2a 0a 2a  ** n bytes..**.*
08d0: 2a 20 49 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  * If the memory 
08e0: 63 65 6c 6c 20 63 75 72 72 65 6e 74 6c 79 20 63  cell currently c
08f0: 6f 6e 74 61 69 6e 73 20 73 74 72 69 6e 67 20 6f  ontains string o
0900: 72 20 62 6c 6f 62 20 64 61 74 61 0a 2a 2a 20 61  r blob data.** a
0910: 6e 64 20 74 68 65 20 74 68 69 72 64 20 61 72 67  nd the third arg
0920: 75 6d 65 6e 74 20 70 61 73 73 65 64 20 74 6f 20  ument passed to 
0930: 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  this function is
0940: 20 74 72 75 65 2c 20 74 68 65 20 0a 2a 2a 20 63   true, the .** c
0950: 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74 20 6f  urrent content o
0960: 66 20 74 68 65 20 63 65 6c 6c 20 69 73 20 70 72  f the cell is pr
0970: 65 73 65 72 76 65 64 2e 20 4f 74 68 65 72 77 69  eserved. Otherwi
0980: 73 65 2c 20 69 74 20 6d 61 79 0a 2a 2a 20 62 65  se, it may.** be
0990: 20 64 69 73 63 61 72 64 65 64 2e 20 20 0a 2a 2a   discarded.  .**
09a0: 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
09b0: 6e 20 73 65 74 73 20 74 68 65 20 4d 45 4d 5f 44  n sets the MEM_D
09c0: 79 6e 20 66 6c 61 67 20 61 6e 64 20 63 6c 65 61  yn flag and clea
09d0: 72 73 20 61 6e 79 20 78 44 65 6c 20 63 61 6c 6c  rs any xDel call
09e0: 62 61 63 6b 2e 0a 2a 2a 20 49 74 20 61 6c 73 6f  back..** It also
09f0: 20 63 6c 65 61 72 73 20 4d 45 4d 5f 45 70 68 65   clears MEM_Ephe
0a00: 6d 20 61 6e 64 20 4d 45 4d 5f 53 74 61 74 69 63  m and MEM_Static
0a10: 2e 20 49 66 20 74 68 65 20 70 72 65 73 65 72 76  . If the preserv
0a20: 65 20 66 6c 61 67 20 69 73 20 0a 2a 2a 20 6e 6f  e flag is .** no
0a30: 74 20 73 65 74 2c 20 4d 65 6d 2e 6e 20 69 73 20  t set, Mem.n is 
0a40: 7a 65 72 6f 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73  zeroed..*/.int s
0a50: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
0a60: 77 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 69 6e 74  w(Mem *pMem, int
0a70: 20 6e 2c 20 69 6e 74 20 70 72 65 73 65 72 76 65   n, int preserve
0a80: 29 7b 0a 20 20 61 73 73 65 72 74 28 20 31 20 3e  ){.  assert( 1 >
0a90: 3d 0a 20 20 20 20 28 28 70 4d 65 6d 2d 3e 7a 4d  =.    ((pMem->zM
0aa0: 61 6c 6c 6f 63 20 26 26 20 70 4d 65 6d 2d 3e 7a  alloc && pMem->z
0ab0: 4d 61 6c 6c 6f 63 3d 3d 70 4d 65 6d 2d 3e 7a 29  Malloc==pMem->z)
0ac0: 20 3f 20 31 20 3a 20 30 29 20 2b 0a 20 20 20 20   ? 1 : 0) +.    
0ad0: 28 28 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 26 4d  (((pMem->flags&M
0ae0: 45 4d 5f 44 79 6e 29 26 26 70 4d 65 6d 2d 3e 78  EM_Dyn)&&pMem->x
0af0: 44 65 6c 29 20 3f 20 31 20 3a 20 30 29 20 2b 20  Del) ? 1 : 0) + 
0b00: 0a 20 20 20 20 28 28 70 4d 65 6d 2d 3e 66 6c 61  .    ((pMem->fla
0b10: 67 73 26 4d 45 4d 5f 45 70 68 65 6d 29 20 3f 20  gs&MEM_Ephem) ? 
0b20: 31 20 3a 20 30 29 20 2b 20 0a 20 20 20 20 28 28  1 : 0) + .    ((
0b30: 70 4d 65 6d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pMem->flags&MEM_
0b40: 53 74 61 74 69 63 29 20 3f 20 31 20 3a 20 30 29  Static) ? 1 : 0)
0b50: 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  .  );.  assert( 
0b60: 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pMem->flags&MEM
0b70: 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 3b 0a 0a  _RowSet)==0 );..
0b80: 20 20 69 66 28 20 6e 3c 33 32 20 29 20 6e 20 3d    if( n<32 ) n =
0b90: 20 33 32 3b 0a 20 20 69 66 28 20 73 71 6c 69 74   32;.  if( sqlit
0ba0: 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 70  e3DbMallocSize(p
0bb0: 4d 65 6d 2d 3e 64 62 2c 20 70 4d 65 6d 2d 3e 7a  Mem->db, pMem->z
0bc0: 4d 61 6c 6c 6f 63 29 3c 6e 20 29 7b 0a 20 20 20  Malloc)<n ){.   
0bd0: 20 69 66 28 20 70 72 65 73 65 72 76 65 20 26 26   if( preserve &&
0be0: 20 70 4d 65 6d 2d 3e 7a 3d 3d 70 4d 65 6d 2d 3e   pMem->z==pMem->
0bf0: 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20  zMalloc ){.     
0c00: 20 70 4d 65 6d 2d 3e 7a 20 3d 20 70 4d 65 6d 2d   pMem->z = pMem-
0c10: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 71 6c 69 74  >zMalloc = sqlit
0c20: 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65  e3DbReallocOrFre
0c30: 65 28 70 4d 65 6d 2d 3e 64 62 2c 20 70 4d 65 6d  e(pMem->db, pMem
0c40: 2d 3e 7a 2c 20 6e 29 3b 0a 20 20 20 20 20 20 70  ->z, n);.      p
0c50: 72 65 73 65 72 76 65 20 3d 20 30 3b 0a 20 20 20  reserve = 0;.   
0c60: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71   }else{.      sq
0c70: 6c 69 74 65 33 44 62 46 72 65 65 28 70 4d 65 6d  lite3DbFree(pMem
0c80: 2d 3e 64 62 2c 20 70 4d 65 6d 2d 3e 7a 4d 61 6c  ->db, pMem->zMal
0c90: 6c 6f 63 29 3b 0a 20 20 20 20 20 20 70 4d 65 6d  loc);.      pMem
0ca0: 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 71 6c 69  ->zMalloc = sqli
0cb0: 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 70  te3DbMallocRaw(p
0cc0: 4d 65 6d 2d 3e 64 62 2c 20 6e 29 3b 0a 20 20 20  Mem->db, n);.   
0cd0: 20 7d 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4d   }.  }..  if( pM
0ce0: 65 6d 2d 3e 7a 20 26 26 20 70 72 65 73 65 72 76  em->z && preserv
0cf0: 65 20 26 26 20 70 4d 65 6d 2d 3e 7a 4d 61 6c 6c  e && pMem->zMall
0d00: 6f 63 20 26 26 20 70 4d 65 6d 2d 3e 7a 21 3d 70  oc && pMem->z!=p
0d10: 4d 65 6d 2d 3e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a  Mem->zMalloc ){.
0d20: 20 20 20 20 6d 65 6d 63 70 79 28 70 4d 65 6d 2d      memcpy(pMem-
0d30: 3e 7a 4d 61 6c 6c 6f 63 2c 20 70 4d 65 6d 2d 3e  >zMalloc, pMem->
0d40: 7a 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 7d  z, pMem->n);.  }
0d50: 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61  .  if( pMem->fla
0d60: 67 73 26 4d 45 4d 5f 44 79 6e 20 26 26 20 70 4d  gs&MEM_Dyn && pM
0d70: 65 6d 2d 3e 78 44 65 6c 20 29 7b 0a 20 20 20 20  em->xDel ){.    
0d80: 70 4d 65 6d 2d 3e 78 44 65 6c 28 28 76 6f 69 64  pMem->xDel((void
0d90: 20 2a 29 28 70 4d 65 6d 2d 3e 7a 29 29 3b 0a 20   *)(pMem->z));. 
0da0: 20 7d 0a 0a 20 20 70 4d 65 6d 2d 3e 7a 20 3d 20   }..  pMem->z = 
0db0: 70 4d 65 6d 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20  pMem->zMalloc;. 
0dc0: 20 69 66 28 20 70 4d 65 6d 2d 3e 7a 3d 3d 30 20   if( pMem->z==0 
0dd0: 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61  ){.    pMem->fla
0de0: 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
0df0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4d 65 6d   }else{.    pMem
0e00: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
0e10: 5f 45 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69  _Ephem|MEM_Stati
0e20: 63 29 3b 0a 20 20 7d 0a 20 20 70 4d 65 6d 2d 3e  c);.  }.  pMem->
0e30: 78 44 65 6c 20 3d 20 30 3b 0a 20 20 72 65 74 75  xDel = 0;.  retu
0e40: 72 6e 20 28 70 4d 65 6d 2d 3e 7a 20 3f 20 53 51  rn (pMem->z ? SQ
0e50: 4c 49 54 45 5f 4f 4b 20 3a 20 53 51 4c 49 54 45  LITE_OK : SQLITE
0e60: 5f 4e 4f 4d 45 4d 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  _NOMEM);.}../*.*
0e70: 2a 20 4d 61 6b 65 20 74 68 65 20 67 69 76 65 6e  * Make the given
0e80: 20 4d 65 6d 20 6f 62 6a 65 63 74 20 4d 45 4d 5f   Mem object MEM_
0e90: 44 79 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  Dyn.  In other w
0ea0: 6f 72 64 73 2c 20 6d 61 6b 65 20 69 74 20 73 6f  ords, make it so
0eb0: 0a 2a 2a 20 74 68 61 74 20 61 6e 79 20 54 45 58  .** that any TEX
0ec0: 54 20 6f 72 20 42 4c 4f 42 20 63 6f 6e 74 65 6e  T or BLOB conten
0ed0: 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 6d  t is stored in m
0ee0: 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66  emory obtained f
0ef0: 72 6f 6d 0a 2a 2a 20 6d 61 6c 6c 6f 63 28 29 2e  rom.** malloc().
0f00: 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20 77    In this way, w
0f10: 65 20 6b 6e 6f 77 20 74 68 61 74 20 74 68 65 20  e know that the 
0f20: 6d 65 6d 6f 72 79 20 69 73 20 73 61 66 65 20 74  memory is safe t
0f30: 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72 69 74  o be.** overwrit
0f40: 74 65 6e 20 6f 72 20 61 6c 74 65 72 65 64 2e 0a  ten or altered..
0f50: 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 53 51 4c  **.** Return SQL
0f60: 49 54 45 5f 4f 4b 20 6f 6e 20 73 75 63 63 65 73  ITE_OK on succes
0f70: 73 20 6f 72 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  s or SQLITE_NOME
0f80: 4d 20 69 66 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  M if malloc fail
0f90: 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  s..*/.int sqlite
0fa0: 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74  3VdbeMemMakeWrit
0fb0: 65 61 62 6c 65 28 4d 65 6d 20 2a 70 4d 65 6d 29  eable(Mem *pMem)
0fc0: 7b 0a 20 20 69 6e 74 20 66 3b 0a 20 20 61 73 73  {.  int f;.  ass
0fd0: 65 72 74 28 20 70 4d 65 6d 2d 3e 64 62 3d 3d 30  ert( pMem->db==0
0fe0: 20 7c 7c 20 73 71 6c 69 74 65 33 5f 6d 75 74 65   || sqlite3_mute
0ff0: 78 5f 68 65 6c 64 28 70 4d 65 6d 2d 3e 64 62 2d  x_held(pMem->db-
1000: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 61 73 73  >mutex) );.  ass
1010: 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
1020: 73 26 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  s&MEM_RowSet)==0
1030: 20 29 3b 0a 20 20 65 78 70 61 6e 64 42 6c 6f 62   );.  expandBlob
1040: 28 70 4d 65 6d 29 3b 0a 20 20 66 20 3d 20 70 4d  (pMem);.  f = pM
1050: 65 6d 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  em->flags;.  if(
1060: 20 28 66 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d   (f&(MEM_Str|MEM
1070: 5f 42 6c 6f 62 29 29 20 26 26 20 70 4d 65 6d 2d  _Blob)) && pMem-
1080: 3e 7a 21 3d 70 4d 65 6d 2d 3e 7a 4d 61 6c 6c 6f  >z!=pMem->zMallo
1090: 63 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c  c ){.    if( sql
10a0: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
10b0: 70 4d 65 6d 2c 20 70 4d 65 6d 2d 3e 6e 20 2b 20  pMem, pMem->n + 
10c0: 32 2c 20 31 29 20 29 7b 0a 20 20 20 20 20 20 72  2, 1) ){.      r
10d0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d  eturn SQLITE_NOM
10e0: 45 4d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4d  EM;.    }.    pM
10f0: 65 6d 2d 3e 7a 5b 70 4d 65 6d 2d 3e 6e 5d 20 3d  em->z[pMem->n] =
1100: 20 30 3b 0a 20 20 20 20 70 4d 65 6d 2d 3e 7a 5b   0;.    pMem->z[
1110: 70 4d 65 6d 2d 3e 6e 2b 31 5d 20 3d 20 30 3b 0a  pMem->n+1] = 0;.
1120: 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20      pMem->flags 
1130: 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 23 69 66  |= MEM_Term;.#if
1140: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1150: 0a 20 20 20 20 70 4d 65 6d 2d 3e 70 53 63 6f 70  .    pMem->pScop
1160: 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69  yFrom = 0;.#endi
1170: 66 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20  f.  }..  return 
1180: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  SQLITE_OK;.}../*
1190: 0a 2a 2a 20 49 66 20 74 68 65 20 67 69 76 65 6e  .** If the given
11a0: 20 4d 65 6d 2a 20 68 61 73 20 61 20 7a 65 72 6f   Mem* has a zero
11b0: 2d 66 69 6c 6c 65 64 20 74 61 69 6c 2c 20 74 75  -filled tail, tu
11c0: 72 6e 20 69 74 20 69 6e 74 6f 20 61 6e 20 6f 72  rn it into an or
11d0: 64 69 6e 61 72 79 0a 2a 2a 20 62 6c 6f 62 20 73  dinary.** blob s
11e0: 74 6f 72 65 64 20 69 6e 20 64 79 6e 61 6d 69 63  tored in dynamic
11f0: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
1200: 70 61 63 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  pace..*/.#ifndef
1210: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 43   SQLITE_OMIT_INC
1220: 52 42 4c 4f 42 0a 69 6e 74 20 73 71 6c 69 74 65  RBLOB.int sqlite
1230: 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
1240: 6f 62 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  ob(Mem *pMem){. 
1250: 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   if( pMem->flags
1260: 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
1270: 20 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20     int nByte;.  
1280: 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e    assert( pMem->
1290: 66 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 20 29  flags&MEM_Blob )
12a0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
12b0: 4d 65 6d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 52  Mem->flags&MEM_R
12c0: 6f 77 53 65 74 29 3d 3d 30 20 29 3b 0a 20 20 20  owSet)==0 );.   
12d0: 20 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 64   assert( pMem->d
12e0: 62 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f  b==0 || sqlite3_
12f0: 6d 75 74 65 78 5f 68 65 6c 64 28 70 4d 65 6d 2d  mutex_held(pMem-
1300: 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 0a  >db->mutex) );..
1310: 20 20 20 20 2f 2a 20 53 65 74 20 6e 42 79 74 65      /* Set nByte
1320: 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
1330: 66 20 62 79 74 65 73 20 72 65 71 75 69 72 65 64  f bytes required
1340: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 65 78   to store the ex
1350: 70 61 6e 64 65 64 20 62 6c 6f 62 2e 20 2a 2f 0a  panded blob. */.
1360: 20 20 20 20 6e 42 79 74 65 20 3d 20 70 4d 65 6d      nByte = pMem
1370: 2d 3e 6e 20 2b 20 70 4d 65 6d 2d 3e 75 2e 6e 5a  ->n + pMem->u.nZ
1380: 65 72 6f 3b 0a 20 20 20 20 69 66 28 20 6e 42 79  ero;.    if( nBy
1390: 74 65 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20 6e  te<=0 ){.      n
13a0: 42 79 74 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  Byte = 1;.    }.
13b0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
13c0: 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c  dbeMemGrow(pMem,
13d0: 20 6e 42 79 74 65 2c 20 31 29 20 29 7b 0a 20 20   nByte, 1) ){.  
13e0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
13f0: 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 0a 0a  E_NOMEM;.    }..
1400: 20 20 20 20 6d 65 6d 73 65 74 28 26 70 4d 65 6d      memset(&pMem
1410: 2d 3e 7a 5b 70 4d 65 6d 2d 3e 6e 5d 2c 20 30 2c  ->z[pMem->n], 0,
1420: 20 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b   pMem->u.nZero);
1430: 0a 20 20 20 20 70 4d 65 6d 2d 3e 6e 20 2b 3d 20  .    pMem->n += 
1440: 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  pMem->u.nZero;. 
1450: 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26     pMem->flags &
1460: 3d 20 7e 28 4d 45 4d 5f 5a 65 72 6f 7c 4d 45 4d  = ~(MEM_Zero|MEM
1470: 5f 54 65 72 6d 29 3b 0a 20 20 7d 0a 20 20 72 65  _Term);.  }.  re
1480: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
1490: 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  }.#endif.../*.**
14a0: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 67   Make sure the g
14b0: 69 76 65 6e 20 4d 65 6d 20 69 73 20 5c 75 30 30  iven Mem is \u00
14c0: 30 30 20 74 65 72 6d 69 6e 61 74 65 64 2e 0a 2a  00 terminated..*
14d0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  /.int sqlite3Vdb
14e0: 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65  eMemNulTerminate
14f0: 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 61  (Mem *pMem){.  a
1500: 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 64 62 3d  ssert( pMem->db=
1510: 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f 6d 75  =0 || sqlite3_mu
1520: 74 65 78 5f 68 65 6c 64 28 70 4d 65 6d 2d 3e 64  tex_held(pMem->d
1530: 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 69  b->mutex) );.  i
1540: 66 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  f( (pMem->flags 
1550: 26 20 4d 45 4d 5f 54 65 72 6d 29 21 3d 30 20 7c  & MEM_Term)!=0 |
1560: 7c 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  | (pMem->flags &
1570: 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 29 7b 0a   MEM_Str)==0 ){.
1580: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
1590: 45 5f 4f 4b 3b 20 20 20 2f 2a 20 4e 6f 74 68 69  E_OK;   /* Nothi
15a0: 6e 67 20 74 6f 20 64 6f 20 2a 2f 0a 20 20 7d 0a  ng to do */.  }.
15b0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
15c0: 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 70  eMemGrow(pMem, p
15d0: 4d 65 6d 2d 3e 6e 2b 32 2c 20 31 29 20 29 7b 0a  Mem->n+2, 1) ){.
15e0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
15f0: 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 20 20 70  E_NOMEM;.  }.  p
1600: 4d 65 6d 2d 3e 7a 5b 70 4d 65 6d 2d 3e 6e 5d 20  Mem->z[pMem->n] 
1610: 3d 20 30 3b 0a 20 20 70 4d 65 6d 2d 3e 7a 5b 70  = 0;.  pMem->z[p
1620: 4d 65 6d 2d 3e 6e 2b 31 5d 20 3d 20 30 3b 0a 20  Mem->n+1] = 0;. 
1630: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 7c 3d 20   pMem->flags |= 
1640: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 72 65 74 75  MEM_Term;.  retu
1650: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
1660: 0a 2f 2a 0a 2a 2a 20 41 64 64 20 4d 45 4d 5f 53  ./*.** Add MEM_S
1670: 74 72 20 74 6f 20 74 68 65 20 73 65 74 20 6f 66  tr to the set of
1680: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 73   representations
1690: 20 66 6f 72 20 74 68 65 20 67 69 76 65 6e 20 4d   for the given M
16a0: 65 6d 2e 20 20 4e 75 6d 62 65 72 73 0a 2a 2a 20  em.  Numbers.** 
16b0: 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20 75 73  are converted us
16c0: 69 6e 67 20 73 71 6c 69 74 65 33 5f 73 6e 70 72  ing sqlite3_snpr
16d0: 69 6e 74 66 28 29 2e 20 20 43 6f 6e 76 65 72 74  intf().  Convert
16e0: 69 6e 67 20 61 20 42 4c 4f 42 20 74 6f 20 61 20  ing a BLOB to a 
16f0: 73 74 72 69 6e 67 0a 2a 2a 20 69 73 20 61 20 6e  string.** is a n
1700: 6f 2d 6f 70 2e 0a 2a 2a 0a 2a 2a 20 45 78 69 73  o-op..**.** Exis
1710: 74 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ting representat
1720: 69 6f 6e 73 20 4d 45 4d 5f 49 6e 74 20 61 6e 64  ions MEM_Int and
1730: 20 4d 45 4d 5f 52 65 61 6c 20 61 72 65 20 2a 6e   MEM_Real are *n
1740: 6f 74 2a 20 69 6e 76 61 6c 69 64 61 74 65 64 2e  ot* invalidated.
1750: 0a 2a 2a 0a 2a 2a 20 41 20 4d 45 4d 5f 4e 75 6c  .**.** A MEM_Nul
1760: 6c 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e 65 76  l value will nev
1770: 65 72 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  er be passed to 
1780: 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 54  this function. T
1790: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 0a  his function is.
17a0: 2a 2a 20 75 73 65 64 20 66 6f 72 20 63 6f 6e 76  ** used for conv
17b0: 65 72 74 69 6e 67 20 76 61 6c 75 65 73 20 74 6f  erting values to
17c0: 20 74 65 78 74 20 66 6f 72 20 72 65 74 75 72 6e   text for return
17d0: 69 6e 67 20 74 6f 20 74 68 65 20 75 73 65 72 20  ing to the user 
17e0: 28 69 2e 65 2e 20 76 69 61 0a 2a 2a 20 73 71 6c  (i.e. via.** sql
17f0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
1800: 29 29 2c 20 6f 72 20 66 6f 72 20 65 6e 73 75 72  )), or for ensur
1810: 69 6e 67 20 74 68 61 74 20 76 61 6c 75 65 73 20  ing that values 
1820: 74 6f 20 62 65 20 75 73 65 64 20 61 73 20 62 74  to be used as bt
1830: 72 65 65 0a 2a 2a 20 6b 65 79 73 20 61 72 65 20  ree.** keys are 
1840: 73 74 72 69 6e 67 73 2e 20 49 6e 20 74 68 65 20  strings. In the 
1850: 66 6f 72 6d 65 72 20 63 61 73 65 20 61 20 4e 55  former case a NU
1860: 4c 4c 20 70 6f 69 6e 74 65 72 20 69 73 20 72 65  LL pointer is re
1870: 74 75 72 6e 65 64 20 74 68 65 0a 2a 2a 20 75 73  turned the.** us
1880: 65 72 20 61 6e 64 20 74 68 65 20 6c 61 74 65 72  er and the later
1890: 20 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 20   is an internal 
18a0: 70 72 6f 67 72 61 6d 6d 69 6e 67 20 65 72 72 6f  programming erro
18b0: 72 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  r..*/.int sqlite
18c0: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
18d0: 79 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 69 6e 74  y(Mem *pMem, int
18e0: 20 65 6e 63 29 7b 0a 20 20 69 6e 74 20 72 63 20   enc){.  int rc 
18f0: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69  = SQLITE_OK;.  i
1900: 6e 74 20 66 67 20 3d 20 70 4d 65 6d 2d 3e 66 6c  nt fg = pMem->fl
1910: 61 67 73 3b 0a 20 20 63 6f 6e 73 74 20 69 6e 74  ags;.  const int
1920: 20 6e 42 79 74 65 20 3d 20 33 32 3b 0a 0a 20 20   nByte = 32;..  
1930: 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 64 62  assert( pMem->db
1940: 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f 6d  ==0 || sqlite3_m
1950: 75 74 65 78 5f 68 65 6c 64 28 70 4d 65 6d 2d 3e  utex_held(pMem->
1960: 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20  db->mutex) );.  
1970: 61 73 73 65 72 74 28 20 21 28 66 67 26 4d 45 4d  assert( !(fg&MEM
1980: 5f 5a 65 72 6f 29 20 29 3b 0a 20 20 61 73 73 65  _Zero) );.  asse
1990: 72 74 28 20 21 28 66 67 26 28 4d 45 4d 5f 53 74  rt( !(fg&(MEM_St
19a0: 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 20 29 3b 0a  r|MEM_Blob)) );.
19b0: 20 20 61 73 73 65 72 74 28 20 66 67 26 28 4d 45    assert( fg&(ME
19c0: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20  M_Int|MEM_Real) 
19d0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d  );.  assert( (pM
19e0: 65 6d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 52 6f  em->flags&MEM_Ro
19f0: 77 53 65 74 29 3d 3d 30 20 29 3b 0a 20 20 61 73  wSet)==0 );.  as
1a00: 73 65 72 74 28 20 45 49 47 48 54 5f 42 59 54 45  sert( EIGHT_BYTE
1a10: 5f 41 4c 49 47 4e 4d 45 4e 54 28 70 4d 65 6d 29  _ALIGNMENT(pMem)
1a20: 20 29 3b 0a 0a 0a 20 20 69 66 28 20 73 71 6c 69   );...  if( sqli
1a30: 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
1a40: 4d 65 6d 2c 20 6e 42 79 74 65 2c 20 30 29 20 29  Mem, nByte, 0) )
1a50: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  {.    return SQL
1a60: 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 0a  ITE_NOMEM;.  }..
1a70: 20 20 2f 2a 20 46 6f 72 20 61 20 52 65 61 6c 20    /* For a Real 
1a80: 6f 72 20 49 6e 74 65 67 65 72 2c 20 75 73 65 20  or Integer, use 
1a90: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
1aa0: 29 20 74 6f 20 70 72 6f 64 75 63 65 20 74 68 65  ) to produce the
1ab0: 20 55 54 46 2d 38 0a 20 20 2a 2a 20 73 74 72 69   UTF-8.  ** stri
1ac0: 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ng representatio
1ad0: 6e 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  n of the value. 
1ae0: 54 68 65 6e 2c 20 69 66 20 74 68 65 20 72 65 71  Then, if the req
1af0: 75 69 72 65 64 20 65 6e 63 6f 64 69 6e 67 0a 20  uired encoding. 
1b00: 20 2a 2a 20 69 73 20 55 54 46 2d 31 36 6c 65 20   ** is UTF-16le 
1b10: 6f 72 20 55 54 46 2d 31 36 62 65 20 64 6f 20 61  or UTF-16be do a
1b20: 20 74 72 61 6e 73 6c 61 74 69 6f 6e 2e 0a 20 20   translation..  
1b30: 2a 2a 20 0a 20 20 2a 2a 20 46 49 58 20 4d 45 3a  ** .  ** FIX ME:
1b40: 20 49 74 20 77 6f 75 6c 64 20 62 65 20 62 65 74   It would be bet
1b50: 74 65 72 20 69 66 20 73 71 6c 69 74 65 33 5f 73  ter if sqlite3_s
1b60: 6e 70 72 69 6e 74 66 28 29 20 63 6f 75 6c 64 20  nprintf() could 
1b70: 64 6f 20 55 54 46 2d 31 36 2e 0a 20 20 2a 2f 0a  do UTF-16..  */.
1b80: 20 20 69 66 28 20 66 67 20 26 20 4d 45 4d 5f 49    if( fg & MEM_I
1b90: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
1ba0: 33 5f 73 6e 70 72 69 6e 74 66 28 6e 42 79 74 65  3_snprintf(nByte
1bb0: 2c 20 70 4d 65 6d 2d 3e 7a 2c 20 22 25 6c 6c 64  , pMem->z, "%lld
1bc0: 22 2c 20 70 4d 65 6d 2d 3e 75 2e 69 29 3b 0a 20  ", pMem->u.i);. 
1bd0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
1be0: 72 74 28 20 66 67 20 26 20 4d 45 4d 5f 52 65 61  rt( fg & MEM_Rea
1bf0: 6c 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  l );.    sqlite3
1c00: 5f 73 6e 70 72 69 6e 74 66 28 6e 42 79 74 65 2c  _snprintf(nByte,
1c10: 20 70 4d 65 6d 2d 3e 7a 2c 20 22 25 21 2e 31 35   pMem->z, "%!.15
1c20: 67 22 2c 20 70 4d 65 6d 2d 3e 72 29 3b 0a 20 20  g", pMem->r);.  
1c30: 7d 0a 20 20 70 4d 65 6d 2d 3e 6e 20 3d 20 73 71  }.  pMem->n = sq
1c40: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4d  lite3Strlen30(pM
1c50: 65 6d 2d 3e 7a 29 3b 0a 20 20 70 4d 65 6d 2d 3e  em->z);.  pMem->
1c60: 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
1c70: 38 3b 0a 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73  8;.  pMem->flags
1c80: 20 7c 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   |= MEM_Str|MEM_
1c90: 54 65 72 6d 3b 0a 20 20 73 71 6c 69 74 65 33 56  Term;.  sqlite3V
1ca0: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
1cb0: 67 28 70 4d 65 6d 2c 20 65 6e 63 29 3b 0a 20 20  g(pMem, enc);.  
1cc0: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
1cd0: 0a 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20  .** Memory cell 
1ce0: 70 4d 65 6d 20 63 6f 6e 74 61 69 6e 73 20 74 68  pMem contains th
1cf0: 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 61 6e 20  e context of an 
1d00: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1d10: 6f 6e 2e 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  on..** This rout
1d20: 69 6e 65 20 63 61 6c 6c 73 20 74 68 65 20 66 69  ine calls the fi
1d30: 6e 61 6c 69 7a 65 20 6d 65 74 68 6f 64 20 66 6f  nalize method fo
1d40: 72 20 74 68 61 74 20 66 75 6e 63 74 69 6f 6e 2e  r that function.
1d50: 20 20 54 68 65 0a 2a 2a 20 72 65 73 75 6c 74 20    The.** result 
1d60: 6f 66 20 74 68 65 20 61 67 67 72 65 67 61 74 65  of the aggregate
1d70: 20 69 73 20 73 74 6f 72 65 64 20 62 61 63 6b 20   is stored back 
1d80: 69 6e 74 6f 20 70 4d 65 6d 2e 0a 2a 2a 0a 2a 2a  into pMem..**.**
1d90: 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   Return SQLITE_E
1da0: 52 52 4f 52 20 69 66 20 74 68 65 20 66 69 6e 61  RROR if the fina
1db0: 6c 69 7a 65 72 20 72 65 70 6f 72 74 73 20 61 6e  lizer reports an
1dc0: 20 65 72 72 6f 72 2e 20 20 53 51 4c 49 54 45 5f   error.  SQLITE_
1dd0: 4f 4b 0a 2a 2a 20 6f 74 68 65 72 77 69 73 65 2e  OK.** otherwise.
1de0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  .*/.int sqlite3V
1df0: 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 4d  dbeMemFinalize(M
1e00: 65 6d 20 2a 70 4d 65 6d 2c 20 46 75 6e 63 44 65  em *pMem, FuncDe
1e10: 66 20 2a 70 46 75 6e 63 29 7b 0a 20 20 69 6e 74  f *pFunc){.  int
1e20: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
1e30: 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 46  .  if( ALWAYS(pF
1e40: 75 6e 63 20 26 26 20 70 46 75 6e 63 2d 3e 78 46  unc && pFunc->xF
1e50: 69 6e 61 6c 69 7a 65 29 20 29 7b 0a 20 20 20 20  inalize) ){.    
1e60: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
1e70: 63 74 78 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ctx;.    assert(
1e80: 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
1e90: 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 7c 7c 20  MEM_Null)!=0 || 
1ea0: 70 46 75 6e 63 3d 3d 70 4d 65 6d 2d 3e 75 2e 70  pFunc==pMem->u.p
1eb0: 44 65 66 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Def );.    asser
1ec0: 74 28 20 70 4d 65 6d 2d 3e 64 62 3d 3d 30 20 7c  t( pMem->db==0 |
1ed0: 7c 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  | sqlite3_mutex_
1ee0: 68 65 6c 64 28 70 4d 65 6d 2d 3e 64 62 2d 3e 6d  held(pMem->db->m
1ef0: 75 74 65 78 29 20 29 3b 0a 20 20 20 20 6d 65 6d  utex) );.    mem
1f00: 73 65 74 28 26 63 74 78 2c 20 30 2c 20 73 69 7a  set(&ctx, 0, siz
1f10: 65 6f 66 28 63 74 78 29 29 3b 0a 20 20 20 20 63  eof(ctx));.    c
1f20: 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d  tx.s.flags = MEM
1f30: 5f 4e 75 6c 6c 3b 0a 20 20 20 20 63 74 78 2e 73  _Null;.    ctx.s
1f40: 2e 64 62 20 3d 20 70 4d 65 6d 2d 3e 64 62 3b 0a  .db = pMem->db;.
1f50: 20 20 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70      ctx.pMem = p
1f60: 4d 65 6d 3b 0a 20 20 20 20 63 74 78 2e 70 46 75  Mem;.    ctx.pFu
1f70: 6e 63 20 3d 20 70 46 75 6e 63 3b 0a 20 20 20 20  nc = pFunc;.    
1f80: 70 46 75 6e 63 2d 3e 78 46 69 6e 61 6c 69 7a 65  pFunc->xFinalize
1f90: 28 26 63 74 78 29 3b 20 2f 2a 20 49 4d 50 3a 20  (&ctx); /* IMP: 
1fa0: 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f  R-24505-23230 */
1fb0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 30 3d 3d  .    assert( 0==
1fc0: 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pMem->flags&MEM
1fd0: 5f 44 79 6e 29 20 26 26 20 21 70 4d 65 6d 2d 3e  _Dyn) && !pMem->
1fe0: 78 44 65 6c 20 29 3b 0a 20 20 20 20 73 71 6c 69  xDel );.    sqli
1ff0: 74 65 33 44 62 46 72 65 65 28 70 4d 65 6d 2d 3e  te3DbFree(pMem->
2000: 64 62 2c 20 70 4d 65 6d 2d 3e 7a 4d 61 6c 6c 6f  db, pMem->zMallo
2010: 63 29 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70  c);.    memcpy(p
2020: 4d 65 6d 2c 20 26 63 74 78 2e 73 2c 20 73 69 7a  Mem, &ctx.s, siz
2030: 65 6f 66 28 63 74 78 2e 73 29 29 3b 0a 20 20 20  eof(ctx.s));.   
2040: 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f   rc = ctx.isErro
2050: 72 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  r;.  }.  return 
2060: 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  rc;.}../*.** If 
2070: 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
2080: 63 6f 6e 74 61 69 6e 73 20 61 20 73 74 72 69 6e  contains a strin
2090: 67 20 76 61 6c 75 65 20 74 68 61 74 20 6d 75 73  g value that mus
20a0: 74 20 62 65 20 66 72 65 65 64 20 62 79 0a 2a 2a  t be freed by.**
20b0: 20 69 6e 76 6f 6b 69 6e 67 20 61 6e 20 65 78 74   invoking an ext
20c0: 65 72 6e 61 6c 20 63 61 6c 6c 62 61 63 6b 2c 20  ernal callback, 
20d0: 66 72 65 65 20 69 74 20 6e 6f 77 2e 20 43 61 6c  free it now. Cal
20e0: 6c 69 6e 67 20 74 68 69 73 20 66 75 6e 63 74 69  ling this functi
20f0: 6f 6e 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 66  on.** does not f
2100: 72 65 65 20 61 6e 79 20 4d 65 6d 2e 7a 4d 61 6c  ree any Mem.zMal
2110: 6c 6f 63 20 62 75 66 66 65 72 2e 0a 2a 2f 0a 76  loc buffer..*/.v
2120: 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d  oid sqlite3VdbeM
2130: 65 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61  emReleaseExterna
2140: 6c 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 61 73 73  l(Mem *p){.  ass
2150: 65 72 74 28 20 70 2d 3e 64 62 3d 3d 30 20 7c 7c  ert( p->db==0 ||
2160: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
2170: 65 6c 64 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78  eld(p->db->mutex
2180: 29 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  ) );.  testcase(
2190: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
21a0: 41 67 67 20 29 3b 0a 20 20 74 65 73 74 63 61 73  Agg );.  testcas
21b0: 65 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  e( p->flags & ME
21c0: 4d 5f 44 79 6e 20 29 3b 0a 20 20 74 65 73 74 63  M_Dyn );.  testc
21d0: 61 73 65 28 20 70 2d 3e 66 6c 61 67 73 20 26 20  ase( p->flags & 
21e0: 4d 45 4d 5f 52 6f 77 53 65 74 20 29 3b 0a 20 20  MEM_RowSet );.  
21f0: 74 65 73 74 63 61 73 65 28 20 70 2d 3e 66 6c 61  testcase( p->fla
2200: 67 73 20 26 20 4d 45 4d 5f 46 72 61 6d 65 20 29  gs & MEM_Frame )
2210: 3b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  ;.  if( p->flags
2220: 26 28 4d 45 4d 5f 41 67 67 7c 4d 45 4d 5f 44 79  &(MEM_Agg|MEM_Dy
2230: 6e 7c 4d 45 4d 5f 52 6f 77 53 65 74 7c 4d 45 4d  n|MEM_RowSet|MEM
2240: 5f 46 72 61 6d 65 29 20 29 7b 0a 20 20 20 20 69  _Frame) ){.    i
2250: 66 28 20 70 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  f( p->flags&MEM_
2260: 41 67 67 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  Agg ){.      sql
2270: 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c  ite3VdbeMemFinal
2280: 69 7a 65 28 70 2c 20 70 2d 3e 75 2e 70 44 65 66  ize(p, p->u.pDef
2290: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
22a0: 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d   (p->flags & MEM
22b0: 5f 41 67 67 29 3d 3d 30 20 29 3b 0a 20 20 20 20  _Agg)==0 );.    
22c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
22d0: 52 65 6c 65 61 73 65 28 70 29 3b 0a 20 20 20 20  Release(p);.    
22e0: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
22f0: 67 73 26 4d 45 4d 5f 44 79 6e 20 26 26 20 70 2d  gs&MEM_Dyn && p-
2300: 3e 78 44 65 6c 20 29 7b 0a 20 20 20 20 20 20 61  >xDel ){.      a
2310: 73 73 65 72 74 28 20 28 70 2d 3e 66 6c 61 67 73  ssert( (p->flags
2320: 26 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20  &MEM_RowSet)==0 
2330: 29 3b 0a 20 20 20 20 20 20 70 2d 3e 78 44 65 6c  );.      p->xDel
2340: 28 28 76 6f 69 64 20 2a 29 70 2d 3e 7a 29 3b 0a  ((void *)p->z);.
2350: 20 20 20 20 20 20 70 2d 3e 78 44 65 6c 20 3d 20        p->xDel = 
2360: 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  0;.    }else if(
2370: 20 70 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 52 6f   p->flags&MEM_Ro
2380: 77 53 65 74 20 29 7b 0a 20 20 20 20 20 20 73 71  wSet ){.      sq
2390: 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72  lite3RowSetClear
23a0: 28 70 2d 3e 75 2e 70 52 6f 77 53 65 74 29 3b 0a  (p->u.pRowSet);.
23b0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d      }else if( p-
23c0: 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65  >flags&MEM_Frame
23d0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
23e0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
23f0: 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a  p);.    }.  }.}.
2400: 0a 2f 2a 0a 2a 2a 20 52 65 6c 65 61 73 65 20 61  ./*.** Release a
2410: 6e 79 20 6d 65 6d 6f 72 79 20 68 65 6c 64 20 62  ny memory held b
2420: 79 20 74 68 65 20 4d 65 6d 2e 20 54 68 69 73 20  y the Mem. This 
2430: 6d 61 79 20 6c 65 61 76 65 20 74 68 65 20 4d 65  may leave the Me
2440: 6d 20 69 6e 20 61 6e 0a 2a 2a 20 69 6e 63 6f 6e  m in an.** incon
2450: 73 69 73 74 65 6e 74 20 73 74 61 74 65 2c 20 66  sistent state, f
2460: 6f 72 20 65 78 61 6d 70 6c 65 20 77 69 74 68 20  or example with 
2470: 28 4d 65 6d 2e 7a 3d 3d 30 29 20 61 6e 64 0a 2a  (Mem.z==0) and.*
2480: 2a 20 28 4d 65 6d 2e 74 79 70 65 3d 3d 53 51 4c  * (Mem.type==SQL
2490: 49 54 45 5f 54 45 58 54 29 2e 0a 2a 2f 0a 76 6f  ITE_TEXT)..*/.vo
24a0: 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  id sqlite3VdbeMe
24b0: 6d 52 65 6c 65 61 73 65 28 4d 65 6d 20 2a 70 29  mRelease(Mem *p)
24c0: 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  {.  sqlite3VdbeM
24d0: 65 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61  emReleaseExterna
24e0: 6c 28 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 44  l(p);.  sqlite3D
24f0: 62 46 72 65 65 28 70 2d 3e 64 62 2c 20 70 2d 3e  bFree(p->db, p->
2500: 7a 4d 61 6c 6c 6f 63 29 3b 0a 20 20 70 2d 3e 7a  zMalloc);.  p->z
2510: 20 3d 20 30 3b 0a 20 20 70 2d 3e 7a 4d 61 6c 6c   = 0;.  p->zMall
2520: 6f 63 20 3d 20 30 3b 0a 20 20 70 2d 3e 78 44 65  oc = 0;.  p->xDe
2530: 6c 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  l = 0;.}../*.** 
2540: 43 6f 6e 76 65 72 74 20 61 20 36 34 2d 62 69 74  Convert a 64-bit
2550: 20 49 45 45 45 20 64 6f 75 62 6c 65 20 69 6e 74   IEEE double int
2560: 6f 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e 65  o a 64-bit signe
2570: 64 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 20 49 66  d integer..** If
2580: 20 74 68 65 20 64 6f 75 62 6c 65 20 69 73 20 74   the double is t
2590: 6f 6f 20 6c 61 72 67 65 2c 20 72 65 74 75 72 6e  oo large, return
25a0: 20 30 78 38 30 30 30 30 30 30 30 30 30 30 30 30   0x8000000000000
25b0: 30 30 30 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20  000..**.** Most 
25c0: 73 79 73 74 65 6d 73 20 61 70 70 65 61 72 20 74  systems appear t
25d0: 6f 20 64 6f 20 74 68 69 73 20 73 69 6d 70 6c 79  o do this simply
25e0: 20 62 79 20 61 73 73 69 67 6e 69 6e 67 0a 2a 2a   by assigning.**
25f0: 20 76 61 72 69 61 62 6c 65 73 20 61 6e 64 20 77   variables and w
2600: 69 74 68 6f 75 74 20 74 68 65 20 65 78 74 72 61  ithout the extra
2610: 20 72 61 6e 67 65 20 74 65 73 74 73 2e 20 20 42   range tests.  B
2620: 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20  ut.** there are 
2630: 72 65 70 6f 72 74 73 20 74 68 61 74 20 77 69 6e  reports that win
2640: 64 6f 77 73 20 74 68 72 6f 77 73 20 61 6e 20 65  dows throws an e
2650: 78 70 65 63 74 69 6f 6e 0a 2a 2a 20 69 66 20 74  xpection.** if t
2660: 68 65 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  he floating poin
2670: 74 20 76 61 6c 75 65 20 69 73 20 6f 75 74 20 6f  t value is out o
2680: 66 20 72 61 6e 67 65 2e 20 28 53 65 65 20 74 69  f range. (See ti
2690: 63 6b 65 74 20 23 32 38 38 30 2e 29 0a 2a 2a 20  cket #2880.).** 
26a0: 42 65 63 61 75 73 65 20 77 65 20 64 6f 20 6e 6f  Because we do no
26b0: 74 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e 64  t completely und
26c0: 65 72 73 74 61 6e 64 20 74 68 65 20 70 72 6f 62  erstand the prob
26d0: 6c 65 6d 2c 20 77 65 20 77 69 6c 6c 0a 2a 2a 20  lem, we will.** 
26e0: 74 61 6b 65 20 74 68 65 20 63 6f 6e 73 65 72 76  take the conserv
26f0: 61 74 69 76 65 20 61 70 70 72 6f 61 63 68 20 61  ative approach a
2700: 6e 64 20 61 6c 77 61 79 73 20 64 6f 20 72 61 6e  nd always do ran
2710: 67 65 20 74 65 73 74 73 0a 2a 2a 20 62 65 66 6f  ge tests.** befo
2720: 72 65 20 61 74 74 65 6d 70 74 69 6e 67 20 74 68  re attempting th
2730: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 2e 0a 2a 2f  e conversion..*/
2740: 0a 73 74 61 74 69 63 20 69 36 34 20 64 6f 75 62  .static i64 doub
2750: 6c 65 54 6f 49 6e 74 36 34 28 64 6f 75 62 6c 65  leToInt64(double
2760: 20 72 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49   r){.#ifdef SQLI
2770: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
2780: 5f 50 4f 49 4e 54 0a 20 20 2f 2a 20 57 68 65 6e  _POINT.  /* When
2790: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20   floating-point 
27a0: 69 73 20 6f 6d 69 74 74 65 64 2c 20 64 6f 75 62  is omitted, doub
27b0: 6c 65 20 61 6e 64 20 69 6e 74 36 34 20 61 72 65  le and int64 are
27c0: 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20   the same thing 
27d0: 2a 2f 0a 20 20 72 65 74 75 72 6e 20 72 3b 0a 23  */.  return r;.#
27e0: 65 6c 73 65 0a 20 20 2f 2a 0a 20 20 2a 2a 20 4d  else.  /*.  ** M
27f0: 61 6e 79 20 63 6f 6d 70 69 6c 65 72 73 20 77 65  any compilers we
2800: 20 65 6e 63 6f 75 6e 74 65 72 20 64 6f 20 6e 6f   encounter do no
2810: 74 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e  t define constan
2820: 74 73 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ts for the.  ** 
2830: 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69  minimum and maxi
2840: 6d 75 6d 20 36 34 2d 62 69 74 20 69 6e 74 65 67  mum 64-bit integ
2850: 65 72 73 2c 20 6f 72 20 74 68 65 79 20 64 65 66  ers, or they def
2860: 69 6e 65 20 74 68 65 6d 0a 20 20 2a 2a 20 69 6e  ine them.  ** in
2870: 63 6f 6e 73 69 73 74 65 6e 74 6c 79 2e 20 20 41  consistently.  A
2880: 6e 64 20 6d 61 6e 79 20 64 6f 20 6e 6f 74 20 75  nd many do not u
2890: 6e 64 65 72 73 74 61 6e 64 20 74 68 65 20 22 4c  nderstand the "L
28a0: 4c 22 20 6e 6f 74 61 74 69 6f 6e 2e 0a 20 20 2a  L" notation..  *
28b0: 2a 20 53 6f 20 77 65 20 64 65 66 69 6e 65 20 6f  * So we define o
28c0: 75 72 20 6f 77 6e 20 73 74 61 74 69 63 20 63 6f  ur own static co
28d0: 6e 73 74 61 6e 74 73 20 68 65 72 65 20 75 73 69  nstants here usi
28e0: 6e 67 20 6e 6f 74 68 69 6e 67 0a 20 20 2a 2a 20  ng nothing.  ** 
28f0: 6c 61 72 67 65 72 20 74 68 61 6e 20 61 20 33 32  larger than a 32
2900: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 63 6f 6e  -bit integer con
2910: 73 74 61 6e 74 2e 0a 20 20 2a 2f 0a 20 20 73 74  stant..  */.  st
2920: 61 74 69 63 20 63 6f 6e 73 74 20 69 36 34 20 6d  atic const i64 m
2930: 61 78 49 6e 74 20 3d 20 4c 41 52 47 45 53 54 5f  axInt = LARGEST_
2940: 49 4e 54 36 34 3b 0a 20 20 73 74 61 74 69 63 20  INT64;.  static 
2950: 63 6f 6e 73 74 20 69 36 34 20 6d 69 6e 49 6e 74  const i64 minInt
2960: 20 3d 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36   = SMALLEST_INT6
2970: 34 3b 0a 0a 20 20 69 66 28 20 72 3c 28 64 6f 75  4;..  if( r<(dou
2980: 62 6c 65 29 6d 69 6e 49 6e 74 20 29 7b 0a 20 20  ble)minInt ){.  
2990: 20 20 72 65 74 75 72 6e 20 6d 69 6e 49 6e 74 3b    return minInt;
29a0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72 3e 28  .  }else if( r>(
29b0: 64 6f 75 62 6c 65 29 6d 61 78 49 6e 74 20 29 7b  double)maxInt ){
29c0: 0a 20 20 20 20 2f 2a 20 6d 69 6e 49 6e 74 20 69  .    /* minInt i
29d0: 73 20 63 6f 72 72 65 63 74 20 68 65 72 65 20 2d  s correct here -
29e0: 20 6e 6f 74 20 6d 61 78 49 6e 74 2e 20 20 49 74   not maxInt.  It
29f0: 20 74 75 72 6e 73 20 6f 75 74 20 74 68 61 74 20   turns out that 
2a00: 61 73 73 69 67 6e 69 6e 67 0a 20 20 20 20 2a 2a  assigning.    **
2a10: 20 61 20 76 65 72 79 20 6c 61 72 67 65 20 70 6f   a very large po
2a20: 73 69 74 69 76 65 20 6e 75 6d 62 65 72 20 74 6f  sitive number to
2a30: 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 73 75   an integer resu
2a40: 6c 74 73 20 69 6e 20 61 20 76 65 72 79 20 6c 61  lts in a very la
2a50: 72 67 65 0a 20 20 20 20 2a 2a 20 6e 65 67 61 74  rge.    ** negat
2a60: 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20 54 68  ive integer.  Th
2a70: 69 73 20 6d 61 6b 65 73 20 6e 6f 20 73 65 6e 73  is makes no sens
2a80: 65 2c 20 62 75 74 20 69 74 20 69 73 20 77 68 61  e, but it is wha
2a90: 74 20 78 38 36 20 68 61 72 64 77 61 72 65 0a 20  t x86 hardware. 
2aa0: 20 20 20 2a 2a 20 64 6f 65 73 20 73 6f 20 66 6f     ** does so fo
2ab0: 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  r compatibility 
2ac0: 77 65 20 77 69 6c 6c 20 64 6f 20 74 68 65 20 73  we will do the s
2ad0: 61 6d 65 20 69 6e 20 73 6f 66 74 77 61 72 65 2e  ame in software.
2ae0: 20 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 6d   */.    return m
2af0: 69 6e 49 6e 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  inInt;.  }else{.
2b00: 20 20 20 20 72 65 74 75 72 6e 20 28 69 36 34 29      return (i64)
2b10: 72 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 7d 0a  r;.  }.#endif.}.
2b20: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 73 6f  ./*.** Return so
2b30: 6d 65 20 6b 69 6e 64 20 6f 66 20 69 6e 74 65 67  me kind of integ
2b40: 65 72 20 76 61 6c 75 65 20 77 68 69 63 68 20 69  er value which i
2b50: 73 20 74 68 65 20 62 65 73 74 20 77 65 20 63 61  s the best we ca
2b60: 6e 20 64 6f 0a 2a 2a 20 61 74 20 72 65 70 72 65  n do.** at repre
2b70: 73 65 6e 74 69 6e 67 20 74 68 65 20 76 61 6c 75  senting the valu
2b80: 65 20 74 68 61 74 20 2a 70 4d 65 6d 20 64 65 73  e that *pMem des
2b90: 63 72 69 62 65 73 20 61 73 20 61 6e 20 69 6e 74  cribes as an int
2ba0: 65 67 65 72 2e 0a 2a 2a 20 49 66 20 70 4d 65 6d  eger..** If pMem
2bb0: 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   is an integer, 
2bc0: 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 69  then the value i
2bd0: 73 20 65 78 61 63 74 2e 20 20 49 66 20 70 4d 65  s exact.  If pMe
2be0: 6d 20 69 73 0a 2a 2a 20 61 20 66 6c 6f 61 74 69  m is.** a floati
2bf0: 6e 67 2d 70 6f 69 6e 74 20 74 68 65 6e 20 74 68  ng-point then th
2c00: 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
2c10: 20 69 73 20 74 68 65 20 69 6e 74 65 67 65 72 20   is the integer 
2c20: 70 61 72 74 2e 0a 2a 2a 20 49 66 20 70 4d 65 6d  part..** If pMem
2c30: 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20   is a string or 
2c40: 62 6c 6f 62 2c 20 74 68 65 6e 20 77 65 20 6d 61  blob, then we ma
2c50: 6b 65 20 61 6e 20 61 74 74 65 6d 70 74 20 74 6f  ke an attempt to
2c60: 20 63 6f 6e 76 65 72 74 0a 2a 2a 20 69 74 20 69   convert.** it i
2c70: 6e 74 6f 20 61 20 69 6e 74 65 67 65 72 20 61 6e  nto a integer an
2c80: 64 20 72 65 74 75 72 6e 20 74 68 61 74 2e 20 20  d return that.  
2c90: 49 66 20 70 4d 65 6d 20 72 65 70 72 65 73 65 6e  If pMem represen
2ca0: 74 73 20 61 6e 0a 2a 2a 20 61 6e 20 53 51 4c 2d  ts an.** an SQL-
2cb0: 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 72 65 74 75  NULL value, retu
2cc0: 72 6e 20 30 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 70  rn 0..**.** If p
2cd0: 4d 65 6d 20 72 65 70 72 65 73 65 6e 74 73 20 61  Mem represents a
2ce0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 2c 20 69   string value, i
2cf0: 74 73 20 65 6e 63 6f 64 69 6e 67 20 6d 69 67 68  ts encoding migh
2d00: 74 20 62 65 20 63 68 61 6e 67 65 64 2e 0a 2a 2f  t be changed..*/
2d10: 0a 69 36 34 20 73 71 6c 69 74 65 33 56 64 62 65  .i64 sqlite3Vdbe
2d20: 49 6e 74 56 61 6c 75 65 28 4d 65 6d 20 2a 70 4d  IntValue(Mem *pM
2d30: 65 6d 29 7b 0a 20 20 69 6e 74 20 66 6c 61 67 73  em){.  int flags
2d40: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d  ;.  assert( pMem
2d50: 2d 3e 64 62 3d 3d 30 20 7c 7c 20 73 71 6c 69 74  ->db==0 || sqlit
2d60: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 4d  e3_mutex_held(pM
2d70: 65 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29  em->db->mutex) )
2d80: 3b 0a 20 20 61 73 73 65 72 74 28 20 45 49 47 48  ;.  assert( EIGH
2d90: 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54  T_BYTE_ALIGNMENT
2da0: 28 70 4d 65 6d 29 20 29 3b 0a 20 20 66 6c 61 67  (pMem) );.  flag
2db0: 73 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b  s = pMem->flags;
2dc0: 0a 20 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d  .  if( flags & M
2dd0: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 72 65  EM_Int ){.    re
2de0: 74 75 72 6e 20 70 4d 65 6d 2d 3e 75 2e 69 3b 0a  turn pMem->u.i;.
2df0: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 6c 61 67    }else if( flag
2e00: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a  s & MEM_Real ){.
2e10: 20 20 20 20 72 65 74 75 72 6e 20 64 6f 75 62 6c      return doubl
2e20: 65 54 6f 49 6e 74 36 34 28 70 4d 65 6d 2d 3e 72  eToInt64(pMem->r
2e30: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66  );.  }else if( f
2e40: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
2e50: 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20  MEM_Blob) ){.   
2e60: 20 69 36 34 20 76 61 6c 75 65 3b 0a 20 20 20 20   i64 value;.    
2e70: 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 7a 20  assert( pMem->z 
2e80: 7c 7c 20 70 4d 65 6d 2d 3e 6e 3d 3d 30 20 29 3b  || pMem->n==0 );
2e90: 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70  .    testcase( p
2ea0: 4d 65 6d 2d 3e 7a 3d 3d 30 20 29 3b 0a 20 20 20  Mem->z==0 );.   
2eb0: 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70   sqlite3Atoi64(p
2ec0: 4d 65 6d 2d 3e 7a 2c 20 26 76 61 6c 75 65 2c 20  Mem->z, &value, 
2ed0: 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65  pMem->n, pMem->e
2ee0: 6e 63 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  nc);.    return 
2ef0: 76 61 6c 75 65 3b 0a 20 20 7d 65 6c 73 65 7b 0a  value;.  }else{.
2f00: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
2f10: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  }.}../*.** Retur
2f20: 6e 20 74 68 65 20 62 65 73 74 20 72 65 70 72 65  n the best repre
2f30: 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 70 4d 65  sentation of pMe
2f40: 6d 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 65  m that we can ge
2f50: 74 20 69 6e 74 6f 20 61 0a 2a 2a 20 64 6f 75 62  t into a.** doub
2f60: 6c 65 2e 20 20 49 66 20 70 4d 65 6d 20 69 73 20  le.  If pMem is 
2f70: 61 6c 72 65 61 64 79 20 61 20 64 6f 75 62 6c 65  already a double
2f80: 20 6f 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   or an integer, 
2f90: 72 65 74 75 72 6e 20 69 74 73 0a 2a 2a 20 76 61  return its.** va
2fa0: 6c 75 65 2e 20 20 49 66 20 69 74 20 69 73 20 61  lue.  If it is a
2fb0: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c   string or blob,
2fc0: 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   try to convert 
2fd0: 69 74 20 74 6f 20 61 20 64 6f 75 62 6c 65 2e 0a  it to a double..
2fe0: 2a 2a 20 49 66 20 69 74 20 69 73 20 61 20 4e 55  ** If it is a NU
2ff0: 4c 4c 2c 20 72 65 74 75 72 6e 20 30 2e 30 2e 0a  LL, return 0.0..
3000: 2a 2f 0a 64 6f 75 62 6c 65 20 73 71 6c 69 74 65  */.double sqlite
3010: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 4d  3VdbeRealValue(M
3020: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73  em *pMem){.  ass
3030: 65 72 74 28 20 70 4d 65 6d 2d 3e 64 62 3d 3d 30  ert( pMem->db==0
3040: 20 7c 7c 20 73 71 6c 69 74 65 33 5f 6d 75 74 65   || sqlite3_mute
3050: 78 5f 68 65 6c 64 28 70 4d 65 6d 2d 3e 64 62 2d  x_held(pMem->db-
3060: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 61 73 73  >mutex) );.  ass
3070: 65 72 74 28 20 45 49 47 48 54 5f 42 59 54 45 5f  ert( EIGHT_BYTE_
3080: 41 4c 49 47 4e 4d 45 4e 54 28 70 4d 65 6d 29 20  ALIGNMENT(pMem) 
3090: 29 3b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66  );.  if( pMem->f
30a0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
30b0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4d  ){.    return pM
30c0: 65 6d 2d 3e 72 3b 0a 20 20 7d 65 6c 73 65 20 69  em->r;.  }else i
30d0: 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  f( pMem->flags &
30e0: 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20   MEM_Int ){.    
30f0: 72 65 74 75 72 6e 20 28 64 6f 75 62 6c 65 29 70  return (double)p
3100: 4d 65 6d 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73  Mem->u.i;.  }els
3110: 65 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67  e if( pMem->flag
3120: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
3130: 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20 2f 2a  _Blob) ){.    /*
3140: 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61   (double)0 In ca
3150: 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49  se of SQLITE_OMI
3160: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
3170: 2e 2e 2e 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c  ... */.    doubl
3180: 65 20 76 61 6c 20 3d 20 28 64 6f 75 62 6c 65 29  e val = (double)
3190: 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 41 74  0;.    sqlite3At
31a0: 6f 46 28 70 4d 65 6d 2d 3e 7a 2c 20 26 76 61 6c  oF(pMem->z, &val
31b0: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
31c0: 3e 65 6e 63 29 3b 0a 20 20 20 20 72 65 74 75 72  >enc);.    retur
31d0: 6e 20 76 61 6c 3b 0a 20 20 7d 65 6c 73 65 7b 0a  n val;.  }else{.
31e0: 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30      /* (double)0
31f0: 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c 49   In case of SQLI
3200: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
3210: 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20  _POINT... */.   
3220: 20 72 65 74 75 72 6e 20 28 64 6f 75 62 6c 65 29   return (double)
3230: 30 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  0;.  }.}../*.** 
3240: 54 68 65 20 4d 45 4d 20 73 74 72 75 63 74 75 72  The MEM structur
3250: 65 20 69 73 20 61 6c 72 65 61 64 79 20 61 20 4d  e is already a M
3260: 45 4d 5f 52 65 61 6c 2e 20 20 54 72 79 20 74 6f  EM_Real.  Try to
3270: 20 61 6c 73 6f 20 6d 61 6b 65 20 69 74 20 61 0a   also make it a.
3280: 2a 2a 20 4d 45 4d 5f 49 6e 74 20 69 66 20 77 65  ** MEM_Int if we
3290: 20 63 61 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71   can..*/.void sq
32a0: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
32b0: 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 4d  Affinity(Mem *pM
32c0: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 70  em){.  assert( p
32d0: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
32e0: 5f 52 65 61 6c 20 29 3b 0a 20 20 61 73 73 65 72  _Real );.  asser
32f0: 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
3300: 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
3310: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d   );.  assert( pM
3320: 65 6d 2d 3e 64 62 3d 3d 30 20 7c 7c 20 73 71 6c  em->db==0 || sql
3330: 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28  ite3_mutex_held(
3340: 70 4d 65 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78 29  pMem->db->mutex)
3350: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 45 49   );.  assert( EI
3360: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
3370: 4e 54 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 70  NT(pMem) );..  p
3380: 4d 65 6d 2d 3e 75 2e 69 20 3d 20 64 6f 75 62 6c  Mem->u.i = doubl
3390: 65 54 6f 49 6e 74 36 34 28 70 4d 65 6d 2d 3e 72  eToInt64(pMem->r
33a0: 29 3b 0a 0a 20 20 2f 2a 20 4f 6e 6c 79 20 6d 61  );..  /* Only ma
33b0: 72 6b 20 74 68 65 20 76 61 6c 75 65 20 61 73 20  rk the value as 
33c0: 61 6e 20 69 6e 74 65 67 65 72 20 69 66 0a 20 20  an integer if.  
33d0: 2a 2a 0a 20 20 2a 2a 20 20 20 20 28 31 29 20 74  **.  **    (1) t
33e0: 68 65 20 72 6f 75 6e 64 2d 74 72 69 70 20 63 6f  he round-trip co
33f0: 6e 76 65 72 73 69 6f 6e 20 72 65 61 6c 2d 3e 69  nversion real->i
3400: 6e 74 2d 3e 72 65 61 6c 20 69 73 20 61 20 6e 6f  nt->real is a no
3410: 2d 6f 70 2c 20 61 6e 64 0a 20 20 2a 2a 20 20 20  -op, and.  **   
3420: 20 28 32 29 20 54 68 65 20 69 6e 74 65 67 65 72   (2) The integer
3430: 20 69 73 20 6e 65 69 74 68 65 72 20 74 68 65 20   is neither the 
3440: 6c 61 72 67 65 73 74 20 6e 6f 72 20 74 68 65 20  largest nor the 
3450: 73 6d 61 6c 6c 65 73 74 0a 20 20 2a 2a 20 20 20  smallest.  **   
3460: 20 20 20 20 20 70 6f 73 73 69 62 6c 65 20 69 6e       possible in
3470: 74 65 67 65 72 20 28 74 69 63 6b 65 74 20 23 33  teger (ticket #3
3480: 39 32 32 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  922).  **.  ** T
3490: 68 65 20 73 65 63 6f 6e 64 20 61 6e 64 20 74 68  he second and th
34a0: 69 72 64 20 74 65 72 6d 73 20 69 6e 20 74 68 65  ird terms in the
34b0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 64 69   following condi
34c0: 74 69 6f 6e 61 6c 20 65 6e 66 6f 72 63 65 73 0a  tional enforces.
34d0: 20 20 2a 2a 20 74 68 65 20 73 65 63 6f 6e 64 20    ** the second 
34e0: 63 6f 6e 64 69 74 69 6f 6e 20 75 6e 64 65 72 20  condition under 
34f0: 74 68 65 20 61 73 73 75 6d 70 74 69 6f 6e 20 74  the assumption t
3500: 68 61 74 20 61 64 64 69 74 69 6f 6e 20 6f 76 65  hat addition ove
3510: 72 66 6c 6f 77 20 63 61 75 73 65 73 0a 20 20 2a  rflow causes.  *
3520: 2a 20 76 61 6c 75 65 73 20 74 6f 20 77 72 61 70  * values to wrap
3530: 20 61 72 6f 75 6e 64 2e 20 20 4f 6e 20 78 38 36   around.  On x86
3540: 20 68 61 72 64 77 61 72 65 2c 20 74 68 65 20 74   hardware, the t
3550: 68 69 72 64 20 74 65 72 6d 20 69 73 20 61 6c 77  hird term is alw
3560: 61 79 73 0a 20 20 2a 2a 20 74 72 75 65 20 61 6e  ays.  ** true an
3570: 64 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74  d could be omitt
3580: 65 64 2e 20 20 42 75 74 20 77 65 20 6c 65 61 76  ed.  But we leav
3590: 65 20 69 74 20 69 6e 20 62 65 63 61 75 73 65 20  e it in because 
35a0: 6f 74 68 65 72 0a 20 20 2a 2a 20 61 72 63 68 69  other.  ** archi
35b0: 74 65 63 74 75 72 65 73 20 6d 69 67 68 74 20 62  tectures might b
35c0: 65 68 61 76 65 20 64 69 66 66 65 72 65 6e 74 6c  ehave differentl
35d0: 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 4d  y..  */.  if( pM
35e0: 65 6d 2d 3e 72 3d 3d 28 64 6f 75 62 6c 65 29 70  em->r==(double)p
35f0: 4d 65 6d 2d 3e 75 2e 69 20 26 26 20 70 4d 65 6d  Mem->u.i && pMem
3600: 2d 3e 75 2e 69 3e 53 4d 41 4c 4c 45 53 54 5f 49  ->u.i>SMALLEST_I
3610: 4e 54 36 34 0a 20 20 20 20 20 20 26 26 20 41 4c  NT64.      && AL
3620: 57 41 59 53 28 70 4d 65 6d 2d 3e 75 2e 69 3c 4c  WAYS(pMem->u.i<L
3630: 41 52 47 45 53 54 5f 49 4e 54 36 34 29 20 29 7b  ARGEST_INT64) ){
3640: 0a 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73  .    pMem->flags
3650: 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d   |= MEM_Int;.  }
3660: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72  .}../*.** Conver
3670: 74 20 70 4d 65 6d 20 74 6f 20 74 79 70 65 20 69  t pMem to type i
3680: 6e 74 65 67 65 72 2e 20 20 49 6e 76 61 6c 69 64  nteger.  Invalid
3690: 61 74 65 20 61 6e 79 20 70 72 69 6f 72 20 72 65  ate any prior re
36a0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 73 2e 0a 2a  presentations..*
36b0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  /.int sqlite3Vdb
36c0: 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 4d  eMemIntegerify(M
36d0: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73  em *pMem){.  ass
36e0: 65 72 74 28 20 70 4d 65 6d 2d 3e 64 62 3d 3d 30  ert( pMem->db==0
36f0: 20 7c 7c 20 73 71 6c 69 74 65 33 5f 6d 75 74 65   || sqlite3_mute
3700: 78 5f 68 65 6c 64 28 70 4d 65 6d 2d 3e 64 62 2d  x_held(pMem->db-
3710: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 61 73 73  >mutex) );.  ass
3720: 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
3730: 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
3740: 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
3750: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
3760: 4d 45 4e 54 28 70 4d 65 6d 29 20 29 3b 0a 0a 20  MENT(pMem) );.. 
3770: 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 73 71 6c   pMem->u.i = sql
3780: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
3790: 28 70 4d 65 6d 29 3b 0a 20 20 4d 65 6d 53 65 74  (pMem);.  MemSet
37a0: 54 79 70 65 46 6c 61 67 28 70 4d 65 6d 2c 20 4d  TypeFlag(pMem, M
37b0: 45 4d 5f 49 6e 74 29 3b 0a 20 20 72 65 74 75 72  EM_Int);.  retur
37c0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a  n SQLITE_OK;.}..
37d0: 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 70 4d  /*.** Convert pM
37e0: 65 6d 20 73 6f 20 74 68 61 74 20 69 74 20 69 73  em so that it is
37f0: 20 6f 66 20 74 79 70 65 20 4d 45 4d 5f 52 65 61   of type MEM_Rea
3800: 6c 2e 0a 2a 2a 20 49 6e 76 61 6c 69 64 61 74 65  l..** Invalidate
3810: 20 61 6e 79 20 70 72 69 6f 72 20 72 65 70 72 65   any prior repre
3820: 73 65 6e 74 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 69  sentations..*/.i
3830: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  nt sqlite3VdbeMe
3840: 6d 52 65 61 6c 69 66 79 28 4d 65 6d 20 2a 70 4d  mRealify(Mem *pM
3850: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 70  em){.  assert( p
3860: 4d 65 6d 2d 3e 64 62 3d 3d 30 20 7c 7c 20 73 71  Mem->db==0 || sq
3870: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64  lite3_mutex_held
3880: 28 70 4d 65 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78  (pMem->db->mutex
3890: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 45  ) );.  assert( E
38a0: 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d  IGHT_BYTE_ALIGNM
38b0: 45 4e 54 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20  ENT(pMem) );..  
38c0: 70 4d 65 6d 2d 3e 72 20 3d 20 73 71 6c 69 74 65  pMem->r = sqlite
38d0: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
38e0: 4d 65 6d 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79  Mem);.  MemSetTy
38f0: 70 65 46 6c 61 67 28 70 4d 65 6d 2c 20 4d 45 4d  peFlag(pMem, MEM
3900: 5f 52 65 61 6c 29 3b 0a 20 20 72 65 74 75 72 6e  _Real);.  return
3910: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f   SQLITE_OK;.}../
3920: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 70 4d 65  *.** Convert pMe
3930: 6d 20 73 6f 20 74 68 61 74 20 69 74 20 68 61 73  m so that it has
3940: 20 74 79 70 65 73 20 4d 45 4d 5f 52 65 61 6c 20   types MEM_Real 
3950: 6f 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 62 6f  or MEM_Int or bo
3960: 74 68 2e 0a 2a 2a 20 49 6e 76 61 6c 69 64 61 74  th..** Invalidat
3970: 65 20 61 6e 79 20 70 72 69 6f 72 20 72 65 70 72  e any prior repr
3980: 65 73 65 6e 74 61 74 69 6f 6e 73 2e 0a 2a 2a 0a  esentations..**.
3990: 2a 2a 20 45 76 65 72 79 20 65 66 66 6f 72 74 20  ** Every effort 
39a0: 69 73 20 6d 61 64 65 20 74 6f 20 66 6f 72 63 65  is made to force
39b0: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 2c   the conversion,
39c0: 20 65 76 65 6e 20 69 66 20 74 68 65 20 69 6e 70   even if the inp
39d0: 75 74 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e  ut.** is a strin
39e0: 67 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  g that does not 
39f0: 6c 6f 6f 6b 20 63 6f 6d 70 6c 65 74 65 6c 79 20  look completely 
3a00: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2e 20 20  like a number.  
3a10: 43 6f 6e 76 65 72 74 0a 2a 2a 20 61 73 20 6d 75  Convert.** as mu
3a20: 63 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  ch of the string
3a30: 20 61 73 20 77 65 20 63 61 6e 20 61 6e 64 20 69   as we can and i
3a40: 67 6e 6f 72 65 20 74 68 65 20 72 65 73 74 2e 0a  gnore the rest..
3a50: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  */.int sqlite3Vd
3a60: 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 4d 65  beMemNumerify(Me
3a70: 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20  m *pMem){.  if( 
3a80: 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28  (pMem->flags & (
3a90: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
3aa0: 7c 4d 45 4d 5f 4e 75 6c 6c 29 29 3d 3d 30 20 29  |MEM_Null))==0 )
3ab0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  {.    assert( (p
3ac0: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
3ad0: 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 29  M_Blob|MEM_Str))
3ae0: 21 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  !=0 );.    asser
3af0: 74 28 20 70 4d 65 6d 2d 3e 64 62 3d 3d 30 20 7c  t( pMem->db==0 |
3b00: 7c 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  | sqlite3_mutex_
3b10: 68 65 6c 64 28 70 4d 65 6d 2d 3e 64 62 2d 3e 6d  held(pMem->db->m
3b20: 75 74 65 78 29 20 29 3b 0a 20 20 20 20 69 66 28  utex) );.    if(
3b30: 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36   0==sqlite3Atoi6
3b40: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3b50: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
3b60: 70 4d 65 6d 2d 3e 65 6e 63 29 20 29 7b 0a 20 20  pMem->enc) ){.  
3b70: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
3b80: 61 67 28 70 4d 65 6d 2c 20 4d 45 4d 5f 49 6e 74  ag(pMem, MEM_Int
3b90: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
3ba0: 20 20 20 20 70 4d 65 6d 2d 3e 72 20 3d 20 73 71      pMem->r = sq
3bb0: 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
3bc0: 75 65 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  ue(pMem);.      
3bd0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
3be0: 4d 65 6d 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a  Mem, MEM_Real);.
3bf0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
3c00: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
3c10: 28 70 4d 65 6d 29 3b 0a 20 20 20 20 7d 0a 20 20  (pMem);.    }.  
3c20: 7d 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  }.  assert( (pMe
3c30: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
3c40: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  Int|MEM_Real|MEM
3c50: 5f 4e 75 6c 6c 29 29 21 3d 30 20 29 3b 0a 20 20  _Null))!=0 );.  
3c60: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pMem->flags &= ~
3c70: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
3c80: 62 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  b);.  return SQL
3c90: 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ITE_OK;.}../*.**
3ca0: 20 44 65 6c 65 74 65 20 61 6e 79 20 70 72 65 76   Delete any prev
3cb0: 69 6f 75 73 20 76 61 6c 75 65 20 61 6e 64 20 73  ious value and s
3cc0: 65 74 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  et the value sto
3cd0: 72 65 64 20 69 6e 20 2a 70 4d 65 6d 20 74 6f 20  red in *pMem to 
3ce0: 4e 55 4c 4c 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  NULL..*/.void sq
3cf0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
3d00: 75 6c 6c 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a  ull(Mem *pMem){.
3d10: 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67    if( pMem->flag
3d20: 73 20 26 20 4d 45 4d 5f 46 72 61 6d 65 20 29 7b  s & MEM_Frame ){
3d30: 0a 20 20 20 20 56 64 62 65 46 72 61 6d 65 20 2a  .    VdbeFrame *
3d40: 70 46 72 61 6d 65 20 3d 20 70 4d 65 6d 2d 3e 75  pFrame = pMem->u
3d50: 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 46 72  .pFrame;.    pFr
3d60: 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70  ame->pParent = p
3d70: 46 72 61 6d 65 2d 3e 76 2d 3e 70 44 65 6c 46 72  Frame->v->pDelFr
3d80: 61 6d 65 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  ame;.    pFrame-
3d90: 3e 76 2d 3e 70 44 65 6c 46 72 61 6d 65 20 3d 20  >v->pDelFrame = 
3da0: 70 46 72 61 6d 65 3b 0a 20 20 7d 0a 20 20 69 66  pFrame;.  }.  if
3db0: 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20  ( pMem->flags & 
3dc0: 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20  MEM_RowSet ){.  
3dd0: 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43    sqlite3RowSetC
3de0: 6c 65 61 72 28 70 4d 65 6d 2d 3e 75 2e 70 52 6f  lear(pMem->u.pRo
3df0: 77 53 65 74 29 3b 0a 20 20 7d 0a 20 20 4d 65 6d  wSet);.  }.  Mem
3e00: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4d 65 6d  SetTypeFlag(pMem
3e10: 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70  , MEM_Null);.  p
3e20: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
3e30: 54 45 5f 4e 55 4c 4c 3b 0a 7d 0a 0a 2f 2a 0a 2a  TE_NULL;.}../*.*
3e40: 2a 20 44 65 6c 65 74 65 20 61 6e 79 20 70 72 65  * Delete any pre
3e50: 76 69 6f 75 73 20 76 61 6c 75 65 20 61 6e 64 20  vious value and 
3e60: 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 74 6f  set the value to
3e70: 20 62 65 20 61 20 42 4c 4f 42 20 6f 66 20 6c 65   be a BLOB of le
3e80: 6e 67 74 68 0a 2a 2a 20 6e 20 63 6f 6e 74 61 69  ngth.** n contai
3e90: 6e 69 6e 67 20 61 6c 6c 20 7a 65 72 6f 73 2e 0a  ning all zeros..
3ea0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
3eb0: 64 62 65 4d 65 6d 53 65 74 5a 65 72 6f 42 6c 6f  dbeMemSetZeroBlo
3ec0: 62 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 69 6e 74  b(Mem *pMem, int
3ed0: 20 6e 29 7b 0a 20 20 73 71 6c 69 74 65 33 56 64   n){.  sqlite3Vd
3ee0: 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 4d 65  beMemRelease(pMe
3ef0: 6d 29 3b 0a 20 20 70 4d 65 6d 2d 3e 66 6c 61 67  m);.  pMem->flag
3f00: 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d  s = MEM_Blob|MEM
3f10: 5f 5a 65 72 6f 3b 0a 20 20 70 4d 65 6d 2d 3e 74  _Zero;.  pMem->t
3f20: 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 42 4c 4f  ype = SQLITE_BLO
3f30: 42 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 20 3d 20 30  B;.  pMem->n = 0
3f40: 3b 0a 20 20 69 66 28 20 6e 3c 30 20 29 20 6e 20  ;.  if( n<0 ) n 
3f50: 3d 20 30 3b 0a 20 20 70 4d 65 6d 2d 3e 75 2e 6e  = 0;.  pMem->u.n
3f60: 5a 65 72 6f 20 3d 20 6e 3b 0a 20 20 70 4d 65 6d  Zero = n;.  pMem
3f70: 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
3f80: 54 46 38 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  TF8;..#ifdef SQL
3f90: 49 54 45 5f 4f 4d 49 54 5f 49 4e 43 52 42 4c 4f  ITE_OMIT_INCRBLO
3fa0: 42 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  B.  sqlite3VdbeM
3fb0: 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 6e 2c 20  emGrow(pMem, n, 
3fc0: 30 29 3b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e  0);.  if( pMem->
3fd0: 7a 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 6e  z ){.    pMem->n
3fe0: 20 3d 20 6e 3b 0a 20 20 20 20 6d 65 6d 73 65 74   = n;.    memset
3ff0: 28 70 4d 65 6d 2d 3e 7a 2c 20 30 2c 20 6e 29 3b  (pMem->z, 0, n);
4000: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f  .  }.#endif.}../
4010: 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 79 20  *.** Delete any 
4020: 70 72 65 76 69 6f 75 73 20 76 61 6c 75 65 20 61  previous value a
4030: 6e 64 20 73 65 74 20 74 68 65 20 76 61 6c 75 65  nd set the value
4040: 20 73 74 6f 72 65 64 20 69 6e 20 2a 70 4d 65 6d   stored in *pMem
4050: 20 74 6f 20 76 61 6c 2c 0a 2a 2a 20 6d 61 6e 69   to val,.** mani
4060: 66 65 73 74 20 74 79 70 65 20 49 4e 54 45 47 45  fest type INTEGE
4070: 52 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  R..*/.void sqlit
4080: 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
4090: 34 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 69 36 34  4(Mem *pMem, i64
40a0: 20 76 61 6c 29 7b 0a 20 20 73 71 6c 69 74 65 33   val){.  sqlite3
40b0: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
40c0: 4d 65 6d 29 3b 0a 20 20 70 4d 65 6d 2d 3e 75 2e  Mem);.  pMem->u.
40d0: 69 20 3d 20 76 61 6c 3b 0a 20 20 70 4d 65 6d 2d  i = val;.  pMem-
40e0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
40f0: 3b 0a 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d  ;.  pMem->type =
4100: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3b   SQLITE_INTEGER;
4110: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
4120: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
4130: 5f 50 4f 49 4e 54 0a 2f 2a 0a 2a 2a 20 44 65 6c  _POINT./*.** Del
4140: 65 74 65 20 61 6e 79 20 70 72 65 76 69 6f 75 73  ete any previous
4150: 20 76 61 6c 75 65 20 61 6e 64 20 73 65 74 20 74   value and set t
4160: 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
4170: 69 6e 20 2a 70 4d 65 6d 20 74 6f 20 76 61 6c 2c  in *pMem to val,
4180: 0a 2a 2a 20 6d 61 6e 69 66 65 73 74 20 74 79 70  .** manifest typ
4190: 65 20 52 45 41 4c 2e 0a 2a 2f 0a 76 6f 69 64 20  e REAL..*/.void 
41a0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
41b0: 74 44 6f 75 62 6c 65 28 4d 65 6d 20 2a 70 4d 65  tDouble(Mem *pMe
41c0: 6d 2c 20 64 6f 75 62 6c 65 20 76 61 6c 29 7b 0a  m, double val){.
41d0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e    if( sqlite3IsN
41e0: 61 4e 28 76 61 6c 29 20 29 7b 0a 20 20 20 20 73  aN(val) ){.    s
41f0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
4200: 4e 75 6c 6c 28 70 4d 65 6d 29 3b 0a 20 20 7d 65  Null(pMem);.  }e
4210: 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
4220: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
4230: 4d 65 6d 29 3b 0a 20 20 20 20 70 4d 65 6d 2d 3e  Mem);.    pMem->
4240: 72 20 3d 20 76 61 6c 3b 0a 20 20 20 20 70 4d 65  r = val;.    pMe
4250: 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52  m->flags = MEM_R
4260: 65 61 6c 3b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74  eal;.    pMem->t
4270: 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 46 4c 4f  ype = SQLITE_FLO
4280: 41 54 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66  AT;.  }.}.#endif
4290: 0a 0a 2f 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  ../*.** Delete a
42a0: 6e 79 20 70 72 65 76 69 6f 75 73 20 76 61 6c 75  ny previous valu
42b0: 65 20 61 6e 64 20 73 65 74 20 74 68 65 20 76 61  e and set the va
42c0: 6c 75 65 20 6f 66 20 70 4d 65 6d 20 74 6f 20 62  lue of pMem to b
42d0: 65 20 61 6e 0a 2a 2a 20 65 6d 70 74 79 20 62 6f  e an.** empty bo
42e0: 6f 6c 65 61 6e 20 69 6e 64 65 78 2e 0a 2a 2f 0a  olean index..*/.
42f0: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
4300: 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 4d 65 6d  MemSetRowSet(Mem
4310: 20 2a 70 4d 65 6d 29 7b 0a 20 20 73 71 6c 69 74   *pMem){.  sqlit
4320: 65 33 20 2a 64 62 20 3d 20 70 4d 65 6d 2d 3e 64  e3 *db = pMem->d
4330: 62 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 21  b;.  assert( db!
4340: 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
4350: 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d  (pMem->flags & M
4360: 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 3b  EM_RowSet)==0 );
4370: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
4380: 6d 52 65 6c 65 61 73 65 28 70 4d 65 6d 29 3b 0a  mRelease(pMem);.
4390: 20 20 70 4d 65 6d 2d 3e 7a 4d 61 6c 6c 6f 63 20    pMem->zMalloc 
43a0: 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
43b0: 63 52 61 77 28 64 62 2c 20 36 34 29 3b 0a 20 20  cRaw(db, 64);.  
43c0: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
43d0: 69 6c 65 64 20 29 7b 0a 20 20 20 20 70 4d 65 6d  iled ){.    pMem
43e0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
43f0: 6c 6c 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ll;.  }else{.   
4400: 20 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 7a   assert( pMem->z
4410: 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20 70 4d  Malloc );.    pM
4420: 65 6d 2d 3e 75 2e 70 52 6f 77 53 65 74 20 3d 20  em->u.pRowSet = 
4430: 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69  sqlite3RowSetIni
4440: 74 28 64 62 2c 20 70 4d 65 6d 2d 3e 7a 4d 61 6c  t(db, pMem->zMal
4450: 6c 6f 63 2c 20 0a 20 20 20 20 20 20 20 20 20 20  loc, .          
4460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
4480: 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65  ite3DbMallocSize
4490: 28 64 62 2c 20 70 4d 65 6d 2d 3e 7a 4d 61 6c 6c  (db, pMem->zMall
44a0: 6f 63 29 29 3b 0a 20 20 20 20 61 73 73 65 72 74  oc));.    assert
44b0: 28 20 70 4d 65 6d 2d 3e 75 2e 70 52 6f 77 53 65  ( pMem->u.pRowSe
44c0: 74 21 3d 30 20 29 3b 0a 20 20 20 20 70 4d 65 6d  t!=0 );.    pMem
44d0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 6f  ->flags = MEM_Ro
44e0: 77 53 65 74 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  wSet;.  }.}../*.
44f0: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
4500: 66 20 74 68 65 20 4d 65 6d 20 6f 62 6a 65 63 74  f the Mem object
4510: 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 45 58 54   contains a TEXT
4520: 20 6f 72 20 42 4c 4f 42 20 74 68 61 74 20 69 73   or BLOB that is
4530: 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 2d 20  .** too large - 
4540: 77 68 6f 73 65 20 73 69 7a 65 20 65 78 63 65 65  whose size excee
4550: 64 73 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  ds SQLITE_MAX_LE
4560: 4e 47 54 48 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  NGTH..*/.int sql
4570: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
4580: 67 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 61 73 73  g(Mem *p){.  ass
4590: 65 72 74 28 20 70 2d 3e 64 62 21 3d 30 20 29 3b  ert( p->db!=0 );
45a0: 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  .  if( p->flags 
45b0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
45c0: 6c 6f 62 29 20 29 7b 0a 20 20 20 20 69 6e 74 20  lob) ){.    int 
45d0: 6e 20 3d 20 70 2d 3e 6e 3b 0a 20 20 20 20 69 66  n = p->n;.    if
45e0: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
45f0: 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 6e  _Zero ){.      n
4600: 20 2b 3d 20 70 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a   += p->u.nZero;.
4610: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
4620: 20 6e 3e 70 2d 3e 64 62 2d 3e 61 4c 69 6d 69 74   n>p->db->aLimit
4630: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
4640: 4e 47 54 48 5d 3b 0a 20 20 7d 0a 20 20 72 65 74  NGTH];.  }.  ret
4650: 75 72 6e 20 30 3b 20 0a 7d 0a 0a 23 69 66 64 65  urn 0; .}..#ifde
4660: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
4670: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
4680: 65 20 70 72 65 70 61 72 65 73 20 61 20 6d 65 6d  e prepares a mem
4690: 6f 72 79 20 63 65 6c 6c 20 66 6f 72 20 6d 6f 64  ory cell for mod
46a0: 69 63 61 74 69 6f 6e 20 62 79 20 62 72 65 61 6b  ication by break
46b0: 69 6e 67 0a 2a 2a 20 69 74 73 20 6c 69 6e 6b 20  ing.** its link 
46c0: 74 6f 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  to a shallow cop
46d0: 79 20 61 6e 64 20 62 79 20 6d 61 72 6b 69 6e 67  y and by marking
46e0: 20 61 6e 79 20 63 75 72 72 65 6e 74 20 73 68 61   any current sha
46f0: 6c 6c 6f 77 0a 2a 2a 20 63 6f 70 69 65 73 20 6f  llow.** copies o
4700: 66 20 74 68 69 73 20 63 65 6c 6c 20 61 73 20 69  f this cell as i
4710: 6e 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  nvalid..**.** Th
4720: 69 73 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  is is used for t
4730: 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67  esting and debug
4740: 67 69 6e 67 20 6f 6e 6c 79 20 2d 20 74 6f 20 6d  ging only - to m
4750: 61 6b 65 20 73 75 72 65 20 73 68 61 6c 6c 6f 77  ake sure shallow
4760: 0a 2a 2a 20 63 6f 70 69 65 73 20 61 72 65 20 6e  .** copies are n
4770: 6f 74 20 6d 69 73 75 73 65 64 2e 0a 2a 2f 0a 76  ot misused..*/.v
4780: 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d  oid sqlite3VdbeM
4790: 65 6d 50 72 65 70 61 72 65 54 6f 43 68 61 6e 67  emPrepareToChang
47a0: 65 28 56 64 62 65 20 2a 70 56 64 62 65 2c 20 4d  e(Vdbe *pVdbe, M
47b0: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74  em *pMem){.  int
47c0: 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 20   i;.  Mem *pX;. 
47d0: 20 66 6f 72 28 69 3d 31 2c 20 70 58 3d 26 70 56   for(i=1, pX=&pV
47e0: 64 62 65 2d 3e 61 4d 65 6d 5b 31 5d 3b 20 69 3c  dbe->aMem[1]; i<
47f0: 3d 70 56 64 62 65 2d 3e 6e 4d 65 6d 3b 20 69 2b  =pVdbe->nMem; i+
4800: 2b 2c 20 70 58 2b 2b 29 7b 0a 20 20 20 20 69 66  +, pX++){.    if
4810: 28 20 70 58 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  ( pX->pScopyFrom
4820: 3d 3d 70 4d 65 6d 20 29 7b 0a 20 20 20 20 20 20  ==pMem ){.      
4830: 70 58 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  pX->flags |= MEM
4840: 5f 49 6e 76 61 6c 69 64 3b 0a 20 20 20 20 20 20  _Invalid;.      
4850: 70 58 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d  pX->pScopyFrom =
4860: 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   0;.    }.  }.  
4870: 70 4d 65 6d 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pMem->pScopyFrom
4880: 20 3d 20 30 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f   = 0;.}.#endif /
4890: 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
48a0: 2f 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66  /../*.** Size of
48b0: 20 73 74 72 75 63 74 20 4d 65 6d 20 6e 6f 74 20   struct Mem not 
48c0: 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 4d 65  including the Me
48d0: 6d 2e 7a 4d 61 6c 6c 6f 63 20 6d 65 6d 62 65 72  m.zMalloc member
48e0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  ..*/.#define MEM
48f0: 43 45 4c 4c 53 49 5a 45 20 28 73 69 7a 65 5f 74  CELLSIZE (size_t
4900: 29 28 26 28 28 28 4d 65 6d 20 2a 29 30 29 2d 3e  )(&(((Mem *)0)->
4910: 7a 4d 61 6c 6c 6f 63 29 29 0a 0a 2f 2a 0a 2a 2a  zMalloc))../*.**
4920: 20 4d 61 6b 65 20 61 6e 20 73 68 61 6c 6c 6f 77   Make an shallow
4930: 20 63 6f 70 79 20 6f 66 20 70 46 72 6f 6d 20 69   copy of pFrom i
4940: 6e 74 6f 20 70 54 6f 2e 20 20 50 72 69 6f 72 20  nto pTo.  Prior 
4950: 63 6f 6e 74 65 6e 74 73 20 6f 66 0a 2a 2a 20 70  contents of.** p
4960: 54 6f 20 61 72 65 20 66 72 65 65 64 2e 20 20 54  To are freed.  T
4970: 68 65 20 70 46 72 6f 6d 2d 3e 7a 20 66 69 65 6c  he pFrom->z fiel
4980: 64 20 69 73 20 6e 6f 74 20 64 75 70 6c 69 63 61  d is not duplica
4990: 74 65 64 2e 20 20 49 66 0a 2a 2a 20 70 46 72 6f  ted.  If.** pFro
49a0: 6d 2d 3e 7a 20 69 73 20 75 73 65 64 2c 20 74 68  m->z is used, th
49b0: 65 6e 20 70 54 6f 2d 3e 7a 20 70 6f 69 6e 74 73  en pTo->z points
49c0: 20 74 6f 20 74 68 65 20 73 61 6d 65 20 74 68 69   to the same thi
49d0: 6e 67 20 61 73 20 70 46 72 6f 6d 2d 3e 7a 0a 2a  ng as pFrom->z.*
49e0: 2a 20 61 6e 64 20 66 6c 61 67 73 20 67 65 74 73  * and flags gets
49f0: 20 73 72 63 54 79 70 65 20 28 65 69 74 68 65 72   srcType (either
4a00: 20 4d 45 4d 5f 45 70 68 65 6d 20 6f 72 20 4d 45   MEM_Ephem or ME
4a10: 4d 5f 53 74 61 74 69 63 29 2e 0a 2a 2f 0a 76 6f  M_Static)..*/.vo
4a20: 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  id sqlite3VdbeMe
4a30: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 4d 65 6d  mShallowCopy(Mem
4a40: 20 2a 70 54 6f 2c 20 63 6f 6e 73 74 20 4d 65 6d   *pTo, const Mem
4a50: 20 2a 70 46 72 6f 6d 2c 20 69 6e 74 20 73 72 63   *pFrom, int src
4a60: 54 79 70 65 29 7b 0a 20 20 61 73 73 65 72 74 28  Type){.  assert(
4a70: 20 28 70 46 72 6f 6d 2d 3e 66 6c 61 67 73 20 26   (pFrom->flags &
4a80: 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
4a90: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
4aa0: 4d 65 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e  MemReleaseExtern
4ab0: 61 6c 28 70 54 6f 29 3b 0a 20 20 6d 65 6d 63 70  al(pTo);.  memcp
4ac0: 79 28 70 54 6f 2c 20 70 46 72 6f 6d 2c 20 4d 45  y(pTo, pFrom, ME
4ad0: 4d 43 45 4c 4c 53 49 5a 45 29 3b 0a 20 20 70 54  MCELLSIZE);.  pT
4ae0: 6f 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69  o->xDel = 0;.  i
4af0: 66 28 20 28 70 46 72 6f 6d 2d 3e 66 6c 61 67 73  f( (pFrom->flags
4b00: 26 4d 45 4d 5f 53 74 61 74 69 63 29 3d 3d 30 20  &MEM_Static)==0 
4b10: 29 7b 0a 20 20 20 20 70 54 6f 2d 3e 66 6c 61 67  ){.    pTo->flag
4b20: 73 20 26 3d 20 7e 28 4d 45 4d 5f 44 79 6e 7c 4d  s &= ~(MEM_Dyn|M
4b30: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70  EM_Static|MEM_Ep
4b40: 68 65 6d 29 3b 0a 20 20 20 20 61 73 73 65 72 74  hem);.    assert
4b50: 28 20 73 72 63 54 79 70 65 3d 3d 4d 45 4d 5f 45  ( srcType==MEM_E
4b60: 70 68 65 6d 20 7c 7c 20 73 72 63 54 79 70 65 3d  phem || srcType=
4b70: 3d 4d 45 4d 5f 53 74 61 74 69 63 20 29 3b 0a 20  =MEM_Static );. 
4b80: 20 20 20 70 54 6f 2d 3e 66 6c 61 67 73 20 7c 3d     pTo->flags |=
4b90: 20 73 72 63 54 79 70 65 3b 0a 20 20 7d 0a 7d 0a   srcType;.  }.}.
4ba0: 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 66 75  ./*.** Make a fu
4bb0: 6c 6c 20 63 6f 70 79 20 6f 66 20 70 46 72 6f 6d  ll copy of pFrom
4bc0: 20 69 6e 74 6f 20 70 54 6f 2e 20 20 50 72 69 6f   into pTo.  Prio
4bd0: 72 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 70 54  r contents of pT
4be0: 6f 20 61 72 65 0a 2a 2a 20 66 72 65 65 64 20 62  o are.** freed b
4bf0: 65 66 6f 72 65 20 74 68 65 20 63 6f 70 79 20 69  efore the copy i
4c00: 73 20 6d 61 64 65 2e 0a 2a 2f 0a 69 6e 74 20 73  s made..*/.int s
4c10: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70  qlite3VdbeMemCop
4c20: 79 28 4d 65 6d 20 2a 70 54 6f 2c 20 63 6f 6e 73  y(Mem *pTo, cons
4c30: 74 20 4d 65 6d 20 2a 70 46 72 6f 6d 29 7b 0a 20  t Mem *pFrom){. 
4c40: 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45   int rc = SQLITE
4c50: 5f 4f 4b 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  _OK;..  assert( 
4c60: 28 70 46 72 6f 6d 2d 3e 66 6c 61 67 73 20 26 20  (pFrom->flags & 
4c70: 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
4c80: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
4c90: 65 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61  emReleaseExterna
4ca0: 6c 28 70 54 6f 29 3b 0a 20 20 6d 65 6d 63 70 79  l(pTo);.  memcpy
4cb0: 28 70 54 6f 2c 20 70 46 72 6f 6d 2c 20 4d 45 4d  (pTo, pFrom, MEM
4cc0: 43 45 4c 4c 53 49 5a 45 29 3b 0a 20 20 70 54 6f  CELLSIZE);.  pTo
4cd0: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f  ->flags &= ~MEM_
4ce0: 44 79 6e 3b 0a 0a 20 20 69 66 28 20 70 54 6f 2d  Dyn;..  if( pTo-
4cf0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
4d00: 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20  MEM_Blob) ){.   
4d10: 20 69 66 28 20 30 3d 3d 28 70 46 72 6f 6d 2d 3e   if( 0==(pFrom->
4d20: 66 6c 61 67 73 26 4d 45 4d 5f 53 74 61 74 69 63  flags&MEM_Static
4d30: 29 20 29 7b 0a 20 20 20 20 20 20 70 54 6f 2d 3e  ) ){.      pTo->
4d40: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 45 70 68  flags |= MEM_Eph
4d50: 65 6d 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  em;.      rc = s
4d60: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b  qlite3VdbeMemMak
4d70: 65 57 72 69 74 65 61 62 6c 65 28 70 54 6f 29 3b  eWriteable(pTo);
4d80: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 72 65  .    }.  }..  re
4d90: 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a  turn rc;.}../*.*
4da0: 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 63  * Transfer the c
4db0: 6f 6e 74 65 6e 74 73 20 6f 66 20 70 46 72 6f 6d  ontents of pFrom
4dc0: 20 74 6f 20 70 54 6f 2e 20 41 6e 79 20 65 78 69   to pTo. Any exi
4dd0: 73 74 69 6e 67 20 76 61 6c 75 65 20 69 6e 20 70  sting value in p
4de0: 54 6f 20 69 73 0a 2a 2a 20 66 72 65 65 64 2e 20  To is.** freed. 
4df0: 49 66 20 70 46 72 6f 6d 20 63 6f 6e 74 61 69 6e  If pFrom contain
4e00: 73 20 65 70 68 65 6d 65 72 61 6c 20 64 61 74 61  s ephemeral data
4e10: 2c 20 61 20 63 6f 70 79 20 69 73 20 6d 61 64 65  , a copy is made
4e20: 2e 0a 2a 2a 0a 2a 2a 20 70 46 72 6f 6d 20 63 6f  ..**.** pFrom co
4e30: 6e 74 61 69 6e 73 20 61 6e 20 53 51 4c 20 4e 55  ntains an SQL NU
4e40: 4c 4c 20 77 68 65 6e 20 74 68 69 73 20 72 6f 75  LL when this rou
4e50: 74 69 6e 65 20 72 65 74 75 72 6e 73 2e 0a 2a 2f  tine returns..*/
4e60: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
4e70: 65 4d 65 6d 4d 6f 76 65 28 4d 65 6d 20 2a 70 54  eMemMove(Mem *pT
4e80: 6f 2c 20 4d 65 6d 20 2a 70 46 72 6f 6d 29 7b 0a  o, Mem *pFrom){.
4e90: 20 20 61 73 73 65 72 74 28 20 70 46 72 6f 6d 2d    assert( pFrom-
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 46 72  3_mutex_held(pFr
4ec0: 6f 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29  om->db->mutex) )
4ed0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 54 6f 2d  ;.  assert( pTo-
4ee0: 3e 64 62 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65  >db==0 || sqlite
4ef0: 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 54 6f  3_mutex_held(pTo
4f00: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a  ->db->mutex) );.
4f10: 20 20 61 73 73 65 72 74 28 20 70 46 72 6f 6d 2d    assert( pFrom-
4f20: 3e 64 62 3d 3d 30 20 7c 7c 20 70 54 6f 2d 3e 64  >db==0 || pTo->d
4f30: 62 3d 3d 30 20 7c 7c 20 70 46 72 6f 6d 2d 3e 64  b==0 || pFrom->d
4f40: 62 3d 3d 70 54 6f 2d 3e 64 62 20 29 3b 0a 0a 20  b==pTo->db );.. 
4f50: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
4f60: 65 6c 65 61 73 65 28 70 54 6f 29 3b 0a 20 20 6d  elease(pTo);.  m
4f70: 65 6d 63 70 79 28 70 54 6f 2c 20 70 46 72 6f 6d  emcpy(pTo, pFrom
4f80: 2c 20 73 69 7a 65 6f 66 28 4d 65 6d 29 29 3b 0a  , sizeof(Mem));.
4f90: 20 20 70 46 72 6f 6d 2d 3e 66 6c 61 67 73 20 3d    pFrom->flags =
4fa0: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 70 46 72   MEM_Null;.  pFr
4fb0: 6f 6d 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20  om->xDel = 0;.  
4fc0: 70 46 72 6f 6d 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d  pFrom->zMalloc =
4fd0: 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 61   0;.}../*.** Cha
4fe0: 6e 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  nge the value of
4ff0: 20 61 20 4d 65 6d 20 74 6f 20 62 65 20 61 20 73   a Mem to be a s
5000: 74 72 69 6e 67 20 6f 72 20 61 20 42 4c 4f 42 2e  tring or a BLOB.
5010: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72  .**.** The memor
5020: 79 20 6d 61 6e 61 67 65 6d 65 6e 74 20 73 74 72  y management str
5030: 61 74 65 67 79 20 64 65 70 65 6e 64 73 20 6f 6e  ategy depends on
5040: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
5050: 65 20 78 44 65 6c 0a 2a 2a 20 70 61 72 61 6d 65  e xDel.** parame
5060: 74 65 72 2e 20 49 66 20 74 68 65 20 76 61 6c 75  ter. If the valu
5070: 65 20 70 61 73 73 65 64 20 69 73 20 53 51 4c 49  e passed is SQLI
5080: 54 45 5f 54 52 41 4e 53 49 45 4e 54 2c 20 74 68  TE_TRANSIENT, th
5090: 65 6e 20 74 68 65 20 0a 2a 2a 20 73 74 72 69 6e  en the .** strin
50a0: 67 20 69 73 20 63 6f 70 69 65 64 20 69 6e 74 6f  g is copied into
50b0: 20 61 20 28 70 6f 73 73 69 62 6c 79 20 65 78 69   a (possibly exi
50c0: 73 74 69 6e 67 29 20 62 75 66 66 65 72 20 6d 61  sting) buffer ma
50d0: 6e 61 67 65 64 20 62 79 20 74 68 65 20 0a 2a 2a  naged by the .**
50e0: 20 4d 65 6d 20 73 74 72 75 63 74 75 72 65 2e 20   Mem structure. 
50f0: 4f 74 68 65 72 77 69 73 65 2c 20 61 6e 79 20 65  Otherwise, any e
5100: 78 69 73 74 69 6e 67 20 62 75 66 66 65 72 20 69  xisting buffer i
5110: 73 20 66 72 65 65 64 20 61 6e 64 20 74 68 65 0a  s freed and the.
5120: 2a 2a 20 70 6f 69 6e 74 65 72 20 63 6f 70 69 65  ** pointer copie
5130: 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
5140: 73 74 72 69 6e 67 20 69 73 20 74 6f 6f 20 6c 61  string is too la
5150: 72 67 65 20 28 69 66 20 69 74 20 65 78 63 65 65  rge (if it excee
5160: 64 73 20 74 68 65 20 53 51 4c 49 54 45 5f 4c 49  ds the SQLITE_LI
5170: 4d 49 54 5f 4c 45 4e 47 54 48 0a 2a 2a 20 73 69  MIT_LENGTH.** si
5180: 7a 65 20 6c 69 6d 69 74 29 20 74 68 65 6e 20 6e  ze limit) then n
5190: 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  o memory allocat
51a0: 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 49 66 20  ion occurs.  If 
51b0: 74 68 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62  the string can b
51c0: 65 0a 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68  e.** stored with
51d0: 6f 75 74 20 61 6c 6c 6f 63 61 74 69 6e 67 20 6d  out allocating m
51e0: 65 6d 6f 72 79 2c 20 74 68 65 6e 20 69 74 20 69  emory, then it i
51f0: 73 2e 20 20 49 66 20 61 20 6d 65 6d 6f 72 79 20  s.  If a memory 
5200: 61 6c 6c 6f 63 61 74 69 6f 6e 0a 2a 2a 20 69 73  allocation.** is
5210: 20 72 65 71 75 69 72 65 64 20 74 6f 20 73 74 6f   required to sto
5220: 72 65 20 74 68 65 20 73 74 72 69 6e 67 2c 20 74  re the string, t
5230: 68 65 6e 20 76 61 6c 75 65 20 6f 66 20 70 4d 65  hen value of pMe
5240: 6d 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 20  m is unchanged. 
5250: 20 49 6e 0a 2a 2a 20 65 69 74 68 65 72 20 63 61   In.** either ca
5260: 73 65 2c 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49  se, SQLITE_TOOBI
5270: 47 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a  G is returned..*
5280: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  /.int sqlite3Vdb
5290: 65 4d 65 6d 53 65 74 53 74 72 28 0a 20 20 4d 65  eMemSetStr(.  Me
52a0: 6d 20 2a 70 4d 65 6d 2c 20 20 20 20 20 20 20 20  m *pMem,        
52b0: 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c    /* Memory cell
52c0: 20 74 6f 20 73 65 74 20 74 6f 20 73 74 72 69 6e   to set to strin
52d0: 67 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63 6f 6e  g value */.  con
52e0: 73 74 20 63 68 61 72 20 2a 7a 2c 20 20 20 20 20  st char *z,     
52f0: 20 2f 2a 20 53 74 72 69 6e 67 20 70 6f 69 6e 74   /* String point
5300: 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 2c 20 20  er */.  int n,  
5310: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
5320: 79 74 65 73 20 69 6e 20 73 74 72 69 6e 67 2c 20  ytes in string, 
5330: 6f 72 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20  or negative */. 
5340: 20 75 38 20 65 6e 63 2c 20 20 20 20 20 20 20 20   u8 enc,        
5350: 20 20 20 20 20 2f 2a 20 45 6e 63 6f 64 69 6e 67       /* Encoding
5360: 20 6f 66 20 7a 2e 20 20 30 20 66 6f 72 20 42 4c   of z.  0 for BL
5370: 4f 42 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  OBs */.  void (*
5380: 78 44 65 6c 29 28 76 6f 69 64 2a 29 20 2f 2a 20  xDel)(void*) /* 
5390: 44 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  Destructor funct
53a0: 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  ion */.){.  int 
53b0: 6e 42 79 74 65 20 3d 20 6e 3b 20 20 20 20 20 20  nByte = n;      
53c0: 2f 2a 20 4e 65 77 20 76 61 6c 75 65 20 66 6f 72  /* New value for
53d0: 20 70 4d 65 6d 2d 3e 6e 20 2a 2f 0a 20 20 69 6e   pMem->n */.  in
53e0: 74 20 69 4c 69 6d 69 74 3b 20 20 20 20 20 20 20  t iLimit;       
53f0: 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c    /* Maximum all
5400: 6f 77 65 64 20 73 74 72 69 6e 67 20 6f 72 20 62  owed string or b
5410: 6c 6f 62 20 73 69 7a 65 20 2a 2f 0a 20 20 75 31  lob size */.  u1
5420: 36 20 66 6c 61 67 73 20 3d 20 30 3b 20 20 20 20  6 flags = 0;    
5430: 20 20 2f 2a 20 4e 65 77 20 76 61 6c 75 65 20 66    /* New value f
5440: 6f 72 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 2a  or pMem->flags *
5450: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4d 65  /..  assert( pMe
5460: 6d 2d 3e 64 62 3d 3d 30 20 7c 7c 20 73 71 6c 69  m->db==0 || sqli
5470: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70  te3_mutex_held(p
5480: 4d 65 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20  Mem->db->mutex) 
5490: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d  );.  assert( (pM
54a0: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  em->flags & MEM_
54b0: 52 6f 77 53 65 74 29 3d 3d 30 20 29 3b 0a 0a 20  RowSet)==0 );.. 
54c0: 20 2f 2a 20 49 66 20 7a 20 69 73 20 61 20 4e 55   /* If z is a NU
54d0: 4c 4c 20 70 6f 69 6e 74 65 72 2c 20 73 65 74 20  LL pointer, set 
54e0: 70 4d 65 6d 20 74 6f 20 63 6f 6e 74 61 69 6e 20  pMem to contain 
54f0: 61 6e 20 53 51 4c 20 4e 55 4c 4c 2e 20 2a 2f 0a  an SQL NULL. */.
5500: 20 20 69 66 28 20 21 7a 20 29 7b 0a 20 20 20 20    if( !z ){.    
5510: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
5520: 74 4e 75 6c 6c 28 70 4d 65 6d 29 3b 0a 20 20 20  tNull(pMem);.   
5530: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
5540: 4b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4d  K;.  }..  if( pM
5550: 65 6d 2d 3e 64 62 20 29 7b 0a 20 20 20 20 69 4c  em->db ){.    iL
5560: 69 6d 69 74 20 3d 20 70 4d 65 6d 2d 3e 64 62 2d  imit = pMem->db-
5570: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
5580: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 3b 0a 20 20  IMIT_LENGTH];.  
5590: 7d 65 6c 73 65 7b 0a 20 20 20 20 69 4c 69 6d 69  }else{.    iLimi
55a0: 74 20 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c  t = SQLITE_MAX_L
55b0: 45 4e 47 54 48 3b 0a 20 20 7d 0a 20 20 66 6c 61  ENGTH;.  }.  fla
55c0: 67 73 20 3d 20 28 65 6e 63 3d 3d 30 3f 4d 45 4d  gs = (enc==0?MEM
55d0: 5f 42 6c 6f 62 3a 4d 45 4d 5f 53 74 72 29 3b 0a  _Blob:MEM_Str);.
55e0: 20 20 69 66 28 20 6e 42 79 74 65 3c 30 20 29 7b    if( nByte<0 ){
55f0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 65 6e 63  .    assert( enc
5600: 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 65  !=0 );.    if( e
5610: 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20  nc==SQLITE_UTF8 
5620: 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 6e 42 79  ){.      for(nBy
5630: 74 65 3d 30 3b 20 6e 42 79 74 65 3c 3d 69 4c 69  te=0; nByte<=iLi
5640: 6d 69 74 20 26 26 20 7a 5b 6e 42 79 74 65 5d 3b  mit && z[nByte];
5650: 20 6e 42 79 74 65 2b 2b 29 7b 7d 0a 20 20 20 20   nByte++){}.    
5660: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 66 6f 72  }else{.      for
5670: 28 6e 42 79 74 65 3d 30 3b 20 6e 42 79 74 65 3c  (nByte=0; nByte<
5680: 3d 69 4c 69 6d 69 74 20 26 26 20 28 7a 5b 6e 42  =iLimit && (z[nB
5690: 79 74 65 5d 20 7c 20 7a 5b 6e 42 79 74 65 2b 31  yte] | z[nByte+1
56a0: 5d 29 3b 20 6e 42 79 74 65 2b 3d 32 29 7b 7d 0a  ]); nByte+=2){}.
56b0: 20 20 20 20 7d 0a 20 20 20 20 66 6c 61 67 73 20      }.    flags 
56c0: 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d  |= MEM_Term;.  }
56d0: 0a 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  ..  /* The follo
56e0: 77 69 6e 67 20 62 6c 6f 63 6b 20 73 65 74 73 20  wing block sets 
56f0: 74 68 65 20 6e 65 77 20 76 61 6c 75 65 73 20 6f  the new values o
5700: 66 20 4d 65 6d 2e 7a 20 61 6e 64 20 4d 65 6d 2e  f Mem.z and Mem.
5710: 78 44 65 6c 2e 20 49 74 0a 20 20 2a 2a 20 61 6c  xDel. It.  ** al
5720: 73 6f 20 73 65 74 73 20 61 20 66 6c 61 67 20 69  so sets a flag i
5730: 6e 20 6c 6f 63 61 6c 20 76 61 72 69 61 62 6c 65  n local variable
5740: 20 22 66 6c 61 67 73 22 20 74 6f 20 69 6e 64 69   "flags" to indi
5750: 63 61 74 65 20 74 68 65 20 6d 65 6d 6f 72 79 0a  cate the memory.
5760: 20 20 2a 2a 20 6d 61 6e 61 67 65 6d 65 6e 74 20    ** management 
5770: 28 6f 6e 65 20 6f 66 20 4d 45 4d 5f 44 79 6e 20  (one of MEM_Dyn 
5780: 6f 72 20 4d 45 4d 5f 53 74 61 74 69 63 29 2e 0a  or MEM_Static)..
5790: 20 20 2a 2f 0a 20 20 69 66 28 20 78 44 65 6c 3d    */.  if( xDel=
57a0: 3d 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e  =SQLITE_TRANSIEN
57b0: 54 20 29 7b 0a 20 20 20 20 69 6e 74 20 6e 41 6c  T ){.    int nAl
57c0: 6c 6f 63 20 3d 20 6e 42 79 74 65 3b 0a 20 20 20  loc = nByte;.   
57d0: 20 69 66 28 20 66 6c 61 67 73 26 4d 45 4d 5f 54   if( flags&MEM_T
57e0: 65 72 6d 20 29 7b 0a 20 20 20 20 20 20 6e 41 6c  erm ){.      nAl
57f0: 6c 6f 63 20 2b 3d 20 28 65 6e 63 3d 3d 53 51 4c  loc += (enc==SQL
5800: 49 54 45 5f 55 54 46 38 3f 31 3a 32 29 3b 0a 20  ITE_UTF8?1:2);. 
5810: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 42 79     }.    if( nBy
5820: 74 65 3e 69 4c 69 6d 69 74 20 29 7b 0a 20 20 20  te>iLimit ){.   
5830: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
5840: 5f 54 4f 4f 42 49 47 3b 0a 20 20 20 20 7d 0a 20  _TOOBIG;.    }. 
5850: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
5860: 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20  beMemGrow(pMem, 
5870: 6e 41 6c 6c 6f 63 2c 20 30 29 20 29 7b 0a 20 20  nAlloc, 0) ){.  
5880: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
5890: 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 0a 20  E_NOMEM;.    }. 
58a0: 20 20 20 6d 65 6d 63 70 79 28 70 4d 65 6d 2d 3e     memcpy(pMem->
58b0: 7a 2c 20 7a 2c 20 6e 41 6c 6c 6f 63 29 3b 0a 20  z, z, nAlloc);. 
58c0: 20 7d 65 6c 73 65 20 69 66 28 20 78 44 65 6c 3d   }else if( xDel=
58d0: 3d 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20  =SQLITE_DYNAMIC 
58e0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
58f0: 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 4d 65  beMemRelease(pMe
5900: 6d 29 3b 0a 20 20 20 20 70 4d 65 6d 2d 3e 7a 4d  m);.    pMem->zM
5910: 61 6c 6c 6f 63 20 3d 20 70 4d 65 6d 2d 3e 7a 20  alloc = pMem->z 
5920: 3d 20 28 63 68 61 72 20 2a 29 7a 3b 0a 20 20 20  = (char *)z;.   
5930: 20 70 4d 65 6d 2d 3e 78 44 65 6c 20 3d 20 30 3b   pMem->xDel = 0;
5940: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
5950: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
5960: 61 73 65 28 70 4d 65 6d 29 3b 0a 20 20 20 20 70  ase(pMem);.    p
5970: 4d 65 6d 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a  Mem->z = (char *
5980: 29 7a 3b 0a 20 20 20 20 70 4d 65 6d 2d 3e 78 44  )z;.    pMem->xD
5990: 65 6c 20 3d 20 78 44 65 6c 3b 0a 20 20 20 20 66  el = xDel;.    f
59a0: 6c 61 67 73 20 7c 3d 20 28 28 78 44 65 6c 3d 3d  lags |= ((xDel==
59b0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3f 4d  SQLITE_STATIC)?M
59c0: 45 4d 5f 53 74 61 74 69 63 3a 4d 45 4d 5f 44 79  EM_Static:MEM_Dy
59d0: 6e 29 3b 0a 20 20 7d 0a 0a 20 20 70 4d 65 6d 2d  n);.  }..  pMem-
59e0: 3e 6e 20 3d 20 6e 42 79 74 65 3b 0a 20 20 70 4d  >n = nByte;.  pM
59f0: 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67  em->flags = flag
5a00: 73 3b 0a 20 20 70 4d 65 6d 2d 3e 65 6e 63 20 3d  s;.  pMem->enc =
5a10: 20 28 65 6e 63 3d 3d 30 20 3f 20 53 51 4c 49 54   (enc==0 ? SQLIT
5a20: 45 5f 55 54 46 38 20 3a 20 65 6e 63 29 3b 0a 20  E_UTF8 : enc);. 
5a30: 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 28 65   pMem->type = (e
5a40: 6e 63 3d 3d 30 20 3f 20 53 51 4c 49 54 45 5f 42  nc==0 ? SQLITE_B
5a50: 4c 4f 42 20 3a 20 53 51 4c 49 54 45 5f 54 45 58  LOB : SQLITE_TEX
5a60: 54 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  T);..#ifndef SQL
5a70: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
5a80: 20 69 66 28 20 70 4d 65 6d 2d 3e 65 6e 63 21 3d   if( pMem->enc!=
5a90: 53 51 4c 49 54 45 5f 55 54 46 38 20 26 26 20 73  SQLITE_UTF8 && s
5aa0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 48 61 6e  qlite3VdbeMemHan
5ab0: 64 6c 65 42 6f 6d 28 70 4d 65 6d 29 20 29 7b 0a  dleBom(pMem) ){.
5ac0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
5ad0: 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 23 65 6e  E_NOMEM;.  }.#en
5ae0: 64 69 66 0a 0a 20 20 69 66 28 20 6e 42 79 74 65  dif..  if( nByte
5af0: 3e 69 4c 69 6d 69 74 20 29 7b 0a 20 20 20 20 72  >iLimit ){.    r
5b00: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 54 4f 4f  eturn SQLITE_TOO
5b10: 42 49 47 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75  BIG;.  }..  retu
5b20: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
5b30: 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  ./*.** Compare t
5b40: 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 74 61 69  he values contai
5b50: 6e 65 64 20 62 79 20 74 68 65 20 74 77 6f 20 6d  ned by the two m
5b60: 65 6d 6f 72 79 20 63 65 6c 6c 73 2c 20 72 65 74  emory cells, ret
5b70: 75 72 6e 69 6e 67 0a 2a 2a 20 6e 65 67 61 74 69  urning.** negati
5b80: 76 65 2c 20 7a 65 72 6f 20 6f 72 20 70 6f 73 69  ve, zero or posi
5b90: 74 69 76 65 20 69 66 20 70 4d 65 6d 31 20 69 73  tive if pMem1 is
5ba0: 20 6c 65 73 73 20 74 68 61 6e 2c 20 65 71 75 61   less than, equa
5bb0: 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72  l to, or greater
5bc0: 0a 2a 2a 20 74 68 61 6e 20 70 4d 65 6d 32 2e 20  .** than pMem2. 
5bd0: 53 6f 72 74 69 6e 67 20 6f 72 64 65 72 20 69 73  Sorting order is
5be0: 20 4e 55 4c 4c 27 73 20 66 69 72 73 74 2c 20 66   NULL's first, f
5bf0: 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 75 6d 62 65  ollowed by numbe
5c00: 72 73 20 28 69 6e 74 65 67 65 72 73 0a 2a 2a 20  rs (integers.** 
5c10: 61 6e 64 20 72 65 61 6c 73 29 20 73 6f 72 74 65  and reals) sorte
5c20: 64 20 6e 75 6d 65 72 69 63 61 6c 6c 79 2c 20 66  d numerically, f
5c30: 6f 6c 6c 6f 77 65 64 20 62 79 20 74 65 78 74 20  ollowed by text 
5c40: 6f 72 64 65 72 65 64 20 62 79 20 74 68 65 20 63  ordered by the c
5c50: 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75  ollating.** sequ
5c60: 65 6e 63 65 20 70 43 6f 6c 6c 20 61 6e 64 20 66  ence pColl and f
5c70: 69 6e 61 6c 6c 79 20 62 6c 6f 62 27 73 20 6f 72  inally blob's or
5c80: 64 65 72 65 64 20 62 79 20 6d 65 6d 63 6d 70 28  dered by memcmp(
5c90: 29 2e 0a 2a 2a 0a 2a 2a 20 54 77 6f 20 4e 55 4c  )..**.** Two NUL
5ca0: 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e  L values are con
5cb0: 73 69 64 65 72 65 64 20 65 71 75 61 6c 20 62 79  sidered equal by
5cc0: 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 0a   this function..
5cd0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  */.int sqlite3Me
5ce0: 6d 43 6f 6d 70 61 72 65 28 63 6f 6e 73 74 20 4d  mCompare(const M
5cf0: 65 6d 20 2a 70 4d 65 6d 31 2c 20 63 6f 6e 73 74  em *pMem1, const
5d00: 20 4d 65 6d 20 2a 70 4d 65 6d 32 2c 20 63 6f 6e   Mem *pMem2, con
5d10: 73 74 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c  st CollSeq *pCol
5d20: 6c 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  l){.  int rc;.  
5d30: 69 6e 74 20 66 31 2c 20 66 32 3b 0a 20 20 69 6e  int f1, f2;.  in
5d40: 74 20 63 6f 6d 62 69 6e 65 64 5f 66 6c 61 67 73  t combined_flags
5d50: 3b 0a 0a 20 20 66 31 20 3d 20 70 4d 65 6d 31 2d  ;..  f1 = pMem1-
5d60: 3e 66 6c 61 67 73 3b 0a 20 20 66 32 20 3d 20 70  >flags;.  f2 = p
5d70: 4d 65 6d 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 63  Mem2->flags;.  c
5d80: 6f 6d 62 69 6e 65 64 5f 66 6c 61 67 73 20 3d 20  ombined_flags = 
5d90: 66 31 7c 66 32 3b 0a 20 20 61 73 73 65 72 74 28  f1|f2;.  assert(
5da0: 20 28 63 6f 6d 62 69 6e 65 64 5f 66 6c 61 67 73   (combined_flags
5db0: 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
5dc0: 30 20 29 3b 0a 20 0a 20 20 2f 2a 20 49 66 20 6f  0 );. .  /* If o
5dd0: 6e 65 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c  ne value is NULL
5de0: 2c 20 69 74 20 69 73 20 6c 65 73 73 20 74 68 61  , it is less tha
5df0: 6e 20 74 68 65 20 6f 74 68 65 72 2e 20 49 66 20  n the other. If 
5e00: 62 6f 74 68 20 76 61 6c 75 65 73 0a 20 20 2a 2a  both values.  **
5e10: 20 61 72 65 20 4e 55 4c 4c 2c 20 72 65 74 75 72   are NULL, retur
5e20: 6e 20 30 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  n 0..  */.  if( 
5e30: 63 6f 6d 62 69 6e 65 64 5f 66 6c 61 67 73 26 4d  combined_flags&M
5e40: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 72  EM_Null ){.    r
5e50: 65 74 75 72 6e 20 28 66 32 26 4d 45 4d 5f 4e 75  eturn (f2&MEM_Nu
5e60: 6c 6c 29 20 2d 20 28 66 31 26 4d 45 4d 5f 4e 75  ll) - (f1&MEM_Nu
5e70: 6c 6c 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  ll);.  }..  /* I
5e80: 66 20 6f 6e 65 20 76 61 6c 75 65 20 69 73 20 61  f one value is a
5e90: 20 6e 75 6d 62 65 72 20 61 6e 64 20 74 68 65 20   number and the 
5ea0: 6f 74 68 65 72 20 69 73 20 6e 6f 74 2c 20 74 68  other is not, th
5eb0: 65 20 6e 75 6d 62 65 72 20 69 73 20 6c 65 73 73  e number is less
5ec0: 2e 0a 20 20 2a 2a 20 49 66 20 62 6f 74 68 20 61  ..  ** If both a
5ed0: 72 65 20 6e 75 6d 62 65 72 73 2c 20 63 6f 6d 70  re numbers, comp
5ee0: 61 72 65 20 61 73 20 72 65 61 6c 73 20 69 66 20  are as reals if 
5ef0: 6f 6e 65 20 69 73 20 61 20 72 65 61 6c 2c 20 6f  one is a real, o
5f00: 72 20 61 73 20 69 6e 74 65 67 65 72 73 0a 20 20  r as integers.  
5f10: 2a 2a 20 69 66 20 62 6f 74 68 20 76 61 6c 75 65  ** if both value
5f20: 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a  s are integers..
5f30: 20 20 2a 2f 0a 20 20 69 66 28 20 63 6f 6d 62 69    */.  if( combi
5f40: 6e 65 64 5f 66 6c 61 67 73 26 28 4d 45 4d 5f 49  ned_flags&(MEM_I
5f50: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20 29 7b 0a  nt|MEM_Real) ){.
5f60: 20 20 20 20 69 66 28 20 21 28 66 31 26 28 4d 45      if( !(f1&(ME
5f70: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29  M_Int|MEM_Real))
5f80: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
5f90: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66   1;.    }.    if
5fa0: 28 20 21 28 66 32 26 28 4d 45 4d 5f 49 6e 74 7c  ( !(f2&(MEM_Int|
5fb0: 4d 45 4d 5f 52 65 61 6c 29 29 20 29 7b 0a 20 20  MEM_Real)) ){.  
5fc0: 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0a 20      return -1;. 
5fd0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 66 31     }.    if( (f1
5fe0: 20 26 20 66 32 20 26 20 4d 45 4d 5f 49 6e 74 29   & f2 & MEM_Int)
5ff0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 6f 75  ==0 ){.      dou
6000: 62 6c 65 20 72 31 2c 20 72 32 3b 0a 20 20 20 20  ble r1, r2;.    
6010: 20 20 69 66 28 20 28 66 31 26 4d 45 4d 5f 52 65    if( (f1&MEM_Re
6020: 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  al)==0 ){.      
6030: 20 20 72 31 20 3d 20 28 64 6f 75 62 6c 65 29 70    r1 = (double)p
6040: 4d 65 6d 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 20  Mem1->u.i;.     
6050: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
6060: 72 31 20 3d 20 70 4d 65 6d 31 2d 3e 72 3b 0a 20  r1 = pMem1->r;. 
6070: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
6080: 20 28 66 32 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d   (f2&MEM_Real)==
6090: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 32 20  0 ){.        r2 
60a0: 3d 20 28 64 6f 75 62 6c 65 29 70 4d 65 6d 32 2d  = (double)pMem2-
60b0: 3e 75 2e 69 3b 0a 20 20 20 20 20 20 7d 65 6c 73  >u.i;.      }els
60c0: 65 7b 0a 20 20 20 20 20 20 20 20 72 32 20 3d 20  e{.        r2 = 
60d0: 70 4d 65 6d 32 2d 3e 72 3b 0a 20 20 20 20 20 20  pMem2->r;.      
60e0: 7d 0a 20 20 20 20 20 20 69 66 28 20 72 31 3c 72  }.      if( r1<r
60f0: 32 20 29 20 72 65 74 75 72 6e 20 2d 31 3b 0a 20  2 ) return -1;. 
6100: 20 20 20 20 20 69 66 28 20 72 31 3e 72 32 20 29       if( r1>r2 )
6110: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 20   return 1;.     
6120: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d   return 0;.    }
6130: 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
6140: 72 74 28 20 66 31 26 4d 45 4d 5f 49 6e 74 20 29  rt( f1&MEM_Int )
6150: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
6160: 66 32 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  f2&MEM_Int );.  
6170: 20 20 20 20 69 66 28 20 70 4d 65 6d 31 2d 3e 75      if( pMem1->u
6180: 2e 69 20 3c 20 70 4d 65 6d 32 2d 3e 75 2e 69 20  .i < pMem2->u.i 
6190: 29 20 72 65 74 75 72 6e 20 2d 31 3b 0a 20 20 20  ) return -1;.   
61a0: 20 20 20 69 66 28 20 70 4d 65 6d 31 2d 3e 75 2e     if( pMem1->u.
61b0: 69 20 3e 20 70 4d 65 6d 32 2d 3e 75 2e 69 20 29  i > pMem2->u.i )
61c0: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 20   return 1;.     
61d0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d   return 0;.    }
61e0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 6f 6e  .  }..  /* If on
61f0: 65 20 76 61 6c 75 65 20 69 73 20 61 20 73 74 72  e value is a str
6200: 69 6e 67 20 61 6e 64 20 74 68 65 20 6f 74 68 65  ing and the othe
6210: 72 20 69 73 20 61 20 62 6c 6f 62 2c 20 74 68 65  r is a blob, the
6220: 20 73 74 72 69 6e 67 20 69 73 20 6c 65 73 73 2e   string is less.
6230: 0a 20 20 2a 2a 20 49 66 20 62 6f 74 68 20 61 72  .  ** If both ar
6240: 65 20 73 74 72 69 6e 67 73 2c 20 63 6f 6d 70 61  e strings, compa
6250: 72 65 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6c  re using the col
6260: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  lating functions
6270: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 63 6f 6d  ..  */.  if( com
6280: 62 69 6e 65 64 5f 66 6c 61 67 73 26 4d 45 4d 5f  bined_flags&MEM_
6290: 53 74 72 20 29 7b 0a 20 20 20 20 69 66 28 20 28  Str ){.    if( (
62a0: 66 31 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30  f1 & MEM_Str)==0
62b0: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
62c0: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66   1;.    }.    if
62d0: 28 20 28 66 32 20 26 20 4d 45 4d 5f 53 74 72 29  ( (f2 & MEM_Str)
62e0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ==0 ){.      ret
62f0: 75 72 6e 20 2d 31 3b 0a 20 20 20 20 7d 0a 0a 20  urn -1;.    }.. 
6300: 20 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d 31     assert( pMem1
6310: 2d 3e 65 6e 63 3d 3d 70 4d 65 6d 32 2d 3e 65 6e  ->enc==pMem2->en
6320: 63 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  c );.    assert(
6330: 20 70 4d 65 6d 31 2d 3e 65 6e 63 3d 3d 53 51 4c   pMem1->enc==SQL
6340: 49 54 45 5f 55 54 46 38 20 7c 7c 20 0a 20 20 20  ITE_UTF8 || .   
6350: 20 20 20 20 20 20 20 20 20 70 4d 65 6d 31 2d 3e           pMem1->
6360: 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
6370: 36 4c 45 20 7c 7c 20 70 4d 65 6d 31 2d 3e 65 6e  6LE || pMem1->en
6380: 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42  c==SQLITE_UTF16B
6390: 45 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65  E );..    /* The
63a0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
63b0: 6e 63 65 20 6d 75 73 74 20 62 65 20 64 65 66 69  nce must be defi
63c0: 6e 65 64 20 61 74 20 74 68 69 73 20 70 6f 69 6e  ned at this poin
63d0: 74 2c 20 65 76 65 6e 20 69 66 0a 20 20 20 20 2a  t, even if.    *
63e0: 2a 20 74 68 65 20 75 73 65 72 20 64 65 6c 65 74  * the user delet
63f0: 65 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  es the collation
6400: 20 73 65 71 75 65 6e 63 65 20 61 66 74 65 72 20   sequence after 
6410: 74 68 65 20 76 64 62 65 20 70 72 6f 67 72 61 6d  the vdbe program
6420: 20 69 73 0a 20 20 20 20 2a 2a 20 63 6f 6d 70 69   is.    ** compi
6430: 6c 65 64 20 28 74 68 69 73 20 77 61 73 20 6e 6f  led (this was no
6440: 74 20 61 6c 77 61 79 73 20 74 68 65 20 63 61 73  t always the cas
6450: 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61  e)..    */.    a
6460: 73 73 65 72 74 28 20 21 70 43 6f 6c 6c 20 7c 7c  ssert( !pColl ||
6470: 20 70 43 6f 6c 6c 2d 3e 78 43 6d 70 20 29 3b 0a   pColl->xCmp );.
6480: 0a 20 20 20 20 69 66 28 20 70 43 6f 6c 6c 20 29  .    if( pColl )
6490: 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d  {.      if( pMem
64a0: 31 2d 3e 65 6e 63 3d 3d 70 43 6f 6c 6c 2d 3e 65  1->enc==pColl->e
64b0: 6e 63 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  nc ){.        /*
64c0: 20 54 68 65 20 73 74 72 69 6e 67 73 20 61 72 65   The strings are
64d0: 20 61 6c 72 65 61 64 79 20 69 6e 20 74 68 65 20   already in the 
64e0: 63 6f 72 72 65 63 74 20 65 6e 63 6f 64 69 6e 67  correct encoding
64f0: 2e 20 20 43 61 6c 6c 20 74 68 65 0a 20 20 20 20  .  Call the.    
6500: 20 20 20 20 2a 2a 20 63 6f 6d 70 61 72 69 73 6f      ** compariso
6510: 6e 20 66 75 6e 63 74 69 6f 6e 20 64 69 72 65 63  n function direc
6520: 74 6c 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 72  tly */.        r
6530: 65 74 75 72 6e 20 70 43 6f 6c 6c 2d 3e 78 43 6d  eturn pColl->xCm
6540: 70 28 70 43 6f 6c 6c 2d 3e 70 55 73 65 72 2c 70  p(pColl->pUser,p
6550: 4d 65 6d 31 2d 3e 6e 2c 70 4d 65 6d 31 2d 3e 7a  Mem1->n,pMem1->z
6560: 2c 70 4d 65 6d 32 2d 3e 6e 2c 70 4d 65 6d 32 2d  ,pMem2->n,pMem2-
6570: 3e 7a 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  >z);.      }else
6580: 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20  {.        const 
6590: 76 6f 69 64 20 2a 76 31 2c 20 2a 76 32 3b 0a 20  void *v1, *v2;. 
65a0: 20 20 20 20 20 20 20 69 6e 74 20 6e 31 2c 20 6e         int n1, n
65b0: 32 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 20 63  2;.        Mem c
65c0: 31 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 20 63  1;.        Mem c
65d0: 32 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 73 65  2;.        memse
65e0: 74 28 26 63 31 2c 20 30 2c 20 73 69 7a 65 6f 66  t(&c1, 0, sizeof
65f0: 28 63 31 29 29 3b 0a 20 20 20 20 20 20 20 20 6d  (c1));.        m
6600: 65 6d 73 65 74 28 26 63 32 2c 20 30 2c 20 73 69  emset(&c2, 0, si
6610: 7a 65 6f 66 28 63 32 29 29 3b 0a 20 20 20 20 20  zeof(c2));.     
6620: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
6630: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 26 63 31  mShallowCopy(&c1
6640: 2c 20 70 4d 65 6d 31 2c 20 4d 45 4d 5f 45 70 68  , pMem1, MEM_Eph
6650: 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  em);.        sql
6660: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
6670: 6f 77 43 6f 70 79 28 26 63 32 2c 20 70 4d 65 6d  owCopy(&c2, pMem
6680: 32 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  2, MEM_Ephem);. 
6690: 20 20 20 20 20 20 20 76 31 20 3d 20 73 71 6c 69         v1 = sqli
66a0: 74 65 33 56 61 6c 75 65 54 65 78 74 28 28 73 71  te3ValueText((sq
66b0: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 26 63 31  lite3_value*)&c1
66c0: 2c 20 70 43 6f 6c 6c 2d 3e 65 6e 63 29 3b 0a 20  , pColl->enc);. 
66d0: 20 20 20 20 20 20 20 6e 31 20 3d 20 76 31 3d 3d         n1 = v1==
66e0: 30 20 3f 20 30 20 3a 20 63 31 2e 6e 3b 0a 20 20  0 ? 0 : c1.n;.  
66f0: 20 20 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74        v2 = sqlit
6700: 65 33 56 61 6c 75 65 54 65 78 74 28 28 73 71 6c  e3ValueText((sql
6710: 69 74 65 33 5f 76 61 6c 75 65 2a 29 26 63 32 2c  ite3_value*)&c2,
6720: 20 70 43 6f 6c 6c 2d 3e 65 6e 63 29 3b 0a 20 20   pColl->enc);.  
6730: 20 20 20 20 20 20 6e 32 20 3d 20 76 32 3d 3d 30        n2 = v2==0
6740: 20 3f 20 30 20 3a 20 63 32 2e 6e 3b 0a 20 20 20   ? 0 : c2.n;.   
6750: 20 20 20 20 20 72 63 20 3d 20 70 43 6f 6c 6c 2d       rc = pColl-
6760: 3e 78 43 6d 70 28 70 43 6f 6c 6c 2d 3e 70 55 73  >xCmp(pColl->pUs
6770: 65 72 2c 20 6e 31 2c 20 76 31 2c 20 6e 32 2c 20  er, n1, v1, n2, 
6780: 76 32 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  v2);.        sql
6790: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
67a0: 73 65 28 26 63 31 29 3b 0a 20 20 20 20 20 20 20  se(&c1);.       
67b0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
67c0: 65 6c 65 61 73 65 28 26 63 32 29 3b 0a 20 20 20  elease(&c2);.   
67d0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a       return rc;.
67e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
67f0: 20 20 2f 2a 20 49 66 20 61 20 4e 55 4c 4c 20 70    /* If a NULL p
6800: 6f 69 6e 74 65 72 20 77 61 73 20 70 61 73 73 65  ointer was passe
6810: 64 20 61 73 20 74 68 65 20 63 6f 6c 6c 61 74 65  d as the collate
6820: 20 66 75 6e 63 74 69 6f 6e 2c 20 66 61 6c 6c 20   function, fall 
6830: 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74  through.    ** t
6840: 6f 20 74 68 65 20 62 6c 6f 62 20 63 61 73 65 20  o the blob case 
6850: 61 6e 64 20 75 73 65 20 6d 65 6d 63 6d 70 28 29  and use memcmp()
6860: 2e 20 20 2a 2f 0a 20 20 7d 0a 20 0a 20 20 2f 2a  .  */.  }. .  /*
6870: 20 42 6f 74 68 20 76 61 6c 75 65 73 20 6d 75 73   Both values mus
6880: 74 20 62 65 20 62 6c 6f 62 73 2e 20 20 43 6f 6d  t be blobs.  Com
6890: 70 61 72 65 20 75 73 69 6e 67 20 6d 65 6d 63 6d  pare using memcm
68a0: 70 28 29 2e 20 20 2a 2f 0a 20 20 72 63 20 3d 20  p().  */.  rc = 
68b0: 6d 65 6d 63 6d 70 28 70 4d 65 6d 31 2d 3e 7a 2c  memcmp(pMem1->z,
68c0: 20 70 4d 65 6d 32 2d 3e 7a 2c 20 28 70 4d 65 6d   pMem2->z, (pMem
68d0: 31 2d 3e 6e 3e 70 4d 65 6d 32 2d 3e 6e 29 3f 70  1->n>pMem2->n)?p
68e0: 4d 65 6d 32 2d 3e 6e 3a 70 4d 65 6d 31 2d 3e 6e  Mem2->n:pMem1->n
68f0: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 30 20 29  );.  if( rc==0 )
6900: 7b 0a 20 20 20 20 72 63 20 3d 20 70 4d 65 6d 31  {.    rc = pMem1
6910: 2d 3e 6e 20 2d 20 70 4d 65 6d 32 2d 3e 6e 3b 0a  ->n - pMem2->n;.
6920: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b    }.  return rc;
6930: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4d 6f 76 65 20 64  .}../*.** Move d
6940: 61 74 61 20 6f 75 74 20 6f 66 20 61 20 62 74 72  ata out of a btr
6950: 65 65 20 6b 65 79 20 6f 72 20 64 61 74 61 20 66  ee key or data f
6960: 69 65 6c 64 20 61 6e 64 20 69 6e 74 6f 20 61 20  ield and into a 
6970: 4d 65 6d 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  Mem structure..*
6980: 2a 20 54 68 65 20 64 61 74 61 20 6f 72 20 6b 65  * The data or ke
6990: 79 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  y is taken from 
69a0: 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 70  the entry that p
69b0: 43 75 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  Cur is currently
69c0: 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20 74 6f 2e   pointing.** to.
69d0: 20 20 6f 66 66 73 65 74 20 61 6e 64 20 61 6d 74    offset and amt
69e0: 20 64 65 74 65 72 6d 69 6e 65 20 77 68 61 74 20   determine what 
69f0: 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  portion of the d
6a00: 61 74 61 20 6f 72 20 6b 65 79 20 74 6f 20 72 65  ata or key to re
6a10: 74 72 69 65 76 65 2e 0a 2a 2a 20 6b 65 79 20 69  trieve..** key i
6a20: 73 20 74 72 75 65 20 74 6f 20 67 65 74 20 74 68  s true to get th
6a30: 65 20 6b 65 79 20 6f 72 20 66 61 6c 73 65 20 74  e key or false t
6a40: 6f 20 67 65 74 20 64 61 74 61 2e 20 20 54 68 65  o get data.  The
6a50: 20 72 65 73 75 6c 74 20 69 73 20 77 72 69 74 74   result is writt
6a60: 65 6e 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 70  en.** into the p
6a70: 4d 65 6d 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a  Mem element..**.
6a80: 2a 2a 20 54 68 65 20 70 4d 65 6d 20 73 74 72 75  ** The pMem stru
6a90: 63 74 75 72 65 20 69 73 20 61 73 73 75 6d 65 64  cture is assumed
6aa0: 20 74 6f 20 62 65 20 75 6e 69 6e 69 74 69 61 6c   to be uninitial
6ab0: 69 7a 65 64 2e 20 20 41 6e 79 20 70 72 69 6f 72  ized.  Any prior
6ac0: 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 69 73 20 6f   content.** is o
6ad0: 76 65 72 77 72 69 74 74 65 6e 20 77 69 74 68 6f  verwritten witho
6ae0: 75 74 20 62 65 69 6e 67 20 66 72 65 65 64 2e 0a  ut being freed..
6af0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 69 73 20 72 6f  **.** If this ro
6b00: 75 74 69 6e 65 20 66 61 69 6c 73 20 66 6f 72 20  utine fails for 
6b10: 61 6e 79 20 72 65 61 73 6f 6e 20 28 6d 61 6c 6c  any reason (mall
6b20: 6f 63 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20  oc returns NULL 
6b30: 6f 72 20 75 6e 61 62 6c 65 0a 2a 2a 20 74 6f 20  or unable.** to 
6b40: 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 64 69  read from the di
6b50: 73 6b 29 20 74 68 65 6e 20 74 68 65 20 70 4d 65  sk) then the pMe
6b60: 6d 20 69 73 20 6c 65 66 74 20 69 6e 20 61 6e 20  m is left in an 
6b70: 69 6e 63 6f 6e 73 69 73 74 65 6e 74 20 73 74 61  inconsistent sta
6b80: 74 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  te..*/.int sqlit
6b90: 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
6ba0: 65 65 28 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  ee(.  BtCursor *
6bb0: 70 43 75 72 2c 20 20 20 2f 2a 20 43 75 72 73 6f  pCur,   /* Curso
6bc0: 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 72 65  r pointing at re
6bd0: 63 6f 72 64 20 74 6f 20 72 65 74 72 69 65 76 65  cord to retrieve
6be0: 2e 20 2a 2f 0a 20 20 69 6e 74 20 6f 66 66 73 65  . */.  int offse
6bf0: 74 2c 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73  t,       /* Offs
6c00: 65 74 20 66 72 6f 6d 20 74 68 65 20 73 74 61 72  et from the star
6c10: 74 20 6f 66 20 64 61 74 61 20 74 6f 20 72 65 74  t of data to ret
6c20: 75 72 6e 20 62 79 74 65 73 20 66 72 6f 6d 2e 20  urn bytes from. 
6c30: 2a 2f 0a 20 20 69 6e 74 20 61 6d 74 2c 20 20 20  */.  int amt,   
6c40: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
6c50: 20 6f 66 20 62 79 74 65 73 20 74 6f 20 72 65 74   of bytes to ret
6c60: 75 72 6e 2e 20 2a 2f 0a 20 20 69 6e 74 20 6b 65  urn. */.  int ke
6c70: 79 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  y,          /* I
6c80: 66 20 74 72 75 65 2c 20 72 65 74 72 69 65 76 65  f true, retrieve
6c90: 20 66 72 6f 6d 20 74 68 65 20 62 74 72 65 65 20   from the btree 
6ca0: 6b 65 79 2c 20 6e 6f 74 20 64 61 74 61 2e 20 2a  key, not data. *
6cb0: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 20 20  /.  Mem *pMem   
6cc0: 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 52 65        /* OUT: Re
6cd0: 74 75 72 6e 20 64 61 74 61 20 69 6e 20 74 68 69  turn data in thi
6ce0: 73 20 4d 65 6d 20 73 74 72 75 63 74 75 72 65 2e  s Mem structure.
6cf0: 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a   */.){.  char *z
6d00: 44 61 74 61 3b 20 20 20 20 20 20 20 20 2f 2a 20  Data;        /* 
6d10: 44 61 74 61 20 66 72 6f 6d 20 74 68 65 20 62 74  Data from the bt
6d20: 72 65 65 20 6c 61 79 65 72 20 2a 2f 0a 20 20 69  ree layer */.  i
6d30: 6e 74 20 61 76 61 69 6c 61 62 6c 65 20 3d 20 30  nt available = 0
6d40: 3b 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20  ;  /* Number of 
6d50: 62 79 74 65 73 20 61 76 61 69 6c 61 62 6c 65 20  bytes available 
6d60: 6f 6e 20 74 68 65 20 6c 6f 63 61 6c 20 62 74 72  on the local btr
6d70: 65 65 20 70 61 67 65 20 2a 2f 0a 20 20 69 6e 74  ee page */.  int
6d80: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
6d90: 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20   /* Return code 
6da0: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 73 71  */..  assert( sq
6db0: 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
6dc0: 49 73 56 61 6c 69 64 28 70 43 75 72 29 20 29 3b  IsValid(pCur) );
6dd0: 0a 0a 20 20 2f 2a 20 4e 6f 74 65 3a 20 74 68 65  ..  /* Note: the
6de0: 20 63 61 6c 6c 73 20 74 6f 20 42 74 72 65 65 4b   calls to BtreeK
6df0: 65 79 46 65 74 63 68 28 29 20 61 6e 64 20 44 61  eyFetch() and Da
6e00: 74 61 46 65 74 63 68 28 29 20 62 65 6c 6f 77 20  taFetch() below 
6e10: 61 73 73 65 72 74 28 29 20 0a 20 20 2a 2a 20 74  assert() .  ** t
6e20: 68 61 74 20 62 6f 74 68 20 74 68 65 20 42 74 53  hat both the BtS
6e30: 68 61 72 65 64 20 61 6e 64 20 64 61 74 61 62 61  hared and databa
6e40: 73 65 20 68 61 6e 64 6c 65 20 6d 75 74 65 78 65  se handle mutexe
6e50: 73 20 61 72 65 20 68 65 6c 64 2e 20 2a 2f 0a 20  s are held. */. 
6e60: 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
6e70: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
6e80: 65 74 29 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20  et)==0 );.  if( 
6e90: 6b 65 79 20 29 7b 0a 20 20 20 20 7a 44 61 74 61  key ){.    zData
6ea0: 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74   = (char *)sqlit
6eb0: 65 33 42 74 72 65 65 4b 65 79 46 65 74 63 68 28  e3BtreeKeyFetch(
6ec0: 70 43 75 72 2c 20 26 61 76 61 69 6c 61 62 6c 65  pCur, &available
6ed0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
6ee0: 7a 44 61 74 61 20 3d 20 28 63 68 61 72 20 2a 29  zData = (char *)
6ef0: 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
6f00: 46 65 74 63 68 28 70 43 75 72 2c 20 26 61 76 61  Fetch(pCur, &ava
6f10: 69 6c 61 62 6c 65 29 3b 0a 20 20 7d 0a 20 20 61  ilable);.  }.  a
6f20: 73 73 65 72 74 28 20 7a 44 61 74 61 21 3d 30 20  ssert( zData!=0 
6f30: 29 3b 0a 0a 20 20 69 66 28 20 6f 66 66 73 65 74  );..  if( offset
6f40: 2b 61 6d 74 3c 3d 61 76 61 69 6c 61 62 6c 65 20  +amt<=available 
6f50: 26 26 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 26  && (pMem->flags&
6f60: 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 7b 0a 20  MEM_Dyn)==0 ){. 
6f70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
6f80: 6d 52 65 6c 65 61 73 65 28 70 4d 65 6d 29 3b 0a  mRelease(pMem);.
6f90: 20 20 20 20 70 4d 65 6d 2d 3e 7a 20 3d 20 26 7a      pMem->z = &z
6fa0: 44 61 74 61 5b 6f 66 66 73 65 74 5d 3b 0a 20 20  Data[offset];.  
6fb0: 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20    pMem->flags = 
6fc0: 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 45 70 68  MEM_Blob|MEM_Eph
6fd0: 65 6d 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  em;.  }else if( 
6fe0: 53 51 4c 49 54 45 5f 4f 4b 3d 3d 28 72 63 20 3d  SQLITE_OK==(rc =
6ff0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47   sqlite3VdbeMemG
7000: 72 6f 77 28 70 4d 65 6d 2c 20 61 6d 74 2b 32 2c  row(pMem, amt+2,
7010: 20 30 29 29 20 29 7b 0a 20 20 20 20 70 4d 65 6d   0)) ){.    pMem
7020: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c  ->flags = MEM_Bl
7030: 6f 62 7c 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 54  ob|MEM_Dyn|MEM_T
7040: 65 72 6d 3b 0a 20 20 20 20 70 4d 65 6d 2d 3e 65  erm;.    pMem->e
7050: 6e 63 20 3d 20 30 3b 0a 20 20 20 20 70 4d 65 6d  nc = 0;.    pMem
7060: 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f  ->type = SQLITE_
7070: 42 4c 4f 42 3b 0a 20 20 20 20 69 66 28 20 6b 65  BLOB;.    if( ke
7080: 79 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  y ){.      rc = 
7090: 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28  sqlite3BtreeKey(
70a0: 70 43 75 72 2c 20 6f 66 66 73 65 74 2c 20 61 6d  pCur, offset, am
70b0: 74 2c 20 70 4d 65 6d 2d 3e 7a 29 3b 0a 20 20 20  t, pMem->z);.   
70c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
70d0: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
70e0: 61 74 61 28 70 43 75 72 2c 20 6f 66 66 73 65 74  ata(pCur, offset
70f0: 2c 20 61 6d 74 2c 20 70 4d 65 6d 2d 3e 7a 29 3b  , amt, pMem->z);
7100: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4d 65 6d 2d  .    }.    pMem-
7110: 3e 7a 5b 61 6d 74 5d 20 3d 20 30 3b 0a 20 20 20  >z[amt] = 0;.   
7120: 20 70 4d 65 6d 2d 3e 7a 5b 61 6d 74 2b 31 5d 20   pMem->z[amt+1] 
7130: 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 72 63 21  = 0;.    if( rc!
7140: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
7150: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
7160: 65 6d 52 65 6c 65 61 73 65 28 70 4d 65 6d 29 3b  emRelease(pMem);
7170: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4d 65  .    }.  }.  pMe
7180: 6d 2d 3e 6e 20 3d 20 61 6d 74 3b 0a 0a 20 20 72  m->n = amt;..  r
7190: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 20  eturn rc;.}../* 
71a0: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
71b0: 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20   only available 
71c0: 69 6e 74 65 72 6e 61 6c 6c 79 2c 20 69 74 20 69  internally, it i
71d0: 73 20 6e 6f 74 20 70 61 72 74 20 6f 66 20 74 68  s not part of th
71e0: 65 0a 2a 2a 20 65 78 74 65 72 6e 61 6c 20 41 50  e.** external AP
71f0: 49 2e 20 49 74 20 77 6f 72 6b 73 20 69 6e 20 61  I. It works in a
7200: 20 73 69 6d 69 6c 61 72 20 77 61 79 20 74 6f 20   similar way to 
7210: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
7220: 78 74 28 29 2c 0a 2a 2a 20 65 78 63 65 70 74 20  xt(),.** except 
7230: 74 68 65 20 64 61 74 61 20 72 65 74 75 72 6e 65  the data returne
7240: 64 20 69 73 20 69 6e 20 74 68 65 20 65 6e 63 6f  d is in the enco
7250: 64 69 6e 67 20 73 70 65 63 69 66 69 65 64 20 62  ding specified b
7260: 79 20 74 68 65 20 73 65 63 6f 6e 64 0a 2a 2a 20  y the second.** 
7270: 70 61 72 61 6d 65 74 65 72 2c 20 77 68 69 63 68  parameter, which
7280: 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20   must be one of 
7290: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2c 20  SQLITE_UTF16BE, 
72a0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 6f  SQLITE_UTF16LE o
72b0: 72 0a 2a 2a 20 53 51 4c 49 54 45 5f 55 54 46 38  r.** SQLITE_UTF8
72c0: 2e 0a 2a 2a 0a 2a 2a 20 28 32 30 30 36 2d 30 32  ..**.** (2006-02
72d0: 2d 31 36 3a 29 20 20 54 68 65 20 65 6e 63 20 76  -16:)  The enc v
72e0: 61 6c 75 65 20 63 61 6e 20 62 65 20 6f 72 2d 65  alue can be or-e
72f0: 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f 55 54  d with SQLITE_UT
7300: 46 31 36 5f 41 4c 49 47 4e 45 44 2e 0a 2a 2a 20  F16_ALIGNED..** 
7310: 49 66 20 74 68 61 74 20 69 73 20 74 68 65 20 63  If that is the c
7320: 61 73 65 2c 20 74 68 65 6e 20 74 68 65 20 72 65  ase, then the re
7330: 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61 6c 69  sult must be ali
7340: 67 6e 65 64 20 6f 6e 20 61 6e 20 65 76 65 6e 20  gned on an even 
7350: 62 79 74 65 0a 2a 2a 20 62 6f 75 6e 64 61 72 79  byte.** boundary
7360: 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69 64 20  ..*/.const void 
7370: 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78  *sqlite3ValueTex
7380: 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t(sqlite3_value*
7390: 20 70 56 61 6c 2c 20 75 38 20 65 6e 63 29 7b 0a   pVal, u8 enc){.
73a0: 20 20 69 66 28 20 21 70 56 61 6c 20 29 20 72 65    if( !pVal ) re
73b0: 74 75 72 6e 20 30 3b 0a 0a 20 20 61 73 73 65 72  turn 0;..  asser
73c0: 74 28 20 70 56 61 6c 2d 3e 64 62 3d 3d 30 20 7c  t( pVal->db==0 |
73d0: 7c 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  | sqlite3_mutex_
73e0: 68 65 6c 64 28 70 56 61 6c 2d 3e 64 62 2d 3e 6d  held(pVal->db->m
73f0: 75 74 65 78 29 20 29 3b 0a 20 20 61 73 73 65 72  utex) );.  asser
7400: 74 28 20 28 65 6e 63 26 33 29 3d 3d 28 65 6e 63  t( (enc&3)==(enc
7410: 26 7e 53 51 4c 49 54 45 5f 55 54 46 31 36 5f 41  &~SQLITE_UTF16_A
7420: 4c 49 47 4e 45 44 29 20 29 3b 0a 20 20 61 73 73  LIGNED) );.  ass
7430: 65 72 74 28 20 28 70 56 61 6c 2d 3e 66 6c 61 67  ert( (pVal->flag
7440: 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
7450: 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 56 61  =0 );..  if( pVa
7460: 6c 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c  l->flags&MEM_Nul
7470: 6c 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  l ){.    return 
7480: 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  0;.  }.  assert(
7490: 20 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29 20 3d   (MEM_Blob>>3) =
74a0: 3d 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 70  = MEM_Str );.  p
74b0: 56 61 6c 2d 3e 66 6c 61 67 73 20 7c 3d 20 28 70  Val->flags |= (p
74c0: 56 61 6c 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Val->flags & MEM
74d0: 5f 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20 65 78 70  _Blob)>>3;.  exp
74e0: 61 6e 64 42 6c 6f 62 28 70 56 61 6c 29 3b 0a 20  andBlob(pVal);. 
74f0: 20 69 66 28 20 70 56 61 6c 2d 3e 66 6c 61 67 73   if( pVal->flags
7500: 26 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  &MEM_Str ){.    
7510: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
7520: 65 45 6e 63 6f 64 69 6e 67 28 70 56 61 6c 2c 20  eEncoding(pVal, 
7530: 65 6e 63 20 26 20 7e 53 51 4c 49 54 45 5f 55 54  enc & ~SQLITE_UT
7540: 46 31 36 5f 41 4c 49 47 4e 45 44 29 3b 0a 20 20  F16_ALIGNED);.  
7550: 20 20 69 66 28 20 28 65 6e 63 20 26 20 53 51 4c    if( (enc & SQL
7560: 49 54 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45  ITE_UTF16_ALIGNE
7570: 44 29 21 3d 30 20 26 26 20 31 3d 3d 28 31 26 53  D)!=0 && 1==(1&S
7580: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
7590: 28 70 56 61 6c 2d 3e 7a 29 29 20 29 7b 0a 20 20  (pVal->z)) ){.  
75a0: 20 20 20 20 61 73 73 65 72 74 28 20 28 70 56 61      assert( (pVa
75b0: 6c 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  l->flags & (MEM_
75c0: 45 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63  Ephem|MEM_Static
75d0: 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  ))!=0 );.      i
75e0: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
75f0: 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70  mMakeWriteable(p
7600: 56 61 6c 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  Val)!=SQLITE_OK 
7610: 29 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ){.        retur
7620: 6e 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  n 0;.      }.   
7630: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
7640: 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74  beMemNulTerminat
7650: 65 28 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a  e(pVal); /* IMP:
7660: 20 52 2d 35 39 38 39 33 2d 34 35 34 36 37 20 2a   R-59893-45467 *
7670: 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  /.  }else{.    a
7680: 73 73 65 72 74 28 20 28 70 56 61 6c 2d 3e 66 6c  ssert( (pVal->fl
7690: 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30  ags&MEM_Blob)==0
76a0: 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
76b0: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
76c0: 70 56 61 6c 2c 20 65 6e 63 29 3b 0a 20 20 20 20  pVal, enc);.    
76d0: 61 73 73 65 72 74 28 20 30 3d 3d 28 31 26 53 51  assert( 0==(1&SQ
76e0: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
76f0: 70 56 61 6c 2d 3e 7a 29 29 20 29 3b 0a 20 20 7d  pVal->z)) );.  }
7700: 0a 20 20 61 73 73 65 72 74 28 70 56 61 6c 2d 3e  .  assert(pVal->
7710: 65 6e 63 3d 3d 28 65 6e 63 20 26 20 7e 53 51 4c  enc==(enc & ~SQL
7720: 49 54 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45  ITE_UTF16_ALIGNE
7730: 44 29 20 7c 7c 20 70 56 61 6c 2d 3e 64 62 3d 3d  D) || pVal->db==
7740: 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0.              
7750: 7c 7c 20 70 56 61 6c 2d 3e 64 62 2d 3e 6d 61 6c  || pVal->db->mal
7760: 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 69  locFailed );.  i
7770: 66 28 20 70 56 61 6c 2d 3e 65 6e 63 3d 3d 28 65  f( pVal->enc==(e
7780: 6e 63 20 26 20 7e 53 51 4c 49 54 45 5f 55 54 46  nc & ~SQLITE_UTF
7790: 31 36 5f 41 4c 49 47 4e 45 44 29 20 29 7b 0a 20  16_ALIGNED) ){. 
77a0: 20 20 20 72 65 74 75 72 6e 20 70 56 61 6c 2d 3e     return pVal->
77b0: 7a 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  z;.  }else{.    
77c0: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a  return 0;.  }.}.
77d0: 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20 61 20  ./*.** Create a 
77e0: 6e 65 77 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  new sqlite3_valu
77f0: 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 73 71 6c  e object..*/.sql
7800: 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69  ite3_value *sqli
7810: 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69  te3ValueNew(sqli
7820: 74 65 33 20 2a 64 62 29 7b 0a 20 20 4d 65 6d 20  te3 *db){.  Mem 
7830: 2a 70 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  *p = sqlite3DbMa
7840: 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 73 69 7a  llocZero(db, siz
7850: 65 6f 66 28 2a 70 29 29 3b 0a 20 20 69 66 28 20  eof(*p));.  if( 
7860: 70 20 29 7b 0a 20 20 20 20 70 2d 3e 66 6c 61 67  p ){.    p->flag
7870: 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
7880: 20 20 70 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49    p->type = SQLI
7890: 54 45 5f 4e 55 4c 4c 3b 0a 20 20 20 20 70 2d 3e  TE_NULL;.    p->
78a0: 64 62 20 3d 20 64 62 3b 0a 20 20 7d 0a 20 20 72  db = db;.  }.  r
78b0: 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn p;.}../*.*
78c0: 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 73  * Create a new s
78d0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 6f 62 6a  qlite3_value obj
78e0: 65 63 74 2c 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ect, containing 
78f0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 45 78  the value of pEx
7900: 70 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  pr..**.** This o
7910: 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 76 65  nly works for ve
7920: 72 79 20 73 69 6d 70 6c 65 20 65 78 70 72 65 73  ry simple expres
7930: 73 69 6f 6e 73 20 74 68 61 74 20 63 6f 6e 73 69  sions that consi
7940: 73 74 20 6f 66 20 6f 6e 65 20 63 6f 6e 73 74 61  st of one consta
7950: 6e 74 0a 2a 2a 20 74 6f 6b 65 6e 20 28 69 2e 65  nt.** token (i.e
7960: 2e 20 22 35 22 2c 20 22 35 2e 31 22 2c 20 22 27  . "5", "5.1", "'
7970: 61 20 73 74 72 69 6e 67 27 22 29 2e 20 49 66 20  a string'"). If 
7980: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 63  the expression c
7990: 61 6e 0a 2a 2a 20 62 65 20 63 6f 6e 76 65 72 74  an.** be convert
79a0: 65 64 20 64 69 72 65 63 74 6c 79 20 69 6e 74 6f  ed directly into
79b0: 20 61 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74   a value, then t
79c0: 68 65 20 76 61 6c 75 65 20 69 73 20 61 6c 6c 6f  he value is allo
79d0: 63 61 74 65 64 20 61 6e 64 0a 2a 2a 20 61 20 70  cated and.** a p
79e0: 6f 69 6e 74 65 72 20 77 72 69 74 74 65 6e 20 74  ointer written t
79f0: 6f 20 2a 70 70 56 61 6c 2e 20 54 68 65 20 63 61  o *ppVal. The ca
7a00: 6c 6c 65 72 20 69 73 20 72 65 73 70 6f 6e 73 69  ller is responsi
7a10: 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c 6f 63 61  ble for dealloca
7a20: 74 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ting.** the valu
7a30: 65 20 62 79 20 70 61 73 73 69 6e 67 20 69 74 20  e by passing it 
7a40: 74 6f 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  to sqlite3ValueF
7a50: 72 65 65 28 29 20 6c 61 74 65 72 20 6f 6e 2e 20  ree() later on. 
7a60: 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
7a70: 6e 0a 2a 2a 20 63 61 6e 6e 6f 74 20 62 65 20 63  n.** cannot be c
7a80: 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 20 76 61  onverted to a va
7a90: 6c 75 65 2c 20 74 68 65 6e 20 2a 70 70 56 61 6c  lue, then *ppVal
7aa0: 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e   is set to NULL.
7ab0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  .*/.int sqlite3V
7ac0: 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 0a 20 20  alueFromExpr(.  
7ad0: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20  sqlite3 *db,    
7ae0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
7af0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
7b00: 74 69 6f 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a  tion */.  Expr *
7b10: 70 45 78 70 72 2c 20 20 20 20 20 20 20 20 20 20  pExpr,          
7b20: 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65      /* The expre
7b30: 73 73 69 6f 6e 20 74 6f 20 65 76 61 6c 75 61 74  ssion to evaluat
7b40: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 2c 20 20  e */.  u8 enc,  
7b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b60: 20 2f 2a 20 45 6e 63 6f 64 69 6e 67 20 74 6f 20   /* Encoding to 
7b70: 75 73 65 20 2a 2f 0a 20 20 75 38 20 61 66 66 69  use */.  u8 affi
7b80: 6e 69 74 79 2c 20 20 20 20 20 20 20 20 20 20 20  nity,           
7b90: 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74     /* Affinity t
7ba0: 6f 20 75 73 65 20 2a 2f 0a 20 20 73 71 6c 69 74  o use */.  sqlit
7bb0: 65 33 5f 76 61 6c 75 65 20 2a 2a 70 70 56 61 6c  e3_value **ppVal
7bc0: 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20 74 68       /* Write th
7bd0: 65 20 6e 65 77 20 76 61 6c 75 65 20 68 65 72 65  e new value here
7be0: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 6f 70 3b   */.){.  int op;
7bf0: 0a 20 20 63 68 61 72 20 2a 7a 56 61 6c 20 3d 20  .  char *zVal = 
7c00: 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  0;.  sqlite3_val
7c10: 75 65 20 2a 70 56 61 6c 20 3d 20 30 3b 0a 20 20  ue *pVal = 0;.  
7c20: 69 6e 74 20 6e 65 67 49 6e 74 20 3d 20 31 3b 0a  int negInt = 1;.
7c30: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
7c40: 65 67 20 3d 20 22 22 3b 0a 0a 20 20 69 66 28 20  eg = "";..  if( 
7c50: 21 70 45 78 70 72 20 29 7b 0a 20 20 20 20 2a 70  !pExpr ){.    *p
7c60: 70 56 61 6c 20 3d 20 30 3b 0a 20 20 20 20 72 65  pVal = 0;.    re
7c70: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
7c80: 20 20 7d 0a 20 20 6f 70 20 3d 20 70 45 78 70 72    }.  op = pExpr
7c90: 2d 3e 6f 70 3b 0a 0a 20 20 2f 2a 20 6f 70 20 63  ->op;..  /* op c
7ca0: 61 6e 20 6f 6e 6c 79 20 62 65 20 54 4b 5f 52 45  an only be TK_RE
7cb0: 47 49 53 54 45 52 20 69 66 20 77 65 20 68 61 76  GISTER if we hav
7cc0: 65 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  e compiled with 
7cd0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
7ce0: 41 54 32 2e 0a 20 20 2a 2a 20 54 68 65 20 69 66  AT2..  ** The if
7cf0: 64 65 66 20 68 65 72 65 20 69 73 20 74 6f 20 65  def here is to e
7d00: 6e 61 62 6c 65 20 75 73 20 74 6f 20 61 63 68 69  nable us to achi
7d10: 65 76 65 20 31 30 30 25 20 62 72 61 6e 63 68 20  eve 100% branch 
7d20: 74 65 73 74 20 63 6f 76 65 72 61 67 65 20 65 76  test coverage ev
7d30: 65 6e 0a 20 20 2a 2a 20 77 68 65 6e 20 53 51 4c  en.  ** when SQL
7d40: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 32  ITE_ENABLE_STAT2
7d50: 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a 20 20 2a   is omitted..  *
7d60: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
7d70: 45 4e 41 42 4c 45 5f 53 54 41 54 32 0a 20 20 69  ENABLE_STAT2.  i
7d80: 66 28 20 6f 70 3d 3d 54 4b 5f 52 45 47 49 53 54  f( op==TK_REGIST
7d90: 45 52 20 29 20 6f 70 20 3d 20 70 45 78 70 72 2d  ER ) op = pExpr-
7da0: 3e 6f 70 32 3b 0a 23 65 6c 73 65 0a 20 20 69 66  >op2;.#else.  if
7db0: 28 20 4e 45 56 45 52 28 6f 70 3d 3d 54 4b 5f 52  ( NEVER(op==TK_R
7dc0: 45 47 49 53 54 45 52 29 20 29 20 6f 70 20 3d 20  EGISTER) ) op = 
7dd0: 70 45 78 70 72 2d 3e 6f 70 32 3b 0a 23 65 6e 64  pExpr->op2;.#end
7de0: 69 66 0a 0a 20 20 2f 2a 20 48 61 6e 64 6c 65 20  if..  /* Handle 
7df0: 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72  negative integer
7e00: 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 73 74  s in a single st
7e10: 65 70 2e 20 20 54 68 69 73 20 69 73 20 6e 65 65  ep.  This is nee
7e20: 64 65 64 20 69 6e 20 74 68 65 0a 20 20 2a 2a 20  ded in the.  ** 
7e30: 63 61 73 65 20 77 68 65 6e 20 74 68 65 20 76 61  case when the va
7e40: 6c 75 65 20 69 73 20 2d 39 32 32 33 33 37 32 30  lue is -92233720
7e50: 33 36 38 35 34 37 37 35 38 30 38 2e 0a 20 20 2a  36854775808..  *
7e60: 2f 0a 20 20 69 66 28 20 6f 70 3d 3d 54 4b 5f 55  /.  if( op==TK_U
7e70: 4d 49 4e 55 53 0a 20 20 20 26 26 20 28 70 45 78  MINUS.   && (pEx
7e80: 70 72 2d 3e 70 4c 65 66 74 2d 3e 6f 70 3d 3d 54  pr->pLeft->op==T
7e90: 4b 5f 49 4e 54 45 47 45 52 20 7c 7c 20 70 45 78  K_INTEGER || pEx
7ea0: 70 72 2d 3e 70 4c 65 66 74 2d 3e 6f 70 3d 3d 54  pr->pLeft->op==T
7eb0: 4b 5f 46 4c 4f 41 54 29 20 29 7b 0a 20 20 20 20  K_FLOAT) ){.    
7ec0: 70 45 78 70 72 20 3d 20 70 45 78 70 72 2d 3e 70  pExpr = pExpr->p
7ed0: 4c 65 66 74 3b 0a 20 20 20 20 6f 70 20 3d 20 70  Left;.    op = p
7ee0: 45 78 70 72 2d 3e 6f 70 3b 0a 20 20 20 20 6e 65  Expr->op;.    ne
7ef0: 67 49 6e 74 20 3d 20 2d 31 3b 0a 20 20 20 20 7a  gInt = -1;.    z
7f00: 4e 65 67 20 3d 20 22 2d 22 3b 0a 20 20 7d 0a 0a  Neg = "-";.  }..
7f10: 20 20 69 66 28 20 6f 70 3d 3d 54 4b 5f 53 54 52    if( op==TK_STR
7f20: 49 4e 47 20 7c 7c 20 6f 70 3d 3d 54 4b 5f 46 4c  ING || op==TK_FL
7f30: 4f 41 54 20 7c 7c 20 6f 70 3d 3d 54 4b 5f 49 4e  OAT || op==TK_IN
7f40: 54 45 47 45 52 20 29 7b 0a 20 20 20 20 70 56 61  TEGER ){.    pVa
7f50: 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65  l = sqlite3Value
7f60: 4e 65 77 28 64 62 29 3b 0a 20 20 20 20 69 66 28  New(db);.    if(
7f70: 20 70 56 61 6c 3d 3d 30 20 29 20 67 6f 74 6f 20   pVal==0 ) goto 
7f80: 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 69 66 28 20  no_mem;.    if( 
7f90: 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
7fa0: 70 45 78 70 72 2c 20 45 50 5f 49 6e 74 56 61 6c  pExpr, EP_IntVal
7fb0: 75 65 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ue) ){.      sql
7fc0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
7fd0: 74 36 34 28 70 56 61 6c 2c 20 28 69 36 34 29 70  t64(pVal, (i64)p
7fe0: 45 78 70 72 2d 3e 75 2e 69 56 61 6c 75 65 2a 6e  Expr->u.iValue*n
7ff0: 65 67 49 6e 74 29 3b 0a 20 20 20 20 7d 65 6c 73  egInt);.    }els
8000: 65 7b 0a 20 20 20 20 20 20 7a 56 61 6c 20 3d 20  e{.      zVal = 
8010: 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
8020: 62 2c 20 22 25 73 25 73 22 2c 20 7a 4e 65 67 2c  b, "%s%s", zNeg,
8030: 20 70 45 78 70 72 2d 3e 75 2e 7a 54 6f 6b 65 6e   pExpr->u.zToken
8040: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 56 61  );.      if( zVa
8050: 6c 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  l==0 ) goto no_m
8060: 65 6d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  em;.      sqlite
8070: 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61  3ValueSetStr(pVa
8080: 6c 2c 20 2d 31 2c 20 7a 56 61 6c 2c 20 53 51 4c  l, -1, zVal, SQL
8090: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
80a0: 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20  _DYNAMIC);.     
80b0: 20 69 66 28 20 6f 70 3d 3d 54 4b 5f 46 4c 4f 41   if( op==TK_FLOA
80c0: 54 20 29 20 70 56 61 6c 2d 3e 74 79 70 65 20 3d  T ) pVal->type =
80d0: 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3b 0a 20   SQLITE_FLOAT;. 
80e0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 6f 70     }.    if( (op
80f0: 3d 3d 54 4b 5f 49 4e 54 45 47 45 52 20 7c 7c 20  ==TK_INTEGER || 
8100: 6f 70 3d 3d 54 4b 5f 46 4c 4f 41 54 20 29 20 26  op==TK_FLOAT ) &
8110: 26 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  & affinity==SQLI
8120: 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b 0a 20  TE_AFF_NONE ){. 
8130: 20 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75       sqlite3Valu
8140: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70  eApplyAffinity(p
8150: 56 61 6c 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  Val, SQLITE_AFF_
8160: 4e 55 4d 45 52 49 43 2c 20 53 51 4c 49 54 45 5f  NUMERIC, SQLITE_
8170: 55 54 46 38 29 3b 0a 20 20 20 20 7d 65 6c 73 65  UTF8);.    }else
8180: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
8190: 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74  alueApplyAffinit
81a0: 79 28 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79  y(pVal, affinity
81b0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a  , SQLITE_UTF8);.
81c0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 56      }.    if( pV
81d0: 61 6c 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  al->flags & (MEM
81e0: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20 29  _Int|MEM_Real) )
81f0: 20 70 56 61 6c 2d 3e 66 6c 61 67 73 20 26 3d 20   pVal->flags &= 
8200: 7e 4d 45 4d 5f 53 74 72 3b 0a 20 20 20 20 69 66  ~MEM_Str;.    if
8210: 28 20 65 6e 63 21 3d 53 51 4c 49 54 45 5f 55 54  ( enc!=SQLITE_UT
8220: 46 38 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  F8 ){.      sqli
8230: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
8240: 6f 64 69 6e 67 28 70 56 61 6c 2c 20 65 6e 63 29  oding(pVal, enc)
8250: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20  ;.    }.  }else 
8260: 69 66 28 20 6f 70 3d 3d 54 4b 5f 55 4d 49 4e 55  if( op==TK_UMINU
8270: 53 20 29 20 7b 0a 20 20 20 20 2f 2a 20 54 68 69  S ) {.    /* Thi
8280: 73 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73  s branch happens
8290: 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 6e 65   for multiple ne
82a0: 67 61 74 69 76 65 20 73 69 67 6e 73 2e 20 20 45  gative signs.  E
82b0: 78 3a 20 2d 28 2d 35 29 20 2a 2f 0a 20 20 20 20  x: -(-5) */.    
82c0: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73  if( SQLITE_OK==s
82d0: 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45  qlite3ValueFromE
82e0: 78 70 72 28 64 62 2c 70 45 78 70 72 2d 3e 70 4c  xpr(db,pExpr->pL
82f0: 65 66 74 2c 65 6e 63 2c 61 66 66 69 6e 69 74 79  eft,enc,affinity
8300: 2c 26 70 56 61 6c 29 20 29 7b 0a 20 20 20 20 20  ,&pVal) ){.     
8310: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
8320: 75 6d 65 72 69 66 79 28 70 56 61 6c 29 3b 0a 20  umerify(pVal);. 
8330: 20 20 20 20 20 70 56 61 6c 2d 3e 75 2e 69 20 3d       pVal->u.i =
8340: 20 2d 31 20 2a 20 70 56 61 6c 2d 3e 75 2e 69 3b   -1 * pVal->u.i;
8350: 0a 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c  .      /* (doubl
8360: 65 29 2d 31 20 49 6e 20 63 61 73 65 20 6f 66 20  e)-1 In case of 
8370: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
8380: 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f  TING_POINT... */
8390: 0a 20 20 20 20 20 20 70 56 61 6c 2d 3e 72 20 3d  .      pVal->r =
83a0: 20 28 64 6f 75 62 6c 65 29 2d 31 20 2a 20 70 56   (double)-1 * pV
83b0: 61 6c 2d 3e 72 3b 0a 20 20 20 20 20 20 73 71 6c  al->r;.      sql
83c0: 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66  ite3ValueApplyAf
83d0: 66 69 6e 69 74 79 28 70 56 61 6c 2c 20 61 66 66  finity(pVal, aff
83e0: 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 20 20 20  inity, enc);.   
83f0: 20 7d 0a 20 20 7d 0a 23 69 66 6e 64 65 66 20 53   }.  }.#ifndef S
8400: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f  QLITE_OMIT_BLOB_
8410: 4c 49 54 45 52 41 4c 0a 20 20 65 6c 73 65 20 69  LITERAL.  else i
8420: 66 28 20 6f 70 3d 3d 54 4b 5f 42 4c 4f 42 20 29  f( op==TK_BLOB )
8430: 7b 0a 20 20 20 20 69 6e 74 20 6e 56 61 6c 3b 0a  {.    int nVal;.
8440: 20 20 20 20 61 73 73 65 72 74 28 20 70 45 78 70      assert( pExp
8450: 72 2d 3e 75 2e 7a 54 6f 6b 65 6e 5b 30 5d 3d 3d  r->u.zToken[0]==
8460: 27 78 27 20 7c 7c 20 70 45 78 70 72 2d 3e 75 2e  'x' || pExpr->u.
8470: 7a 54 6f 6b 65 6e 5b 30 5d 3d 3d 27 58 27 20 29  zToken[0]=='X' )
8480: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 45  ;.    assert( pE
8490: 78 70 72 2d 3e 75 2e 7a 54 6f 6b 65 6e 5b 31 5d  xpr->u.zToken[1]
84a0: 3d 3d 27 5c 27 27 20 29 3b 0a 20 20 20 20 70 56  =='\'' );.    pV
84b0: 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75  al = sqlite3Valu
84c0: 65 4e 65 77 28 64 62 29 3b 0a 20 20 20 20 69 66  eNew(db);.    if
84d0: 28 20 21 70 56 61 6c 20 29 20 67 6f 74 6f 20 6e  ( !pVal ) goto n
84e0: 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7a 56 61 6c 20  o_mem;.    zVal 
84f0: 3d 20 26 70 45 78 70 72 2d 3e 75 2e 7a 54 6f 6b  = &pExpr->u.zTok
8500: 65 6e 5b 32 5d 3b 0a 20 20 20 20 6e 56 61 6c 20  en[2];.    nVal 
8510: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
8520: 30 28 7a 56 61 6c 29 2d 31 3b 0a 20 20 20 20 61  0(zVal)-1;.    a
8530: 73 73 65 72 74 28 20 7a 56 61 6c 5b 6e 56 61 6c  ssert( zVal[nVal
8540: 5d 3d 3d 27 5c 27 27 20 29 3b 0a 20 20 20 20 73  ]=='\'' );.    s
8550: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
8560: 53 74 72 28 70 56 61 6c 2c 20 73 71 6c 69 74 65  Str(pVal, sqlite
8570: 33 48 65 78 54 6f 42 6c 6f 62 28 64 62 2c 20 7a  3HexToBlob(db, z
8580: 56 61 6c 2c 20 6e 56 61 6c 29 2c 20 6e 56 61 6c  Val, nVal), nVal
8590: 2f 32 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  /2,.            
85a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20               0, 
85b0: 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 29 3b  SQLITE_DYNAMIC);
85c0: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69  .  }.#endif..  i
85d0: 66 28 20 70 56 61 6c 20 29 7b 0a 20 20 20 20 73  f( pVal ){.    s
85e0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f  qlite3VdbeMemSto
85f0: 72 65 54 79 70 65 28 70 56 61 6c 29 3b 0a 20 20  reType(pVal);.  
8600: 7d 0a 20 20 2a 70 70 56 61 6c 20 3d 20 70 56 61  }.  *ppVal = pVa
8610: 6c 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49  l;.  return SQLI
8620: 54 45 5f 4f 4b 3b 0a 0a 6e 6f 5f 6d 65 6d 3a 0a  TE_OK;..no_mem:.
8630: 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c    db->mallocFail
8640: 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65  ed = 1;.  sqlite
8650: 33 44 62 46 72 65 65 28 64 62 2c 20 7a 56 61 6c  3DbFree(db, zVal
8660: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75  );.  sqlite3Valu
8670: 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 20 20 2a  eFree(pVal);.  *
8680: 70 70 56 61 6c 20 3d 20 30 3b 0a 20 20 72 65 74  ppVal = 0;.  ret
8690: 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  urn SQLITE_NOMEM
86a0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 61 6e 67  ;.}../*.** Chang
86b0: 65 20 74 68 65 20 73 74 72 69 6e 67 20 76 61 6c  e the string val
86c0: 75 65 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33  ue of an sqlite3
86d0: 5f 76 61 6c 75 65 20 6f 62 6a 65 63 74 0a 2a 2f  _value object.*/
86e0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
86f0: 75 65 53 65 74 53 74 72 28 0a 20 20 73 71 6c 69  ueSetStr(.  sqli
8700: 74 65 33 5f 76 61 6c 75 65 20 2a 76 2c 20 20 20  te3_value *v,   
8710: 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 62 65    /* Value to be
8720: 20 73 65 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 2c   set */.  int n,
8730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8740: 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 73 74 72  /* Length of str
8750: 69 6e 67 20 7a 20 2a 2f 0a 20 20 63 6f 6e 73 74  ing z */.  const
8760: 20 76 6f 69 64 20 2a 7a 2c 20 20 20 20 20 20 20   void *z,       
8770: 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
8780: 6e 65 77 20 73 74 72 69 6e 67 20 2a 2f 0a 20 20  new string */.  
8790: 75 38 20 65 6e 63 2c 20 20 20 20 20 20 20 20 20  u8 enc,         
87a0: 20 20 20 20 20 20 2f 2a 20 45 6e 63 6f 64 69 6e        /* Encodin
87b0: 67 20 74 6f 20 75 73 65 20 2a 2f 0a 20 20 76 6f  g to use */.  vo
87c0: 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a  id (*xDel)(void*
87d0: 29 20 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f  )   /* Destructo
87e0: 72 20 66 6f 72 20 74 68 65 20 73 74 72 69 6e 67  r for the string
87f0: 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 76 20 29   */.){.  if( v )
8800: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
8810: 65 74 53 74 72 28 28 4d 65 6d 20 2a 29 76 2c 20  etStr((Mem *)v, 
8820: 7a 2c 20 6e 2c 20 65 6e 63 2c 20 78 44 65 6c 29  z, n, enc, xDel)
8830: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46 72 65 65 20  ;.}../*.** Free 
8840: 61 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  an sqlite3_value
8850: 20 6f 62 6a 65 63 74 0a 2a 2f 0a 76 6f 69 64 20   object.*/.void 
8860: 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65  sqlite3ValueFree
8870: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
8880: 76 29 7b 0a 20 20 69 66 28 20 21 76 20 29 20 72  v){.  if( !v ) r
8890: 65 74 75 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33  eturn;.  sqlite3
88a0: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 28  VdbeMemRelease((
88b0: 4d 65 6d 20 2a 29 76 29 3b 0a 20 20 73 71 6c 69  Mem *)v);.  sqli
88c0: 74 65 33 44 62 46 72 65 65 28 28 28 4d 65 6d 2a  te3DbFree(((Mem*
88d0: 29 76 29 2d 3e 64 62 2c 20 76 29 3b 0a 7d 0a 0a  )v)->db, v);.}..
88e0: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
88f0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
8900: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 5f   in the sqlite3_
8910: 76 61 6c 75 65 20 6f 62 6a 65 63 74 20 61 73 73  value object ass
8920: 75 6d 69 6e 67 0a 2a 2a 20 74 68 61 74 20 69 74  uming.** that it
8930: 20 75 73 65 73 20 74 68 65 20 65 6e 63 6f 64 69   uses the encodi
8940: 6e 67 20 22 65 6e 63 22 0a 2a 2f 0a 69 6e 74 20  ng "enc".*/.int 
8950: 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65  sqlite3ValueByte
8960: 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  s(sqlite3_value 
8970: 2a 70 56 61 6c 2c 20 75 38 20 65 6e 63 29 7b 0a  *pVal, u8 enc){.
8980: 20 20 4d 65 6d 20 2a 70 20 3d 20 28 4d 65 6d 2a    Mem *p = (Mem*
8990: 29 70 56 61 6c 3b 0a 20 20 69 66 28 20 28 70 2d  )pVal;.  if( (p-
89a0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
89b0: 62 29 21 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33  b)!=0 || sqlite3
89c0: 56 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20  ValueText(pVal, 
89d0: 65 6e 63 29 20 29 7b 0a 20 20 20 20 69 66 28 20  enc) ){.    if( 
89e0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  p->flags & MEM_Z
89f0: 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ero ){.      ret
8a00: 75 72 6e 20 70 2d 3e 6e 20 2b 20 70 2d 3e 75 2e  urn p->n + p->u.
8a10: 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d 65 6c 73 65  nZero;.    }else
8a20: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 70  {.      return p
8a30: 2d 3e 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ->n;.    }.  }. 
8a40: 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a            return 0;.}.