/ Hex Artifact Content
Login

Artifact 5e6effb96dd53d233361cbfaa3f0a43b9af689e9:


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 69 66 28 20 70 2d 3e 66 6c  ) );.  if( p->fl
2190: 61 67 73 26 4d 45 4d 5f 41 67 67 20 29 7b 0a 20  ags&MEM_Agg ){. 
21a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
21b0: 6d 46 69 6e 61 6c 69 7a 65 28 70 2c 20 70 2d 3e  mFinalize(p, p->
21c0: 75 2e 70 44 65 66 29 3b 0a 20 20 20 20 61 73 73  u.pDef);.    ass
21d0: 65 72 74 28 20 28 70 2d 3e 66 6c 61 67 73 20 26  ert( (p->flags &
21e0: 20 4d 45 4d 5f 41 67 67 29 3d 3d 30 20 29 3b 0a   MEM_Agg)==0 );.
21f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2200: 65 6d 52 65 6c 65 61 73 65 28 70 29 3b 0a 20 20  emRelease(p);.  
2210: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
2220: 67 73 26 4d 45 4d 5f 44 79 6e 20 26 26 20 70 2d  gs&MEM_Dyn && p-
2230: 3e 78 44 65 6c 20 29 7b 0a 20 20 20 20 61 73 73  >xDel ){.    ass
2240: 65 72 74 28 20 28 70 2d 3e 66 6c 61 67 73 26 4d  ert( (p->flags&M
2250: 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 3b  EM_RowSet)==0 );
2260: 0a 20 20 20 20 70 2d 3e 78 44 65 6c 28 28 76 6f  .    p->xDel((vo
2270: 69 64 20 2a 29 70 2d 3e 7a 29 3b 0a 20 20 20 20  id *)p->z);.    
2280: 70 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 7d  p->xDel = 0;.  }
2290: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
22a0: 73 26 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a  s&MEM_RowSet ){.
22b0: 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65      sqlite3RowSe
22c0: 74 43 6c 65 61 72 28 70 2d 3e 75 2e 70 52 6f 77  tClear(p->u.pRow
22d0: 53 65 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  Set);.  }else if
22e0: 28 20 70 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46  ( p->flags&MEM_F
22f0: 72 61 6d 65 20 29 7b 0a 20 20 20 20 73 71 6c 69  rame ){.    sqli
2300: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
2310: 6c 28 70 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  l(p);.  }.}../*.
2320: 2a 2a 20 52 65 6c 65 61 73 65 20 61 6e 79 20 6d  ** Release any m
2330: 65 6d 6f 72 79 20 68 65 6c 64 20 62 79 20 74 68  emory held by th
2340: 65 20 4d 65 6d 2e 20 54 68 69 73 20 6d 61 79 20  e Mem. This may 
2350: 6c 65 61 76 65 20 74 68 65 20 4d 65 6d 20 69 6e  leave the Mem in
2360: 20 61 6e 0a 2a 2a 20 69 6e 63 6f 6e 73 69 73 74   an.** inconsist
2370: 65 6e 74 20 73 74 61 74 65 2c 20 66 6f 72 20 65  ent state, for e
2380: 78 61 6d 70 6c 65 20 77 69 74 68 20 28 4d 65 6d  xample with (Mem
2390: 2e 7a 3d 3d 30 29 20 61 6e 64 0a 2a 2a 20 28 4d  .z==0) and.** (M
23a0: 65 6d 2e 74 79 70 65 3d 3d 53 51 4c 49 54 45 5f  em.type==SQLITE_
23b0: 54 45 58 54 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73  TEXT)..*/.void s
23c0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
23d0: 65 61 73 65 28 4d 65 6d 20 2a 70 29 7b 0a 20 20  ease(Mem *p){.  
23e0: 4d 65 6d 52 65 6c 65 61 73 65 45 78 74 28 70 29  MemReleaseExt(p)
23f0: 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
2400: 65 28 70 2d 3e 64 62 2c 20 70 2d 3e 7a 4d 61 6c  e(p->db, p->zMal
2410: 6c 6f 63 29 3b 0a 20 20 70 2d 3e 7a 20 3d 20 30  loc);.  p->z = 0
2420: 3b 0a 20 20 70 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d  ;.  p->zMalloc =
2430: 20 30 3b 0a 20 20 70 2d 3e 78 44 65 6c 20 3d 20   0;.  p->xDel = 
2440: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  0;.}../*.** Conv
2450: 65 72 74 20 61 20 36 34 2d 62 69 74 20 49 45 45  ert a 64-bit IEE
2460: 45 20 64 6f 75 62 6c 65 20 69 6e 74 6f 20 61 20  E double into a 
2470: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
2480: 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65  teger..** If the
2490: 20 64 6f 75 62 6c 65 20 69 73 20 74 6f 6f 20 6c   double is too l
24a0: 61 72 67 65 2c 20 72 65 74 75 72 6e 20 30 78 38  arge, return 0x8
24b0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 2e  000000000000000.
24c0: 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 73 79 73 74  .**.** Most syst
24d0: 65 6d 73 20 61 70 70 65 61 72 20 74 6f 20 64 6f  ems appear to do
24e0: 20 74 68 69 73 20 73 69 6d 70 6c 79 20 62 79 20   this simply by 
24f0: 61 73 73 69 67 6e 69 6e 67 0a 2a 2a 20 76 61 72  assigning.** var
2500: 69 61 62 6c 65 73 20 61 6e 64 20 77 69 74 68 6f  iables and witho
2510: 75 74 20 74 68 65 20 65 78 74 72 61 20 72 61 6e  ut the extra ran
2520: 67 65 20 74 65 73 74 73 2e 20 20 42 75 74 0a 2a  ge tests.  But.*
2530: 2a 20 74 68 65 72 65 20 61 72 65 20 72 65 70 6f  * there are repo
2540: 72 74 73 20 74 68 61 74 20 77 69 6e 64 6f 77 73  rts that windows
2550: 20 74 68 72 6f 77 73 20 61 6e 20 65 78 70 65 63   throws an expec
2560: 74 69 6f 6e 0a 2a 2a 20 69 66 20 74 68 65 20 66  tion.** if the f
2570: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
2580: 6c 75 65 20 69 73 20 6f 75 74 20 6f 66 20 72 61  lue is out of ra
2590: 6e 67 65 2e 20 28 53 65 65 20 74 69 63 6b 65 74  nge. (See ticket
25a0: 20 23 32 38 38 30 2e 29 0a 2a 2a 20 42 65 63 61   #2880.).** Beca
25b0: 75 73 65 20 77 65 20 64 6f 20 6e 6f 74 20 63 6f  use we do not co
25c0: 6d 70 6c 65 74 65 6c 79 20 75 6e 64 65 72 73 74  mpletely underst
25d0: 61 6e 64 20 74 68 65 20 70 72 6f 62 6c 65 6d 2c  and the problem,
25e0: 20 77 65 20 77 69 6c 6c 0a 2a 2a 20 74 61 6b 65   we will.** take
25f0: 20 74 68 65 20 63 6f 6e 73 65 72 76 61 74 69 76   the conservativ
2600: 65 20 61 70 70 72 6f 61 63 68 20 61 6e 64 20 61  e approach and a
2610: 6c 77 61 79 73 20 64 6f 20 72 61 6e 67 65 20 74  lways do range t
2620: 65 73 74 73 0a 2a 2a 20 62 65 66 6f 72 65 20 61  ests.** before a
2630: 74 74 65 6d 70 74 69 6e 67 20 74 68 65 20 63 6f  ttempting the co
2640: 6e 76 65 72 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 61  nversion..*/.sta
2650: 74 69 63 20 69 36 34 20 64 6f 75 62 6c 65 54 6f  tic i64 doubleTo
2660: 49 6e 74 36 34 28 64 6f 75 62 6c 65 20 72 29 7b  Int64(double r){
2670: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
2680: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
2690: 4e 54 0a 20 20 2f 2a 20 57 68 65 6e 20 66 6c 6f  NT.  /* When flo
26a0: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 69 73 20 6f  ating-point is o
26b0: 6d 69 74 74 65 64 2c 20 64 6f 75 62 6c 65 20 61  mitted, double a
26c0: 6e 64 20 69 6e 74 36 34 20 61 72 65 20 74 68 65  nd int64 are the
26d0: 20 73 61 6d 65 20 74 68 69 6e 67 20 2a 2f 0a 20   same thing */. 
26e0: 20 72 65 74 75 72 6e 20 72 3b 0a 23 65 6c 73 65   return r;.#else
26f0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 4d 61 6e 79 20  .  /*.  ** Many 
2700: 63 6f 6d 70 69 6c 65 72 73 20 77 65 20 65 6e 63  compilers we enc
2710: 6f 75 6e 74 65 72 20 64 6f 20 6e 6f 74 20 64 65  ounter do not de
2720: 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73 20 66  fine constants f
2730: 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d 69 6e 69  or the.  ** mini
2740: 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20  mum and maximum 
2750: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 73 2c  64-bit integers,
2760: 20 6f 72 20 74 68 65 79 20 64 65 66 69 6e 65 20   or they define 
2770: 74 68 65 6d 0a 20 20 2a 2a 20 69 6e 63 6f 6e 73  them.  ** incons
2780: 69 73 74 65 6e 74 6c 79 2e 20 20 41 6e 64 20 6d  istently.  And m
2790: 61 6e 79 20 64 6f 20 6e 6f 74 20 75 6e 64 65 72  any do not under
27a0: 73 74 61 6e 64 20 74 68 65 20 22 4c 4c 22 20 6e  stand the "LL" n
27b0: 6f 74 61 74 69 6f 6e 2e 0a 20 20 2a 2a 20 53 6f  otation..  ** So
27c0: 20 77 65 20 64 65 66 69 6e 65 20 6f 75 72 20 6f   we define our o
27d0: 77 6e 20 73 74 61 74 69 63 20 63 6f 6e 73 74 61  wn static consta
27e0: 6e 74 73 20 68 65 72 65 20 75 73 69 6e 67 20 6e  nts here using n
27f0: 6f 74 68 69 6e 67 0a 20 20 2a 2a 20 6c 61 72 67  othing.  ** larg
2800: 65 72 20 74 68 61 6e 20 61 20 33 32 2d 62 69 74  er than a 32-bit
2810: 20 69 6e 74 65 67 65 72 20 63 6f 6e 73 74 61 6e   integer constan
2820: 74 2e 0a 20 20 2a 2f 0a 20 20 73 74 61 74 69 63  t..  */.  static
2830: 20 63 6f 6e 73 74 20 69 36 34 20 6d 61 78 49 6e   const i64 maxIn
2840: 74 20 3d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  t = LARGEST_INT6
2850: 34 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  4;.  static cons
2860: 74 20 69 36 34 20 6d 69 6e 49 6e 74 20 3d 20 53  t i64 minInt = S
2870: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 3b 0a 0a  MALLEST_INT64;..
2880: 20 20 69 66 28 20 72 3c 28 64 6f 75 62 6c 65 29    if( r<(double)
2890: 6d 69 6e 49 6e 74 20 29 7b 0a 20 20 20 20 72 65  minInt ){.    re
28a0: 74 75 72 6e 20 6d 69 6e 49 6e 74 3b 0a 20 20 7d  turn minInt;.  }
28b0: 65 6c 73 65 20 69 66 28 20 72 3e 28 64 6f 75 62  else if( r>(doub
28c0: 6c 65 29 6d 61 78 49 6e 74 20 29 7b 0a 20 20 20  le)maxInt ){.   
28d0: 20 2f 2a 20 6d 69 6e 49 6e 74 20 69 73 20 63 6f   /* minInt is co
28e0: 72 72 65 63 74 20 68 65 72 65 20 2d 20 6e 6f 74  rrect here - not
28f0: 20 6d 61 78 49 6e 74 2e 20 20 49 74 20 74 75 72   maxInt.  It tur
2900: 6e 73 20 6f 75 74 20 74 68 61 74 20 61 73 73 69  ns out that assi
2910: 67 6e 69 6e 67 0a 20 20 20 20 2a 2a 20 61 20 76  gning.    ** a v
2920: 65 72 79 20 6c 61 72 67 65 20 70 6f 73 69 74 69  ery large positi
2930: 76 65 20 6e 75 6d 62 65 72 20 74 6f 20 61 6e 20  ve number to an 
2940: 69 6e 74 65 67 65 72 20 72 65 73 75 6c 74 73 20  integer results 
2950: 69 6e 20 61 20 76 65 72 79 20 6c 61 72 67 65 0a  in a very large.
2960: 20 20 20 20 2a 2a 20 6e 65 67 61 74 69 76 65 20      ** negative 
2970: 69 6e 74 65 67 65 72 2e 20 20 54 68 69 73 20 6d  integer.  This m
2980: 61 6b 65 73 20 6e 6f 20 73 65 6e 73 65 2c 20 62  akes no sense, b
2990: 75 74 20 69 74 20 69 73 20 77 68 61 74 20 78 38  ut it is what x8
29a0: 36 20 68 61 72 64 77 61 72 65 0a 20 20 20 20 2a  6 hardware.    *
29b0: 2a 20 64 6f 65 73 20 73 6f 20 66 6f 72 20 63 6f  * does so for co
29c0: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 65 20 77  mpatibility we w
29d0: 69 6c 6c 20 64 6f 20 74 68 65 20 73 61 6d 65 20  ill do the same 
29e0: 69 6e 20 73 6f 66 74 77 61 72 65 2e 20 2a 2f 0a  in software. */.
29f0: 20 20 20 20 72 65 74 75 72 6e 20 6d 69 6e 49 6e      return minIn
2a00: 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
2a10: 72 65 74 75 72 6e 20 28 69 36 34 29 72 3b 0a 20  return (i64)r;. 
2a20: 20 7d 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a   }.#endif.}../*.
2a30: 2a 2a 20 52 65 74 75 72 6e 20 73 6f 6d 65 20 6b  ** Return some k
2a40: 69 6e 64 20 6f 66 20 69 6e 74 65 67 65 72 20 76  ind of integer v
2a50: 61 6c 75 65 20 77 68 69 63 68 20 69 73 20 74 68  alue which is th
2a60: 65 20 62 65 73 74 20 77 65 20 63 61 6e 20 64 6f  e best we can do
2a70: 0a 2a 2a 20 61 74 20 72 65 70 72 65 73 65 6e 74  .** at represent
2a80: 69 6e 67 20 74 68 65 20 76 61 6c 75 65 20 74 68  ing the value th
2a90: 61 74 20 2a 70 4d 65 6d 20 64 65 73 63 72 69 62  at *pMem describ
2aa0: 65 73 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  es as an integer
2ab0: 2e 0a 2a 2a 20 49 66 20 70 4d 65 6d 20 69 73 20  ..** If pMem is 
2ac0: 61 6e 20 69 6e 74 65 67 65 72 2c 20 74 68 65 6e  an integer, then
2ad0: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 65 78   the value is ex
2ae0: 61 63 74 2e 20 20 49 66 20 70 4d 65 6d 20 69 73  act.  If pMem is
2af0: 0a 2a 2a 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70  .** a floating-p
2b00: 6f 69 6e 74 20 74 68 65 6e 20 74 68 65 20 76 61  oint then the va
2b10: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 69 73 20  lue returned is 
2b20: 74 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 74  the integer part
2b30: 2e 0a 2a 2a 20 49 66 20 70 4d 65 6d 20 69 73 20  ..** If pMem is 
2b40: 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  a string or blob
2b50: 2c 20 74 68 65 6e 20 77 65 20 6d 61 6b 65 20 61  , then we make a
2b60: 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6e  n attempt to con
2b70: 76 65 72 74 0a 2a 2a 20 69 74 20 69 6e 74 6f 20  vert.** it into 
2b80: 61 20 69 6e 74 65 67 65 72 20 61 6e 64 20 72 65  a integer and re
2b90: 74 75 72 6e 20 74 68 61 74 2e 20 20 49 66 20 70  turn that.  If p
2ba0: 4d 65 6d 20 72 65 70 72 65 73 65 6e 74 73 20 61  Mem represents a
2bb0: 6e 0a 2a 2a 20 61 6e 20 53 51 4c 2d 4e 55 4c 4c  n.** an SQL-NULL
2bc0: 20 76 61 6c 75 65 2c 20 72 65 74 75 72 6e 20 30   value, return 0
2bd0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 70 4d 65 6d 20  ..**.** If pMem 
2be0: 72 65 70 72 65 73 65 6e 74 73 20 61 20 73 74 72  represents a str
2bf0: 69 6e 67 20 76 61 6c 75 65 2c 20 69 74 73 20 65  ing value, its e
2c00: 6e 63 6f 64 69 6e 67 20 6d 69 67 68 74 20 62 65  ncoding might be
2c10: 20 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 69 36 34   changed..*/.i64
2c20: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
2c30: 61 6c 75 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b  alue(Mem *pMem){
2c40: 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20  .  int flags;.  
2c50: 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 64 62  assert( pMem->db
2c60: 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f 6d  ==0 || sqlite3_m
2c70: 75 74 65 78 5f 68 65 6c 64 28 70 4d 65 6d 2d 3e  utex_held(pMem->
2c80: 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20  db->mutex) );.  
2c90: 61 73 73 65 72 74 28 20 45 49 47 48 54 5f 42 59  assert( EIGHT_BY
2ca0: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 70 4d 65  TE_ALIGNMENT(pMe
2cb0: 6d 29 20 29 3b 0a 20 20 66 6c 61 67 73 20 3d 20  m) );.  flags = 
2cc0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pMem->flags;.  i
2cd0: 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  f( flags & MEM_I
2ce0: 6e 74 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  nt ){.    return
2cf0: 20 70 4d 65 6d 2d 3e 75 2e 69 3b 0a 20 20 7d 65   pMem->u.i;.  }e
2d00: 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26 20  lse if( flags & 
2d10: 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20  MEM_Real ){.    
2d20: 72 65 74 75 72 6e 20 64 6f 75 62 6c 65 54 6f 49  return doubleToI
2d30: 6e 74 36 34 28 70 4d 65 6d 2d 3e 72 29 3b 0a 20  nt64(pMem->r);. 
2d40: 20 7d 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73   }else if( flags
2d50: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
2d60: 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20 69 36 34  Blob) ){.    i64
2d70: 20 76 61 6c 75 65 20 3d 20 30 3b 0a 20 20 20 20   value = 0;.    
2d80: 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 7a 20  assert( pMem->z 
2d90: 7c 7c 20 70 4d 65 6d 2d 3e 6e 3d 3d 30 20 29 3b  || pMem->n==0 );
2da0: 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70  .    testcase( p
2db0: 4d 65 6d 2d 3e 7a 3d 3d 30 20 29 3b 0a 20 20 20  Mem->z==0 );.   
2dc0: 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70   sqlite3Atoi64(p
2dd0: 4d 65 6d 2d 3e 7a 2c 20 26 76 61 6c 75 65 2c 20  Mem->z, &value, 
2de0: 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65  pMem->n, pMem->e
2df0: 6e 63 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  nc);.    return 
2e00: 76 61 6c 75 65 3b 0a 20 20 7d 65 6c 73 65 7b 0a  value;.  }else{.
2e10: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
2e20: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  }.}../*.** Retur
2e30: 6e 20 74 68 65 20 62 65 73 74 20 72 65 70 72 65  n the best repre
2e40: 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 70 4d 65  sentation of pMe
2e50: 6d 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 65  m that we can ge
2e60: 74 20 69 6e 74 6f 20 61 0a 2a 2a 20 64 6f 75 62  t into a.** doub
2e70: 6c 65 2e 20 20 49 66 20 70 4d 65 6d 20 69 73 20  le.  If pMem is 
2e80: 61 6c 72 65 61 64 79 20 61 20 64 6f 75 62 6c 65  already a double
2e90: 20 6f 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   or an integer, 
2ea0: 72 65 74 75 72 6e 20 69 74 73 0a 2a 2a 20 76 61  return its.** va
2eb0: 6c 75 65 2e 20 20 49 66 20 69 74 20 69 73 20 61  lue.  If it is a
2ec0: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c   string or blob,
2ed0: 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   try to convert 
2ee0: 69 74 20 74 6f 20 61 20 64 6f 75 62 6c 65 2e 0a  it to a double..
2ef0: 2a 2a 20 49 66 20 69 74 20 69 73 20 61 20 4e 55  ** If it is a NU
2f00: 4c 4c 2c 20 72 65 74 75 72 6e 20 30 2e 30 2e 0a  LL, return 0.0..
2f10: 2a 2f 0a 64 6f 75 62 6c 65 20 73 71 6c 69 74 65  */.double sqlite
2f20: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 4d  3VdbeRealValue(M
2f30: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73  em *pMem){.  ass
2f40: 65 72 74 28 20 70 4d 65 6d 2d 3e 64 62 3d 3d 30  ert( pMem->db==0
2f50: 20 7c 7c 20 73 71 6c 69 74 65 33 5f 6d 75 74 65   || sqlite3_mute
2f60: 78 5f 68 65 6c 64 28 70 4d 65 6d 2d 3e 64 62 2d  x_held(pMem->db-
2f70: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 61 73 73  >mutex) );.  ass
2f80: 65 72 74 28 20 45 49 47 48 54 5f 42 59 54 45 5f  ert( EIGHT_BYTE_
2f90: 41 4c 49 47 4e 4d 45 4e 54 28 70 4d 65 6d 29 20  ALIGNMENT(pMem) 
2fa0: 29 3b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66  );.  if( pMem->f
2fb0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
2fc0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4d  ){.    return pM
2fd0: 65 6d 2d 3e 72 3b 0a 20 20 7d 65 6c 73 65 20 69  em->r;.  }else i
2fe0: 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  f( pMem->flags &
2ff0: 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20   MEM_Int ){.    
3000: 72 65 74 75 72 6e 20 28 64 6f 75 62 6c 65 29 70  return (double)p
3010: 4d 65 6d 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73  Mem->u.i;.  }els
3020: 65 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67  e if( pMem->flag
3030: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
3040: 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20 2f 2a  _Blob) ){.    /*
3050: 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61   (double)0 In ca
3060: 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49  se of SQLITE_OMI
3070: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
3080: 2e 2e 2e 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c  ... */.    doubl
3090: 65 20 76 61 6c 20 3d 20 28 64 6f 75 62 6c 65 29  e val = (double)
30a0: 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 41 74  0;.    sqlite3At
30b0: 6f 46 28 70 4d 65 6d 2d 3e 7a 2c 20 26 76 61 6c  oF(pMem->z, &val
30c0: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
30d0: 3e 65 6e 63 29 3b 0a 20 20 20 20 72 65 74 75 72  >enc);.    retur
30e0: 6e 20 76 61 6c 3b 0a 20 20 7d 65 6c 73 65 7b 0a  n val;.  }else{.
30f0: 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30      /* (double)0
3100: 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c 49   In case of SQLI
3110: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
3120: 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20  _POINT... */.   
3130: 20 72 65 74 75 72 6e 20 28 64 6f 75 62 6c 65 29   return (double)
3140: 30 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  0;.  }.}../*.** 
3150: 54 68 65 20 4d 45 4d 20 73 74 72 75 63 74 75 72  The MEM structur
3160: 65 20 69 73 20 61 6c 72 65 61 64 79 20 61 20 4d  e is already a M
3170: 45 4d 5f 52 65 61 6c 2e 20 20 54 72 79 20 74 6f  EM_Real.  Try to
3180: 20 61 6c 73 6f 20 6d 61 6b 65 20 69 74 20 61 0a   also make it a.
3190: 2a 2a 20 4d 45 4d 5f 49 6e 74 20 69 66 20 77 65  ** MEM_Int if we
31a0: 20 63 61 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71   can..*/.void sq
31b0: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
31c0: 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 4d  Affinity(Mem *pM
31d0: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 70  em){.  assert( p
31e0: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
31f0: 5f 52 65 61 6c 20 29 3b 0a 20 20 61 73 73 65 72  _Real );.  asser
3200: 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
3210: 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
3220: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d   );.  assert( pM
3230: 65 6d 2d 3e 64 62 3d 3d 30 20 7c 7c 20 73 71 6c  em->db==0 || sql
3240: 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28  ite3_mutex_held(
3250: 70 4d 65 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78 29  pMem->db->mutex)
3260: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 45 49   );.  assert( EI
3270: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
3280: 4e 54 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 70  NT(pMem) );..  p
3290: 4d 65 6d 2d 3e 75 2e 69 20 3d 20 64 6f 75 62 6c  Mem->u.i = doubl
32a0: 65 54 6f 49 6e 74 36 34 28 70 4d 65 6d 2d 3e 72  eToInt64(pMem->r
32b0: 29 3b 0a 0a 20 20 2f 2a 20 4f 6e 6c 79 20 6d 61  );..  /* Only ma
32c0: 72 6b 20 74 68 65 20 76 61 6c 75 65 20 61 73 20  rk the value as 
32d0: 61 6e 20 69 6e 74 65 67 65 72 20 69 66 0a 20 20  an integer if.  
32e0: 2a 2a 0a 20 20 2a 2a 20 20 20 20 28 31 29 20 74  **.  **    (1) t
32f0: 68 65 20 72 6f 75 6e 64 2d 74 72 69 70 20 63 6f  he round-trip co
3300: 6e 76 65 72 73 69 6f 6e 20 72 65 61 6c 2d 3e 69  nversion real->i
3310: 6e 74 2d 3e 72 65 61 6c 20 69 73 20 61 20 6e 6f  nt->real is a no
3320: 2d 6f 70 2c 20 61 6e 64 0a 20 20 2a 2a 20 20 20  -op, and.  **   
3330: 20 28 32 29 20 54 68 65 20 69 6e 74 65 67 65 72   (2) The integer
3340: 20 69 73 20 6e 65 69 74 68 65 72 20 74 68 65 20   is neither the 
3350: 6c 61 72 67 65 73 74 20 6e 6f 72 20 74 68 65 20  largest nor the 
3360: 73 6d 61 6c 6c 65 73 74 0a 20 20 2a 2a 20 20 20  smallest.  **   
3370: 20 20 20 20 20 70 6f 73 73 69 62 6c 65 20 69 6e       possible in
3380: 74 65 67 65 72 20 28 74 69 63 6b 65 74 20 23 33  teger (ticket #3
3390: 39 32 32 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  922).  **.  ** T
33a0: 68 65 20 73 65 63 6f 6e 64 20 61 6e 64 20 74 68  he second and th
33b0: 69 72 64 20 74 65 72 6d 73 20 69 6e 20 74 68 65  ird terms in the
33c0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 64 69   following condi
33d0: 74 69 6f 6e 61 6c 20 65 6e 66 6f 72 63 65 73 0a  tional enforces.
33e0: 20 20 2a 2a 20 74 68 65 20 73 65 63 6f 6e 64 20    ** the second 
33f0: 63 6f 6e 64 69 74 69 6f 6e 20 75 6e 64 65 72 20  condition under 
3400: 74 68 65 20 61 73 73 75 6d 70 74 69 6f 6e 20 74  the assumption t
3410: 68 61 74 20 61 64 64 69 74 69 6f 6e 20 6f 76 65  hat addition ove
3420: 72 66 6c 6f 77 20 63 61 75 73 65 73 0a 20 20 2a  rflow causes.  *
3430: 2a 20 76 61 6c 75 65 73 20 74 6f 20 77 72 61 70  * values to wrap
3440: 20 61 72 6f 75 6e 64 2e 20 20 4f 6e 20 78 38 36   around.  On x86
3450: 20 68 61 72 64 77 61 72 65 2c 20 74 68 65 20 74   hardware, the t
3460: 68 69 72 64 20 74 65 72 6d 20 69 73 20 61 6c 77  hird term is alw
3470: 61 79 73 0a 20 20 2a 2a 20 74 72 75 65 20 61 6e  ays.  ** true an
3480: 64 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74  d could be omitt
3490: 65 64 2e 20 20 42 75 74 20 77 65 20 6c 65 61 76  ed.  But we leav
34a0: 65 20 69 74 20 69 6e 20 62 65 63 61 75 73 65 20  e it in because 
34b0: 6f 74 68 65 72 0a 20 20 2a 2a 20 61 72 63 68 69  other.  ** archi
34c0: 74 65 63 74 75 72 65 73 20 6d 69 67 68 74 20 62  tectures might b
34d0: 65 68 61 76 65 20 64 69 66 66 65 72 65 6e 74 6c  ehave differentl
34e0: 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 4d  y..  */.  if( pM
34f0: 65 6d 2d 3e 72 3d 3d 28 64 6f 75 62 6c 65 29 70  em->r==(double)p
3500: 4d 65 6d 2d 3e 75 2e 69 20 26 26 20 70 4d 65 6d  Mem->u.i && pMem
3510: 2d 3e 75 2e 69 3e 53 4d 41 4c 4c 45 53 54 5f 49  ->u.i>SMALLEST_I
3520: 4e 54 36 34 0a 20 20 20 20 20 20 26 26 20 41 4c  NT64.      && AL
3530: 57 41 59 53 28 70 4d 65 6d 2d 3e 75 2e 69 3c 4c  WAYS(pMem->u.i<L
3540: 41 52 47 45 53 54 5f 49 4e 54 36 34 29 20 29 7b  ARGEST_INT64) ){
3550: 0a 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73  .    pMem->flags
3560: 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d   |= MEM_Int;.  }
3570: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72  .}../*.** Conver
3580: 74 20 70 4d 65 6d 20 74 6f 20 74 79 70 65 20 69  t pMem to type i
3590: 6e 74 65 67 65 72 2e 20 20 49 6e 76 61 6c 69 64  nteger.  Invalid
35a0: 61 74 65 20 61 6e 79 20 70 72 69 6f 72 20 72 65  ate any prior re
35b0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 73 2e 0a 2a  presentations..*
35c0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  /.int sqlite3Vdb
35d0: 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 4d  eMemIntegerify(M
35e0: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73  em *pMem){.  ass
35f0: 65 72 74 28 20 70 4d 65 6d 2d 3e 64 62 3d 3d 30  ert( pMem->db==0
3600: 20 7c 7c 20 73 71 6c 69 74 65 33 5f 6d 75 74 65   || sqlite3_mute
3610: 78 5f 68 65 6c 64 28 70 4d 65 6d 2d 3e 64 62 2d  x_held(pMem->db-
3620: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 61 73 73  >mutex) );.  ass
3630: 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
3640: 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
3650: 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
3660: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
3670: 4d 45 4e 54 28 70 4d 65 6d 29 20 29 3b 0a 0a 20  MENT(pMem) );.. 
3680: 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 73 71 6c   pMem->u.i = sql
3690: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
36a0: 28 70 4d 65 6d 29 3b 0a 20 20 4d 65 6d 53 65 74  (pMem);.  MemSet
36b0: 54 79 70 65 46 6c 61 67 28 70 4d 65 6d 2c 20 4d  TypeFlag(pMem, M
36c0: 45 4d 5f 49 6e 74 29 3b 0a 20 20 72 65 74 75 72  EM_Int);.  retur
36d0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a  n SQLITE_OK;.}..
36e0: 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 70 4d  /*.** Convert pM
36f0: 65 6d 20 73 6f 20 74 68 61 74 20 69 74 20 69 73  em so that it is
3700: 20 6f 66 20 74 79 70 65 20 4d 45 4d 5f 52 65 61   of type MEM_Rea
3710: 6c 2e 0a 2a 2a 20 49 6e 76 61 6c 69 64 61 74 65  l..** Invalidate
3720: 20 61 6e 79 20 70 72 69 6f 72 20 72 65 70 72 65   any prior repre
3730: 73 65 6e 74 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 69  sentations..*/.i
3740: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  nt sqlite3VdbeMe
3750: 6d 52 65 61 6c 69 66 79 28 4d 65 6d 20 2a 70 4d  mRealify(Mem *pM
3760: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 70  em){.  assert( p
3770: 4d 65 6d 2d 3e 64 62 3d 3d 30 20 7c 7c 20 73 71  Mem->db==0 || sq
3780: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64  lite3_mutex_held
3790: 28 70 4d 65 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78  (pMem->db->mutex
37a0: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 45  ) );.  assert( E
37b0: 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d  IGHT_BYTE_ALIGNM
37c0: 45 4e 54 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20  ENT(pMem) );..  
37d0: 70 4d 65 6d 2d 3e 72 20 3d 20 73 71 6c 69 74 65  pMem->r = sqlite
37e0: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
37f0: 4d 65 6d 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79  Mem);.  MemSetTy
3800: 70 65 46 6c 61 67 28 70 4d 65 6d 2c 20 4d 45 4d  peFlag(pMem, MEM
3810: 5f 52 65 61 6c 29 3b 0a 20 20 72 65 74 75 72 6e  _Real);.  return
3820: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f   SQLITE_OK;.}../
3830: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 70 4d 65  *.** Convert pMe
3840: 6d 20 73 6f 20 74 68 61 74 20 69 74 20 68 61 73  m so that it has
3850: 20 74 79 70 65 73 20 4d 45 4d 5f 52 65 61 6c 20   types MEM_Real 
3860: 6f 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 62 6f  or MEM_Int or bo
3870: 74 68 2e 0a 2a 2a 20 49 6e 76 61 6c 69 64 61 74  th..** Invalidat
3880: 65 20 61 6e 79 20 70 72 69 6f 72 20 72 65 70 72  e any prior repr
3890: 65 73 65 6e 74 61 74 69 6f 6e 73 2e 0a 2a 2a 0a  esentations..**.
38a0: 2a 2a 20 45 76 65 72 79 20 65 66 66 6f 72 74 20  ** Every effort 
38b0: 69 73 20 6d 61 64 65 20 74 6f 20 66 6f 72 63 65  is made to force
38c0: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 2c   the conversion,
38d0: 20 65 76 65 6e 20 69 66 20 74 68 65 20 69 6e 70   even if the inp
38e0: 75 74 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e  ut.** is a strin
38f0: 67 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  g that does not 
3900: 6c 6f 6f 6b 20 63 6f 6d 70 6c 65 74 65 6c 79 20  look completely 
3910: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2e 20 20  like a number.  
3920: 43 6f 6e 76 65 72 74 0a 2a 2a 20 61 73 20 6d 75  Convert.** as mu
3930: 63 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  ch of the string
3940: 20 61 73 20 77 65 20 63 61 6e 20 61 6e 64 20 69   as we can and i
3950: 67 6e 6f 72 65 20 74 68 65 20 72 65 73 74 2e 0a  gnore the rest..
3960: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  */.int sqlite3Vd
3970: 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 4d 65  beMemNumerify(Me
3980: 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20  m *pMem){.  if( 
3990: 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28  (pMem->flags & (
39a0: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
39b0: 7c 4d 45 4d 5f 4e 75 6c 6c 29 29 3d 3d 30 20 29  |MEM_Null))==0 )
39c0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  {.    assert( (p
39d0: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
39e0: 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 29  M_Blob|MEM_Str))
39f0: 21 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  !=0 );.    asser
3a00: 74 28 20 70 4d 65 6d 2d 3e 64 62 3d 3d 30 20 7c  t( pMem->db==0 |
3a10: 7c 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  | sqlite3_mutex_
3a20: 68 65 6c 64 28 70 4d 65 6d 2d 3e 64 62 2d 3e 6d  held(pMem->db->m
3a30: 75 74 65 78 29 20 29 3b 0a 20 20 20 20 69 66 28  utex) );.    if(
3a40: 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36   0==sqlite3Atoi6
3a50: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3a60: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
3a70: 70 4d 65 6d 2d 3e 65 6e 63 29 20 29 7b 0a 20 20  pMem->enc) ){.  
3a80: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
3a90: 61 67 28 70 4d 65 6d 2c 20 4d 45 4d 5f 49 6e 74  ag(pMem, MEM_Int
3aa0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
3ab0: 20 20 20 20 70 4d 65 6d 2d 3e 72 20 3d 20 73 71      pMem->r = sq
3ac0: 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
3ad0: 75 65 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  ue(pMem);.      
3ae0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
3af0: 4d 65 6d 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a  Mem, MEM_Real);.
3b00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
3b10: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
3b20: 28 70 4d 65 6d 29 3b 0a 20 20 20 20 7d 0a 20 20  (pMem);.    }.  
3b30: 7d 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  }.  assert( (pMe
3b40: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
3b50: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  Int|MEM_Real|MEM
3b60: 5f 4e 75 6c 6c 29 29 21 3d 30 20 29 3b 0a 20 20  _Null))!=0 );.  
3b70: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pMem->flags &= ~
3b80: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
3b90: 62 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  b);.  return SQL
3ba0: 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ITE_OK;.}../*.**
3bb0: 20 44 65 6c 65 74 65 20 61 6e 79 20 70 72 65 76   Delete any prev
3bc0: 69 6f 75 73 20 76 61 6c 75 65 20 61 6e 64 20 73  ious value and s
3bd0: 65 74 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  et the value sto
3be0: 72 65 64 20 69 6e 20 2a 70 4d 65 6d 20 74 6f 20  red in *pMem to 
3bf0: 4e 55 4c 4c 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  NULL..*/.void sq
3c00: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
3c10: 75 6c 6c 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a  ull(Mem *pMem){.
3c20: 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67    if( pMem->flag
3c30: 73 20 26 20 4d 45 4d 5f 46 72 61 6d 65 20 29 7b  s & MEM_Frame ){
3c40: 0a 20 20 20 20 56 64 62 65 46 72 61 6d 65 20 2a  .    VdbeFrame *
3c50: 70 46 72 61 6d 65 20 3d 20 70 4d 65 6d 2d 3e 75  pFrame = pMem->u
3c60: 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 46 72  .pFrame;.    pFr
3c70: 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70  ame->pParent = p
3c80: 46 72 61 6d 65 2d 3e 76 2d 3e 70 44 65 6c 46 72  Frame->v->pDelFr
3c90: 61 6d 65 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  ame;.    pFrame-
3ca0: 3e 76 2d 3e 70 44 65 6c 46 72 61 6d 65 20 3d 20  >v->pDelFrame = 
3cb0: 70 46 72 61 6d 65 3b 0a 20 20 7d 0a 20 20 69 66  pFrame;.  }.  if
3cc0: 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20  ( pMem->flags & 
3cd0: 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20  MEM_RowSet ){.  
3ce0: 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43    sqlite3RowSetC
3cf0: 6c 65 61 72 28 70 4d 65 6d 2d 3e 75 2e 70 52 6f  lear(pMem->u.pRo
3d00: 77 53 65 74 29 3b 0a 20 20 7d 0a 20 20 4d 65 6d  wSet);.  }.  Mem
3d10: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4d 65 6d  SetTypeFlag(pMem
3d20: 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70  , MEM_Null);.  p
3d30: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
3d40: 54 45 5f 4e 55 4c 4c 3b 0a 7d 0a 0a 2f 2a 0a 2a  TE_NULL;.}../*.*
3d50: 2a 20 44 65 6c 65 74 65 20 61 6e 79 20 70 72 65  * Delete any pre
3d60: 76 69 6f 75 73 20 76 61 6c 75 65 20 61 6e 64 20  vious value and 
3d70: 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 74 6f  set the value to
3d80: 20 62 65 20 61 20 42 4c 4f 42 20 6f 66 20 6c 65   be a BLOB of le
3d90: 6e 67 74 68 0a 2a 2a 20 6e 20 63 6f 6e 74 61 69  ngth.** n contai
3da0: 6e 69 6e 67 20 61 6c 6c 20 7a 65 72 6f 73 2e 0a  ning all zeros..
3db0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
3dc0: 64 62 65 4d 65 6d 53 65 74 5a 65 72 6f 42 6c 6f  dbeMemSetZeroBlo
3dd0: 62 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 69 6e 74  b(Mem *pMem, int
3de0: 20 6e 29 7b 0a 20 20 73 71 6c 69 74 65 33 56 64   n){.  sqlite3Vd
3df0: 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 4d 65  beMemRelease(pMe
3e00: 6d 29 3b 0a 20 20 70 4d 65 6d 2d 3e 66 6c 61 67  m);.  pMem->flag
3e10: 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d  s = MEM_Blob|MEM
3e20: 5f 5a 65 72 6f 3b 0a 20 20 70 4d 65 6d 2d 3e 74  _Zero;.  pMem->t
3e30: 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 42 4c 4f  ype = SQLITE_BLO
3e40: 42 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 20 3d 20 30  B;.  pMem->n = 0
3e50: 3b 0a 20 20 69 66 28 20 6e 3c 30 20 29 20 6e 20  ;.  if( n<0 ) n 
3e60: 3d 20 30 3b 0a 20 20 70 4d 65 6d 2d 3e 75 2e 6e  = 0;.  pMem->u.n
3e70: 5a 65 72 6f 20 3d 20 6e 3b 0a 20 20 70 4d 65 6d  Zero = n;.  pMem
3e80: 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
3e90: 54 46 38 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  TF8;..#ifdef SQL
3ea0: 49 54 45 5f 4f 4d 49 54 5f 49 4e 43 52 42 4c 4f  ITE_OMIT_INCRBLO
3eb0: 42 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  B.  sqlite3VdbeM
3ec0: 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 6e 2c 20  emGrow(pMem, n, 
3ed0: 30 29 3b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e  0);.  if( pMem->
3ee0: 7a 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 6e  z ){.    pMem->n
3ef0: 20 3d 20 6e 3b 0a 20 20 20 20 6d 65 6d 73 65 74   = n;.    memset
3f00: 28 70 4d 65 6d 2d 3e 7a 2c 20 30 2c 20 6e 29 3b  (pMem->z, 0, n);
3f10: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f  .  }.#endif.}../
3f20: 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 79 20  *.** Delete any 
3f30: 70 72 65 76 69 6f 75 73 20 76 61 6c 75 65 20 61  previous value a
3f40: 6e 64 20 73 65 74 20 74 68 65 20 76 61 6c 75 65  nd set the value
3f50: 20 73 74 6f 72 65 64 20 69 6e 20 2a 70 4d 65 6d   stored in *pMem
3f60: 20 74 6f 20 76 61 6c 2c 0a 2a 2a 20 6d 61 6e 69   to val,.** mani
3f70: 66 65 73 74 20 74 79 70 65 20 49 4e 54 45 47 45  fest type INTEGE
3f80: 52 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  R..*/.void sqlit
3f90: 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
3fa0: 34 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 69 36 34  4(Mem *pMem, i64
3fb0: 20 76 61 6c 29 7b 0a 20 20 73 71 6c 69 74 65 33   val){.  sqlite3
3fc0: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
3fd0: 4d 65 6d 29 3b 0a 20 20 70 4d 65 6d 2d 3e 75 2e  Mem);.  pMem->u.
3fe0: 69 20 3d 20 76 61 6c 3b 0a 20 20 70 4d 65 6d 2d  i = val;.  pMem-
3ff0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
4000: 3b 0a 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d  ;.  pMem->type =
4010: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3b   SQLITE_INTEGER;
4020: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
4030: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
4040: 5f 50 4f 49 4e 54 0a 2f 2a 0a 2a 2a 20 44 65 6c  _POINT./*.** Del
4050: 65 74 65 20 61 6e 79 20 70 72 65 76 69 6f 75 73  ete any previous
4060: 20 76 61 6c 75 65 20 61 6e 64 20 73 65 74 20 74   value and set t
4070: 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
4080: 69 6e 20 2a 70 4d 65 6d 20 74 6f 20 76 61 6c 2c  in *pMem to val,
4090: 0a 2a 2a 20 6d 61 6e 69 66 65 73 74 20 74 79 70  .** manifest typ
40a0: 65 20 52 45 41 4c 2e 0a 2a 2f 0a 76 6f 69 64 20  e REAL..*/.void 
40b0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
40c0: 74 44 6f 75 62 6c 65 28 4d 65 6d 20 2a 70 4d 65  tDouble(Mem *pMe
40d0: 6d 2c 20 64 6f 75 62 6c 65 20 76 61 6c 29 7b 0a  m, double val){.
40e0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e    if( sqlite3IsN
40f0: 61 4e 28 76 61 6c 29 20 29 7b 0a 20 20 20 20 73  aN(val) ){.    s
4100: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
4110: 4e 75 6c 6c 28 70 4d 65 6d 29 3b 0a 20 20 7d 65  Null(pMem);.  }e
4120: 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
4130: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
4140: 4d 65 6d 29 3b 0a 20 20 20 20 70 4d 65 6d 2d 3e  Mem);.    pMem->
4150: 72 20 3d 20 76 61 6c 3b 0a 20 20 20 20 70 4d 65  r = val;.    pMe
4160: 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52  m->flags = MEM_R
4170: 65 61 6c 3b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74  eal;.    pMem->t
4180: 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 46 4c 4f  ype = SQLITE_FLO
4190: 41 54 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66  AT;.  }.}.#endif
41a0: 0a 0a 2f 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  ../*.** Delete a
41b0: 6e 79 20 70 72 65 76 69 6f 75 73 20 76 61 6c 75  ny previous valu
41c0: 65 20 61 6e 64 20 73 65 74 20 74 68 65 20 76 61  e and set the va
41d0: 6c 75 65 20 6f 66 20 70 4d 65 6d 20 74 6f 20 62  lue of pMem to b
41e0: 65 20 61 6e 0a 2a 2a 20 65 6d 70 74 79 20 62 6f  e an.** empty bo
41f0: 6f 6c 65 61 6e 20 69 6e 64 65 78 2e 0a 2a 2f 0a  olean index..*/.
4200: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
4210: 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 4d 65 6d  MemSetRowSet(Mem
4220: 20 2a 70 4d 65 6d 29 7b 0a 20 20 73 71 6c 69 74   *pMem){.  sqlit
4230: 65 33 20 2a 64 62 20 3d 20 70 4d 65 6d 2d 3e 64  e3 *db = pMem->d
4240: 62 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 21  b;.  assert( db!
4250: 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
4260: 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d  (pMem->flags & M
4270: 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 3b  EM_RowSet)==0 );
4280: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
4290: 6d 52 65 6c 65 61 73 65 28 70 4d 65 6d 29 3b 0a  mRelease(pMem);.
42a0: 20 20 70 4d 65 6d 2d 3e 7a 4d 61 6c 6c 6f 63 20    pMem->zMalloc 
42b0: 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
42c0: 63 52 61 77 28 64 62 2c 20 36 34 29 3b 0a 20 20  cRaw(db, 64);.  
42d0: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
42e0: 69 6c 65 64 20 29 7b 0a 20 20 20 20 70 4d 65 6d  iled ){.    pMem
42f0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
4300: 6c 6c 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ll;.  }else{.   
4310: 20 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 7a   assert( pMem->z
4320: 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20 70 4d  Malloc );.    pM
4330: 65 6d 2d 3e 75 2e 70 52 6f 77 53 65 74 20 3d 20  em->u.pRowSet = 
4340: 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69  sqlite3RowSetIni
4350: 74 28 64 62 2c 20 70 4d 65 6d 2d 3e 7a 4d 61 6c  t(db, pMem->zMal
4360: 6c 6f 63 2c 20 0a 20 20 20 20 20 20 20 20 20 20  loc, .          
4370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4380: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
4390: 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65  ite3DbMallocSize
43a0: 28 64 62 2c 20 70 4d 65 6d 2d 3e 7a 4d 61 6c 6c  (db, pMem->zMall
43b0: 6f 63 29 29 3b 0a 20 20 20 20 61 73 73 65 72 74  oc));.    assert
43c0: 28 20 70 4d 65 6d 2d 3e 75 2e 70 52 6f 77 53 65  ( pMem->u.pRowSe
43d0: 74 21 3d 30 20 29 3b 0a 20 20 20 20 70 4d 65 6d  t!=0 );.    pMem
43e0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 6f  ->flags = MEM_Ro
43f0: 77 53 65 74 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  wSet;.  }.}../*.
4400: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
4410: 66 20 74 68 65 20 4d 65 6d 20 6f 62 6a 65 63 74  f the Mem object
4420: 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 45 58 54   contains a TEXT
4430: 20 6f 72 20 42 4c 4f 42 20 74 68 61 74 20 69 73   or BLOB that is
4440: 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 2d 20  .** too large - 
4450: 77 68 6f 73 65 20 73 69 7a 65 20 65 78 63 65 65  whose size excee
4460: 64 73 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  ds SQLITE_MAX_LE
4470: 4e 47 54 48 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  NGTH..*/.int sql
4480: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
4490: 67 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 61 73 73  g(Mem *p){.  ass
44a0: 65 72 74 28 20 70 2d 3e 64 62 21 3d 30 20 29 3b  ert( p->db!=0 );
44b0: 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  .  if( p->flags 
44c0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
44d0: 6c 6f 62 29 20 29 7b 0a 20 20 20 20 69 6e 74 20  lob) ){.    int 
44e0: 6e 20 3d 20 70 2d 3e 6e 3b 0a 20 20 20 20 69 66  n = p->n;.    if
44f0: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
4500: 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 6e  _Zero ){.      n
4510: 20 2b 3d 20 70 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a   += p->u.nZero;.
4520: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
4530: 20 6e 3e 70 2d 3e 64 62 2d 3e 61 4c 69 6d 69 74   n>p->db->aLimit
4540: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
4550: 4e 47 54 48 5d 3b 0a 20 20 7d 0a 20 20 72 65 74  NGTH];.  }.  ret
4560: 75 72 6e 20 30 3b 20 0a 7d 0a 0a 23 69 66 64 65  urn 0; .}..#ifde
4570: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
4580: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
4590: 65 20 70 72 65 70 61 72 65 73 20 61 20 6d 65 6d  e prepares a mem
45a0: 6f 72 79 20 63 65 6c 6c 20 66 6f 72 20 6d 6f 64  ory cell for mod
45b0: 69 63 61 74 69 6f 6e 20 62 79 20 62 72 65 61 6b  ication by break
45c0: 69 6e 67 0a 2a 2a 20 69 74 73 20 6c 69 6e 6b 20  ing.** its link 
45d0: 74 6f 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  to a shallow cop
45e0: 79 20 61 6e 64 20 62 79 20 6d 61 72 6b 69 6e 67  y and by marking
45f0: 20 61 6e 79 20 63 75 72 72 65 6e 74 20 73 68 61   any current sha
4600: 6c 6c 6f 77 0a 2a 2a 20 63 6f 70 69 65 73 20 6f  llow.** copies o
4610: 66 20 74 68 69 73 20 63 65 6c 6c 20 61 73 20 69  f this cell as i
4620: 6e 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  nvalid..**.** Th
4630: 69 73 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  is is used for t
4640: 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67  esting and debug
4650: 67 69 6e 67 20 6f 6e 6c 79 20 2d 20 74 6f 20 6d  ging only - to m
4660: 61 6b 65 20 73 75 72 65 20 73 68 61 6c 6c 6f 77  ake sure shallow
4670: 0a 2a 2a 20 63 6f 70 69 65 73 20 61 72 65 20 6e  .** copies are n
4680: 6f 74 20 6d 69 73 75 73 65 64 2e 0a 2a 2f 0a 76  ot misused..*/.v
4690: 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d  oid sqlite3VdbeM
46a0: 65 6d 50 72 65 70 61 72 65 54 6f 43 68 61 6e 67  emPrepareToChang
46b0: 65 28 56 64 62 65 20 2a 70 56 64 62 65 2c 20 4d  e(Vdbe *pVdbe, M
46c0: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74  em *pMem){.  int
46d0: 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 20   i;.  Mem *pX;. 
46e0: 20 66 6f 72 28 69 3d 31 2c 20 70 58 3d 26 70 56   for(i=1, pX=&pV
46f0: 64 62 65 2d 3e 61 4d 65 6d 5b 31 5d 3b 20 69 3c  dbe->aMem[1]; i<
4700: 3d 70 56 64 62 65 2d 3e 6e 4d 65 6d 3b 20 69 2b  =pVdbe->nMem; i+
4710: 2b 2c 20 70 58 2b 2b 29 7b 0a 20 20 20 20 69 66  +, pX++){.    if
4720: 28 20 70 58 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  ( pX->pScopyFrom
4730: 3d 3d 70 4d 65 6d 20 29 7b 0a 20 20 20 20 20 20  ==pMem ){.      
4740: 70 58 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  pX->flags |= MEM
4750: 5f 49 6e 76 61 6c 69 64 3b 0a 20 20 20 20 20 20  _Invalid;.      
4760: 70 58 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d  pX->pScopyFrom =
4770: 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   0;.    }.  }.  
4780: 70 4d 65 6d 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pMem->pScopyFrom
4790: 20 3d 20 30 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f   = 0;.}.#endif /
47a0: 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
47b0: 2f 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66  /../*.** Size of
47c0: 20 73 74 72 75 63 74 20 4d 65 6d 20 6e 6f 74 20   struct Mem not 
47d0: 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 4d 65  including the Me
47e0: 6d 2e 7a 4d 61 6c 6c 6f 63 20 6d 65 6d 62 65 72  m.zMalloc member
47f0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  ..*/.#define MEM
4800: 43 45 4c 4c 53 49 5a 45 20 28 73 69 7a 65 5f 74  CELLSIZE (size_t
4810: 29 28 26 28 28 28 4d 65 6d 20 2a 29 30 29 2d 3e  )(&(((Mem *)0)->
4820: 7a 4d 61 6c 6c 6f 63 29 29 0a 0a 2f 2a 0a 2a 2a  zMalloc))../*.**
4830: 20 4d 61 6b 65 20 61 6e 20 73 68 61 6c 6c 6f 77   Make an shallow
4840: 20 63 6f 70 79 20 6f 66 20 70 46 72 6f 6d 20 69   copy of pFrom i
4850: 6e 74 6f 20 70 54 6f 2e 20 20 50 72 69 6f 72 20  nto pTo.  Prior 
4860: 63 6f 6e 74 65 6e 74 73 20 6f 66 0a 2a 2a 20 70  contents of.** p
4870: 54 6f 20 61 72 65 20 66 72 65 65 64 2e 20 20 54  To are freed.  T
4880: 68 65 20 70 46 72 6f 6d 2d 3e 7a 20 66 69 65 6c  he pFrom->z fiel
4890: 64 20 69 73 20 6e 6f 74 20 64 75 70 6c 69 63 61  d is not duplica
48a0: 74 65 64 2e 20 20 49 66 0a 2a 2a 20 70 46 72 6f  ted.  If.** pFro
48b0: 6d 2d 3e 7a 20 69 73 20 75 73 65 64 2c 20 74 68  m->z is used, th
48c0: 65 6e 20 70 54 6f 2d 3e 7a 20 70 6f 69 6e 74 73  en pTo->z points
48d0: 20 74 6f 20 74 68 65 20 73 61 6d 65 20 74 68 69   to the same thi
48e0: 6e 67 20 61 73 20 70 46 72 6f 6d 2d 3e 7a 0a 2a  ng as pFrom->z.*
48f0: 2a 20 61 6e 64 20 66 6c 61 67 73 20 67 65 74 73  * and flags gets
4900: 20 73 72 63 54 79 70 65 20 28 65 69 74 68 65 72   srcType (either
4910: 20 4d 45 4d 5f 45 70 68 65 6d 20 6f 72 20 4d 45   MEM_Ephem or ME
4920: 4d 5f 53 74 61 74 69 63 29 2e 0a 2a 2f 0a 76 6f  M_Static)..*/.vo
4930: 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  id sqlite3VdbeMe
4940: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 4d 65 6d  mShallowCopy(Mem
4950: 20 2a 70 54 6f 2c 20 63 6f 6e 73 74 20 4d 65 6d   *pTo, const Mem
4960: 20 2a 70 46 72 6f 6d 2c 20 69 6e 74 20 73 72 63   *pFrom, int src
4970: 54 79 70 65 29 7b 0a 20 20 61 73 73 65 72 74 28  Type){.  assert(
4980: 20 28 70 46 72 6f 6d 2d 3e 66 6c 61 67 73 20 26   (pFrom->flags &
4990: 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
49a0: 29 3b 0a 20 20 4d 65 6d 52 65 6c 65 61 73 65 45  );.  MemReleaseE
49b0: 78 74 28 70 54 6f 29 3b 0a 20 20 6d 65 6d 63 70  xt(pTo);.  memcp
49c0: 79 28 70 54 6f 2c 20 70 46 72 6f 6d 2c 20 4d 45  y(pTo, pFrom, ME
49d0: 4d 43 45 4c 4c 53 49 5a 45 29 3b 0a 20 20 70 54  MCELLSIZE);.  pT
49e0: 6f 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69  o->xDel = 0;.  i
49f0: 66 28 20 28 70 46 72 6f 6d 2d 3e 66 6c 61 67 73  f( (pFrom->flags
4a00: 26 4d 45 4d 5f 53 74 61 74 69 63 29 3d 3d 30 20  &MEM_Static)==0 
4a10: 29 7b 0a 20 20 20 20 70 54 6f 2d 3e 66 6c 61 67  ){.    pTo->flag
4a20: 73 20 26 3d 20 7e 28 4d 45 4d 5f 44 79 6e 7c 4d  s &= ~(MEM_Dyn|M
4a30: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70  EM_Static|MEM_Ep
4a40: 68 65 6d 29 3b 0a 20 20 20 20 61 73 73 65 72 74  hem);.    assert
4a50: 28 20 73 72 63 54 79 70 65 3d 3d 4d 45 4d 5f 45  ( srcType==MEM_E
4a60: 70 68 65 6d 20 7c 7c 20 73 72 63 54 79 70 65 3d  phem || srcType=
4a70: 3d 4d 45 4d 5f 53 74 61 74 69 63 20 29 3b 0a 20  =MEM_Static );. 
4a80: 20 20 20 70 54 6f 2d 3e 66 6c 61 67 73 20 7c 3d     pTo->flags |=
4a90: 20 73 72 63 54 79 70 65 3b 0a 20 20 7d 0a 7d 0a   srcType;.  }.}.
4aa0: 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 66 75  ./*.** Make a fu
4ab0: 6c 6c 20 63 6f 70 79 20 6f 66 20 70 46 72 6f 6d  ll copy of pFrom
4ac0: 20 69 6e 74 6f 20 70 54 6f 2e 20 20 50 72 69 6f   into pTo.  Prio
4ad0: 72 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 70 54  r contents of pT
4ae0: 6f 20 61 72 65 0a 2a 2a 20 66 72 65 65 64 20 62  o are.** freed b
4af0: 65 66 6f 72 65 20 74 68 65 20 63 6f 70 79 20 69  efore the copy i
4b00: 73 20 6d 61 64 65 2e 0a 2a 2f 0a 69 6e 74 20 73  s made..*/.int s
4b10: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70  qlite3VdbeMemCop
4b20: 79 28 4d 65 6d 20 2a 70 54 6f 2c 20 63 6f 6e 73  y(Mem *pTo, cons
4b30: 74 20 4d 65 6d 20 2a 70 46 72 6f 6d 29 7b 0a 20  t Mem *pFrom){. 
4b40: 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45   int rc = SQLITE
4b50: 5f 4f 4b 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  _OK;..  assert( 
4b60: 28 70 46 72 6f 6d 2d 3e 66 6c 61 67 73 20 26 20  (pFrom->flags & 
4b70: 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
4b80: 3b 0a 20 20 4d 65 6d 52 65 6c 65 61 73 65 45 78  ;.  MemReleaseEx
4b90: 74 28 70 54 6f 29 3b 0a 20 20 6d 65 6d 63 70 79  t(pTo);.  memcpy
4ba0: 28 70 54 6f 2c 20 70 46 72 6f 6d 2c 20 4d 45 4d  (pTo, pFrom, MEM
4bb0: 43 45 4c 4c 53 49 5a 45 29 3b 0a 20 20 70 54 6f  CELLSIZE);.  pTo
4bc0: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f  ->flags &= ~MEM_
4bd0: 44 79 6e 3b 0a 0a 20 20 69 66 28 20 70 54 6f 2d  Dyn;..  if( pTo-
4be0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
4bf0: 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20  MEM_Blob) ){.   
4c00: 20 69 66 28 20 30 3d 3d 28 70 46 72 6f 6d 2d 3e   if( 0==(pFrom->
4c10: 66 6c 61 67 73 26 4d 45 4d 5f 53 74 61 74 69 63  flags&MEM_Static
4c20: 29 20 29 7b 0a 20 20 20 20 20 20 70 54 6f 2d 3e  ) ){.      pTo->
4c30: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 45 70 68  flags |= MEM_Eph
4c40: 65 6d 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  em;.      rc = s
4c50: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b  qlite3VdbeMemMak
4c60: 65 57 72 69 74 65 61 62 6c 65 28 70 54 6f 29 3b  eWriteable(pTo);
4c70: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 72 65  .    }.  }..  re
4c80: 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a  turn rc;.}../*.*
4c90: 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 63  * Transfer the c
4ca0: 6f 6e 74 65 6e 74 73 20 6f 66 20 70 46 72 6f 6d  ontents of pFrom
4cb0: 20 74 6f 20 70 54 6f 2e 20 41 6e 79 20 65 78 69   to pTo. Any exi
4cc0: 73 74 69 6e 67 20 76 61 6c 75 65 20 69 6e 20 70  sting value in p
4cd0: 54 6f 20 69 73 0a 2a 2a 20 66 72 65 65 64 2e 20  To is.** freed. 
4ce0: 49 66 20 70 46 72 6f 6d 20 63 6f 6e 74 61 69 6e  If pFrom contain
4cf0: 73 20 65 70 68 65 6d 65 72 61 6c 20 64 61 74 61  s ephemeral data
4d00: 2c 20 61 20 63 6f 70 79 20 69 73 20 6d 61 64 65  , a copy is made
4d10: 2e 0a 2a 2a 0a 2a 2a 20 70 46 72 6f 6d 20 63 6f  ..**.** pFrom co
4d20: 6e 74 61 69 6e 73 20 61 6e 20 53 51 4c 20 4e 55  ntains an SQL NU
4d30: 4c 4c 20 77 68 65 6e 20 74 68 69 73 20 72 6f 75  LL when this rou
4d40: 74 69 6e 65 20 72 65 74 75 72 6e 73 2e 0a 2a 2f  tine returns..*/
4d50: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
4d60: 65 4d 65 6d 4d 6f 76 65 28 4d 65 6d 20 2a 70 54  eMemMove(Mem *pT
4d70: 6f 2c 20 4d 65 6d 20 2a 70 46 72 6f 6d 29 7b 0a  o, Mem *pFrom){.
4d80: 20 20 61 73 73 65 72 74 28 20 70 46 72 6f 6d 2d    assert( pFrom-
4d90: 3e 64 62 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65  >db==0 || sqlite
4da0: 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 46 72  3_mutex_held(pFr
4db0: 6f 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29  om->db->mutex) )
4dc0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 54 6f 2d  ;.  assert( pTo-
4dd0: 3e 64 62 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65  >db==0 || sqlite
4de0: 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 54 6f  3_mutex_held(pTo
4df0: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a  ->db->mutex) );.
4e00: 20 20 61 73 73 65 72 74 28 20 70 46 72 6f 6d 2d    assert( pFrom-
4e10: 3e 64 62 3d 3d 30 20 7c 7c 20 70 54 6f 2d 3e 64  >db==0 || pTo->d
4e20: 62 3d 3d 30 20 7c 7c 20 70 46 72 6f 6d 2d 3e 64  b==0 || pFrom->d
4e30: 62 3d 3d 70 54 6f 2d 3e 64 62 20 29 3b 0a 0a 20  b==pTo->db );.. 
4e40: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
4e50: 65 6c 65 61 73 65 28 70 54 6f 29 3b 0a 20 20 6d  elease(pTo);.  m
4e60: 65 6d 63 70 79 28 70 54 6f 2c 20 70 46 72 6f 6d  emcpy(pTo, pFrom
4e70: 2c 20 73 69 7a 65 6f 66 28 4d 65 6d 29 29 3b 0a  , sizeof(Mem));.
4e80: 20 20 70 46 72 6f 6d 2d 3e 66 6c 61 67 73 20 3d    pFrom->flags =
4e90: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 70 46 72   MEM_Null;.  pFr
4ea0: 6f 6d 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20  om->xDel = 0;.  
4eb0: 70 46 72 6f 6d 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d  pFrom->zMalloc =
4ec0: 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 61   0;.}../*.** Cha
4ed0: 6e 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  nge the value of
4ee0: 20 61 20 4d 65 6d 20 74 6f 20 62 65 20 61 20 73   a Mem to be a s
4ef0: 74 72 69 6e 67 20 6f 72 20 61 20 42 4c 4f 42 2e  tring or a BLOB.
4f00: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72  .**.** The memor
4f10: 79 20 6d 61 6e 61 67 65 6d 65 6e 74 20 73 74 72  y management str
4f20: 61 74 65 67 79 20 64 65 70 65 6e 64 73 20 6f 6e  ategy depends on
4f30: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
4f40: 65 20 78 44 65 6c 0a 2a 2a 20 70 61 72 61 6d 65  e xDel.** parame
4f50: 74 65 72 2e 20 49 66 20 74 68 65 20 76 61 6c 75  ter. If the valu
4f60: 65 20 70 61 73 73 65 64 20 69 73 20 53 51 4c 49  e passed is SQLI
4f70: 54 45 5f 54 52 41 4e 53 49 45 4e 54 2c 20 74 68  TE_TRANSIENT, th
4f80: 65 6e 20 74 68 65 20 0a 2a 2a 20 73 74 72 69 6e  en the .** strin
4f90: 67 20 69 73 20 63 6f 70 69 65 64 20 69 6e 74 6f  g is copied into
4fa0: 20 61 20 28 70 6f 73 73 69 62 6c 79 20 65 78 69   a (possibly exi
4fb0: 73 74 69 6e 67 29 20 62 75 66 66 65 72 20 6d 61  sting) buffer ma
4fc0: 6e 61 67 65 64 20 62 79 20 74 68 65 20 0a 2a 2a  naged by the .**
4fd0: 20 4d 65 6d 20 73 74 72 75 63 74 75 72 65 2e 20   Mem structure. 
4fe0: 4f 74 68 65 72 77 69 73 65 2c 20 61 6e 79 20 65  Otherwise, any e
4ff0: 78 69 73 74 69 6e 67 20 62 75 66 66 65 72 20 69  xisting buffer i
5000: 73 20 66 72 65 65 64 20 61 6e 64 20 74 68 65 0a  s freed and the.
5010: 2a 2a 20 70 6f 69 6e 74 65 72 20 63 6f 70 69 65  ** pointer copie
5020: 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
5030: 73 74 72 69 6e 67 20 69 73 20 74 6f 6f 20 6c 61  string is too la
5040: 72 67 65 20 28 69 66 20 69 74 20 65 78 63 65 65  rge (if it excee
5050: 64 73 20 74 68 65 20 53 51 4c 49 54 45 5f 4c 49  ds the SQLITE_LI
5060: 4d 49 54 5f 4c 45 4e 47 54 48 0a 2a 2a 20 73 69  MIT_LENGTH.** si
5070: 7a 65 20 6c 69 6d 69 74 29 20 74 68 65 6e 20 6e  ze limit) then n
5080: 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  o memory allocat
5090: 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 49 66 20  ion occurs.  If 
50a0: 74 68 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62  the string can b
50b0: 65 0a 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68  e.** stored with
50c0: 6f 75 74 20 61 6c 6c 6f 63 61 74 69 6e 67 20 6d  out allocating m
50d0: 65 6d 6f 72 79 2c 20 74 68 65 6e 20 69 74 20 69  emory, then it i
50e0: 73 2e 20 20 49 66 20 61 20 6d 65 6d 6f 72 79 20  s.  If a memory 
50f0: 61 6c 6c 6f 63 61 74 69 6f 6e 0a 2a 2a 20 69 73  allocation.** is
5100: 20 72 65 71 75 69 72 65 64 20 74 6f 20 73 74 6f   required to sto
5110: 72 65 20 74 68 65 20 73 74 72 69 6e 67 2c 20 74  re the string, t
5120: 68 65 6e 20 76 61 6c 75 65 20 6f 66 20 70 4d 65  hen value of pMe
5130: 6d 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 20  m is unchanged. 
5140: 20 49 6e 0a 2a 2a 20 65 69 74 68 65 72 20 63 61   In.** either ca
5150: 73 65 2c 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49  se, SQLITE_TOOBI
5160: 47 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a  G is returned..*
5170: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  /.int sqlite3Vdb
5180: 65 4d 65 6d 53 65 74 53 74 72 28 0a 20 20 4d 65  eMemSetStr(.  Me
5190: 6d 20 2a 70 4d 65 6d 2c 20 20 20 20 20 20 20 20  m *pMem,        
51a0: 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c    /* Memory cell
51b0: 20 74 6f 20 73 65 74 20 74 6f 20 73 74 72 69 6e   to set to strin
51c0: 67 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63 6f 6e  g value */.  con
51d0: 73 74 20 63 68 61 72 20 2a 7a 2c 20 20 20 20 20  st char *z,     
51e0: 20 2f 2a 20 53 74 72 69 6e 67 20 70 6f 69 6e 74   /* String point
51f0: 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 2c 20 20  er */.  int n,  
5200: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
5210: 79 74 65 73 20 69 6e 20 73 74 72 69 6e 67 2c 20  ytes in string, 
5220: 6f 72 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20  or negative */. 
5230: 20 75 38 20 65 6e 63 2c 20 20 20 20 20 20 20 20   u8 enc,        
5240: 20 20 20 20 20 2f 2a 20 45 6e 63 6f 64 69 6e 67       /* Encoding
5250: 20 6f 66 20 7a 2e 20 20 30 20 66 6f 72 20 42 4c   of z.  0 for BL
5260: 4f 42 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  OBs */.  void (*
5270: 78 44 65 6c 29 28 76 6f 69 64 2a 29 20 2f 2a 20  xDel)(void*) /* 
5280: 44 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  Destructor funct
5290: 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  ion */.){.  int 
52a0: 6e 42 79 74 65 20 3d 20 6e 3b 20 20 20 20 20 20  nByte = n;      
52b0: 2f 2a 20 4e 65 77 20 76 61 6c 75 65 20 66 6f 72  /* New value for
52c0: 20 70 4d 65 6d 2d 3e 6e 20 2a 2f 0a 20 20 69 6e   pMem->n */.  in
52d0: 74 20 69 4c 69 6d 69 74 3b 20 20 20 20 20 20 20  t iLimit;       
52e0: 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c    /* Maximum all
52f0: 6f 77 65 64 20 73 74 72 69 6e 67 20 6f 72 20 62  owed string or b
5300: 6c 6f 62 20 73 69 7a 65 20 2a 2f 0a 20 20 75 31  lob size */.  u1
5310: 36 20 66 6c 61 67 73 20 3d 20 30 3b 20 20 20 20  6 flags = 0;    
5320: 20 20 2f 2a 20 4e 65 77 20 76 61 6c 75 65 20 66    /* New value f
5330: 6f 72 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 2a  or pMem->flags *
5340: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4d 65  /..  assert( pMe
5350: 6d 2d 3e 64 62 3d 3d 30 20 7c 7c 20 73 71 6c 69  m->db==0 || sqli
5360: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70  te3_mutex_held(p
5370: 4d 65 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20  Mem->db->mutex) 
5380: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d  );.  assert( (pM
5390: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  em->flags & MEM_
53a0: 52 6f 77 53 65 74 29 3d 3d 30 20 29 3b 0a 0a 20  RowSet)==0 );.. 
53b0: 20 2f 2a 20 49 66 20 7a 20 69 73 20 61 20 4e 55   /* If z is a NU
53c0: 4c 4c 20 70 6f 69 6e 74 65 72 2c 20 73 65 74 20  LL pointer, set 
53d0: 70 4d 65 6d 20 74 6f 20 63 6f 6e 74 61 69 6e 20  pMem to contain 
53e0: 61 6e 20 53 51 4c 20 4e 55 4c 4c 2e 20 2a 2f 0a  an SQL NULL. */.
53f0: 20 20 69 66 28 20 21 7a 20 29 7b 0a 20 20 20 20    if( !z ){.    
5400: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
5410: 74 4e 75 6c 6c 28 70 4d 65 6d 29 3b 0a 20 20 20  tNull(pMem);.   
5420: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
5430: 4b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4d  K;.  }..  if( pM
5440: 65 6d 2d 3e 64 62 20 29 7b 0a 20 20 20 20 69 4c  em->db ){.    iL
5450: 69 6d 69 74 20 3d 20 70 4d 65 6d 2d 3e 64 62 2d  imit = pMem->db-
5460: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
5470: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 3b 0a 20 20  IMIT_LENGTH];.  
5480: 7d 65 6c 73 65 7b 0a 20 20 20 20 69 4c 69 6d 69  }else{.    iLimi
5490: 74 20 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c  t = SQLITE_MAX_L
54a0: 45 4e 47 54 48 3b 0a 20 20 7d 0a 20 20 66 6c 61  ENGTH;.  }.  fla
54b0: 67 73 20 3d 20 28 65 6e 63 3d 3d 30 3f 4d 45 4d  gs = (enc==0?MEM
54c0: 5f 42 6c 6f 62 3a 4d 45 4d 5f 53 74 72 29 3b 0a  _Blob:MEM_Str);.
54d0: 20 20 69 66 28 20 6e 42 79 74 65 3c 30 20 29 7b    if( nByte<0 ){
54e0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 65 6e 63  .    assert( enc
54f0: 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 65  !=0 );.    if( e
5500: 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20  nc==SQLITE_UTF8 
5510: 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 6e 42 79  ){.      for(nBy
5520: 74 65 3d 30 3b 20 6e 42 79 74 65 3c 3d 69 4c 69  te=0; nByte<=iLi
5530: 6d 69 74 20 26 26 20 7a 5b 6e 42 79 74 65 5d 3b  mit && z[nByte];
5540: 20 6e 42 79 74 65 2b 2b 29 7b 7d 0a 20 20 20 20   nByte++){}.    
5550: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 66 6f 72  }else{.      for
5560: 28 6e 42 79 74 65 3d 30 3b 20 6e 42 79 74 65 3c  (nByte=0; nByte<
5570: 3d 69 4c 69 6d 69 74 20 26 26 20 28 7a 5b 6e 42  =iLimit && (z[nB
5580: 79 74 65 5d 20 7c 20 7a 5b 6e 42 79 74 65 2b 31  yte] | z[nByte+1
5590: 5d 29 3b 20 6e 42 79 74 65 2b 3d 32 29 7b 7d 0a  ]); nByte+=2){}.
55a0: 20 20 20 20 7d 0a 20 20 20 20 66 6c 61 67 73 20      }.    flags 
55b0: 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d  |= MEM_Term;.  }
55c0: 0a 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  ..  /* The follo
55d0: 77 69 6e 67 20 62 6c 6f 63 6b 20 73 65 74 73 20  wing block sets 
55e0: 74 68 65 20 6e 65 77 20 76 61 6c 75 65 73 20 6f  the new values o
55f0: 66 20 4d 65 6d 2e 7a 20 61 6e 64 20 4d 65 6d 2e  f Mem.z and Mem.
5600: 78 44 65 6c 2e 20 49 74 0a 20 20 2a 2a 20 61 6c  xDel. It.  ** al
5610: 73 6f 20 73 65 74 73 20 61 20 66 6c 61 67 20 69  so sets a flag i
5620: 6e 20 6c 6f 63 61 6c 20 76 61 72 69 61 62 6c 65  n local variable
5630: 20 22 66 6c 61 67 73 22 20 74 6f 20 69 6e 64 69   "flags" to indi
5640: 63 61 74 65 20 74 68 65 20 6d 65 6d 6f 72 79 0a  cate the memory.
5650: 20 20 2a 2a 20 6d 61 6e 61 67 65 6d 65 6e 74 20    ** management 
5660: 28 6f 6e 65 20 6f 66 20 4d 45 4d 5f 44 79 6e 20  (one of MEM_Dyn 
5670: 6f 72 20 4d 45 4d 5f 53 74 61 74 69 63 29 2e 0a  or MEM_Static)..
5680: 20 20 2a 2f 0a 20 20 69 66 28 20 78 44 65 6c 3d    */.  if( xDel=
5690: 3d 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e  =SQLITE_TRANSIEN
56a0: 54 20 29 7b 0a 20 20 20 20 69 6e 74 20 6e 41 6c  T ){.    int nAl
56b0: 6c 6f 63 20 3d 20 6e 42 79 74 65 3b 0a 20 20 20  loc = nByte;.   
56c0: 20 69 66 28 20 66 6c 61 67 73 26 4d 45 4d 5f 54   if( flags&MEM_T
56d0: 65 72 6d 20 29 7b 0a 20 20 20 20 20 20 6e 41 6c  erm ){.      nAl
56e0: 6c 6f 63 20 2b 3d 20 28 65 6e 63 3d 3d 53 51 4c  loc += (enc==SQL
56f0: 49 54 45 5f 55 54 46 38 3f 31 3a 32 29 3b 0a 20  ITE_UTF8?1:2);. 
5700: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 42 79     }.    if( nBy
5710: 74 65 3e 69 4c 69 6d 69 74 20 29 7b 0a 20 20 20  te>iLimit ){.   
5720: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
5730: 5f 54 4f 4f 42 49 47 3b 0a 20 20 20 20 7d 0a 20  _TOOBIG;.    }. 
5740: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
5750: 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20  beMemGrow(pMem, 
5760: 6e 41 6c 6c 6f 63 2c 20 30 29 20 29 7b 0a 20 20  nAlloc, 0) ){.  
5770: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
5780: 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 0a 20  E_NOMEM;.    }. 
5790: 20 20 20 6d 65 6d 63 70 79 28 70 4d 65 6d 2d 3e     memcpy(pMem->
57a0: 7a 2c 20 7a 2c 20 6e 41 6c 6c 6f 63 29 3b 0a 20  z, z, nAlloc);. 
57b0: 20 7d 65 6c 73 65 20 69 66 28 20 78 44 65 6c 3d   }else if( xDel=
57c0: 3d 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20  =SQLITE_DYNAMIC 
57d0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
57e0: 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 4d 65  beMemRelease(pMe
57f0: 6d 29 3b 0a 20 20 20 20 70 4d 65 6d 2d 3e 7a 4d  m);.    pMem->zM
5800: 61 6c 6c 6f 63 20 3d 20 70 4d 65 6d 2d 3e 7a 20  alloc = pMem->z 
5810: 3d 20 28 63 68 61 72 20 2a 29 7a 3b 0a 20 20 20  = (char *)z;.   
5820: 20 70 4d 65 6d 2d 3e 78 44 65 6c 20 3d 20 30 3b   pMem->xDel = 0;
5830: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
5840: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
5850: 61 73 65 28 70 4d 65 6d 29 3b 0a 20 20 20 20 70  ase(pMem);.    p
5860: 4d 65 6d 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a  Mem->z = (char *
5870: 29 7a 3b 0a 20 20 20 20 70 4d 65 6d 2d 3e 78 44  )z;.    pMem->xD
5880: 65 6c 20 3d 20 78 44 65 6c 3b 0a 20 20 20 20 66  el = xDel;.    f
5890: 6c 61 67 73 20 7c 3d 20 28 28 78 44 65 6c 3d 3d  lags |= ((xDel==
58a0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3f 4d  SQLITE_STATIC)?M
58b0: 45 4d 5f 53 74 61 74 69 63 3a 4d 45 4d 5f 44 79  EM_Static:MEM_Dy
58c0: 6e 29 3b 0a 20 20 7d 0a 0a 20 20 70 4d 65 6d 2d  n);.  }..  pMem-
58d0: 3e 6e 20 3d 20 6e 42 79 74 65 3b 0a 20 20 70 4d  >n = nByte;.  pM
58e0: 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67  em->flags = flag
58f0: 73 3b 0a 20 20 70 4d 65 6d 2d 3e 65 6e 63 20 3d  s;.  pMem->enc =
5900: 20 28 65 6e 63 3d 3d 30 20 3f 20 53 51 4c 49 54   (enc==0 ? SQLIT
5910: 45 5f 55 54 46 38 20 3a 20 65 6e 63 29 3b 0a 20  E_UTF8 : enc);. 
5920: 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 28 65   pMem->type = (e
5930: 6e 63 3d 3d 30 20 3f 20 53 51 4c 49 54 45 5f 42  nc==0 ? SQLITE_B
5940: 4c 4f 42 20 3a 20 53 51 4c 49 54 45 5f 54 45 58  LOB : SQLITE_TEX
5950: 54 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  T);..#ifndef SQL
5960: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
5970: 20 69 66 28 20 70 4d 65 6d 2d 3e 65 6e 63 21 3d   if( pMem->enc!=
5980: 53 51 4c 49 54 45 5f 55 54 46 38 20 26 26 20 73  SQLITE_UTF8 && s
5990: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 48 61 6e  qlite3VdbeMemHan
59a0: 64 6c 65 42 6f 6d 28 70 4d 65 6d 29 20 29 7b 0a  dleBom(pMem) ){.
59b0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
59c0: 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 23 65 6e  E_NOMEM;.  }.#en
59d0: 64 69 66 0a 0a 20 20 69 66 28 20 6e 42 79 74 65  dif..  if( nByte
59e0: 3e 69 4c 69 6d 69 74 20 29 7b 0a 20 20 20 20 72  >iLimit ){.    r
59f0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 54 4f 4f  eturn SQLITE_TOO
5a00: 42 49 47 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75  BIG;.  }..  retu
5a10: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
5a20: 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  ./*.** Compare t
5a30: 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 74 61 69  he values contai
5a40: 6e 65 64 20 62 79 20 74 68 65 20 74 77 6f 20 6d  ned by the two m
5a50: 65 6d 6f 72 79 20 63 65 6c 6c 73 2c 20 72 65 74  emory cells, ret
5a60: 75 72 6e 69 6e 67 0a 2a 2a 20 6e 65 67 61 74 69  urning.** negati
5a70: 76 65 2c 20 7a 65 72 6f 20 6f 72 20 70 6f 73 69  ve, zero or posi
5a80: 74 69 76 65 20 69 66 20 70 4d 65 6d 31 20 69 73  tive if pMem1 is
5a90: 20 6c 65 73 73 20 74 68 61 6e 2c 20 65 71 75 61   less than, equa
5aa0: 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72  l to, or greater
5ab0: 0a 2a 2a 20 74 68 61 6e 20 70 4d 65 6d 32 2e 20  .** than pMem2. 
5ac0: 53 6f 72 74 69 6e 67 20 6f 72 64 65 72 20 69 73  Sorting order is
5ad0: 20 4e 55 4c 4c 27 73 20 66 69 72 73 74 2c 20 66   NULL's first, f
5ae0: 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 75 6d 62 65  ollowed by numbe
5af0: 72 73 20 28 69 6e 74 65 67 65 72 73 0a 2a 2a 20  rs (integers.** 
5b00: 61 6e 64 20 72 65 61 6c 73 29 20 73 6f 72 74 65  and reals) sorte
5b10: 64 20 6e 75 6d 65 72 69 63 61 6c 6c 79 2c 20 66  d numerically, f
5b20: 6f 6c 6c 6f 77 65 64 20 62 79 20 74 65 78 74 20  ollowed by text 
5b30: 6f 72 64 65 72 65 64 20 62 79 20 74 68 65 20 63  ordered by the c
5b40: 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75  ollating.** sequ
5b50: 65 6e 63 65 20 70 43 6f 6c 6c 20 61 6e 64 20 66  ence pColl and f
5b60: 69 6e 61 6c 6c 79 20 62 6c 6f 62 27 73 20 6f 72  inally blob's or
5b70: 64 65 72 65 64 20 62 79 20 6d 65 6d 63 6d 70 28  dered by memcmp(
5b80: 29 2e 0a 2a 2a 0a 2a 2a 20 54 77 6f 20 4e 55 4c  )..**.** Two NUL
5b90: 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e  L values are con
5ba0: 73 69 64 65 72 65 64 20 65 71 75 61 6c 20 62 79  sidered equal by
5bb0: 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 0a   this function..
5bc0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  */.int sqlite3Me
5bd0: 6d 43 6f 6d 70 61 72 65 28 63 6f 6e 73 74 20 4d  mCompare(const M
5be0: 65 6d 20 2a 70 4d 65 6d 31 2c 20 63 6f 6e 73 74  em *pMem1, const
5bf0: 20 4d 65 6d 20 2a 70 4d 65 6d 32 2c 20 63 6f 6e   Mem *pMem2, con
5c00: 73 74 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c  st CollSeq *pCol
5c10: 6c 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  l){.  int rc;.  
5c20: 69 6e 74 20 66 31 2c 20 66 32 3b 0a 20 20 69 6e  int f1, f2;.  in
5c30: 74 20 63 6f 6d 62 69 6e 65 64 5f 66 6c 61 67 73  t combined_flags
5c40: 3b 0a 0a 20 20 66 31 20 3d 20 70 4d 65 6d 31 2d  ;..  f1 = pMem1-
5c50: 3e 66 6c 61 67 73 3b 0a 20 20 66 32 20 3d 20 70  >flags;.  f2 = p
5c60: 4d 65 6d 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 63  Mem2->flags;.  c
5c70: 6f 6d 62 69 6e 65 64 5f 66 6c 61 67 73 20 3d 20  ombined_flags = 
5c80: 66 31 7c 66 32 3b 0a 20 20 61 73 73 65 72 74 28  f1|f2;.  assert(
5c90: 20 28 63 6f 6d 62 69 6e 65 64 5f 66 6c 61 67 73   (combined_flags
5ca0: 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
5cb0: 30 20 29 3b 0a 20 0a 20 20 2f 2a 20 49 66 20 6f  0 );. .  /* If o
5cc0: 6e 65 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c  ne value is NULL
5cd0: 2c 20 69 74 20 69 73 20 6c 65 73 73 20 74 68 61  , it is less tha
5ce0: 6e 20 74 68 65 20 6f 74 68 65 72 2e 20 49 66 20  n the other. If 
5cf0: 62 6f 74 68 20 76 61 6c 75 65 73 0a 20 20 2a 2a  both values.  **
5d00: 20 61 72 65 20 4e 55 4c 4c 2c 20 72 65 74 75 72   are NULL, retur
5d10: 6e 20 30 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  n 0..  */.  if( 
5d20: 63 6f 6d 62 69 6e 65 64 5f 66 6c 61 67 73 26 4d  combined_flags&M
5d30: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 72  EM_Null ){.    r
5d40: 65 74 75 72 6e 20 28 66 32 26 4d 45 4d 5f 4e 75  eturn (f2&MEM_Nu
5d50: 6c 6c 29 20 2d 20 28 66 31 26 4d 45 4d 5f 4e 75  ll) - (f1&MEM_Nu
5d60: 6c 6c 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  ll);.  }..  /* I
5d70: 66 20 6f 6e 65 20 76 61 6c 75 65 20 69 73 20 61  f one value is a
5d80: 20 6e 75 6d 62 65 72 20 61 6e 64 20 74 68 65 20   number and the 
5d90: 6f 74 68 65 72 20 69 73 20 6e 6f 74 2c 20 74 68  other is not, th
5da0: 65 20 6e 75 6d 62 65 72 20 69 73 20 6c 65 73 73  e number is less
5db0: 2e 0a 20 20 2a 2a 20 49 66 20 62 6f 74 68 20 61  ..  ** If both a
5dc0: 72 65 20 6e 75 6d 62 65 72 73 2c 20 63 6f 6d 70  re numbers, comp
5dd0: 61 72 65 20 61 73 20 72 65 61 6c 73 20 69 66 20  are as reals if 
5de0: 6f 6e 65 20 69 73 20 61 20 72 65 61 6c 2c 20 6f  one is a real, o
5df0: 72 20 61 73 20 69 6e 74 65 67 65 72 73 0a 20 20  r as integers.  
5e00: 2a 2a 20 69 66 20 62 6f 74 68 20 76 61 6c 75 65  ** if both value
5e10: 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a  s are integers..
5e20: 20 20 2a 2f 0a 20 20 69 66 28 20 63 6f 6d 62 69    */.  if( combi
5e30: 6e 65 64 5f 66 6c 61 67 73 26 28 4d 45 4d 5f 49  ned_flags&(MEM_I
5e40: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20 29 7b 0a  nt|MEM_Real) ){.
5e50: 20 20 20 20 69 66 28 20 21 28 66 31 26 28 4d 45      if( !(f1&(ME
5e60: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29  M_Int|MEM_Real))
5e70: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
5e80: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66   1;.    }.    if
5e90: 28 20 21 28 66 32 26 28 4d 45 4d 5f 49 6e 74 7c  ( !(f2&(MEM_Int|
5ea0: 4d 45 4d 5f 52 65 61 6c 29 29 20 29 7b 0a 20 20  MEM_Real)) ){.  
5eb0: 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0a 20      return -1;. 
5ec0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 66 31     }.    if( (f1
5ed0: 20 26 20 66 32 20 26 20 4d 45 4d 5f 49 6e 74 29   & f2 & MEM_Int)
5ee0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 6f 75  ==0 ){.      dou
5ef0: 62 6c 65 20 72 31 2c 20 72 32 3b 0a 20 20 20 20  ble r1, r2;.    
5f00: 20 20 69 66 28 20 28 66 31 26 4d 45 4d 5f 52 65    if( (f1&MEM_Re
5f10: 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  al)==0 ){.      
5f20: 20 20 72 31 20 3d 20 28 64 6f 75 62 6c 65 29 70    r1 = (double)p
5f30: 4d 65 6d 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 20  Mem1->u.i;.     
5f40: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
5f50: 72 31 20 3d 20 70 4d 65 6d 31 2d 3e 72 3b 0a 20  r1 = pMem1->r;. 
5f60: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
5f70: 20 28 66 32 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d   (f2&MEM_Real)==
5f80: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 32 20  0 ){.        r2 
5f90: 3d 20 28 64 6f 75 62 6c 65 29 70 4d 65 6d 32 2d  = (double)pMem2-
5fa0: 3e 75 2e 69 3b 0a 20 20 20 20 20 20 7d 65 6c 73  >u.i;.      }els
5fb0: 65 7b 0a 20 20 20 20 20 20 20 20 72 32 20 3d 20  e{.        r2 = 
5fc0: 70 4d 65 6d 32 2d 3e 72 3b 0a 20 20 20 20 20 20  pMem2->r;.      
5fd0: 7d 0a 20 20 20 20 20 20 69 66 28 20 72 31 3c 72  }.      if( r1<r
5fe0: 32 20 29 20 72 65 74 75 72 6e 20 2d 31 3b 0a 20  2 ) return -1;. 
5ff0: 20 20 20 20 20 69 66 28 20 72 31 3e 72 32 20 29       if( r1>r2 )
6000: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 20   return 1;.     
6010: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d   return 0;.    }
6020: 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
6030: 72 74 28 20 66 31 26 4d 45 4d 5f 49 6e 74 20 29  rt( f1&MEM_Int )
6040: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
6050: 66 32 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  f2&MEM_Int );.  
6060: 20 20 20 20 69 66 28 20 70 4d 65 6d 31 2d 3e 75      if( pMem1->u
6070: 2e 69 20 3c 20 70 4d 65 6d 32 2d 3e 75 2e 69 20  .i < pMem2->u.i 
6080: 29 20 72 65 74 75 72 6e 20 2d 31 3b 0a 20 20 20  ) return -1;.   
6090: 20 20 20 69 66 28 20 70 4d 65 6d 31 2d 3e 75 2e     if( pMem1->u.
60a0: 69 20 3e 20 70 4d 65 6d 32 2d 3e 75 2e 69 20 29  i > pMem2->u.i )
60b0: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 20   return 1;.     
60c0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d   return 0;.    }
60d0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 6f 6e  .  }..  /* If on
60e0: 65 20 76 61 6c 75 65 20 69 73 20 61 20 73 74 72  e value is a str
60f0: 69 6e 67 20 61 6e 64 20 74 68 65 20 6f 74 68 65  ing and the othe
6100: 72 20 69 73 20 61 20 62 6c 6f 62 2c 20 74 68 65  r is a blob, the
6110: 20 73 74 72 69 6e 67 20 69 73 20 6c 65 73 73 2e   string is less.
6120: 0a 20 20 2a 2a 20 49 66 20 62 6f 74 68 20 61 72  .  ** If both ar
6130: 65 20 73 74 72 69 6e 67 73 2c 20 63 6f 6d 70 61  e strings, compa
6140: 72 65 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6c  re using the col
6150: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  lating functions
6160: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 63 6f 6d  ..  */.  if( com
6170: 62 69 6e 65 64 5f 66 6c 61 67 73 26 4d 45 4d 5f  bined_flags&MEM_
6180: 53 74 72 20 29 7b 0a 20 20 20 20 69 66 28 20 28  Str ){.    if( (
6190: 66 31 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30  f1 & MEM_Str)==0
61a0: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
61b0: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66   1;.    }.    if
61c0: 28 20 28 66 32 20 26 20 4d 45 4d 5f 53 74 72 29  ( (f2 & MEM_Str)
61d0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ==0 ){.      ret
61e0: 75 72 6e 20 2d 31 3b 0a 20 20 20 20 7d 0a 0a 20  urn -1;.    }.. 
61f0: 20 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d 31     assert( pMem1
6200: 2d 3e 65 6e 63 3d 3d 70 4d 65 6d 32 2d 3e 65 6e  ->enc==pMem2->en
6210: 63 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  c );.    assert(
6220: 20 70 4d 65 6d 31 2d 3e 65 6e 63 3d 3d 53 51 4c   pMem1->enc==SQL
6230: 49 54 45 5f 55 54 46 38 20 7c 7c 20 0a 20 20 20  ITE_UTF8 || .   
6240: 20 20 20 20 20 20 20 20 20 70 4d 65 6d 31 2d 3e           pMem1->
6250: 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
6260: 36 4c 45 20 7c 7c 20 70 4d 65 6d 31 2d 3e 65 6e  6LE || pMem1->en
6270: 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42  c==SQLITE_UTF16B
6280: 45 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65  E );..    /* The
6290: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
62a0: 6e 63 65 20 6d 75 73 74 20 62 65 20 64 65 66 69  nce must be defi
62b0: 6e 65 64 20 61 74 20 74 68 69 73 20 70 6f 69 6e  ned at this poin
62c0: 74 2c 20 65 76 65 6e 20 69 66 0a 20 20 20 20 2a  t, even if.    *
62d0: 2a 20 74 68 65 20 75 73 65 72 20 64 65 6c 65 74  * the user delet
62e0: 65 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  es the collation
62f0: 20 73 65 71 75 65 6e 63 65 20 61 66 74 65 72 20   sequence after 
6300: 74 68 65 20 76 64 62 65 20 70 72 6f 67 72 61 6d  the vdbe program
6310: 20 69 73 0a 20 20 20 20 2a 2a 20 63 6f 6d 70 69   is.    ** compi
6320: 6c 65 64 20 28 74 68 69 73 20 77 61 73 20 6e 6f  led (this was no
6330: 74 20 61 6c 77 61 79 73 20 74 68 65 20 63 61 73  t always the cas
6340: 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61  e)..    */.    a
6350: 73 73 65 72 74 28 20 21 70 43 6f 6c 6c 20 7c 7c  ssert( !pColl ||
6360: 20 70 43 6f 6c 6c 2d 3e 78 43 6d 70 20 29 3b 0a   pColl->xCmp );.
6370: 0a 20 20 20 20 69 66 28 20 70 43 6f 6c 6c 20 29  .    if( pColl )
6380: 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d  {.      if( pMem
6390: 31 2d 3e 65 6e 63 3d 3d 70 43 6f 6c 6c 2d 3e 65  1->enc==pColl->e
63a0: 6e 63 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  nc ){.        /*
63b0: 20 54 68 65 20 73 74 72 69 6e 67 73 20 61 72 65   The strings are
63c0: 20 61 6c 72 65 61 64 79 20 69 6e 20 74 68 65 20   already in the 
63d0: 63 6f 72 72 65 63 74 20 65 6e 63 6f 64 69 6e 67  correct encoding
63e0: 2e 20 20 43 61 6c 6c 20 74 68 65 0a 20 20 20 20  .  Call the.    
63f0: 20 20 20 20 2a 2a 20 63 6f 6d 70 61 72 69 73 6f      ** compariso
6400: 6e 20 66 75 6e 63 74 69 6f 6e 20 64 69 72 65 63  n function direc
6410: 74 6c 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 72  tly */.        r
6420: 65 74 75 72 6e 20 70 43 6f 6c 6c 2d 3e 78 43 6d  eturn pColl->xCm
6430: 70 28 70 43 6f 6c 6c 2d 3e 70 55 73 65 72 2c 70  p(pColl->pUser,p
6440: 4d 65 6d 31 2d 3e 6e 2c 70 4d 65 6d 31 2d 3e 7a  Mem1->n,pMem1->z
6450: 2c 70 4d 65 6d 32 2d 3e 6e 2c 70 4d 65 6d 32 2d  ,pMem2->n,pMem2-
6460: 3e 7a 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  >z);.      }else
6470: 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20  {.        const 
6480: 76 6f 69 64 20 2a 76 31 2c 20 2a 76 32 3b 0a 20  void *v1, *v2;. 
6490: 20 20 20 20 20 20 20 69 6e 74 20 6e 31 2c 20 6e         int n1, n
64a0: 32 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 20 63  2;.        Mem c
64b0: 31 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 20 63  1;.        Mem c
64c0: 32 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 73 65  2;.        memse
64d0: 74 28 26 63 31 2c 20 30 2c 20 73 69 7a 65 6f 66  t(&c1, 0, sizeof
64e0: 28 63 31 29 29 3b 0a 20 20 20 20 20 20 20 20 6d  (c1));.        m
64f0: 65 6d 73 65 74 28 26 63 32 2c 20 30 2c 20 73 69  emset(&c2, 0, si
6500: 7a 65 6f 66 28 63 32 29 29 3b 0a 20 20 20 20 20  zeof(c2));.     
6510: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
6520: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 26 63 31  mShallowCopy(&c1
6530: 2c 20 70 4d 65 6d 31 2c 20 4d 45 4d 5f 45 70 68  , pMem1, MEM_Eph
6540: 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  em);.        sql
6550: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
6560: 6f 77 43 6f 70 79 28 26 63 32 2c 20 70 4d 65 6d  owCopy(&c2, pMem
6570: 32 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  2, MEM_Ephem);. 
6580: 20 20 20 20 20 20 20 76 31 20 3d 20 73 71 6c 69         v1 = sqli
6590: 74 65 33 56 61 6c 75 65 54 65 78 74 28 28 73 71  te3ValueText((sq
65a0: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 26 63 31  lite3_value*)&c1
65b0: 2c 20 70 43 6f 6c 6c 2d 3e 65 6e 63 29 3b 0a 20  , pColl->enc);. 
65c0: 20 20 20 20 20 20 20 6e 31 20 3d 20 76 31 3d 3d         n1 = v1==
65d0: 30 20 3f 20 30 20 3a 20 63 31 2e 6e 3b 0a 20 20  0 ? 0 : c1.n;.  
65e0: 20 20 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74        v2 = sqlit
65f0: 65 33 56 61 6c 75 65 54 65 78 74 28 28 73 71 6c  e3ValueText((sql
6600: 69 74 65 33 5f 76 61 6c 75 65 2a 29 26 63 32 2c  ite3_value*)&c2,
6610: 20 70 43 6f 6c 6c 2d 3e 65 6e 63 29 3b 0a 20 20   pColl->enc);.  
6620: 20 20 20 20 20 20 6e 32 20 3d 20 76 32 3d 3d 30        n2 = v2==0
6630: 20 3f 20 30 20 3a 20 63 32 2e 6e 3b 0a 20 20 20   ? 0 : c2.n;.   
6640: 20 20 20 20 20 72 63 20 3d 20 70 43 6f 6c 6c 2d       rc = pColl-
6650: 3e 78 43 6d 70 28 70 43 6f 6c 6c 2d 3e 70 55 73  >xCmp(pColl->pUs
6660: 65 72 2c 20 6e 31 2c 20 76 31 2c 20 6e 32 2c 20  er, n1, v1, n2, 
6670: 76 32 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  v2);.        sql
6680: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
6690: 73 65 28 26 63 31 29 3b 0a 20 20 20 20 20 20 20  se(&c1);.       
66a0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
66b0: 65 6c 65 61 73 65 28 26 63 32 29 3b 0a 20 20 20  elease(&c2);.   
66c0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a       return rc;.
66d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
66e0: 20 20 2f 2a 20 49 66 20 61 20 4e 55 4c 4c 20 70    /* If a NULL p
66f0: 6f 69 6e 74 65 72 20 77 61 73 20 70 61 73 73 65  ointer was passe
6700: 64 20 61 73 20 74 68 65 20 63 6f 6c 6c 61 74 65  d as the collate
6710: 20 66 75 6e 63 74 69 6f 6e 2c 20 66 61 6c 6c 20   function, fall 
6720: 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74  through.    ** t
6730: 6f 20 74 68 65 20 62 6c 6f 62 20 63 61 73 65 20  o the blob case 
6740: 61 6e 64 20 75 73 65 20 6d 65 6d 63 6d 70 28 29  and use memcmp()
6750: 2e 20 20 2a 2f 0a 20 20 7d 0a 20 0a 20 20 2f 2a  .  */.  }. .  /*
6760: 20 42 6f 74 68 20 76 61 6c 75 65 73 20 6d 75 73   Both values mus
6770: 74 20 62 65 20 62 6c 6f 62 73 2e 20 20 43 6f 6d  t be blobs.  Com
6780: 70 61 72 65 20 75 73 69 6e 67 20 6d 65 6d 63 6d  pare using memcm
6790: 70 28 29 2e 20 20 2a 2f 0a 20 20 72 63 20 3d 20  p().  */.  rc = 
67a0: 6d 65 6d 63 6d 70 28 70 4d 65 6d 31 2d 3e 7a 2c  memcmp(pMem1->z,
67b0: 20 70 4d 65 6d 32 2d 3e 7a 2c 20 28 70 4d 65 6d   pMem2->z, (pMem
67c0: 31 2d 3e 6e 3e 70 4d 65 6d 32 2d 3e 6e 29 3f 70  1->n>pMem2->n)?p
67d0: 4d 65 6d 32 2d 3e 6e 3a 70 4d 65 6d 31 2d 3e 6e  Mem2->n:pMem1->n
67e0: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 30 20 29  );.  if( rc==0 )
67f0: 7b 0a 20 20 20 20 72 63 20 3d 20 70 4d 65 6d 31  {.    rc = pMem1
6800: 2d 3e 6e 20 2d 20 70 4d 65 6d 32 2d 3e 6e 3b 0a  ->n - pMem2->n;.
6810: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b    }.  return rc;
6820: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4d 6f 76 65 20 64  .}../*.** Move d
6830: 61 74 61 20 6f 75 74 20 6f 66 20 61 20 62 74 72  ata out of a btr
6840: 65 65 20 6b 65 79 20 6f 72 20 64 61 74 61 20 66  ee key or data f
6850: 69 65 6c 64 20 61 6e 64 20 69 6e 74 6f 20 61 20  ield and into a 
6860: 4d 65 6d 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  Mem structure..*
6870: 2a 20 54 68 65 20 64 61 74 61 20 6f 72 20 6b 65  * The data or ke
6880: 79 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  y is taken from 
6890: 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 70  the entry that p
68a0: 43 75 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  Cur is currently
68b0: 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20 74 6f 2e   pointing.** to.
68c0: 20 20 6f 66 66 73 65 74 20 61 6e 64 20 61 6d 74    offset and amt
68d0: 20 64 65 74 65 72 6d 69 6e 65 20 77 68 61 74 20   determine what 
68e0: 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  portion of the d
68f0: 61 74 61 20 6f 72 20 6b 65 79 20 74 6f 20 72 65  ata or key to re
6900: 74 72 69 65 76 65 2e 0a 2a 2a 20 6b 65 79 20 69  trieve..** key i
6910: 73 20 74 72 75 65 20 74 6f 20 67 65 74 20 74 68  s true to get th
6920: 65 20 6b 65 79 20 6f 72 20 66 61 6c 73 65 20 74  e key or false t
6930: 6f 20 67 65 74 20 64 61 74 61 2e 20 20 54 68 65  o get data.  The
6940: 20 72 65 73 75 6c 74 20 69 73 20 77 72 69 74 74   result is writt
6950: 65 6e 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 70  en.** into the p
6960: 4d 65 6d 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a  Mem element..**.
6970: 2a 2a 20 54 68 65 20 70 4d 65 6d 20 73 74 72 75  ** The pMem stru
6980: 63 74 75 72 65 20 69 73 20 61 73 73 75 6d 65 64  cture is assumed
6990: 20 74 6f 20 62 65 20 75 6e 69 6e 69 74 69 61 6c   to be uninitial
69a0: 69 7a 65 64 2e 20 20 41 6e 79 20 70 72 69 6f 72  ized.  Any prior
69b0: 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 69 73 20 6f   content.** is o
69c0: 76 65 72 77 72 69 74 74 65 6e 20 77 69 74 68 6f  verwritten witho
69d0: 75 74 20 62 65 69 6e 67 20 66 72 65 65 64 2e 0a  ut being freed..
69e0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 69 73 20 72 6f  **.** If this ro
69f0: 75 74 69 6e 65 20 66 61 69 6c 73 20 66 6f 72 20  utine fails for 
6a00: 61 6e 79 20 72 65 61 73 6f 6e 20 28 6d 61 6c 6c  any reason (mall
6a10: 6f 63 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20  oc returns NULL 
6a20: 6f 72 20 75 6e 61 62 6c 65 0a 2a 2a 20 74 6f 20  or unable.** to 
6a30: 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 64 69  read from the di
6a40: 73 6b 29 20 74 68 65 6e 20 74 68 65 20 70 4d 65  sk) then the pMe
6a50: 6d 20 69 73 20 6c 65 66 74 20 69 6e 20 61 6e 20  m is left in an 
6a60: 69 6e 63 6f 6e 73 69 73 74 65 6e 74 20 73 74 61  inconsistent sta
6a70: 74 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  te..*/.int sqlit
6a80: 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
6a90: 65 65 28 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  ee(.  BtCursor *
6aa0: 70 43 75 72 2c 20 20 20 2f 2a 20 43 75 72 73 6f  pCur,   /* Curso
6ab0: 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 72 65  r pointing at re
6ac0: 63 6f 72 64 20 74 6f 20 72 65 74 72 69 65 76 65  cord to retrieve
6ad0: 2e 20 2a 2f 0a 20 20 69 6e 74 20 6f 66 66 73 65  . */.  int offse
6ae0: 74 2c 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73  t,       /* Offs
6af0: 65 74 20 66 72 6f 6d 20 74 68 65 20 73 74 61 72  et from the star
6b00: 74 20 6f 66 20 64 61 74 61 20 74 6f 20 72 65 74  t of data to ret
6b10: 75 72 6e 20 62 79 74 65 73 20 66 72 6f 6d 2e 20  urn bytes from. 
6b20: 2a 2f 0a 20 20 69 6e 74 20 61 6d 74 2c 20 20 20  */.  int amt,   
6b30: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
6b40: 20 6f 66 20 62 79 74 65 73 20 74 6f 20 72 65 74   of bytes to ret
6b50: 75 72 6e 2e 20 2a 2f 0a 20 20 69 6e 74 20 6b 65  urn. */.  int ke
6b60: 79 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  y,          /* I
6b70: 66 20 74 72 75 65 2c 20 72 65 74 72 69 65 76 65  f true, retrieve
6b80: 20 66 72 6f 6d 20 74 68 65 20 62 74 72 65 65 20   from the btree 
6b90: 6b 65 79 2c 20 6e 6f 74 20 64 61 74 61 2e 20 2a  key, not data. *
6ba0: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 20 20  /.  Mem *pMem   
6bb0: 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 52 65        /* OUT: Re
6bc0: 74 75 72 6e 20 64 61 74 61 20 69 6e 20 74 68 69  turn data in thi
6bd0: 73 20 4d 65 6d 20 73 74 72 75 63 74 75 72 65 2e  s Mem structure.
6be0: 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a   */.){.  char *z
6bf0: 44 61 74 61 3b 20 20 20 20 20 20 20 20 2f 2a 20  Data;        /* 
6c00: 44 61 74 61 20 66 72 6f 6d 20 74 68 65 20 62 74  Data from the bt
6c10: 72 65 65 20 6c 61 79 65 72 20 2a 2f 0a 20 20 69  ree layer */.  i
6c20: 6e 74 20 61 76 61 69 6c 61 62 6c 65 20 3d 20 30  nt available = 0
6c30: 3b 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20  ;  /* Number of 
6c40: 62 79 74 65 73 20 61 76 61 69 6c 61 62 6c 65 20  bytes available 
6c50: 6f 6e 20 74 68 65 20 6c 6f 63 61 6c 20 62 74 72  on the local btr
6c60: 65 65 20 70 61 67 65 20 2a 2f 0a 20 20 69 6e 74  ee page */.  int
6c70: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
6c80: 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20   /* Return code 
6c90: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 73 71  */..  assert( sq
6ca0: 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
6cb0: 49 73 56 61 6c 69 64 28 70 43 75 72 29 20 29 3b  IsValid(pCur) );
6cc0: 0a 0a 20 20 2f 2a 20 4e 6f 74 65 3a 20 74 68 65  ..  /* Note: the
6cd0: 20 63 61 6c 6c 73 20 74 6f 20 42 74 72 65 65 4b   calls to BtreeK
6ce0: 65 79 46 65 74 63 68 28 29 20 61 6e 64 20 44 61  eyFetch() and Da
6cf0: 74 61 46 65 74 63 68 28 29 20 62 65 6c 6f 77 20  taFetch() below 
6d00: 61 73 73 65 72 74 28 29 20 0a 20 20 2a 2a 20 74  assert() .  ** t
6d10: 68 61 74 20 62 6f 74 68 20 74 68 65 20 42 74 53  hat both the BtS
6d20: 68 61 72 65 64 20 61 6e 64 20 64 61 74 61 62 61  hared and databa
6d30: 73 65 20 68 61 6e 64 6c 65 20 6d 75 74 65 78 65  se handle mutexe
6d40: 73 20 61 72 65 20 68 65 6c 64 2e 20 2a 2f 0a 20  s are held. */. 
6d50: 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
6d60: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
6d70: 65 74 29 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20  et)==0 );.  if( 
6d80: 6b 65 79 20 29 7b 0a 20 20 20 20 7a 44 61 74 61  key ){.    zData
6d90: 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74   = (char *)sqlit
6da0: 65 33 42 74 72 65 65 4b 65 79 46 65 74 63 68 28  e3BtreeKeyFetch(
6db0: 70 43 75 72 2c 20 26 61 76 61 69 6c 61 62 6c 65  pCur, &available
6dc0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
6dd0: 7a 44 61 74 61 20 3d 20 28 63 68 61 72 20 2a 29  zData = (char *)
6de0: 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
6df0: 46 65 74 63 68 28 70 43 75 72 2c 20 26 61 76 61  Fetch(pCur, &ava
6e00: 69 6c 61 62 6c 65 29 3b 0a 20 20 7d 0a 20 20 61  ilable);.  }.  a
6e10: 73 73 65 72 74 28 20 7a 44 61 74 61 21 3d 30 20  ssert( zData!=0 
6e20: 29 3b 0a 0a 20 20 69 66 28 20 6f 66 66 73 65 74  );..  if( offset
6e30: 2b 61 6d 74 3c 3d 61 76 61 69 6c 61 62 6c 65 20  +amt<=available 
6e40: 26 26 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 26  && (pMem->flags&
6e50: 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 7b 0a 20  MEM_Dyn)==0 ){. 
6e60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
6e70: 6d 52 65 6c 65 61 73 65 28 70 4d 65 6d 29 3b 0a  mRelease(pMem);.
6e80: 20 20 20 20 70 4d 65 6d 2d 3e 7a 20 3d 20 26 7a      pMem->z = &z
6e90: 44 61 74 61 5b 6f 66 66 73 65 74 5d 3b 0a 20 20  Data[offset];.  
6ea0: 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20    pMem->flags = 
6eb0: 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 45 70 68  MEM_Blob|MEM_Eph
6ec0: 65 6d 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  em;.  }else if( 
6ed0: 53 51 4c 49 54 45 5f 4f 4b 3d 3d 28 72 63 20 3d  SQLITE_OK==(rc =
6ee0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47   sqlite3VdbeMemG
6ef0: 72 6f 77 28 70 4d 65 6d 2c 20 61 6d 74 2b 32 2c  row(pMem, amt+2,
6f00: 20 30 29 29 20 29 7b 0a 20 20 20 20 70 4d 65 6d   0)) ){.    pMem
6f10: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c  ->flags = MEM_Bl
6f20: 6f 62 7c 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 54  ob|MEM_Dyn|MEM_T
6f30: 65 72 6d 3b 0a 20 20 20 20 70 4d 65 6d 2d 3e 65  erm;.    pMem->e
6f40: 6e 63 20 3d 20 30 3b 0a 20 20 20 20 70 4d 65 6d  nc = 0;.    pMem
6f50: 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f  ->type = SQLITE_
6f60: 42 4c 4f 42 3b 0a 20 20 20 20 69 66 28 20 6b 65  BLOB;.    if( ke
6f70: 79 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  y ){.      rc = 
6f80: 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28  sqlite3BtreeKey(
6f90: 70 43 75 72 2c 20 6f 66 66 73 65 74 2c 20 61 6d  pCur, offset, am
6fa0: 74 2c 20 70 4d 65 6d 2d 3e 7a 29 3b 0a 20 20 20  t, pMem->z);.   
6fb0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
6fc0: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
6fd0: 61 74 61 28 70 43 75 72 2c 20 6f 66 66 73 65 74  ata(pCur, offset
6fe0: 2c 20 61 6d 74 2c 20 70 4d 65 6d 2d 3e 7a 29 3b  , amt, pMem->z);
6ff0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4d 65 6d 2d  .    }.    pMem-
7000: 3e 7a 5b 61 6d 74 5d 20 3d 20 30 3b 0a 20 20 20  >z[amt] = 0;.   
7010: 20 70 4d 65 6d 2d 3e 7a 5b 61 6d 74 2b 31 5d 20   pMem->z[amt+1] 
7020: 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 72 63 21  = 0;.    if( rc!
7030: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
7040: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
7050: 65 6d 52 65 6c 65 61 73 65 28 70 4d 65 6d 29 3b  emRelease(pMem);
7060: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4d 65  .    }.  }.  pMe
7070: 6d 2d 3e 6e 20 3d 20 61 6d 74 3b 0a 0a 20 20 72  m->n = amt;..  r
7080: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 20  eturn rc;.}../* 
7090: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
70a0: 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20   only available 
70b0: 69 6e 74 65 72 6e 61 6c 6c 79 2c 20 69 74 20 69  internally, it i
70c0: 73 20 6e 6f 74 20 70 61 72 74 20 6f 66 20 74 68  s not part of th
70d0: 65 0a 2a 2a 20 65 78 74 65 72 6e 61 6c 20 41 50  e.** external AP
70e0: 49 2e 20 49 74 20 77 6f 72 6b 73 20 69 6e 20 61  I. It works in a
70f0: 20 73 69 6d 69 6c 61 72 20 77 61 79 20 74 6f 20   similar way to 
7100: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
7110: 78 74 28 29 2c 0a 2a 2a 20 65 78 63 65 70 74 20  xt(),.** except 
7120: 74 68 65 20 64 61 74 61 20 72 65 74 75 72 6e 65  the data returne
7130: 64 20 69 73 20 69 6e 20 74 68 65 20 65 6e 63 6f  d is in the enco
7140: 64 69 6e 67 20 73 70 65 63 69 66 69 65 64 20 62  ding specified b
7150: 79 20 74 68 65 20 73 65 63 6f 6e 64 0a 2a 2a 20  y the second.** 
7160: 70 61 72 61 6d 65 74 65 72 2c 20 77 68 69 63 68  parameter, which
7170: 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20   must be one of 
7180: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2c 20  SQLITE_UTF16BE, 
7190: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 6f  SQLITE_UTF16LE o
71a0: 72 0a 2a 2a 20 53 51 4c 49 54 45 5f 55 54 46 38  r.** SQLITE_UTF8
71b0: 2e 0a 2a 2a 0a 2a 2a 20 28 32 30 30 36 2d 30 32  ..**.** (2006-02
71c0: 2d 31 36 3a 29 20 20 54 68 65 20 65 6e 63 20 76  -16:)  The enc v
71d0: 61 6c 75 65 20 63 61 6e 20 62 65 20 6f 72 2d 65  alue can be or-e
71e0: 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f 55 54  d with SQLITE_UT
71f0: 46 31 36 5f 41 4c 49 47 4e 45 44 2e 0a 2a 2a 20  F16_ALIGNED..** 
7200: 49 66 20 74 68 61 74 20 69 73 20 74 68 65 20 63  If that is the c
7210: 61 73 65 2c 20 74 68 65 6e 20 74 68 65 20 72 65  ase, then the re
7220: 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61 6c 69  sult must be ali
7230: 67 6e 65 64 20 6f 6e 20 61 6e 20 65 76 65 6e 20  gned on an even 
7240: 62 79 74 65 0a 2a 2a 20 62 6f 75 6e 64 61 72 79  byte.** boundary
7250: 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69 64 20  ..*/.const void 
7260: 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78  *sqlite3ValueTex
7270: 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t(sqlite3_value*
7280: 20 70 56 61 6c 2c 20 75 38 20 65 6e 63 29 7b 0a   pVal, u8 enc){.
7290: 20 20 69 66 28 20 21 70 56 61 6c 20 29 20 72 65    if( !pVal ) re
72a0: 74 75 72 6e 20 30 3b 0a 0a 20 20 61 73 73 65 72  turn 0;..  asser
72b0: 74 28 20 70 56 61 6c 2d 3e 64 62 3d 3d 30 20 7c  t( pVal->db==0 |
72c0: 7c 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  | sqlite3_mutex_
72d0: 68 65 6c 64 28 70 56 61 6c 2d 3e 64 62 2d 3e 6d  held(pVal->db->m
72e0: 75 74 65 78 29 20 29 3b 0a 20 20 61 73 73 65 72  utex) );.  asser
72f0: 74 28 20 28 65 6e 63 26 33 29 3d 3d 28 65 6e 63  t( (enc&3)==(enc
7300: 26 7e 53 51 4c 49 54 45 5f 55 54 46 31 36 5f 41  &~SQLITE_UTF16_A
7310: 4c 49 47 4e 45 44 29 20 29 3b 0a 20 20 61 73 73  LIGNED) );.  ass
7320: 65 72 74 28 20 28 70 56 61 6c 2d 3e 66 6c 61 67  ert( (pVal->flag
7330: 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
7340: 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 56 61  =0 );..  if( pVa
7350: 6c 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c  l->flags&MEM_Nul
7360: 6c 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  l ){.    return 
7370: 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  0;.  }.  assert(
7380: 20 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29 20 3d   (MEM_Blob>>3) =
7390: 3d 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 70  = MEM_Str );.  p
73a0: 56 61 6c 2d 3e 66 6c 61 67 73 20 7c 3d 20 28 70  Val->flags |= (p
73b0: 56 61 6c 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Val->flags & MEM
73c0: 5f 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20 65 78 70  _Blob)>>3;.  exp
73d0: 61 6e 64 42 6c 6f 62 28 70 56 61 6c 29 3b 0a 20  andBlob(pVal);. 
73e0: 20 69 66 28 20 70 56 61 6c 2d 3e 66 6c 61 67 73   if( pVal->flags
73f0: 26 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  &MEM_Str ){.    
7400: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
7410: 65 45 6e 63 6f 64 69 6e 67 28 70 56 61 6c 2c 20  eEncoding(pVal, 
7420: 65 6e 63 20 26 20 7e 53 51 4c 49 54 45 5f 55 54  enc & ~SQLITE_UT
7430: 46 31 36 5f 41 4c 49 47 4e 45 44 29 3b 0a 20 20  F16_ALIGNED);.  
7440: 20 20 69 66 28 20 28 65 6e 63 20 26 20 53 51 4c    if( (enc & SQL
7450: 49 54 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45  ITE_UTF16_ALIGNE
7460: 44 29 21 3d 30 20 26 26 20 31 3d 3d 28 31 26 53  D)!=0 && 1==(1&S
7470: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
7480: 28 70 56 61 6c 2d 3e 7a 29 29 20 29 7b 0a 20 20  (pVal->z)) ){.  
7490: 20 20 20 20 61 73 73 65 72 74 28 20 28 70 56 61      assert( (pVa
74a0: 6c 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  l->flags & (MEM_
74b0: 45 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63  Ephem|MEM_Static
74c0: 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  ))!=0 );.      i
74d0: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
74e0: 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70  mMakeWriteable(p
74f0: 56 61 6c 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  Val)!=SQLITE_OK 
7500: 29 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ){.        retur
7510: 6e 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  n 0;.      }.   
7520: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
7530: 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74  beMemNulTerminat
7540: 65 28 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a  e(pVal); /* IMP:
7550: 20 52 2d 35 39 38 39 33 2d 34 35 34 36 37 20 2a   R-59893-45467 *
7560: 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  /.  }else{.    a
7570: 73 73 65 72 74 28 20 28 70 56 61 6c 2d 3e 66 6c  ssert( (pVal->fl
7580: 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30  ags&MEM_Blob)==0
7590: 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
75a0: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
75b0: 70 56 61 6c 2c 20 65 6e 63 29 3b 0a 20 20 20 20  pVal, enc);.    
75c0: 61 73 73 65 72 74 28 20 30 3d 3d 28 31 26 53 51  assert( 0==(1&SQ
75d0: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
75e0: 70 56 61 6c 2d 3e 7a 29 29 20 29 3b 0a 20 20 7d  pVal->z)) );.  }
75f0: 0a 20 20 61 73 73 65 72 74 28 70 56 61 6c 2d 3e  .  assert(pVal->
7600: 65 6e 63 3d 3d 28 65 6e 63 20 26 20 7e 53 51 4c  enc==(enc & ~SQL
7610: 49 54 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45  ITE_UTF16_ALIGNE
7620: 44 29 20 7c 7c 20 70 56 61 6c 2d 3e 64 62 3d 3d  D) || pVal->db==
7630: 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0.              
7640: 7c 7c 20 70 56 61 6c 2d 3e 64 62 2d 3e 6d 61 6c  || pVal->db->mal
7650: 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 69  locFailed );.  i
7660: 66 28 20 70 56 61 6c 2d 3e 65 6e 63 3d 3d 28 65  f( pVal->enc==(e
7670: 6e 63 20 26 20 7e 53 51 4c 49 54 45 5f 55 54 46  nc & ~SQLITE_UTF
7680: 31 36 5f 41 4c 49 47 4e 45 44 29 20 29 7b 0a 20  16_ALIGNED) ){. 
7690: 20 20 20 72 65 74 75 72 6e 20 70 56 61 6c 2d 3e     return pVal->
76a0: 7a 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  z;.  }else{.    
76b0: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a  return 0;.  }.}.
76c0: 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20 61 20  ./*.** Create a 
76d0: 6e 65 77 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  new sqlite3_valu
76e0: 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 73 71 6c  e object..*/.sql
76f0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69  ite3_value *sqli
7700: 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69  te3ValueNew(sqli
7710: 74 65 33 20 2a 64 62 29 7b 0a 20 20 4d 65 6d 20  te3 *db){.  Mem 
7720: 2a 70 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  *p = sqlite3DbMa
7730: 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 73 69 7a  llocZero(db, siz
7740: 65 6f 66 28 2a 70 29 29 3b 0a 20 20 69 66 28 20  eof(*p));.  if( 
7750: 70 20 29 7b 0a 20 20 20 20 70 2d 3e 66 6c 61 67  p ){.    p->flag
7760: 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
7770: 20 20 70 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49    p->type = SQLI
7780: 54 45 5f 4e 55 4c 4c 3b 0a 20 20 20 20 70 2d 3e  TE_NULL;.    p->
7790: 64 62 20 3d 20 64 62 3b 0a 20 20 7d 0a 20 20 72  db = db;.  }.  r
77a0: 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn p;.}../*.*
77b0: 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 73  * Create a new s
77c0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 6f 62 6a  qlite3_value obj
77d0: 65 63 74 2c 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ect, containing 
77e0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 45 78  the value of pEx
77f0: 70 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  pr..**.** This o
7800: 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 76 65  nly works for ve
7810: 72 79 20 73 69 6d 70 6c 65 20 65 78 70 72 65 73  ry simple expres
7820: 73 69 6f 6e 73 20 74 68 61 74 20 63 6f 6e 73 69  sions that consi
7830: 73 74 20 6f 66 20 6f 6e 65 20 63 6f 6e 73 74 61  st of one consta
7840: 6e 74 0a 2a 2a 20 74 6f 6b 65 6e 20 28 69 2e 65  nt.** token (i.e
7850: 2e 20 22 35 22 2c 20 22 35 2e 31 22 2c 20 22 27  . "5", "5.1", "'
7860: 61 20 73 74 72 69 6e 67 27 22 29 2e 20 49 66 20  a string'"). If 
7870: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 63  the expression c
7880: 61 6e 0a 2a 2a 20 62 65 20 63 6f 6e 76 65 72 74  an.** be convert
7890: 65 64 20 64 69 72 65 63 74 6c 79 20 69 6e 74 6f  ed directly into
78a0: 20 61 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74   a value, then t
78b0: 68 65 20 76 61 6c 75 65 20 69 73 20 61 6c 6c 6f  he value is allo
78c0: 63 61 74 65 64 20 61 6e 64 0a 2a 2a 20 61 20 70  cated and.** a p
78d0: 6f 69 6e 74 65 72 20 77 72 69 74 74 65 6e 20 74  ointer written t
78e0: 6f 20 2a 70 70 56 61 6c 2e 20 54 68 65 20 63 61  o *ppVal. The ca
78f0: 6c 6c 65 72 20 69 73 20 72 65 73 70 6f 6e 73 69  ller is responsi
7900: 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c 6f 63 61  ble for dealloca
7910: 74 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ting.** the valu
7920: 65 20 62 79 20 70 61 73 73 69 6e 67 20 69 74 20  e by passing it 
7930: 74 6f 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  to sqlite3ValueF
7940: 72 65 65 28 29 20 6c 61 74 65 72 20 6f 6e 2e 20  ree() later on. 
7950: 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
7960: 6e 0a 2a 2a 20 63 61 6e 6e 6f 74 20 62 65 20 63  n.** cannot be c
7970: 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 20 76 61  onverted to a va
7980: 6c 75 65 2c 20 74 68 65 6e 20 2a 70 70 56 61 6c  lue, then *ppVal
7990: 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e   is set to NULL.
79a0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  .*/.int sqlite3V
79b0: 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 0a 20 20  alueFromExpr(.  
79c0: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20  sqlite3 *db,    
79d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
79e0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
79f0: 74 69 6f 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a  tion */.  Expr *
7a00: 70 45 78 70 72 2c 20 20 20 20 20 20 20 20 20 20  pExpr,          
7a10: 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65      /* The expre
7a20: 73 73 69 6f 6e 20 74 6f 20 65 76 61 6c 75 61 74  ssion to evaluat
7a30: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 2c 20 20  e */.  u8 enc,  
7a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a50: 20 2f 2a 20 45 6e 63 6f 64 69 6e 67 20 74 6f 20   /* Encoding to 
7a60: 75 73 65 20 2a 2f 0a 20 20 75 38 20 61 66 66 69  use */.  u8 affi
7a70: 6e 69 74 79 2c 20 20 20 20 20 20 20 20 20 20 20  nity,           
7a80: 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74     /* Affinity t
7a90: 6f 20 75 73 65 20 2a 2f 0a 20 20 73 71 6c 69 74  o use */.  sqlit
7aa0: 65 33 5f 76 61 6c 75 65 20 2a 2a 70 70 56 61 6c  e3_value **ppVal
7ab0: 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20 74 68       /* Write th
7ac0: 65 20 6e 65 77 20 76 61 6c 75 65 20 68 65 72 65  e new value here
7ad0: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 6f 70 3b   */.){.  int op;
7ae0: 0a 20 20 63 68 61 72 20 2a 7a 56 61 6c 20 3d 20  .  char *zVal = 
7af0: 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  0;.  sqlite3_val
7b00: 75 65 20 2a 70 56 61 6c 20 3d 20 30 3b 0a 20 20  ue *pVal = 0;.  
7b10: 69 6e 74 20 6e 65 67 49 6e 74 20 3d 20 31 3b 0a  int negInt = 1;.
7b20: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
7b30: 65 67 20 3d 20 22 22 3b 0a 0a 20 20 69 66 28 20  eg = "";..  if( 
7b40: 21 70 45 78 70 72 20 29 7b 0a 20 20 20 20 2a 70  !pExpr ){.    *p
7b50: 70 56 61 6c 20 3d 20 30 3b 0a 20 20 20 20 72 65  pVal = 0;.    re
7b60: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
7b70: 20 20 7d 0a 20 20 6f 70 20 3d 20 70 45 78 70 72    }.  op = pExpr
7b80: 2d 3e 6f 70 3b 0a 0a 20 20 2f 2a 20 6f 70 20 63  ->op;..  /* op c
7b90: 61 6e 20 6f 6e 6c 79 20 62 65 20 54 4b 5f 52 45  an only be TK_RE
7ba0: 47 49 53 54 45 52 20 69 66 20 77 65 20 68 61 76  GISTER if we hav
7bb0: 65 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  e compiled with 
7bc0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
7bd0: 41 54 32 2e 0a 20 20 2a 2a 20 54 68 65 20 69 66  AT2..  ** The if
7be0: 64 65 66 20 68 65 72 65 20 69 73 20 74 6f 20 65  def here is to e
7bf0: 6e 61 62 6c 65 20 75 73 20 74 6f 20 61 63 68 69  nable us to achi
7c00: 65 76 65 20 31 30 30 25 20 62 72 61 6e 63 68 20  eve 100% branch 
7c10: 74 65 73 74 20 63 6f 76 65 72 61 67 65 20 65 76  test coverage ev
7c20: 65 6e 0a 20 20 2a 2a 20 77 68 65 6e 20 53 51 4c  en.  ** when SQL
7c30: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 32  ITE_ENABLE_STAT2
7c40: 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a 20 20 2a   is omitted..  *
7c50: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
7c60: 45 4e 41 42 4c 45 5f 53 54 41 54 32 0a 20 20 69  ENABLE_STAT2.  i
7c70: 66 28 20 6f 70 3d 3d 54 4b 5f 52 45 47 49 53 54  f( op==TK_REGIST
7c80: 45 52 20 29 20 6f 70 20 3d 20 70 45 78 70 72 2d  ER ) op = pExpr-
7c90: 3e 6f 70 32 3b 0a 23 65 6c 73 65 0a 20 20 69 66  >op2;.#else.  if
7ca0: 28 20 4e 45 56 45 52 28 6f 70 3d 3d 54 4b 5f 52  ( NEVER(op==TK_R
7cb0: 45 47 49 53 54 45 52 29 20 29 20 6f 70 20 3d 20  EGISTER) ) op = 
7cc0: 70 45 78 70 72 2d 3e 6f 70 32 3b 0a 23 65 6e 64  pExpr->op2;.#end
7cd0: 69 66 0a 0a 20 20 2f 2a 20 48 61 6e 64 6c 65 20  if..  /* Handle 
7ce0: 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72  negative integer
7cf0: 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 73 74  s in a single st
7d00: 65 70 2e 20 20 54 68 69 73 20 69 73 20 6e 65 65  ep.  This is nee
7d10: 64 65 64 20 69 6e 20 74 68 65 0a 20 20 2a 2a 20  ded in the.  ** 
7d20: 63 61 73 65 20 77 68 65 6e 20 74 68 65 20 76 61  case when the va
7d30: 6c 75 65 20 69 73 20 2d 39 32 32 33 33 37 32 30  lue is -92233720
7d40: 33 36 38 35 34 37 37 35 38 30 38 2e 0a 20 20 2a  36854775808..  *
7d50: 2f 0a 20 20 69 66 28 20 6f 70 3d 3d 54 4b 5f 55  /.  if( op==TK_U
7d60: 4d 49 4e 55 53 0a 20 20 20 26 26 20 28 70 45 78  MINUS.   && (pEx
7d70: 70 72 2d 3e 70 4c 65 66 74 2d 3e 6f 70 3d 3d 54  pr->pLeft->op==T
7d80: 4b 5f 49 4e 54 45 47 45 52 20 7c 7c 20 70 45 78  K_INTEGER || pEx
7d90: 70 72 2d 3e 70 4c 65 66 74 2d 3e 6f 70 3d 3d 54  pr->pLeft->op==T
7da0: 4b 5f 46 4c 4f 41 54 29 20 29 7b 0a 20 20 20 20  K_FLOAT) ){.    
7db0: 70 45 78 70 72 20 3d 20 70 45 78 70 72 2d 3e 70  pExpr = pExpr->p
7dc0: 4c 65 66 74 3b 0a 20 20 20 20 6f 70 20 3d 20 70  Left;.    op = p
7dd0: 45 78 70 72 2d 3e 6f 70 3b 0a 20 20 20 20 6e 65  Expr->op;.    ne
7de0: 67 49 6e 74 20 3d 20 2d 31 3b 0a 20 20 20 20 7a  gInt = -1;.    z
7df0: 4e 65 67 20 3d 20 22 2d 22 3b 0a 20 20 7d 0a 0a  Neg = "-";.  }..
7e00: 20 20 69 66 28 20 6f 70 3d 3d 54 4b 5f 53 54 52    if( op==TK_STR
7e10: 49 4e 47 20 7c 7c 20 6f 70 3d 3d 54 4b 5f 46 4c  ING || op==TK_FL
7e20: 4f 41 54 20 7c 7c 20 6f 70 3d 3d 54 4b 5f 49 4e  OAT || op==TK_IN
7e30: 54 45 47 45 52 20 29 7b 0a 20 20 20 20 70 56 61  TEGER ){.    pVa
7e40: 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65  l = sqlite3Value
7e50: 4e 65 77 28 64 62 29 3b 0a 20 20 20 20 69 66 28  New(db);.    if(
7e60: 20 70 56 61 6c 3d 3d 30 20 29 20 67 6f 74 6f 20   pVal==0 ) goto 
7e70: 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 69 66 28 20  no_mem;.    if( 
7e80: 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
7e90: 70 45 78 70 72 2c 20 45 50 5f 49 6e 74 56 61 6c  pExpr, EP_IntVal
7ea0: 75 65 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ue) ){.      sql
7eb0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
7ec0: 74 36 34 28 70 56 61 6c 2c 20 28 69 36 34 29 70  t64(pVal, (i64)p
7ed0: 45 78 70 72 2d 3e 75 2e 69 56 61 6c 75 65 2a 6e  Expr->u.iValue*n
7ee0: 65 67 49 6e 74 29 3b 0a 20 20 20 20 7d 65 6c 73  egInt);.    }els
7ef0: 65 7b 0a 20 20 20 20 20 20 7a 56 61 6c 20 3d 20  e{.      zVal = 
7f00: 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
7f10: 62 2c 20 22 25 73 25 73 22 2c 20 7a 4e 65 67 2c  b, "%s%s", zNeg,
7f20: 20 70 45 78 70 72 2d 3e 75 2e 7a 54 6f 6b 65 6e   pExpr->u.zToken
7f30: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 56 61  );.      if( zVa
7f40: 6c 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  l==0 ) goto no_m
7f50: 65 6d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  em;.      sqlite
7f60: 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61  3ValueSetStr(pVa
7f70: 6c 2c 20 2d 31 2c 20 7a 56 61 6c 2c 20 53 51 4c  l, -1, zVal, SQL
7f80: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
7f90: 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20  _DYNAMIC);.     
7fa0: 20 69 66 28 20 6f 70 3d 3d 54 4b 5f 46 4c 4f 41   if( op==TK_FLOA
7fb0: 54 20 29 20 70 56 61 6c 2d 3e 74 79 70 65 20 3d  T ) pVal->type =
7fc0: 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3b 0a 20   SQLITE_FLOAT;. 
7fd0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 6f 70     }.    if( (op
7fe0: 3d 3d 54 4b 5f 49 4e 54 45 47 45 52 20 7c 7c 20  ==TK_INTEGER || 
7ff0: 6f 70 3d 3d 54 4b 5f 46 4c 4f 41 54 20 29 20 26  op==TK_FLOAT ) &
8000: 26 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  & affinity==SQLI
8010: 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b 0a 20  TE_AFF_NONE ){. 
8020: 20 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75       sqlite3Valu
8030: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70  eApplyAffinity(p
8040: 56 61 6c 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  Val, SQLITE_AFF_
8050: 4e 55 4d 45 52 49 43 2c 20 53 51 4c 49 54 45 5f  NUMERIC, SQLITE_
8060: 55 54 46 38 29 3b 0a 20 20 20 20 7d 65 6c 73 65  UTF8);.    }else
8070: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
8080: 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74  alueApplyAffinit
8090: 79 28 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79  y(pVal, affinity
80a0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a  , SQLITE_UTF8);.
80b0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 56      }.    if( pV
80c0: 61 6c 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  al->flags & (MEM
80d0: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20 29  _Int|MEM_Real) )
80e0: 20 70 56 61 6c 2d 3e 66 6c 61 67 73 20 26 3d 20   pVal->flags &= 
80f0: 7e 4d 45 4d 5f 53 74 72 3b 0a 20 20 20 20 69 66  ~MEM_Str;.    if
8100: 28 20 65 6e 63 21 3d 53 51 4c 49 54 45 5f 55 54  ( enc!=SQLITE_UT
8110: 46 38 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  F8 ){.      sqli
8120: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
8130: 6f 64 69 6e 67 28 70 56 61 6c 2c 20 65 6e 63 29  oding(pVal, enc)
8140: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20  ;.    }.  }else 
8150: 69 66 28 20 6f 70 3d 3d 54 4b 5f 55 4d 49 4e 55  if( op==TK_UMINU
8160: 53 20 29 20 7b 0a 20 20 20 20 2f 2a 20 54 68 69  S ) {.    /* Thi
8170: 73 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73  s branch happens
8180: 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 6e 65   for multiple ne
8190: 67 61 74 69 76 65 20 73 69 67 6e 73 2e 20 20 45  gative signs.  E
81a0: 78 3a 20 2d 28 2d 35 29 20 2a 2f 0a 20 20 20 20  x: -(-5) */.    
81b0: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73  if( SQLITE_OK==s
81c0: 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45  qlite3ValueFromE
81d0: 78 70 72 28 64 62 2c 70 45 78 70 72 2d 3e 70 4c  xpr(db,pExpr->pL
81e0: 65 66 74 2c 65 6e 63 2c 61 66 66 69 6e 69 74 79  eft,enc,affinity
81f0: 2c 26 70 56 61 6c 29 20 29 7b 0a 20 20 20 20 20  ,&pVal) ){.     
8200: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
8210: 75 6d 65 72 69 66 79 28 70 56 61 6c 29 3b 0a 20  umerify(pVal);. 
8220: 20 20 20 20 20 69 66 28 20 70 56 61 6c 2d 3e 75       if( pVal->u
8230: 2e 69 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  .i==SMALLEST_INT
8240: 36 34 20 29 7b 0a 20 20 20 20 20 20 20 20 70 56  64 ){.        pV
8250: 61 6c 2d 3e 66 6c 61 67 73 20 26 3d 20 4d 45 4d  al->flags &= MEM
8260: 5f 49 6e 74 3b 0a 20 20 20 20 20 20 20 20 70 56  _Int;.        pV
8270: 61 6c 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  al->flags |= MEM
8280: 5f 52 65 61 6c 3b 0a 20 20 20 20 20 20 20 20 70  _Real;.        p
8290: 56 61 6c 2d 3e 72 20 3d 20 28 64 6f 75 62 6c 65  Val->r = (double
82a0: 29 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 3b 0a  )LARGEST_INT64;.
82b0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
82c0: 20 20 20 20 20 70 56 61 6c 2d 3e 75 2e 69 20 3d       pVal->u.i =
82d0: 20 2d 70 56 61 6c 2d 3e 75 2e 69 3b 0a 20 20 20   -pVal->u.i;.   
82e0: 20 20 20 7d 0a 20 20 20 20 20 20 70 56 61 6c 2d     }.      pVal-
82f0: 3e 72 20 3d 20 2d 70 56 61 6c 2d 3e 72 3b 0a 20  >r = -pVal->r;. 
8300: 20 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75       sqlite3Valu
8310: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70  eApplyAffinity(p
8320: 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  Val, affinity, e
8330: 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  nc);.    }.  }el
8340: 73 65 20 69 66 28 20 6f 70 3d 3d 54 4b 5f 4e 55  se if( op==TK_NU
8350: 4c 4c 20 29 7b 0a 20 20 20 20 70 56 61 6c 20 3d  LL ){.    pVal =
8360: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77   sqlite3ValueNew
8370: 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 56  (db);.    if( pV
8380: 61 6c 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  al==0 ) goto no_
8390: 6d 65 6d 3b 0a 20 20 7d 0a 23 69 66 6e 64 65 66  mem;.  }.#ifndef
83a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f   SQLITE_OMIT_BLO
83b0: 42 5f 4c 49 54 45 52 41 4c 0a 20 20 65 6c 73 65  B_LITERAL.  else
83c0: 20 69 66 28 20 6f 70 3d 3d 54 4b 5f 42 4c 4f 42   if( op==TK_BLOB
83d0: 20 29 7b 0a 20 20 20 20 69 6e 74 20 6e 56 61 6c   ){.    int nVal
83e0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 45  ;.    assert( pE
83f0: 78 70 72 2d 3e 75 2e 7a 54 6f 6b 65 6e 5b 30 5d  xpr->u.zToken[0]
8400: 3d 3d 27 78 27 20 7c 7c 20 70 45 78 70 72 2d 3e  =='x' || pExpr->
8410: 75 2e 7a 54 6f 6b 65 6e 5b 30 5d 3d 3d 27 58 27  u.zToken[0]=='X'
8420: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
8430: 70 45 78 70 72 2d 3e 75 2e 7a 54 6f 6b 65 6e 5b  pExpr->u.zToken[
8440: 31 5d 3d 3d 27 5c 27 27 20 29 3b 0a 20 20 20 20  1]=='\'' );.    
8450: 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61  pVal = sqlite3Va
8460: 6c 75 65 4e 65 77 28 64 62 29 3b 0a 20 20 20 20  lueNew(db);.    
8470: 69 66 28 20 21 70 56 61 6c 20 29 20 67 6f 74 6f  if( !pVal ) goto
8480: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7a 56 61   no_mem;.    zVa
8490: 6c 20 3d 20 26 70 45 78 70 72 2d 3e 75 2e 7a 54  l = &pExpr->u.zT
84a0: 6f 6b 65 6e 5b 32 5d 3b 0a 20 20 20 20 6e 56 61  oken[2];.    nVa
84b0: 6c 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  l = sqlite3Strle
84c0: 6e 33 30 28 7a 56 61 6c 29 2d 31 3b 0a 20 20 20  n30(zVal)-1;.   
84d0: 20 61 73 73 65 72 74 28 20 7a 56 61 6c 5b 6e 56   assert( zVal[nV
84e0: 61 6c 5d 3d 3d 27 5c 27 27 20 29 3b 0a 20 20 20  al]=='\'' );.   
84f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
8500: 65 74 53 74 72 28 70 56 61 6c 2c 20 73 71 6c 69  etStr(pVal, sqli
8510: 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 64 62 2c  te3HexToBlob(db,
8520: 20 7a 56 61 6c 2c 20 6e 56 61 6c 29 2c 20 6e 56   zVal, nVal), nV
8530: 61 6c 2f 32 2c 0a 20 20 20 20 20 20 20 20 20 20  al/2,.          
8540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
8550: 2c 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43  , SQLITE_DYNAMIC
8560: 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
8570: 20 69 66 28 20 70 56 61 6c 20 29 7b 0a 20 20 20   if( pVal ){.   
8580: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
8590: 74 6f 72 65 54 79 70 65 28 70 56 61 6c 29 3b 0a  toreType(pVal);.
85a0: 20 20 7d 0a 20 20 2a 70 70 56 61 6c 20 3d 20 70    }.  *ppVal = p
85b0: 56 61 6c 3b 0a 20 20 72 65 74 75 72 6e 20 53 51  Val;.  return SQ
85c0: 4c 49 54 45 5f 4f 4b 3b 0a 0a 6e 6f 5f 6d 65 6d  LITE_OK;..no_mem
85d0: 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  :.  db->mallocFa
85e0: 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69  iled = 1;.  sqli
85f0: 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 56  te3DbFree(db, zV
8600: 61 6c 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61  al);.  sqlite3Va
8610: 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 20  lueFree(pVal);. 
8620: 20 2a 70 70 56 61 6c 20 3d 20 30 3b 0a 20 20 72   *ppVal = 0;.  r
8630: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d  eturn SQLITE_NOM
8640: 45 4d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 61  EM;.}../*.** Cha
8650: 6e 67 65 20 74 68 65 20 73 74 72 69 6e 67 20 76  nge the string v
8660: 61 6c 75 65 20 6f 66 20 61 6e 20 73 71 6c 69 74  alue of an sqlit
8670: 65 33 5f 76 61 6c 75 65 20 6f 62 6a 65 63 74 0a  e3_value object.
8680: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
8690: 61 6c 75 65 53 65 74 53 74 72 28 0a 20 20 73 71  alueSetStr(.  sq
86a0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 76 2c 20  lite3_value *v, 
86b0: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
86c0: 62 65 20 73 65 74 20 2a 2f 0a 20 20 69 6e 74 20  be set */.  int 
86d0: 6e 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n,              
86e0: 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 73    /* Length of s
86f0: 74 72 69 6e 67 20 7a 20 2a 2f 0a 20 20 63 6f 6e  tring z */.  con
8700: 73 74 20 76 6f 69 64 20 2a 7a 2c 20 20 20 20 20  st void *z,     
8710: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
8720: 65 20 6e 65 77 20 73 74 72 69 6e 67 20 2a 2f 0a  e new string */.
8730: 20 20 75 38 20 65 6e 63 2c 20 20 20 20 20 20 20    u8 enc,       
8740: 20 20 20 20 20 20 20 20 2f 2a 20 45 6e 63 6f 64          /* Encod
8750: 69 6e 67 20 74 6f 20 75 73 65 20 2a 2f 0a 20 20  ing to use */.  
8760: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
8770: 64 2a 29 20 20 20 2f 2a 20 44 65 73 74 72 75 63  d*)   /* Destruc
8780: 74 6f 72 20 66 6f 72 20 74 68 65 20 73 74 72 69  tor for the stri
8790: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 76  ng */.){.  if( v
87a0: 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   ) sqlite3VdbeMe
87b0: 6d 53 65 74 53 74 72 28 28 4d 65 6d 20 2a 29 76  mSetStr((Mem *)v
87c0: 2c 20 7a 2c 20 6e 2c 20 65 6e 63 2c 20 78 44 65  , z, n, enc, xDe
87d0: 6c 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46 72 65  l);.}../*.** Fre
87e0: 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c  e an sqlite3_val
87f0: 75 65 20 6f 62 6a 65 63 74 0a 2a 2f 0a 76 6f 69  ue object.*/.voi
8800: 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  d sqlite3ValueFr
8810: 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ee(sqlite3_value
8820: 20 2a 76 29 7b 0a 20 20 69 66 28 20 21 76 20 29   *v){.  if( !v )
8830: 20 72 65 74 75 72 6e 3b 0a 20 20 73 71 6c 69 74   return;.  sqlit
8840: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
8850: 28 28 4d 65 6d 20 2a 29 76 29 3b 0a 20 20 73 71  ((Mem *)v);.  sq
8860: 6c 69 74 65 33 44 62 46 72 65 65 28 28 28 4d 65  lite3DbFree(((Me
8870: 6d 2a 29 76 29 2d 3e 64 62 2c 20 76 29 3b 0a 7d  m*)v)->db, v);.}
8880: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
8890: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
88a0: 65 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  es in the sqlite
88b0: 33 5f 76 61 6c 75 65 20 6f 62 6a 65 63 74 20 61  3_value object a
88c0: 73 73 75 6d 69 6e 67 0a 2a 2a 20 74 68 61 74 20  ssuming.** that 
88d0: 69 74 20 75 73 65 73 20 74 68 65 20 65 6e 63 6f  it uses the enco
88e0: 64 69 6e 67 20 22 65 6e 63 22 0a 2a 2f 0a 69 6e  ding "enc".*/.in
88f0: 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79  t sqlite3ValueBy
8900: 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  tes(sqlite3_valu
8910: 65 20 2a 70 56 61 6c 2c 20 75 38 20 65 6e 63 29  e *pVal, u8 enc)
8920: 7b 0a 20 20 4d 65 6d 20 2a 70 20 3d 20 28 4d 65  {.  Mem *p = (Me
8930: 6d 2a 29 70 56 61 6c 3b 0a 20 20 69 66 28 20 28  m*)pVal;.  if( (
8940: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  p->flags & MEM_B
8950: 6c 6f 62 29 21 3d 30 20 7c 7c 20 73 71 6c 69 74  lob)!=0 || sqlit
8960: 65 33 56 61 6c 75 65 54 65 78 74 28 70 56 61 6c  e3ValueText(pVal
8970: 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20 69 66  , enc) ){.    if
8980: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
8990: 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 72  _Zero ){.      r
89a0: 65 74 75 72 6e 20 70 2d 3e 6e 20 2b 20 70 2d 3e  eturn p->n + p->
89b0: 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d 65 6c  u.nZero;.    }el
89c0: 73 65 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se{.      return
89d0: 20 70 2d 3e 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d   p->n;.    }.  }
89e0: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a     .  return 0;.}.