/ Hex Artifact Content
Login

Artifact c1508eb4ee04d4db7bdfca5620cfa8ad632fdd62:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 53 65 70 74 65  /*.** 2003 Septe
0010: 6d 62 65 72 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65  mber 6.**.** The
0020: 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69 6d   author disclaim
0030: 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20 74  s copyright to t
0040: 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65 2e  his source code.
0050: 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a 2a    In place of.**
0060: 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65 2c   a legal notice,
0070: 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73 73   here is a bless
0080: 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61  ing:.**.**    Ma
0090: 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61 6e  y you do good an
00a0: 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20 20  d not evil..**  
00b0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00c0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00d0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00e0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20 20  ive others..**  
00f0: 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20    May you share 
0100: 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61  freely, never ta
0110: 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79  king more than y
0120: 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a  ou give..**.****
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: 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73  *****.** This is
0180: 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65   the header file
0190: 20 66 6f 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   for information
01a0: 20 74 68 61 74 20 69 73 20 70 72 69 76 61 74 65   that is private
01b0: 20 74 6f 20 74 68 65 0a 2a 2a 20 56 44 42 45 2e   to the.** VDBE.
01c0: 20 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69    This informati
01d0: 6f 6e 20 75 73 65 64 20 74 6f 20 61 6c 6c 20 62  on used to all b
01e0: 65 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20  e at the top of 
01f0: 74 68 65 20 73 69 6e 67 6c 65 0a 2a 2a 20 73 6f  the single.** so
0200: 75 72 63 65 20 63 6f 64 65 20 66 69 6c 65 20 22  urce code file "
0210: 76 64 62 65 2e 63 22 2e 20 20 57 68 65 6e 20 74  vdbe.c".  When t
0220: 68 61 74 20 66 69 6c 65 20 62 65 63 61 6d 65 20  hat file became 
0230: 74 6f 6f 20 62 69 67 20 28 6f 76 65 72 0a 2a 2a  too big (over.**
0240: 20 36 30 30 30 20 6c 69 6e 65 73 20 6c 6f 6e 67   6000 lines long
0250: 29 20 69 74 20 77 61 73 20 73 70 6c 69 74 20 75  ) it was split u
0260: 70 20 69 6e 74 6f 20 73 65 76 65 72 61 6c 20 73  p into several s
0270: 6d 61 6c 6c 65 72 20 66 69 6c 65 73 20 61 6e 64  maller files and
0280: 0a 2a 2a 20 74 68 69 73 20 68 65 61 64 65 72 20  .** this header 
0290: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 77 61 73 20  information was 
02a0: 66 61 63 74 6f 72 65 64 20 6f 75 74 2e 0a 2a 2f  factored out..*/
02b0: 0a 23 69 66 6e 64 65 66 20 5f 56 44 42 45 49 4e  .#ifndef _VDBEIN
02c0: 54 5f 48 5f 0a 23 64 65 66 69 6e 65 20 5f 56 44  T_H_.#define _VD
02d0: 42 45 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20  BEINT_H_../*.** 
02e0: 54 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  The maximum numb
02f0: 65 72 20 6f 66 20 74 69 6d 65 73 20 74 68 61 74  er of times that
0300: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c   a statement wil
0310: 6c 20 74 72 79 20 74 6f 20 72 65 70 61 72 73 65  l try to reparse
0320: 0a 2a 2a 20 69 74 73 65 6c 66 20 62 65 66 6f 72  .** itself befor
0330: 65 20 67 69 76 69 6e 67 20 75 70 20 61 6e 64 20  e giving up and 
0340: 72 65 74 75 72 6e 69 6e 67 20 53 51 4c 49 54 45  returning SQLITE
0350: 5f 53 43 48 45 4d 41 2e 0a 2a 2f 0a 23 69 66 6e  _SCHEMA..*/.#ifn
0360: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 53  def SQLITE_MAX_S
0370: 43 48 45 4d 41 5f 52 45 54 52 59 0a 23 20 64 65  CHEMA_RETRY.# de
0380: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
0390: 53 43 48 45 4d 41 5f 52 45 54 52 59 20 35 30 0a  SCHEMA_RETRY 50.
03a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 56 44  #endif../*.** VD
03b0: 42 45 5f 44 49 53 50 4c 41 59 5f 50 34 20 69 73  BE_DISPLAY_P4 is
03c0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 64   true or false d
03d0: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
03e0: 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 0a 2a  her or not the.*
03f0: 2a 20 22 65 78 70 6c 61 69 6e 22 20 50 34 20 64  * "explain" P4 d
0400: 69 73 70 6c 61 79 20 6c 6f 67 69 63 20 69 73 20  isplay logic is 
0410: 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20  enabled..*/.#if 
0420: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0430: 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 29 20 7c 7c  OMIT_EXPLAIN) ||
0440: 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47   !defined(NDEBUG
0450: 29 20 5c 0a 20 20 20 20 20 7c 7c 20 64 65 66 69  ) \.     || defi
0460: 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45  ned(VDBE_PROFILE
0470: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
0480: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66  ITE_DEBUG).# def
0490: 69 6e 65 20 56 44 42 45 5f 44 49 53 50 4c 41 59  ine VDBE_DISPLAY
04a0: 5f 50 34 20 31 0a 23 65 6c 73 65 0a 23 20 64 65  _P4 1.#else.# de
04b0: 66 69 6e 65 20 56 44 42 45 5f 44 49 53 50 4c 41  fine VDBE_DISPLA
04c0: 59 5f 50 34 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  Y_P4 0.#endif../
04d0: 2a 0a 2a 2a 20 53 51 4c 20 69 73 20 74 72 61 6e  *.** SQL is tran
04e0: 73 6c 61 74 65 64 20 69 6e 74 6f 20 61 20 73 65  slated into a se
04f0: 71 75 65 6e 63 65 20 6f 66 20 69 6e 73 74 72 75  quence of instru
0500: 63 74 69 6f 6e 73 20 74 6f 20 62 65 0a 2a 2a 20  ctions to be.** 
0510: 65 78 65 63 75 74 65 64 20 62 79 20 61 20 76 69  executed by a vi
0520: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20  rtual machine.  
0530: 45 61 63 68 20 69 6e 73 74 72 75 63 74 69 6f 6e  Each instruction
0540: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   is an instance.
0550: 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ** of the follow
0560: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
0570: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
0580: 20 56 64 62 65 4f 70 20 4f 70 3b 0a 0a 2f 2a 0a   VdbeOp Op;../*.
0590: 2a 2a 20 42 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  ** Boolean value
05a0: 73 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 6e 73  s.*/.typedef uns
05b0: 69 67 6e 65 64 20 42 6f 6f 6c 3b 0a 0a 2f 2a 20  igned Bool;../* 
05c0: 4f 70 61 71 75 65 20 74 79 70 65 20 75 73 65 64  Opaque type used
05d0: 20 62 79 20 63 6f 64 65 20 69 6e 20 76 64 62 65   by code in vdbe
05e0: 73 6f 72 74 2e 63 20 2a 2f 0a 74 79 70 65 64 65  sort.c */.typede
05f0: 66 20 73 74 72 75 63 74 20 56 64 62 65 53 6f 72  f struct VdbeSor
0600: 74 65 72 20 56 64 62 65 53 6f 72 74 65 72 3b 0a  ter VdbeSorter;.
0610: 0a 2f 2a 20 4f 70 61 71 75 65 20 74 79 70 65 20  ./* Opaque type 
0620: 75 73 65 64 20 62 79 20 74 68 65 20 65 78 70 6c  used by the expl
0630: 61 69 6e 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  ainer */.typedef
0640: 20 73 74 72 75 63 74 20 45 78 70 6c 61 69 6e 20   struct Explain 
0650: 45 78 70 6c 61 69 6e 3b 0a 0a 2f 2a 20 45 6c 65  Explain;../* Ele
0660: 6d 65 6e 74 73 20 6f 66 20 74 68 65 20 6c 69 6e  ments of the lin
0670: 6b 65 64 20 6c 69 73 74 20 61 74 20 56 64 62 65  ked list at Vdbe
0680: 2e 70 41 75 78 44 61 74 61 20 2a 2f 0a 74 79 70  .pAuxData */.typ
0690: 65 64 65 66 20 73 74 72 75 63 74 20 41 75 78 44  edef struct AuxD
06a0: 61 74 61 20 41 75 78 44 61 74 61 3b 0a 0a 2f 2a  ata AuxData;../*
06b0: 0a 2a 2a 20 41 20 63 75 72 73 6f 72 20 69 73 20  .** A cursor is 
06c0: 61 20 70 6f 69 6e 74 65 72 20 69 6e 74 6f 20 61  a pointer into a
06d0: 20 73 69 6e 67 6c 65 20 42 54 72 65 65 20 77 69   single BTree wi
06e0: 74 68 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  thin a database 
06f0: 66 69 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72  file..** The cur
0700: 73 6f 72 20 63 61 6e 20 73 65 65 6b 20 74 6f 20  sor can seek to 
0710: 61 20 42 54 72 65 65 20 65 6e 74 72 79 20 77 69  a BTree entry wi
0720: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
0730: 6b 65 79 2c 20 6f 72 0a 2a 2a 20 6c 6f 6f 70 20  key, or.** loop 
0740: 6f 76 65 72 20 61 6c 6c 20 65 6e 74 72 69 65 73  over all entries
0750: 20 6f 66 20 74 68 65 20 42 74 72 65 65 2e 20 20   of the Btree.  
0760: 59 6f 75 20 63 61 6e 20 61 6c 73 6f 20 69 6e 73  You can also ins
0770: 65 72 74 20 6e 65 77 20 42 54 72 65 65 0a 2a 2a  ert new BTree.**
0780: 20 65 6e 74 72 69 65 73 20 6f 72 20 72 65 74 72   entries or retr
0790: 69 65 76 65 20 74 68 65 20 6b 65 79 20 6f 72 20  ieve the key or 
07a0: 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20 65 6e  data from the en
07b0: 74 72 79 20 74 68 61 74 20 74 68 65 20 63 75 72  try that the cur
07c0: 73 6f 72 0a 2a 2a 20 69 73 20 63 75 72 72 65 6e  sor.** is curren
07d0: 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e  tly pointing to.
07e0: 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 73 20 63  .**.** Cursors c
07f0: 61 6e 20 61 6c 73 6f 20 70 6f 69 6e 74 20 74 6f  an also point to
0800: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c   virtual tables,
0810: 20 73 6f 72 74 65 72 73 2c 20 6f 72 20 22 70 73   sorters, or "ps
0820: 65 75 64 6f 2d 74 61 62 6c 65 73 22 2e 0a 2a 2a  eudo-tables"..**
0830: 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   A pseudo-table 
0840: 69 73 20 61 20 73 69 6e 67 6c 65 2d 72 6f 77 20  is a single-row 
0850: 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 65  table implemente
0860: 64 20 62 79 20 72 65 67 69 73 74 65 72 73 2e 0a  d by registers..
0870: 2a 2a 20 0a 2a 2a 20 45 76 65 72 79 20 63 75 72  ** .** Every cur
0880: 73 6f 72 20 74 68 61 74 20 74 68 65 20 76 69 72  sor that the vir
0890: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 68 61 73  tual machine has
08a0: 20 6f 70 65 6e 20 69 73 20 72 65 70 72 65 73 65   open is represe
08b0: 6e 74 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  nted by an.** in
08c0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
08d0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
08e0: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 64 62  e..*/.struct Vdb
08f0: 65 43 75 72 73 6f 72 20 7b 0a 20 20 42 74 43 75  eCursor {.  BtCu
0900: 72 73 6f 72 20 2a 70 43 75 72 73 6f 72 3b 20 20  rsor *pCursor;  
0910: 20 20 2f 2a 20 54 68 65 20 63 75 72 73 6f 72 20    /* The cursor 
0920: 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 65  structure of the
0930: 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 20 20 42 74   backend */.  Bt
0940: 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20  ree *pBt;       
0950: 20 20 20 20 2f 2a 20 53 65 70 61 72 61 74 65 20      /* Separate 
0960: 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65 6d  file holding tem
0970: 70 6f 72 61 72 79 20 74 61 62 6c 65 20 2a 2f 0a  porary table */.
0980: 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
0990: 6e 66 6f 3b 20 20 20 20 2f 2a 20 49 6e 66 6f 20  nfo;    /* Info 
09a0: 61 62 6f 75 74 20 69 6e 64 65 78 20 6b 65 79 73  about index keys
09b0: 20 6e 65 65 64 65 64 20 62 79 20 69 6e 64 65 78   needed by index
09c0: 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e   cursors */.  in
09d0: 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20  t seekResult;   
09e0: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
09f0: 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65   previous sqlite
0a00: 33 42 74 72 65 65 4d 6f 76 65 74 6f 28 29 20 2a  3BtreeMoveto() *
0a10: 2f 0a 20 20 69 6e 74 20 70 73 65 75 64 6f 54 61  /.  int pseudoTa
0a20: 62 6c 65 52 65 67 3b 20 20 20 2f 2a 20 52 65 67  bleReg;   /* Reg
0a30: 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 70 73  ister holding ps
0a40: 65 75 64 6f 74 61 62 6c 65 20 63 6f 6e 74 65 6e  eudotable conten
0a50: 74 2e 20 2a 2f 0a 20 20 69 31 36 20 6e 46 69 65  t. */.  i16 nFie
0a60: 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ld;           /*
0a70: 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   Number of field
0a80: 73 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 20  s in the header 
0a90: 2a 2f 0a 20 20 75 31 36 20 6e 48 64 72 50 61 72  */.  u16 nHdrPar
0aa0: 73 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  sed;       /* Nu
0ab0: 6d 62 65 72 20 6f 66 20 68 65 61 64 65 72 20 66  mber of header f
0ac0: 69 65 6c 64 73 20 70 61 72 73 65 64 20 73 6f 20  ields parsed so 
0ad0: 66 61 72 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  far */.#ifdef SQ
0ae0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 75 38 20  LITE_DEBUG.  u8 
0af0: 73 65 65 6b 4f 70 3b 20 20 20 20 20 20 20 20 20  seekOp;         
0b00: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
0b10: 74 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e  t seek operation
0b20: 20 6f 6e 20 74 68 69 73 20 63 75 72 73 6f 72 20   on this cursor 
0b30: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 38 20 69  */.#endif.  i8 i
0b40: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
0b50: 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 75    /* Index of cu
0b60: 72 73 6f 72 20 64 61 74 61 62 61 73 65 20 69 6e  rsor database in
0b70: 20 64 62 2d 3e 61 44 62 5b 5d 20 28 6f 72 20 2d   db->aDb[] (or -
0b80: 31 29 20 2a 2f 0a 20 20 75 38 20 6e 75 6c 6c 52  1) */.  u8 nullR
0b90: 6f 77 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ow;           /*
0ba0: 20 54 72 75 65 20 69 66 20 70 6f 69 6e 74 69 6e   True if pointin
0bb0: 67 20 74 6f 20 61 20 72 6f 77 20 77 69 74 68 20  g to a row with 
0bc0: 6e 6f 20 64 61 74 61 20 2a 2f 0a 20 20 75 38 20  no data */.  u8 
0bd0: 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3b 20  deferredMoveto; 
0be0: 20 20 20 2f 2a 20 41 20 63 61 6c 6c 20 74 6f 20     /* A call to 
0bf0: 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
0c00: 74 6f 28 29 20 69 73 20 6e 65 65 64 65 64 20 2a  to() is needed *
0c10: 2f 0a 20 20 42 6f 6f 6c 20 69 73 45 70 68 65 6d  /.  Bool isEphem
0c20: 65 72 61 6c 3a 31 3b 20 20 20 2f 2a 20 54 72 75  eral:1;   /* Tru
0c30: 65 20 66 6f 72 20 61 6e 20 65 70 68 65 6d 65 72  e for an ephemer
0c40: 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 20 20 42 6f  al table */.  Bo
0c50: 6f 6c 20 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  ol useRandomRowi
0c60: 64 3a 31 3b 2f 2a 20 47 65 6e 65 72 61 74 65 20  d:1;/* Generate 
0c70: 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  new record numbe
0c80: 72 73 20 73 65 6d 69 2d 72 61 6e 64 6f 6d 6c 79  rs semi-randomly
0c90: 20 2a 2f 0a 20 20 42 6f 6f 6c 20 69 73 54 61 62   */.  Bool isTab
0ca0: 6c 65 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 54  le:1;       /* T
0cb0: 72 75 65 20 69 66 20 61 20 74 61 62 6c 65 20 72  rue if a table r
0cc0: 65 71 75 69 72 69 6e 67 20 69 6e 74 65 67 65 72  equiring integer
0cd0: 20 6b 65 79 73 20 2a 2f 0a 20 20 42 6f 6f 6c 20   keys */.  Bool 
0ce0: 69 73 4f 72 64 65 72 65 64 3a 31 3b 20 20 20 20  isOrdered:1;    
0cf0: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
0d00: 75 6e 64 65 72 6c 79 69 6e 67 20 74 61 62 6c 65  underlying table
0d10: 20 69 73 20 42 54 52 45 45 5f 55 4e 4f 52 44 45   is BTREE_UNORDE
0d20: 52 45 44 20 2a 2f 0a 20 20 50 67 6e 6f 20 70 67  RED */.  Pgno pg
0d30: 6e 6f 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 2f  noRoot;        /
0d40: 2a 20 52 6f 6f 74 20 70 61 67 65 20 6f 66 20 74  * Root page of t
0d50: 68 65 20 6f 70 65 6e 20 62 74 72 65 65 20 63 75  he open btree cu
0d60: 72 73 6f 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65  rsor */.  sqlite
0d70: 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
0d80: 56 74 61 62 43 75 72 73 6f 72 3b 20 20 2f 2a 20  VtabCursor;  /* 
0d90: 54 68 65 20 63 75 72 73 6f 72 20 66 6f 72 20 61  The cursor for a
0da0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
0db0: 2f 0a 20 20 69 36 34 20 73 65 71 43 6f 75 6e 74  /.  i64 seqCount
0dc0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65 71  ;         /* Seq
0dd0: 75 65 6e 63 65 20 63 6f 75 6e 74 65 72 20 2a 2f  uence counter */
0de0: 0a 20 20 69 36 34 20 6d 6f 76 65 74 6f 54 61 72  .  i64 movetoTar
0df0: 67 65 74 3b 20 20 20 20 20 2f 2a 20 41 72 67 75  get;     /* Argu
0e00: 6d 65 6e 74 20 74 6f 20 74 68 65 20 64 65 66 65  ment to the defe
0e10: 72 72 65 64 20 73 71 6c 69 74 65 33 42 74 72 65  rred sqlite3Btre
0e20: 65 4d 6f 76 65 74 6f 28 29 20 2a 2f 0a 20 20 56  eMoveto() */.  V
0e30: 64 62 65 53 6f 72 74 65 72 20 2a 70 53 6f 72 74  dbeSorter *pSort
0e40: 65 72 3b 20 20 2f 2a 20 53 6f 72 74 65 72 20 6f  er;  /* Sorter o
0e50: 62 6a 65 63 74 20 66 6f 72 20 4f 50 5f 53 6f 72  bject for OP_Sor
0e60: 74 65 72 4f 70 65 6e 20 63 75 72 73 6f 72 73 20  terOpen cursors 
0e70: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
0e80: 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55  _ENABLE_COLUMN_U
0e90: 53 45 44 5f 4d 41 53 4b 0a 20 20 75 36 34 20 6d  SED_MASK.  u64 m
0ea0: 61 73 6b 55 73 65 64 3b 20 20 20 20 20 20 20 20  askUsed;        
0eb0: 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 63 6f 6c 75   /* Mask of colu
0ec0: 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 69 73  mns used by this
0ed0: 20 63 75 72 73 6f 72 20 2a 2f 0a 23 65 6e 64 69   cursor */.#endi
0ee0: 66 0a 0a 20 20 2f 2a 20 43 61 63 68 65 64 20 69  f..  /* Cached i
0ef0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
0f00: 20 74 68 65 20 68 65 61 64 65 72 20 66 6f 72 20   the header for 
0f10: 74 68 65 20 64 61 74 61 20 72 65 63 6f 72 64 20  the data record 
0f20: 74 68 61 74 20 74 68 65 0a 20 20 2a 2a 20 63 75  that the.  ** cu
0f30: 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c  rsor is currentl
0f40: 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20  y pointing to.  
0f50: 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 63 61  Only valid if ca
0f60: 63 68 65 53 74 61 74 75 73 20 6d 61 74 63 68 65  cheStatus matche
0f70: 73 0a 20 20 2a 2a 20 56 64 62 65 2e 63 61 63 68  s.  ** Vdbe.cach
0f80: 65 43 74 72 2e 20 20 56 64 62 65 2e 63 61 63 68  eCtr.  Vdbe.cach
0f90: 65 43 74 72 20 77 69 6c 6c 20 6e 65 76 65 72 20  eCtr will never 
0fa0: 74 61 6b 65 20 6f 6e 20 74 68 65 20 76 61 6c 75  take on the valu
0fb0: 65 20 6f 66 0a 20 20 2a 2a 20 43 41 43 48 45 5f  e of.  ** CACHE_
0fc0: 53 54 41 4c 45 20 61 6e 64 20 73 6f 20 73 65 74  STALE and so set
0fd0: 74 69 6e 67 20 63 61 63 68 65 53 74 61 74 75 73  ting cacheStatus
0fe0: 3d 43 41 43 48 45 5f 53 54 41 4c 45 20 67 75 61  =CACHE_STALE gua
0ff0: 72 61 6e 74 65 65 73 20 74 68 61 74 0a 20 20 2a  rantees that.  *
1000: 2a 20 74 68 65 20 63 61 63 68 65 20 69 73 20 6f  * the cache is o
1010: 75 74 20 6f 66 20 64 61 74 65 2e 0a 20 20 2a 2a  ut of date..  **
1020: 0a 20 20 2a 2a 20 61 52 6f 77 20 6d 69 67 68 74  .  ** aRow might
1030: 20 70 6f 69 6e 74 20 74 6f 20 28 65 70 68 65 6d   point to (ephem
1040: 65 72 61 6c 29 20 64 61 74 61 20 66 6f 72 20 74  eral) data for t
1050: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 2c 20  he current row, 
1060: 6f 72 20 69 74 20 6d 69 67 68 74 0a 20 20 2a 2a  or it might.  **
1070: 20 62 65 20 4e 55 4c 4c 2e 0a 20 20 2a 2f 0a 20   be NULL..  */. 
1080: 20 75 33 32 20 63 61 63 68 65 53 74 61 74 75 73   u32 cacheStatus
1090: 3b 20 20 20 20 20 20 2f 2a 20 43 61 63 68 65 20  ;      /* Cache 
10a0: 69 73 20 76 61 6c 69 64 20 69 66 20 74 68 69 73  is valid if this
10b0: 20 6d 61 74 63 68 65 73 20 56 64 62 65 2e 63 61   matches Vdbe.ca
10c0: 63 68 65 43 74 72 20 2a 2f 0a 20 20 75 33 32 20  cheCtr */.  u32 
10d0: 70 61 79 6c 6f 61 64 53 69 7a 65 3b 20 20 20 20  payloadSize;    
10e0: 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65    /* Total numbe
10f0: 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
1100: 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 33  e record */.  u3
1110: 32 20 73 7a 52 6f 77 3b 20 20 20 20 20 20 20 20  2 szRow;        
1120: 20 20 20 20 2f 2a 20 42 79 74 65 20 61 76 61 69      /* Byte avai
1130: 6c 61 62 6c 65 20 69 6e 20 61 52 6f 77 20 2a 2f  lable in aRow */
1140: 0a 20 20 75 33 32 20 69 48 64 72 4f 66 66 73 65  .  u32 iHdrOffse
1150: 74 3b 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73  t;       /* Offs
1160: 65 74 20 74 6f 20 6e 65 78 74 20 75 6e 70 61 72  et to next unpar
1170: 73 65 64 20 62 79 74 65 20 6f 66 20 74 68 65 20  sed byte of the 
1180: 68 65 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73  header */.  cons
1190: 74 20 75 38 20 2a 61 52 6f 77 3b 20 20 20 20 20  t u8 *aRow;     
11a0: 20 20 2f 2a 20 44 61 74 61 20 66 6f 72 20 74 68    /* Data for th
11b0: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 2c 20 69  e current row, i
11c0: 66 20 61 6c 6c 20 6f 6e 20 6f 6e 65 20 70 61 67  f all on one pag
11d0: 65 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66  e */.  u32 *aOff
11e0: 73 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  set;         /* 
11f0: 50 6f 69 6e 74 65 72 20 74 6f 20 61 54 79 70 65  Pointer to aType
1200: 5b 6e 46 69 65 6c 64 5d 20 2a 2f 0a 20 20 75 33  [nField] */.  u3
1210: 32 20 61 54 79 70 65 5b 31 5d 3b 20 20 20 20 20  2 aType[1];     
1220: 20 20 20 20 2f 2a 20 54 79 70 65 20 76 61 6c 75      /* Type valu
1230: 65 73 20 66 6f 72 20 61 6c 6c 20 65 6e 74 72 69  es for all entri
1240: 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
1250: 20 2a 2f 0a 20 20 2f 2a 20 32 2a 6e 46 69 65 6c   */.  /* 2*nFiel
1260: 64 20 65 78 74 72 61 20 61 72 72 61 79 20 65 6c  d extra array el
1270: 65 6d 65 6e 74 73 20 61 6c 6c 6f 63 61 74 65 64  ements allocated
1280: 20 66 6f 72 20 61 54 79 70 65 5b 5d 2c 20 62 65   for aType[], be
1290: 79 6f 6e 64 20 74 68 65 20 6f 6e 65 0a 20 20 2a  yond the one.  *
12a0: 2a 20 73 74 61 74 69 63 20 65 6c 65 6d 65 6e 74  * static element
12b0: 20 64 65 63 6c 61 72 65 64 20 69 6e 20 74 68 65   declared in the
12c0: 20 73 74 72 75 63 74 75 72 65 2e 20 20 6e 46 69   structure.  nFi
12d0: 65 6c 64 20 74 6f 74 61 6c 20 61 72 72 61 79 20  eld total array 
12e0: 73 6c 6f 74 73 20 66 6f 72 0a 20 20 2a 2a 20 61  slots for.  ** a
12f0: 54 79 70 65 5b 5d 20 61 6e 64 20 6e 46 69 65 6c  Type[] and nFiel
1300: 64 2b 31 20 61 72 72 61 79 20 73 6c 6f 74 73 20  d+1 array slots 
1310: 66 6f 72 20 61 4f 66 66 73 65 74 5b 5d 20 2a 2f  for aOffset[] */
1320: 0a 7d 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  .};.typedef stru
1330: 63 74 20 56 64 62 65 43 75 72 73 6f 72 20 56 64  ct VdbeCursor Vd
1340: 62 65 43 75 72 73 6f 72 3b 0a 0a 2f 2a 0a 2a 2a  beCursor;../*.**
1350: 20 57 68 65 6e 20 61 20 73 75 62 2d 70 72 6f 67   When a sub-prog
1360: 72 61 6d 20 69 73 20 65 78 65 63 75 74 65 64 20  ram is executed 
1370: 28 4f 50 5f 50 72 6f 67 72 61 6d 29 2c 20 61 20  (OP_Program), a 
1380: 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69  structure of thi
1390: 73 20 74 79 70 65 0a 2a 2a 20 69 73 20 61 6c 6c  s type.** is all
13a0: 6f 63 61 74 65 64 20 74 6f 20 73 74 6f 72 65 20  ocated to store 
13b0: 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
13c0: 65 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d  e of the program
13d0: 20 63 6f 75 6e 74 65 72 2c 20 61 73 0a 2a 2a 20   counter, as.** 
13e0: 77 65 6c 6c 20 61 73 20 74 68 65 20 63 75 72 72  well as the curr
13f0: 65 6e 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  ent memory cell 
1400: 61 72 72 61 79 20 61 6e 64 20 76 61 72 69 6f 75  array and variou
1410: 73 20 6f 74 68 65 72 20 66 72 61 6d 65 20 73 70  s other frame sp
1420: 65 63 69 66 69 63 0a 2a 2a 20 76 61 6c 75 65 73  ecific.** values
1430: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 56   stored in the V
1440: 64 62 65 20 73 74 72 75 63 74 2e 20 57 68 65 6e  dbe struct. When
1450: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
1460: 20 69 73 20 66 69 6e 69 73 68 65 64 2c 20 0a 2a   is finished, .*
1470: 2a 20 74 68 65 73 65 20 76 61 6c 75 65 73 20 61  * these values a
1480: 72 65 20 63 6f 70 69 65 64 20 62 61 63 6b 20 74  re copied back t
1490: 6f 20 74 68 65 20 56 64 62 65 20 66 72 6f 6d 20  o the Vdbe from 
14a0: 74 68 65 20 56 64 62 65 46 72 61 6d 65 20 73 74  the VdbeFrame st
14b0: 72 75 63 74 75 72 65 2c 0a 2a 2a 20 72 65 73 74  ructure,.** rest
14c0: 6f 72 69 6e 67 20 74 68 65 20 73 74 61 74 65 20  oring the state 
14d0: 6f 66 20 74 68 65 20 56 4d 20 74 6f 20 61 73 20  of the VM to as 
14e0: 69 74 20 77 61 73 20 62 65 66 6f 72 65 20 74 68  it was before th
14f0: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 2a 2a  e sub-program.**
1500: 20 62 65 67 61 6e 20 65 78 65 63 75 74 69 6e 67   began executing
1510: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f  ..**.** The memo
1520: 72 79 20 66 6f 72 20 61 20 56 64 62 65 46 72 61  ry for a VdbeFra
1530: 6d 65 20 6f 62 6a 65 63 74 20 69 73 20 61 6c 6c  me object is all
1540: 6f 63 61 74 65 64 20 61 6e 64 20 6d 61 6e 61 67  ocated and manag
1550: 65 64 20 62 79 20 61 20 6d 65 6d 6f 72 79 0a 2a  ed by a memory.*
1560: 2a 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61  * cell in the pa
1570: 72 65 6e 74 20 28 63 61 6c 6c 69 6e 67 29 20 66  rent (calling) f
1580: 72 61 6d 65 2e 20 57 68 65 6e 20 74 68 65 20 6d  rame. When the m
1590: 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 64 65  emory cell is de
15a0: 6c 65 74 65 64 20 6f 72 0a 2a 2a 20 6f 76 65 72  leted or.** over
15b0: 77 72 69 74 74 65 6e 2c 20 74 68 65 20 56 64 62  written, the Vdb
15c0: 65 46 72 61 6d 65 20 6f 62 6a 65 63 74 20 69 73  eFrame object is
15d0: 20 6e 6f 74 20 66 72 65 65 64 20 69 6d 6d 65 64   not freed immed
15e0: 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c  iately. Instead,
15f0: 20 69 74 0a 2a 2a 20 69 73 20 6c 69 6e 6b 65 64   it.** is linked
1600: 20 69 6e 74 6f 20 74 68 65 20 56 64 62 65 2e 70   into the Vdbe.p
1610: 44 65 6c 46 72 61 6d 65 20 6c 69 73 74 2e 20 54  DelFrame list. T
1620: 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  he contents of t
1630: 68 65 20 56 64 62 65 2e 70 44 65 6c 46 72 61 6d  he Vdbe.pDelFram
1640: 65 0a 2a 2a 20 6c 69 73 74 20 69 73 20 64 65 6c  e.** list is del
1650: 65 74 65 64 20 77 68 65 6e 20 74 68 65 20 56 4d  eted when the VM
1660: 20 69 73 20 72 65 73 65 74 20 69 6e 20 56 64 62   is reset in Vdb
1670: 65 48 61 6c 74 28 29 2e 20 54 68 65 20 72 65 61  eHalt(). The rea
1680: 73 6f 6e 20 66 6f 72 20 64 6f 69 6e 67 0a 2a 2a  son for doing.**
1690: 20 74 68 69 73 20 69 6e 73 74 65 61 64 20 6f 66   this instead of
16a0: 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 56 64   deleting the Vd
16b0: 62 65 46 72 61 6d 65 20 69 6d 6d 65 64 69 61 74  beFrame immediat
16c0: 65 6c 79 20 69 73 20 74 6f 20 61 76 6f 69 64 20  ely is to avoid 
16d0: 72 65 63 75 72 73 69 76 65 0a 2a 2a 20 63 61 6c  recursive.** cal
16e0: 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62  ls to sqlite3Vdb
16f0: 65 4d 65 6d 52 65 6c 65 61 73 65 28 29 20 77 68  eMemRelease() wh
1700: 65 6e 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  en the memory ce
1710: 6c 6c 73 20 62 65 6c 6f 6e 67 69 6e 67 20 74 6f  lls belonging to
1720: 20 74 68 65 0a 2a 2a 20 63 68 69 6c 64 20 66 72   the.** child fr
1730: 61 6d 65 20 61 72 65 20 72 65 6c 65 61 73 65 64  ame are released
1740: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 72  ..**.** The curr
1750: 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
1760: 66 72 61 6d 65 20 69 73 20 73 74 6f 72 65 64 20  frame is stored 
1770: 69 6e 20 56 64 62 65 2e 70 46 72 61 6d 65 2e 20  in Vdbe.pFrame. 
1780: 56 64 62 65 2e 70 46 72 61 6d 65 20 69 73 0a 2a  Vdbe.pFrame is.*
1790: 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c 20 69 66  * set to NULL if
17a0: 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65   the currently e
17b0: 78 65 63 75 74 69 6e 67 20 66 72 61 6d 65 20 69  xecuting frame i
17c0: 73 20 74 68 65 20 6d 61 69 6e 20 70 72 6f 67 72  s the main progr
17d0: 61 6d 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  am..*/.typedef s
17e0: 74 72 75 63 74 20 56 64 62 65 46 72 61 6d 65 20  truct VdbeFrame 
17f0: 56 64 62 65 46 72 61 6d 65 3b 0a 73 74 72 75 63  VdbeFrame;.struc
1800: 74 20 56 64 62 65 46 72 61 6d 65 20 7b 0a 20 20  t VdbeFrame {.  
1810: 56 64 62 65 20 2a 76 3b 20 20 20 20 20 20 20 20  Vdbe *v;        
1820: 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 74 68          /* VM th
1830: 69 73 20 66 72 61 6d 65 20 62 65 6c 6f 6e 67 73  is frame belongs
1840: 20 74 6f 20 2a 2f 0a 20 20 56 64 62 65 46 72 61   to */.  VdbeFra
1850: 6d 65 20 2a 70 50 61 72 65 6e 74 3b 20 20 20 20  me *pParent;    
1860: 20 2f 2a 20 50 61 72 65 6e 74 20 6f 66 20 74 68   /* Parent of th
1870: 69 73 20 66 72 61 6d 65 2c 20 6f 72 20 4e 55 4c  is frame, or NUL
1880: 4c 20 69 66 20 70 61 72 65 6e 74 20 69 73 20 6d  L if parent is m
1890: 61 69 6e 20 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70  ain */.  Op *aOp
18a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
18b0: 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6e 73 74   /* Program inst
18c0: 72 75 63 74 69 6f 6e 73 20 66 6f 72 20 70 61 72  ructions for par
18d0: 65 6e 74 20 66 72 61 6d 65 20 2a 2f 0a 20 20 69  ent frame */.  i
18e0: 36 34 20 2a 61 6e 45 78 65 63 3b 20 20 20 20 20  64 *anExec;     
18f0: 20 20 20 20 20 20 20 2f 2a 20 45 76 65 6e 74 20         /* Event 
1900: 63 6f 75 6e 74 65 72 73 20 66 72 6f 6d 20 70 61  counters from pa
1910: 72 65 6e 74 20 66 72 61 6d 65 20 2a 2f 0a 20 20  rent frame */.  
1920: 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20  Mem *aMem;      
1930: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
1940: 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
1950: 20 66 6f 72 20 70 61 72 65 6e 74 20 66 72 61 6d   for parent fram
1960: 65 20 2a 2f 0a 20 20 75 38 20 2a 61 4f 6e 63 65  e */.  u8 *aOnce
1970: 46 6c 61 67 3b 20 20 20 20 20 20 20 20 20 20 2f  Flag;          /
1980: 2a 20 41 72 72 61 79 20 6f 66 20 4f 50 5f 4f 6e  * Array of OP_On
1990: 63 65 20 66 6c 61 67 73 20 66 6f 72 20 70 61 72  ce flags for par
19a0: 65 6e 74 20 66 72 61 6d 65 20 2a 2f 0a 20 20 56  ent frame */.  V
19b0: 64 62 65 43 75 72 73 6f 72 20 2a 2a 61 70 43 73  dbeCursor **apCs
19c0: 72 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20  r;     /* Array 
19d0: 6f 66 20 56 64 62 65 20 63 75 72 73 6f 72 73 20  of Vdbe cursors 
19e0: 66 6f 72 20 70 61 72 65 6e 74 20 66 72 61 6d 65  for parent frame
19f0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 6f 6b 65   */.  void *toke
1a00: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
1a10: 20 43 6f 70 79 20 6f 66 20 53 75 62 50 72 6f 67   Copy of SubProg
1a20: 72 61 6d 2e 74 6f 6b 65 6e 20 2a 2f 0a 20 20 69  ram.token */.  i
1a30: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
1a40: 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 69         /* Last i
1a50: 6e 73 65 72 74 20 72 6f 77 69 64 20 28 73 71 6c  nsert rowid (sql
1a60: 69 74 65 33 2e 6c 61 73 74 52 6f 77 69 64 29 20  ite3.lastRowid) 
1a70: 2a 2f 0a 20 20 69 6e 74 20 6e 43 75 72 73 6f 72  */.  int nCursor
1a80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1a90: 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
1aa0: 73 20 69 6e 20 61 70 43 73 72 20 2a 2f 0a 20 20  s in apCsr */.  
1ab0: 69 6e 74 20 70 63 3b 20 20 20 20 20 20 20 20 20  int pc;         
1ac0: 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f 67 72          /* Progr
1ad0: 61 6d 20 43 6f 75 6e 74 65 72 20 69 6e 20 70 61  am Counter in pa
1ae0: 72 65 6e 74 20 28 63 61 6c 6c 69 6e 67 29 20 66  rent (calling) f
1af0: 72 61 6d 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f  rame */.  int nO
1b00: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1b10: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 61 4f 70    /* Size of aOp
1b20: 20 61 72 72 61 79 20 2a 2f 0a 20 20 69 6e 74 20   array */.  int 
1b30: 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  nMem;           
1b40: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b50: 20 65 6e 74 72 69 65 73 20 69 6e 20 61 4d 65 6d   entries in aMem
1b60: 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 46   */.  int nOnceF
1b70: 6c 61 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  lag;          /*
1b80: 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
1b90: 65 73 20 69 6e 20 61 4f 6e 63 65 46 6c 61 67 20  es in aOnceFlag 
1ba0: 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 69 6c 64 4d  */.  int nChildM
1bb0: 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
1bc0: 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  Number of memory
1bd0: 20 63 65 6c 6c 73 20 66 6f 72 20 63 68 69 6c 64   cells for child
1be0: 20 66 72 61 6d 65 20 2a 2f 0a 20 20 69 6e 74 20   frame */.  int 
1bf0: 6e 43 68 69 6c 64 43 73 72 3b 20 20 20 20 20 20  nChildCsr;      
1c00: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1c10: 20 63 75 72 73 6f 72 73 20 66 6f 72 20 63 68 69   cursors for chi
1c20: 6c 64 20 66 72 61 6d 65 20 2a 2f 0a 20 20 69 6e  ld frame */.  in
1c30: 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20  t nChange;      
1c40: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 65 6d 65        /* Stateme
1c50: 6e 74 20 63 68 61 6e 67 65 73 20 28 56 64 62 65  nt changes (Vdbe
1c60: 2e 6e 43 68 61 6e 67 65 29 20 20 20 20 20 2a 2f  .nChange)     */
1c70: 0a 20 20 69 6e 74 20 6e 44 62 43 68 61 6e 67 65  .  int nDbChange
1c80: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61  ;          /* Va
1c90: 6c 75 65 20 6f 66 20 64 62 2d 3e 6e 43 68 61 6e  lue of db->nChan
1ca0: 67 65 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e  ge */.};..#defin
1cb0: 65 20 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70  e VdbeFrameMem(p
1cc0: 29 20 28 28 4d 65 6d 20 2a 29 26 28 28 75 38 20  ) ((Mem *)&((u8 
1cd0: 2a 29 70 29 5b 52 4f 55 4e 44 38 28 73 69 7a 65  *)p)[ROUND8(size
1ce0: 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29 5d 29  of(VdbeFrame))])
1cf0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 76 61 6c 75 65 20  ../*.** A value 
1d00: 66 6f 72 20 56 64 62 65 43 75 72 73 6f 72 2e 63  for VdbeCursor.c
1d10: 61 63 68 65 56 61 6c 69 64 20 74 68 61 74 20 6d  acheValid that m
1d20: 65 61 6e 73 20 74 68 65 20 63 61 63 68 65 20 69  eans the cache i
1d30: 73 20 61 6c 77 61 79 73 20 69 6e 76 61 6c 69 64  s always invalid
1d40: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 41 43  ..*/.#define CAC
1d50: 48 45 5f 53 54 41 4c 45 20 30 0a 0a 2f 2a 0a 2a  HE_STALE 0../*.*
1d60: 2a 20 49 6e 74 65 72 6e 61 6c 6c 79 2c 20 74 68  * Internally, th
1d70: 65 20 76 64 62 65 20 6d 61 6e 69 70 75 6c 61 74  e vdbe manipulat
1d80: 65 73 20 6e 65 61 72 6c 79 20 61 6c 6c 20 53 51  es nearly all SQ
1d90: 4c 20 76 61 6c 75 65 73 20 61 73 20 4d 65 6d 0a  L values as Mem.
1da0: 2a 2a 20 73 74 72 75 63 74 75 72 65 73 2e 20 45  ** structures. E
1db0: 61 63 68 20 4d 65 6d 20 73 74 72 75 63 74 20 6d  ach Mem struct m
1dc0: 61 79 20 63 61 63 68 65 20 6d 75 6c 74 69 70 6c  ay cache multipl
1dd0: 65 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  e representation
1de0: 73 20 28 73 74 72 69 6e 67 2c 0a 2a 2a 20 69 6e  s (string,.** in
1df0: 74 65 67 65 72 20 65 74 63 2e 29 20 6f 66 20 74  teger etc.) of t
1e00: 68 65 20 73 61 6d 65 20 76 61 6c 75 65 2e 0a 2a  he same value..*
1e10: 2f 0a 73 74 72 75 63 74 20 4d 65 6d 20 7b 0a 20  /.struct Mem {. 
1e20: 20 75 6e 69 6f 6e 20 4d 65 6d 56 61 6c 75 65 20   union MemValue 
1e30: 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20 72 3b 20  {.    double r; 
1e40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 61            /* Rea
1e50: 6c 20 76 61 6c 75 65 20 75 73 65 64 20 77 68 65  l value used whe
1e60: 6e 20 4d 45 4d 5f 52 65 61 6c 20 69 73 20 73 65  n MEM_Real is se
1e70: 74 20 69 6e 20 66 6c 61 67 73 20 2a 2f 0a 20 20  t in flags */.  
1e80: 20 20 69 36 34 20 69 3b 20 20 20 20 20 20 20 20    i64 i;        
1e90: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
1ea0: 20 76 61 6c 75 65 20 75 73 65 64 20 77 68 65 6e   value used when
1eb0: 20 4d 45 4d 5f 49 6e 74 20 69 73 20 73 65 74 20   MEM_Int is set 
1ec0: 69 6e 20 66 6c 61 67 73 20 2a 2f 0a 20 20 20 20  in flags */.    
1ed0: 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20  int nZero;      
1ee0: 20 20 20 20 2f 2a 20 55 73 65 64 20 77 68 65 6e      /* Used when
1ef0: 20 62 69 74 20 4d 45 4d 5f 5a 65 72 6f 20 69 73   bit MEM_Zero is
1f00: 20 73 65 74 20 69 6e 20 66 6c 61 67 73 20 2a 2f   set in flags */
1f10: 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 44  .    FuncDef *pD
1f20: 65 66 3b 20 20 20 20 20 20 2f 2a 20 55 73 65 64  ef;      /* Used
1f30: 20 6f 6e 6c 79 20 77 68 65 6e 20 66 6c 61 67 73   only when flags
1f40: 3d 3d 4d 45 4d 5f 41 67 67 20 2a 2f 0a 20 20 20  ==MEM_Agg */.   
1f50: 20 52 6f 77 53 65 74 20 2a 70 52 6f 77 53 65 74   RowSet *pRowSet
1f60: 3b 20 20 20 20 2f 2a 20 55 73 65 64 20 6f 6e 6c  ;    /* Used onl
1f70: 79 20 77 68 65 6e 20 66 6c 61 67 73 3d 3d 4d 45  y when flags==ME
1f80: 4d 5f 52 6f 77 53 65 74 20 2a 2f 0a 20 20 20 20  M_RowSet */.    
1f90: 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
1fa0: 65 3b 20 20 2f 2a 20 55 73 65 64 20 77 68 65 6e  e;  /* Used when
1fb0: 20 66 6c 61 67 73 3d 3d 4d 45 4d 5f 46 72 61 6d   flags==MEM_Fram
1fc0: 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 20 20 75 31  e */.  } u;.  u1
1fd0: 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  6 flags;        
1fe0: 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e    /* Some combin
1ff0: 61 74 69 6f 6e 20 6f 66 20 4d 45 4d 5f 4e 75 6c  ation of MEM_Nul
2000: 6c 2c 20 4d 45 4d 5f 53 74 72 2c 20 4d 45 4d 5f  l, MEM_Str, MEM_
2010: 44 79 6e 2c 20 65 74 63 2e 20 2a 2f 0a 20 20 75  Dyn, etc. */.  u
2020: 38 20 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  8  enc;         
2030: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46     /* SQLITE_UTF
2040: 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  8, SQLITE_UTF16B
2050: 45 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  E, SQLITE_UTF16L
2060: 45 20 2a 2f 0a 20 20 75 38 20 20 65 53 75 62 74  E */.  u8  eSubt
2070: 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 53 75  ype;       /* Su
2080: 62 74 79 70 65 20 66 6f 72 20 74 68 69 73 20 76  btype for this v
2090: 61 6c 75 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b  alue */.  int n;
20a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20b0: 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61   Number of chara
20c0: 63 74 65 72 73 20 69 6e 20 73 74 72 69 6e 67 20  cters in string 
20d0: 76 61 6c 75 65 2c 20 65 78 63 6c 75 64 69 6e 67  value, excluding
20e0: 20 27 5c 30 27 20 2a 2f 0a 20 20 63 68 61 72 20   '\0' */.  char 
20f0: 2a 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  *z;            /
2100: 2a 20 53 74 72 69 6e 67 20 6f 72 20 42 4c 4f 42  * String or BLOB
2110: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 2f 2a 20 53   value */.  /* S
2120: 68 61 6c 6c 6f 77 43 6f 70 79 20 6f 6e 6c 79 20  hallowCopy only 
2130: 6e 65 65 64 73 20 74 6f 20 63 6f 70 79 20 74 68  needs to copy th
2140: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  e information ab
2150: 6f 76 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ove */.  char *z
2160: 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20  Malloc;      /* 
2170: 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 4d 45  Space to hold ME
2180: 4d 5f 53 74 72 20 6f 72 20 4d 45 4d 5f 42 6c 6f  M_Str or MEM_Blo
2190: 62 20 69 66 20 73 7a 4d 61 6c 6c 6f 63 3e 30 20  b if szMalloc>0 
21a0: 2a 2f 0a 20 20 69 6e 74 20 73 7a 4d 61 6c 6c 6f  */.  int szMallo
21b0: 63 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65  c;       /* Size
21c0: 20 6f 66 20 74 68 65 20 7a 4d 61 6c 6c 6f 63 20   of the zMalloc 
21d0: 61 6c 6c 6f 63 61 74 69 6f 6e 20 2a 2f 0a 20 20  allocation */.  
21e0: 75 33 32 20 75 54 65 6d 70 3b 20 20 20 20 20 20  u32 uTemp;      
21f0: 20 20 20 20 2f 2a 20 54 72 61 6e 73 69 65 6e 74      /* Transient
2200: 20 73 74 6f 72 61 67 65 20 66 6f 72 20 73 65 72   storage for ser
2210: 69 61 6c 5f 74 79 70 65 20 69 6e 20 4f 50 5f 4d  ial_type in OP_M
2220: 61 6b 65 52 65 63 6f 72 64 20 2a 2f 0a 20 20 73  akeRecord */.  s
2230: 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
2240: 20 20 20 2f 2a 20 54 68 65 20 61 73 73 6f 63 69     /* The associ
2250: 61 74 65 64 20 64 61 74 61 62 61 73 65 20 63 6f  ated database co
2260: 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  nnection */.  vo
2270: 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a  id (*xDel)(void*
2280: 29 3b 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20  );/* Destructor 
2290: 66 6f 72 20 4d 65 6d 2e 7a 20 2d 20 6f 6e 6c 79  for Mem.z - only
22a0: 20 76 61 6c 69 64 20 69 66 20 4d 45 4d 5f 44 79   valid if MEM_Dy
22b0: 6e 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  n */.#ifdef SQLI
22c0: 54 45 5f 44 45 42 55 47 0a 20 20 4d 65 6d 20 2a  TE_DEBUG.  Mem *
22d0: 70 53 63 6f 70 79 46 72 6f 6d 3b 20 20 20 20 2f  pScopyFrom;    /
22e0: 2a 20 54 68 69 73 20 4d 65 6d 20 69 73 20 61 20  * This Mem is a 
22f0: 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20  shallow copy of 
2300: 70 53 63 6f 70 79 46 72 6f 6d 20 2a 2f 0a 20 20  pScopyFrom */.  
2310: 76 6f 69 64 20 2a 70 46 69 6c 6c 65 72 3b 20 20  void *pFiller;  
2320: 20 20 20 20 2f 2a 20 53 6f 20 74 68 61 74 20 73      /* So that s
2330: 69 7a 65 6f 66 28 4d 65 6d 29 20 69 73 20 61 20  izeof(Mem) is a 
2340: 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 20 2a 2f  multiple of 8 */
2350: 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
2360: 2a 20 53 69 7a 65 20 6f 66 20 73 74 72 75 63 74  * Size of struct
2370: 20 4d 65 6d 20 6e 6f 74 20 69 6e 63 6c 75 64 69   Mem not includi
2380: 6e 67 20 74 68 65 20 4d 65 6d 2e 7a 4d 61 6c 6c  ng the Mem.zMall
2390: 6f 63 20 6d 65 6d 62 65 72 20 6f 72 20 61 6e 79  oc member or any
23a0: 74 68 69 6e 67 20 74 68 61 74 0a 2a 2a 20 66 6f  thing that.** fo
23b0: 6c 6c 6f 77 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  llows..*/.#defin
23c0: 65 20 4d 45 4d 43 45 4c 4c 53 49 5a 45 20 6f 66  e MEMCELLSIZE of
23d0: 66 73 65 74 6f 66 28 4d 65 6d 2c 7a 4d 61 6c 6c  fsetof(Mem,zMall
23e0: 6f 63 29 0a 0a 2f 2a 20 4f 6e 65 20 6f 72 20 6d  oc)../* One or m
23f0: 6f 72 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  ore of the follo
2400: 77 69 6e 67 20 66 6c 61 67 73 20 61 72 65 20 73  wing flags are s
2410: 65 74 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74  et to indicate t
2420: 68 65 20 76 61 6c 69 64 4f 4b 0a 2a 2a 20 72 65  he validOK.** re
2430: 70 72 65 73 65 6e 74 61 74 69 6f 6e 73 20 6f 66  presentations of
2440: 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
2450: 64 20 69 6e 20 74 68 65 20 4d 65 6d 20 73 74 72  d in the Mem str
2460: 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  uct..**.** If th
2470: 65 20 4d 45 4d 5f 4e 75 6c 6c 20 66 6c 61 67 20  e MEM_Null flag 
2480: 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
2490: 20 76 61 6c 75 65 20 69 73 20 61 6e 20 53 51 4c   value is an SQL
24a0: 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 0a 2a 2a 20   NULL value..** 
24b0: 4e 6f 20 6f 74 68 65 72 20 66 6c 61 67 73 20 6d  No other flags m
24c0: 61 79 20 62 65 20 73 65 74 20 69 6e 20 74 68 69  ay be set in thi
24d0: 73 20 63 61 73 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  s case..**.** If
24e0: 20 74 68 65 20 4d 45 4d 5f 53 74 72 20 66 6c 61   the MEM_Str fla
24f0: 67 20 69 73 20 73 65 74 20 74 68 65 6e 20 4d 65  g is set then Me
2500: 6d 2e 7a 20 70 6f 69 6e 74 73 20 61 74 20 61 20  m.z points at a 
2510: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
2520: 61 74 69 6f 6e 2e 0a 2a 2a 20 55 73 75 61 6c 6c  ation..** Usuall
2530: 79 20 74 68 69 73 20 69 73 20 65 6e 63 6f 64 65  y this is encode
2540: 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 75 6e  d in the same un
2550: 69 63 6f 64 65 20 65 6e 63 6f 64 69 6e 67 20 61  icode encoding a
2560: 73 20 74 68 65 20 6d 61 69 6e 0a 2a 2a 20 64 61  s the main.** da
2570: 74 61 62 61 73 65 20 28 73 65 65 20 62 65 6c 6f  tabase (see belo
2580: 77 20 66 6f 72 20 65 78 63 65 70 74 69 6f 6e 73  w for exceptions
2590: 29 2e 20 49 66 20 74 68 65 20 4d 45 4d 5f 54 65  ). If the MEM_Te
25a0: 72 6d 20 66 6c 61 67 20 69 73 20 61 6c 73 6f 0a  rm flag is also.
25b0: 2a 2a 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  ** set, then the
25c0: 20 73 74 72 69 6e 67 20 69 73 20 6e 75 6c 20 74   string is nul t
25d0: 65 72 6d 69 6e 61 74 65 64 2e 20 54 68 65 20 4d  erminated. The M
25e0: 45 4d 5f 49 6e 74 20 61 6e 64 20 4d 45 4d 5f 52  EM_Int and MEM_R
25f0: 65 61 6c 20 0a 2a 2a 20 66 6c 61 67 73 20 6d 61  eal .** flags ma
2600: 79 20 63 6f 65 78 69 73 74 20 77 69 74 68 20 74  y coexist with t
2610: 68 65 20 4d 45 4d 5f 53 74 72 20 66 6c 61 67 2e  he MEM_Str flag.
2620: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f  .*/.#define MEM_
2630: 4e 75 6c 6c 20 20 20 20 20 20 30 78 30 30 30 31  Null      0x0001
2640: 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 73 20 4e     /* Value is N
2650: 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ULL */.#define M
2660: 45 4d 5f 53 74 72 20 20 20 20 20 20 20 30 78 30  EM_Str       0x0
2670: 30 30 32 20 20 20 2f 2a 20 56 61 6c 75 65 20 69  002   /* Value i
2680: 73 20 61 20 73 74 72 69 6e 67 20 2a 2f 0a 23 64  s a string */.#d
2690: 65 66 69 6e 65 20 4d 45 4d 5f 49 6e 74 20 20 20  efine MEM_Int   
26a0: 20 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20      0x0004   /* 
26b0: 56 61 6c 75 65 20 69 73 20 61 6e 20 69 6e 74 65  Value is an inte
26c0: 67 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ger */.#define M
26d0: 45 4d 5f 52 65 61 6c 20 20 20 20 20 20 30 78 30  EM_Real      0x0
26e0: 30 30 38 20 20 20 2f 2a 20 56 61 6c 75 65 20 69  008   /* Value i
26f0: 73 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 20  s a real number 
2700: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f 42  */.#define MEM_B
2710: 6c 6f 62 20 20 20 20 20 20 30 78 30 30 31 30 20  lob      0x0010 
2720: 20 20 2f 2a 20 56 61 6c 75 65 20 69 73 20 61 20    /* Value is a 
2730: 42 4c 4f 42 20 2a 2f 0a 23 64 65 66 69 6e 65 20  BLOB */.#define 
2740: 4d 45 4d 5f 41 66 66 4d 61 73 6b 20 20 20 30 78  MEM_AffMask   0x
2750: 30 30 31 66 20 20 20 2f 2a 20 4d 61 73 6b 20 6f  001f   /* Mask o
2760: 66 20 61 66 66 69 6e 69 74 79 20 62 69 74 73 20  f affinity bits 
2770: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f 52  */.#define MEM_R
2780: 6f 77 53 65 74 20 20 20 20 30 78 30 30 32 30 20  owSet    0x0020 
2790: 20 20 2f 2a 20 56 61 6c 75 65 20 69 73 20 61 20    /* Value is a 
27a0: 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 2a 2f  RowSet object */
27b0: 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f 46 72 61  .#define MEM_Fra
27c0: 6d 65 20 20 20 20 20 30 78 30 30 34 30 20 20 20  me     0x0040   
27d0: 2f 2a 20 56 61 6c 75 65 20 69 73 20 61 20 56 64  /* Value is a Vd
27e0: 62 65 46 72 61 6d 65 20 6f 62 6a 65 63 74 20 2a  beFrame object *
27f0: 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f 55 6e  /.#define MEM_Un
2800: 64 65 66 69 6e 65 64 20 30 78 30 30 38 30 20 20  defined 0x0080  
2810: 20 2f 2a 20 56 61 6c 75 65 20 69 73 20 75 6e 64   /* Value is und
2820: 65 66 69 6e 65 64 20 2a 2f 0a 23 64 65 66 69 6e  efined */.#defin
2830: 65 20 4d 45 4d 5f 43 6c 65 61 72 65 64 20 20 20  e MEM_Cleared   
2840: 30 78 30 31 30 30 20 20 20 2f 2a 20 4e 55 4c 4c  0x0100   /* NULL
2850: 20 73 65 74 20 62 79 20 4f 50 5f 4e 75 6c 6c 2c   set by OP_Null,
2860: 20 6e 6f 74 20 66 72 6f 6d 20 64 61 74 61 20 2a   not from data *
2870: 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f 54 79  /.#define MEM_Ty
2880: 70 65 4d 61 73 6b 20 20 30 78 30 31 66 66 20 20  peMask  0x01ff  
2890: 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 74 79 70 65   /* Mask of type
28a0: 20 62 69 74 73 20 2a 2f 0a 0a 0a 2f 2a 20 57 68   bits */.../* Wh
28b0: 65 6e 65 76 65 72 20 4d 65 6d 20 63 6f 6e 74 61  enever Mem conta
28c0: 69 6e 73 20 61 20 76 61 6c 69 64 20 73 74 72 69  ins a valid stri
28d0: 6e 67 20 6f 72 20 62 6c 6f 62 20 72 65 70 72 65  ng or blob repre
28e0: 73 65 6e 74 61 74 69 6f 6e 2c 20 6f 6e 65 20 6f  sentation, one o
28f0: 66 0a 2a 2a 20 74 68 65 20 66 6f 6c 6c 6f 77 69  f.** the followi
2900: 6e 67 20 66 6c 61 67 73 20 6d 75 73 74 20 62 65  ng flags must be
2910: 20 73 65 74 20 74 6f 20 64 65 74 65 72 6d 69 6e   set to determin
2920: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6d 61 6e  e the memory man
2930: 61 67 65 6d 65 6e 74 0a 2a 2a 20 70 6f 6c 69 63  agement.** polic
2940: 79 20 66 6f 72 20 4d 65 6d 2e 7a 2e 20 20 54 68  y for Mem.z.  Th
2950: 65 20 4d 45 4d 5f 54 65 72 6d 20 66 6c 61 67 20  e MEM_Term flag 
2960: 74 65 6c 6c 73 20 75 73 20 77 68 65 74 68 65 72  tells us whether
2970: 20 6f 72 20 6e 6f 74 20 74 68 65 0a 2a 2a 20 73   or not the.** s
2980: 74 72 69 6e 67 20 69 73 20 5c 30 30 30 20 6f 72  tring is \000 or
2990: 20 5c 75 30 30 30 30 20 74 65 72 6d 69 6e 61 74   \u0000 terminat
29a0: 65 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ed.*/.#define ME
29b0: 4d 5f 54 65 72 6d 20 20 20 20 20 20 30 78 30 32  M_Term      0x02
29c0: 30 30 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 72  00   /* String r
29d0: 65 70 20 69 73 20 6e 75 6c 20 74 65 72 6d 69 6e  ep is nul termin
29e0: 61 74 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ated */.#define 
29f0: 4d 45 4d 5f 44 79 6e 20 20 20 20 20 20 20 30 78  MEM_Dyn       0x
2a00: 30 34 30 30 20 20 20 2f 2a 20 4e 65 65 64 20 74  0400   /* Need t
2a10: 6f 20 63 61 6c 6c 20 4d 65 6d 2e 78 44 65 6c 28  o call Mem.xDel(
2a20: 29 20 6f 6e 20 4d 65 6d 2e 7a 20 2a 2f 0a 23 64  ) on Mem.z */.#d
2a30: 65 66 69 6e 65 20 4d 45 4d 5f 53 74 61 74 69 63  efine MEM_Static
2a40: 20 20 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20      0x0800   /* 
2a50: 4d 65 6d 2e 7a 20 70 6f 69 6e 74 73 20 74 6f 20  Mem.z points to 
2a60: 61 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  a static string 
2a70: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f 45  */.#define MEM_E
2a80: 70 68 65 6d 20 20 20 20 20 30 78 31 30 30 30 20  phem     0x1000 
2a90: 20 20 2f 2a 20 4d 65 6d 2e 7a 20 70 6f 69 6e 74    /* Mem.z point
2aa0: 73 20 74 6f 20 61 6e 20 65 70 68 65 6d 65 72 61  s to an ephemera
2ab0: 6c 20 73 74 72 69 6e 67 20 2a 2f 0a 23 64 65 66  l string */.#def
2ac0: 69 6e 65 20 4d 45 4d 5f 41 67 67 20 20 20 20 20  ine MEM_Agg     
2ad0: 20 20 30 78 32 30 30 30 20 20 20 2f 2a 20 4d 65    0x2000   /* Me
2ae0: 6d 2e 7a 20 70 6f 69 6e 74 73 20 74 6f 20 61 6e  m.z points to an
2af0: 20 61 67 67 20 66 75 6e 63 74 69 6f 6e 20 63 6f   agg function co
2b00: 6e 74 65 78 74 20 2a 2f 0a 23 64 65 66 69 6e 65  ntext */.#define
2b10: 20 4d 45 4d 5f 5a 65 72 6f 20 20 20 20 20 20 30   MEM_Zero      0
2b20: 78 34 30 30 30 20 20 20 2f 2a 20 4d 65 6d 2e 69  x4000   /* Mem.i
2b30: 20 63 6f 6e 74 61 69 6e 73 20 63 6f 75 6e 74 20   contains count 
2b40: 6f 66 20 30 73 20 61 70 70 65 6e 64 65 64 20 74  of 0s appended t
2b50: 6f 20 62 6c 6f 62 20 2a 2f 0a 23 69 66 64 65 66  o blob */.#ifdef
2b60: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 43   SQLITE_OMIT_INC
2b70: 52 42 4c 4f 42 0a 20 20 23 75 6e 64 65 66 20 4d  RBLOB.  #undef M
2b80: 45 4d 5f 5a 65 72 6f 0a 20 20 23 64 65 66 69 6e  EM_Zero.  #defin
2b90: 65 20 4d 45 4d 5f 5a 65 72 6f 20 30 78 30 30 30  e MEM_Zero 0x000
2ba0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
2bb0: 43 6c 65 61 72 20 61 6e 79 20 65 78 69 73 74 69  Clear any existi
2bc0: 6e 67 20 74 79 70 65 20 66 6c 61 67 73 20 66 72  ng type flags fr
2bd0: 6f 6d 20 61 20 4d 65 6d 20 61 6e 64 20 72 65 70  om a Mem and rep
2be0: 6c 61 63 65 20 74 68 65 6d 20 77 69 74 68 20 66  lace them with f
2bf0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 65 6d 53  .*/.#define MemS
2c00: 65 74 54 79 70 65 46 6c 61 67 28 70 2c 20 66 29  etTypeFlag(p, f)
2c10: 20 5c 0a 20 20 20 28 28 70 29 2d 3e 66 6c 61 67   \.   ((p)->flag
2c20: 73 20 3d 20 28 28 70 29 2d 3e 66 6c 61 67 73 26  s = ((p)->flags&
2c30: 7e 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 7c 4d  ~(MEM_TypeMask|M
2c40: 45 4d 5f 5a 65 72 6f 29 29 7c 66 29 0a 0a 2f 2a  EM_Zero))|f)../*
2c50: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
2c60: 69 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  if a memory cell
2c70: 20 69 73 20 6e 6f 74 20 6d 61 72 6b 65 64 20 61   is not marked a
2c80: 73 20 69 6e 76 61 6c 69 64 2e 20 20 54 68 69 73  s invalid.  This
2c90: 20 6d 61 63 72 6f 0a 2a 2a 20 69 73 20 66 6f 72   macro.** is for
2ca0: 20 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65   use inside asse
2cb0: 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
2cc0: 6f 6e 6c 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  only..*/.#ifdef 
2cd0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 64 65  SQLITE_DEBUG.#de
2ce0: 66 69 6e 65 20 6d 65 6d 49 73 56 61 6c 69 64 28  fine memIsValid(
2cf0: 4d 29 20 20 28 28 4d 29 2d 3e 66 6c 61 67 73 20  M)  ((M)->flags 
2d00: 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 29  & MEM_Undefined)
2d10: 3d 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ==0.#endif../*.*
2d20: 2a 20 45 61 63 68 20 61 75 78 69 6c 69 61 72 79  * Each auxiliary
2d30: 20 64 61 74 61 20 70 6f 69 6e 74 65 72 20 73 74   data pointer st
2d40: 6f 72 65 64 20 62 79 20 61 20 75 73 65 72 20 64  ored by a user d
2d50: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20  efined function 
2d60: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
2d70: 6f 6e 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74  on calling sqlit
2d80: 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29  e3_set_auxdata()
2d90: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 6e   is stored in an
2da0: 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
2db0: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
2dc0: 41 6c 6c 20 73 75 63 68 20 73 74 72 75 63 74 75  All such structu
2dd0: 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  res associated w
2de0: 69 74 68 20 61 20 73 69 6e 67 6c 65 20 56 4d 0a  ith a single VM.
2df0: 2a 2a 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ** are stored in
2e00: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68   a linked list h
2e10: 65 61 64 65 64 20 61 74 20 56 64 62 65 2e 70 41  eaded at Vdbe.pA
2e20: 75 78 44 61 74 61 2e 20 41 6c 6c 20 61 72 65 20  uxData. All are 
2e30: 64 65 73 74 72 6f 79 65 64 0a 2a 2a 20 77 68 65  destroyed.** whe
2e40: 6e 20 74 68 65 20 56 4d 20 69 73 20 68 61 6c 74  n the VM is halt
2e50: 65 64 20 28 69 66 20 6e 6f 74 20 62 65 66 6f 72  ed (if not befor
2e60: 65 29 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  e)..*/.struct Au
2e70: 78 44 61 74 61 20 7b 0a 20 20 69 6e 74 20 69 4f  xData {.  int iO
2e80: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
2e90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 73            /* Ins
2ea0: 74 72 75 63 74 69 6f 6e 20 6e 75 6d 62 65 72 20  truction number 
2eb0: 6f 66 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 6f  of OP_Function o
2ec0: 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 69  pcode */.  int i
2ed0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
2ee0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
2ef0: 64 65 78 20 6f 66 20 66 75 6e 63 74 69 6f 6e 20  dex of function 
2f00: 61 72 67 75 6d 65 6e 74 2e 20 2a 2f 0a 20 20 76  argument. */.  v
2f10: 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20  oid *pAux;      
2f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f30: 2a 20 41 75 78 20 64 61 74 61 20 70 6f 69 6e 74  * Aux data point
2f40: 65 72 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  er */.  void (*x
2f50: 44 65 6c 65 74 65 29 28 76 6f 69 64 20 2a 29 3b  Delete)(void *);
2f60: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 73 74 72          /* Destr
2f70: 75 63 74 6f 72 20 66 6f 72 20 74 68 65 20 61 75  uctor for the au
2f80: 78 20 64 61 74 61 20 2a 2f 0a 20 20 41 75 78 44  x data */.  AuxD
2f90: 61 74 61 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ata *pNext;     
2fa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
2fb0: 65 78 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c  ext element in l
2fc0: 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
2fd0: 20 54 68 65 20 22 63 6f 6e 74 65 78 74 22 20 61   The "context" a
2fe0: 72 67 75 6d 65 6e 74 20 66 6f 72 20 61 6e 20 69  rgument for an i
2ff0: 6e 73 74 61 6c 6c 61 62 6c 65 20 66 75 6e 63 74  nstallable funct
3000: 69 6f 6e 2e 20 20 41 20 70 6f 69 6e 74 65 72 20  ion.  A pointer 
3010: 74 6f 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  to an.** instanc
3020: 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
3030: 75 72 65 20 69 73 20 74 68 65 20 66 69 72 73 74  ure is the first
3040: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
3050: 20 72 6f 75 74 69 6e 65 73 20 75 73 65 64 0a 2a   routines used.*
3060: 2a 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  * implement the 
3070: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  SQL functions..*
3080: 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61 20  *.** There is a 
3090: 74 79 70 65 64 65 66 20 66 6f 72 20 74 68 69 73  typedef for this
30a0: 20 73 74 72 75 63 74 75 72 65 20 69 6e 20 73 71   structure in sq
30b0: 6c 69 74 65 2e 68 2e 20 20 53 6f 20 61 6c 6c 20  lite.h.  So all 
30c0: 72 6f 75 74 69 6e 65 73 2c 0a 2a 2a 20 65 76 65  routines,.** eve
30d0: 6e 20 74 68 65 20 70 75 62 6c 69 63 20 69 6e 74  n the public int
30e0: 65 72 66 61 63 65 20 74 6f 20 53 51 4c 69 74 65  erface to SQLite
30f0: 2c 20 63 61 6e 20 75 73 65 20 61 20 70 6f 69 6e  , can use a poin
3100: 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
3110: 63 74 75 72 65 2e 0a 2a 2a 20 42 75 74 20 74 68  cture..** But th
3120: 69 73 20 66 69 6c 65 20 69 73 20 74 68 65 20 6f  is file is the o
3130: 6e 6c 79 20 70 6c 61 63 65 20 77 68 65 72 65 20  nly place where 
3140: 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 64 65 74  the internal det
3150: 61 69 6c 73 20 6f 66 20 74 68 69 73 0a 2a 2a 20  ails of this.** 
3160: 73 74 72 75 63 74 75 72 65 20 61 72 65 20 6b 6e  structure are kn
3170: 6f 77 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  own..**.** This 
3180: 73 74 72 75 63 74 75 72 65 20 69 73 20 64 65 66  structure is def
3190: 69 6e 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76  ined inside of v
31a0: 64 62 65 49 6e 74 2e 68 20 62 65 63 61 75 73 65  dbeInt.h because
31b0: 20 69 74 20 75 73 65 73 20 73 75 62 73 74 72 75   it uses substru
31c0: 63 74 75 72 65 73 0a 2a 2a 20 28 4d 65 6d 29 20  ctures.** (Mem) 
31d0: 77 68 69 63 68 20 61 72 65 20 6f 6e 6c 79 20 64  which are only d
31e0: 65 66 69 6e 65 64 20 74 68 65 72 65 2e 0a 2a 2f  efined there..*/
31f0: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f  .struct sqlite3_
3200: 63 6f 6e 74 65 78 74 20 7b 0a 20 20 4d 65 6d 20  context {.  Mem 
3210: 2a 70 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20  *pOut;          
3220: 20 20 20 20 2f 2a 20 54 68 65 20 72 65 74 75 72      /* The retur
3230: 6e 20 76 61 6c 75 65 20 69 73 20 73 74 6f 72 65  n value is store
3240: 64 20 68 65 72 65 20 2a 2f 0a 20 20 46 75 6e 63  d here */.  Func
3250: 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20  Def *pFunc;     
3260: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
3270: 6f 20 66 75 6e 63 74 69 6f 6e 20 69 6e 66 6f 72  o function infor
3280: 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20  mation */.  Mem 
3290: 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *pMem;          
32a0: 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 63 65      /* Memory ce
32b0: 6c 6c 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ll used to store
32c0: 20 61 67 67 72 65 67 61 74 65 20 63 6f 6e 74 65   aggregate conte
32d0: 78 74 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56  xt */.  Vdbe *pV
32e0: 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  dbe;            
32f0: 2f 2a 20 54 68 65 20 56 4d 20 74 68 61 74 20 6f  /* The VM that o
3300: 77 6e 73 20 74 68 69 73 20 63 6f 6e 74 65 78 74  wns this context
3310: 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 70 3b 20 20   */.  int iOp;  
3320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3330: 20 49 6e 73 74 72 75 63 74 69 6f 6e 20 6e 75 6d   Instruction num
3340: 62 65 72 20 6f 66 20 4f 50 5f 46 75 6e 63 74 69  ber of OP_Functi
3350: 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 45 72  on */.  int isEr
3360: 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ror;            
3370: 2f 2a 20 45 72 72 6f 72 20 63 6f 64 65 20 72 65  /* Error code re
3380: 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 66 75  turned by the fu
3390: 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 38 20  nction. */.  u8 
33a0: 73 6b 69 70 46 6c 61 67 3b 20 20 20 20 20 20 20  skipFlag;       
33b0: 20 20 20 20 20 2f 2a 20 53 6b 69 70 20 61 63 63       /* Skip acc
33c0: 75 6d 75 6c 61 74 6f 72 20 6c 6f 61 64 69 6e 67  umulator loading
33d0: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
33e0: 20 66 45 72 72 6f 72 4f 72 41 75 78 3b 20 20 20   fErrorOrAux;   
33f0: 20 20 20 20 20 20 2f 2a 20 69 73 45 72 72 6f 72        /* isError
3400: 21 3d 30 20 6f 72 20 70 56 64 62 65 2d 3e 70 41  !=0 or pVdbe->pA
3410: 75 78 44 61 74 61 20 6d 6f 64 69 66 69 65 64 20  uxData modified 
3420: 2a 2f 0a 20 20 75 38 20 61 72 67 63 3b 20 20 20  */.  u8 argc;   
3430: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3440: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
3450: 6e 74 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  nts */.  sqlite3
3460: 5f 76 61 6c 75 65 20 2a 61 72 67 76 5b 31 5d 3b  _value *argv[1];
3470: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 73 65 74   /* Argument set
3480: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
3490: 20 45 78 70 6c 61 69 6e 20 6f 62 6a 65 63 74 20   Explain object 
34a0: 61 63 63 75 6d 75 6c 61 74 65 73 20 69 6e 64 65  accumulates inde
34b0: 6e 74 65 64 20 6f 75 74 70 75 74 20 77 68 69 63  nted output whic
34c0: 68 20 69 73 20 68 65 6c 70 66 75 6c 0a 2a 2a 20  h is helpful.** 
34d0: 69 6e 20 64 65 73 63 72 69 62 69 6e 67 20 72 65  in describing re
34e0: 63 75 72 73 69 76 65 20 64 61 74 61 20 73 74 72  cursive data str
34f0: 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75  uctures..*/.stru
3500: 63 74 20 45 78 70 6c 61 69 6e 20 7b 0a 20 20 56  ct Explain {.  V
3510: 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20  dbe *pVdbe;     
3520: 20 20 2f 2a 20 41 74 74 61 63 68 20 74 68 65 20    /* Attach the 
3530: 65 78 70 6c 61 6e 61 74 69 6f 6e 20 74 6f 20 74  explanation to t
3540: 68 69 73 20 56 64 62 65 20 2a 2f 0a 20 20 53 74  his Vdbe */.  St
3550: 72 41 63 63 75 6d 20 73 74 72 3b 20 20 20 20 20  rAccum str;     
3560: 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 62   /* The string b
3570: 65 69 6e 67 20 61 63 63 75 6d 75 6c 61 74 65 64  eing accumulated
3580: 20 2a 2f 0a 20 20 69 6e 74 20 6e 49 6e 64 65 6e   */.  int nInden
3590: 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  t;       /* Numb
35a0: 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
35b0: 6e 20 61 49 6e 64 65 6e 74 20 2a 2f 0a 20 20 75  n aIndent */.  u
35c0: 31 36 20 61 49 6e 64 65 6e 74 5b 31 30 30 5d 3b  16 aIndent[100];
35d0: 20 20 2f 2a 20 4c 65 76 65 6c 73 20 6f 66 20 69    /* Levels of i
35e0: 6e 64 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ndentation */.  
35f0: 63 68 61 72 20 7a 42 61 73 65 5b 31 30 30 5d 3b  char zBase[100];
3600: 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 20 73 70     /* Initial sp
3610: 61 63 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 20  ace */.};../* A 
3620: 62 69 74 66 69 65 6c 64 20 74 79 70 65 20 66 6f  bitfield type fo
3630: 72 20 75 73 65 20 69 6e 73 69 64 65 20 6f 66 20  r use inside of 
3640: 73 74 72 75 63 74 75 72 65 73 2e 20 20 41 6c 77  structures.  Alw
3650: 61 79 73 20 66 6f 6c 6c 6f 77 20 77 69 74 68 20  ays follow with 
3660: 3a 4e 20 77 68 65 72 65 0a 2a 2a 20 4e 20 69 73  :N where.** N is
3670: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
3680: 69 74 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  its..*/.typedef 
3690: 75 6e 73 69 67 6e 65 64 20 62 66 74 3b 20 20 2f  unsigned bft;  /
36a0: 2a 20 42 69 74 20 46 69 65 6c 64 20 54 79 70 65  * Bit Field Type
36b0: 20 2a 2f 0a 0a 74 79 70 65 64 65 66 20 73 74 72   */..typedef str
36c0: 75 63 74 20 53 63 61 6e 53 74 61 74 75 73 20 53  uct ScanStatus S
36d0: 63 61 6e 53 74 61 74 75 73 3b 0a 73 74 72 75 63  canStatus;.struc
36e0: 74 20 53 63 61 6e 53 74 61 74 75 73 20 7b 0a 20  t ScanStatus {. 
36f0: 20 69 6e 74 20 61 64 64 72 45 78 70 6c 61 69 6e   int addrExplain
3700: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
3710: 20 2f 2a 20 4f 50 5f 45 78 70 6c 61 69 6e 20 66   /* OP_Explain f
3720: 6f 72 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74  or loop */.  int
3730: 20 61 64 64 72 4c 6f 6f 70 3b 20 20 20 20 20 20   addrLoop;      
3740: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3750: 41 64 64 72 65 73 73 20 6f 66 20 22 6c 6f 6f 70  Address of "loop
3760: 73 22 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  s" counter */.  
3770: 69 6e 74 20 61 64 64 72 56 69 73 69 74 3b 20 20  int addrVisit;  
3780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3790: 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 22 72  /* Address of "r
37a0: 6f 77 73 20 76 69 73 69 74 65 64 22 20 63 6f 75  ows visited" cou
37b0: 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 69 53  nter */.  int iS
37c0: 65 6c 65 63 74 49 44 3b 20 20 20 20 20 20 20 20  electID;        
37d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
37e0: 20 22 53 65 6c 65 63 74 2d 49 44 22 20 66 6f 72   "Select-ID" for
37f0: 20 74 68 69 73 20 6c 6f 6f 70 20 2a 2f 0a 20 20   this loop */.  
3800: 4c 6f 67 45 73 74 20 6e 45 73 74 3b 20 20 20 20  LogEst nEst;    
3810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3820: 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6f 75 74  /* Estimated out
3830: 70 75 74 20 72 6f 77 73 20 70 65 72 20 6c 6f 6f  put rows per loo
3840: 70 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61  p */.  char *zNa
3850: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
3860: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
3870: 66 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  f table or index
3880: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
3890: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
38a0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
38b0: 2e 20 20 54 68 69 73 20 73 74 72 75 63 74 75 72  .  This structur
38c0: 65 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 63  e contains the c
38d0: 6f 6d 70 6c 65 74 65 0a 2a 2a 20 73 74 61 74 65  omplete.** state
38e0: 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   of the virtual 
38f0: 6d 61 63 68 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 54  machine..**.** T
3900: 68 65 20 22 73 71 6c 69 74 65 33 5f 73 74 6d 74  he "sqlite3_stmt
3910: 22 20 73 74 72 75 63 74 75 72 65 20 70 6f 69 6e  " structure poin
3920: 74 65 72 20 74 68 61 74 20 69 73 20 72 65 74 75  ter that is retu
3930: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
3940: 70 72 65 70 61 72 65 28 29 0a 2a 2a 20 69 73 20  prepare().** is 
3950: 72 65 61 6c 6c 79 20 61 20 70 6f 69 6e 74 65 72  really a pointer
3960: 20 74 6f 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   to an instance 
3970: 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
3980: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 64 62  e..*/.struct Vdb
3990: 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
39a0: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
39b0: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   The database co
39c0: 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 6f 77  nnection that ow
39d0: 6e 73 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e  ns this statemen
39e0: 74 20 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70 3b 20  t */.  Op *aOp; 
39f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3a00: 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20  * Space to hold 
3a10: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
3a20: 69 6e 65 27 73 20 70 72 6f 67 72 61 6d 20 2a 2f  ine's program */
3a30: 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20  .  Mem *aMem;   
3a40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
3a50: 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  e memory locatio
3a60: 6e 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 2a 61 70  ns */.  Mem **ap
3a70: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
3a80: 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 74 6f 20  /* Arguments to 
3a90: 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74  currently execut
3aa0: 69 6e 67 20 75 73 65 72 20 66 75 6e 63 74 69 6f  ing user functio
3ab0: 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 43 6f 6c  n */.  Mem *aCol
3ac0: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Name;          /
3ad0: 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74  * Column names t
3ae0: 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 4d 65  o return */.  Me
3af0: 6d 20 2a 70 52 65 73 75 6c 74 53 65 74 3b 20 20  m *pResultSet;  
3b00: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
3b10: 20 74 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20   to an array of 
3b20: 72 65 73 75 6c 74 73 20 2a 2f 0a 20 20 50 61 72  results */.  Par
3b30: 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
3b40: 20 20 20 20 20 2f 2a 20 50 61 72 73 69 6e 67 20       /* Parsing 
3b50: 63 6f 6e 74 65 78 74 20 75 73 65 64 20 74 6f 20  context used to 
3b60: 63 72 65 61 74 65 20 74 68 69 73 20 56 64 62 65  create this Vdbe
3b70: 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
3b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3b90: 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   Number of memor
3ba0: 79 20 6c 6f 63 61 74 69 6f 6e 73 20 63 75 72 72  y locations curr
3bb0: 65 6e 74 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  ently allocated 
3bc0: 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 3b 20 20 20  */.  int nOp;   
3bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3be0: 4e 75 6d 62 65 72 20 6f 66 20 69 6e 73 74 72 75  Number of instru
3bf0: 63 74 69 6f 6e 73 20 69 6e 20 74 68 65 20 70 72  ctions in the pr
3c00: 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e  ogram */.  int n
3c10: 43 75 72 73 6f 72 3b 20 20 20 20 20 20 20 20 20  Cursor;         
3c20: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
3c30: 73 6c 6f 74 73 20 69 6e 20 61 70 43 73 72 5b 5d  slots in apCsr[]
3c40: 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b   */.  u32 magic;
3c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3c60: 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f   Magic number fo
3c70: 72 20 73 61 6e 69 74 79 20 63 68 65 63 6b 69 6e  r sanity checkin
3c80: 67 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72  g */.  char *zEr
3c90: 72 4d 73 67 3b 20 20 20 20 20 20 20 20 20 20 2f  rMsg;          /
3ca0: 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
3cb0: 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
3cc0: 20 20 56 64 62 65 20 2a 70 50 72 65 76 2c 2a 70    Vdbe *pPrev,*p
3cd0: 4e 65 78 74 3b 20 20 20 20 20 2f 2a 20 4c 69 6e  Next;     /* Lin
3ce0: 6b 65 64 20 6c 69 73 74 20 6f 66 20 56 44 42 45  ked list of VDBE
3cf0: 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  s with the same 
3d00: 56 64 62 65 2e 64 62 20 2a 2f 0a 20 20 56 64 62  Vdbe.db */.  Vdb
3d10: 65 43 75 72 73 6f 72 20 2a 2a 61 70 43 73 72 3b  eCursor **apCsr;
3d20: 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6c 65 6d       /* One elem
3d30: 65 6e 74 20 6f 66 20 74 68 69 73 20 61 72 72 61  ent of this arra
3d40: 79 20 66 6f 72 20 65 61 63 68 20 6f 70 65 6e 20  y for each open 
3d50: 63 75 72 73 6f 72 20 2a 2f 0a 20 20 4d 65 6d 20  cursor */.  Mem 
3d60: 2a 61 56 61 72 3b 20 20 20 20 20 20 20 20 20 20  *aVar;          
3d70: 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 66 6f      /* Values fo
3d80: 72 20 74 68 65 20 4f 50 5f 56 61 72 69 61 62 6c  r the OP_Variabl
3d90: 65 20 6f 70 63 6f 64 65 2e 20 2a 2f 0a 20 20 63  e opcode. */.  c
3da0: 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20  har **azVar;    
3db0: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
3dc0: 66 20 76 61 72 69 61 62 6c 65 73 20 2a 2f 0a 20  f variables */. 
3dd0: 20 79 6e 56 61 72 20 6e 56 61 72 3b 20 20 20 20   ynVar nVar;    
3de0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
3df0: 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
3e00: 20 61 56 61 72 5b 5d 20 2a 2f 0a 20 20 79 6e 56   aVar[] */.  ynV
3e10: 61 72 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20  ar nzVar;       
3e20: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
3e30: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 7a 56  f entries in azV
3e40: 61 72 5b 5d 20 2a 2f 0a 20 20 75 33 32 20 63 61  ar[] */.  u32 ca
3e50: 63 68 65 43 74 72 3b 20 20 20 20 20 20 20 20 20  cheCtr;         
3e60: 20 20 2f 2a 20 56 64 62 65 43 75 72 73 6f 72 20    /* VdbeCursor 
3e70: 72 6f 77 20 63 61 63 68 65 20 67 65 6e 65 72 61  row cache genera
3e80: 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  tion counter */.
3e90: 20 20 69 6e 74 20 70 63 3b 20 20 20 20 20 20 20    int pc;       
3ea0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
3eb0: 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72   program counter
3ec0: 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
3ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3ee0: 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
3ef0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
3f00: 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 72 63  E_DEBUG.  int rc
3f10: 41 70 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  App;            
3f20: 20 20 2f 2a 20 65 72 72 63 6f 64 65 20 73 65 74    /* errcode set
3f30: 20 62 79 20 73 71 6c 69 74 65 33 5f 72 65 73 75   by sqlite3_resu
3f40: 6c 74 5f 65 72 72 6f 72 5f 63 6f 64 65 28 29 20  lt_error_code() 
3f50: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 31 36 20  */.#endif.  u16 
3f60: 6e 52 65 73 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nResColumn;     
3f70: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
3f80: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 6e 65 20   columns in one 
3f90: 72 6f 77 20 6f 66 20 74 68 65 20 72 65 73 75 6c  row of the resul
3fa0: 74 20 73 65 74 20 2a 2f 0a 20 20 75 38 20 65 72  t set */.  u8 er
3fb0: 72 6f 72 41 63 74 69 6f 6e 3b 20 20 20 20 20 20  rorAction;      
3fc0: 20 20 20 2f 2a 20 52 65 63 6f 76 65 72 79 20 61     /* Recovery a
3fd0: 63 74 69 6f 6e 20 74 6f 20 64 6f 20 69 6e 20 63  ction to do in c
3fe0: 61 73 65 20 6f 66 20 61 6e 20 65 72 72 6f 72 20  ase of an error 
3ff0: 2a 2f 0a 20 20 75 38 20 6d 69 6e 57 72 69 74 65  */.  u8 minWrite
4000: 46 69 6c 65 46 6f 72 6d 61 74 3b 20 20 2f 2a 20  FileFormat;  /* 
4010: 4d 69 6e 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72  Minimum file for
4020: 6d 61 74 20 66 6f 72 20 77 72 69 74 61 62 6c 65  mat for writable
4030: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
4040: 2a 2f 0a 20 20 62 66 74 20 65 78 70 6c 61 69 6e  */.  bft explain
4050: 3a 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  :2;          /* 
4060: 54 72 75 65 20 69 66 20 45 58 50 4c 41 49 4e 20  True if EXPLAIN 
4070: 70 72 65 73 65 6e 74 20 6f 6e 20 53 51 4c 20 63  present on SQL c
4080: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 62 66 74 20  ommand */.  bft 
4090: 63 68 61 6e 67 65 43 6e 74 4f 6e 3a 31 3b 20 20  changeCntOn:1;  
40a0: 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 75      /* True to u
40b0: 70 64 61 74 65 20 74 68 65 20 63 68 61 6e 67 65  pdate the change
40c0: 2d 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 62 66  -counter */.  bf
40d0: 74 20 65 78 70 69 72 65 64 3a 31 3b 20 20 20 20  t expired:1;    
40e0: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
40f0: 20 74 68 65 20 56 4d 20 6e 65 65 64 73 20 74 6f   the VM needs to
4100: 20 62 65 20 72 65 63 6f 6d 70 69 6c 65 64 20 2a   be recompiled *
4110: 2f 0a 20 20 62 66 74 20 72 75 6e 4f 6e 6c 79 4f  /.  bft runOnlyO
4120: 6e 63 65 3a 31 3b 20 20 20 20 20 20 2f 2a 20 41  nce:1;      /* A
4130: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 65 78 70  utomatically exp
4140: 69 72 65 20 6f 6e 20 72 65 73 65 74 20 2a 2f 0a  ire on reset */.
4150: 20 20 62 66 74 20 75 73 65 73 53 74 6d 74 4a 6f    bft usesStmtJo
4160: 75 72 6e 61 6c 3a 31 3b 20 20 2f 2a 20 54 72 75  urnal:1;  /* Tru
4170: 65 20 69 66 20 75 73 65 73 20 61 20 73 74 61 74  e if uses a stat
4180: 65 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 20 2a 2f  ement journal */
4190: 0a 20 20 62 66 74 20 72 65 61 64 4f 6e 6c 79 3a  .  bft readOnly:
41a0: 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  1;         /* Tr
41b0: 75 65 20 66 6f 72 20 73 74 61 74 65 6d 65 6e 74  ue for statement
41c0: 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 77 72  s that do not wr
41d0: 69 74 65 20 2a 2f 0a 20 20 62 66 74 20 62 49 73  ite */.  bft bIs
41e0: 52 65 61 64 65 72 3a 31 3b 20 20 20 20 20 20 20  Reader:1;       
41f0: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 73 74 61   /* True for sta
4200: 74 65 6d 65 6e 74 73 20 74 68 61 74 20 72 65 61  tements that rea
4210: 64 20 2a 2f 0a 20 20 62 66 74 20 69 73 50 72 65  d */.  bft isPre
4220: 70 61 72 65 56 32 3a 31 3b 20 20 20 20 20 20 2f  pareV2:1;      /
4230: 2a 20 54 72 75 65 20 69 66 20 70 72 65 70 61 72  * True if prepar
4240: 65 64 20 77 69 74 68 20 70 72 65 70 61 72 65 5f  ed with prepare_
4250: 76 32 28 29 20 2a 2f 0a 20 20 62 66 74 20 64 6f  v2() */.  bft do
4260: 69 6e 67 52 65 72 75 6e 3a 31 3b 20 20 20 20 20  ingRerun:1;     
4270: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 72    /* True if rer
4280: 75 6e 6e 69 6e 67 20 61 66 74 65 72 20 61 6e 20  unning after an 
4290: 61 75 74 6f 2d 72 65 70 72 65 70 61 72 65 20 2a  auto-reprepare *
42a0: 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  /.  int nChange;
42b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
42c0: 75 6d 62 65 72 20 6f 66 20 64 62 20 63 68 61 6e  umber of db chan
42d0: 67 65 73 20 6d 61 64 65 20 73 69 6e 63 65 20 6c  ges made since l
42e0: 61 73 74 20 72 65 73 65 74 20 2a 2f 0a 20 20 79  ast reset */.  y
42f0: 44 62 4d 61 73 6b 20 62 74 72 65 65 4d 61 73 6b  DbMask btreeMask
4300: 3b 20 20 20 20 20 20 2f 2a 20 42 69 74 6d 61 73  ;      /* Bitmas
4310: 6b 20 6f 66 20 64 62 2d 3e 61 44 62 5b 5d 20 65  k of db->aDb[] e
4320: 6e 74 72 69 65 73 20 72 65 66 65 72 65 6e 63 65  ntries reference
4330: 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 6c  d */.  yDbMask l
4340: 6f 63 6b 4d 61 73 6b 3b 20 20 20 20 20 20 20 2f  ockMask;       /
4350: 2a 20 53 75 62 73 65 74 20 6f 66 20 62 74 72 65  * Subset of btre
4360: 65 4d 61 73 6b 20 74 68 61 74 20 72 65 71 75 69  eMask that requi
4370: 72 65 73 20 61 20 6c 6f 63 6b 20 2a 2f 0a 20 20  res a lock */.  
4380: 69 6e 74 20 69 53 74 61 74 65 6d 65 6e 74 3b 20  int iStatement; 
4390: 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 65          /* State
43a0: 6d 65 6e 74 20 6e 75 6d 62 65 72 20 28 6f 72 20  ment number (or 
43b0: 30 20 69 66 20 68 61 73 20 6e 6f 74 20 6f 70 65  0 if has not ope
43c0: 6e 65 64 20 73 74 6d 74 29 20 2a 2f 0a 20 20 75  ned stmt) */.  u
43d0: 33 32 20 61 43 6f 75 6e 74 65 72 5b 35 5d 3b 20  32 aCounter[5]; 
43e0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65         /* Counte
43f0: 72 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  rs used by sqlit
4400: 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29  e3_stmt_status()
4410: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
4420: 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20  TE_OMIT_TRACE.  
4430: 69 36 34 20 73 74 61 72 74 54 69 6d 65 3b 20 20  i64 startTime;  
4440: 20 20 20 20 20 20 20 20 2f 2a 20 54 69 6d 65 20          /* Time 
4450: 77 68 65 6e 20 71 75 65 72 79 20 73 74 61 72 74  when query start
4460: 65 64 20 2d 20 75 73 65 64 20 66 6f 72 20 70 72  ed - used for pr
4470: 6f 66 69 6c 69 6e 67 20 2a 2f 0a 23 65 6e 64 69  ofiling */.#endi
4480: 66 0a 20 20 69 36 34 20 69 43 75 72 72 65 6e 74  f.  i64 iCurrent
4490: 54 69 6d 65 3b 20 20 20 20 20 20 20 2f 2a 20 56  Time;       /* V
44a0: 61 6c 75 65 20 6f 66 20 6a 75 6c 69 61 6e 64 61  alue of julianda
44b0: 79 28 27 6e 6f 77 27 29 20 66 6f 72 20 74 68 69  y('now') for thi
44c0: 73 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20  s statement */. 
44d0: 20 69 36 34 20 6e 46 6b 43 6f 6e 73 74 72 61 69   i64 nFkConstrai
44e0: 6e 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  nt;      /* Numb
44f0: 65 72 20 6f 66 20 69 6d 6d 2e 20 46 4b 20 63 6f  er of imm. FK co
4500: 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73 20 56  nstraints this V
4510: 4d 20 2a 2f 0a 20 20 69 36 34 20 6e 53 74 6d 74  M */.  i64 nStmt
4520: 44 65 66 43 6f 6e 73 3b 20 20 20 20 20 20 20 2f  DefCons;       /
4530: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 2e  * Number of def.
4540: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 68 65   constraints whe
4550: 6e 20 73 74 6d 74 20 73 74 61 72 74 65 64 20 2a  n stmt started *
4560: 2f 0a 20 20 69 36 34 20 6e 53 74 6d 74 44 65 66  /.  i64 nStmtDef
4570: 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 2f 2a 20 4e  ImmCons;    /* N
4580: 75 6d 62 65 72 20 6f 66 20 64 65 66 2e 20 69 6d  umber of def. im
4590: 6d 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 68  m constraints wh
45a0: 65 6e 20 73 74 6d 74 20 73 74 61 72 74 65 64 20  en stmt started 
45b0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  */.  char *zSql;
45c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
45d0: 54 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20  Text of the SQL 
45e0: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 67  statement that g
45f0: 65 6e 65 72 61 74 65 64 20 74 68 69 73 20 2a 2f  enerated this */
4600: 0a 20 20 76 6f 69 64 20 2a 70 46 72 65 65 3b 20  .  void *pFree; 
4610: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 72             /* Fr
4620: 65 65 20 74 68 69 73 20 77 68 65 6e 20 64 65 6c  ee this when del
4630: 65 74 69 6e 67 20 74 68 65 20 76 64 62 65 20 2a  eting the vdbe *
4640: 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
4650: 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 50  Frame;      /* P
4660: 61 72 65 6e 74 20 66 72 61 6d 65 20 2a 2f 0a 20  arent frame */. 
4670: 20 56 64 62 65 46 72 61 6d 65 20 2a 70 44 65 6c   VdbeFrame *pDel
4680: 46 72 61 6d 65 3b 20 20 20 2f 2a 20 4c 69 73 74  Frame;   /* List
4690: 20 6f 66 20 66 72 61 6d 65 20 6f 62 6a 65 63 74   of frame object
46a0: 73 20 74 6f 20 66 72 65 65 20 6f 6e 20 56 4d 20  s to free on VM 
46b0: 72 65 73 65 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  reset */.  int n
46c0: 46 72 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  Frame;          
46d0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
46e0: 66 72 61 6d 65 73 20 69 6e 20 70 46 72 61 6d 65  frames in pFrame
46f0: 20 6c 69 73 74 20 2a 2f 0a 20 20 75 33 32 20 65   list */.  u32 e
4700: 78 70 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  xpmask;         
4710: 20 20 20 2f 2a 20 42 69 6e 64 69 6e 67 20 74 6f     /* Binding to
4720: 20 74 68 65 73 65 20 76 61 72 73 20 69 6e 76 61   these vars inva
4730: 6c 69 64 61 74 65 73 20 56 4d 20 2a 2f 0a 20 20  lidates VM */.  
4740: 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
4750: 67 72 61 6d 3b 20 20 20 2f 2a 20 4c 69 6e 6b 65  gram;   /* Linke
4760: 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 73 75  d list of all su
4770: 62 2d 70 72 6f 67 72 61 6d 73 20 75 73 65 64 20  b-programs used 
4780: 62 79 20 56 4d 20 2a 2f 0a 20 20 69 6e 74 20 6e  by VM */.  int n
4790: 4f 6e 63 65 46 6c 61 67 3b 20 20 20 20 20 20 20  OnceFlag;       
47a0: 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 61 72     /* Size of ar
47b0: 72 61 79 20 61 4f 6e 63 65 46 6c 61 67 5b 5d 20  ray aOnceFlag[] 
47c0: 2a 2f 0a 20 20 75 38 20 2a 61 4f 6e 63 65 46 6c  */.  u8 *aOnceFl
47d0: 61 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ag;          /* 
47e0: 46 6c 61 67 73 20 66 6f 72 20 4f 50 5f 4f 6e 63  Flags for OP_Onc
47f0: 65 20 2a 2f 0a 20 20 41 75 78 44 61 74 61 20 2a  e */.  AuxData *
4800: 70 41 75 78 44 61 74 61 3b 20 20 20 20 20 20 2f  pAuxData;      /
4810: 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
4820: 20 61 75 78 64 61 74 61 20 61 6c 6c 6f 63 61 74   auxdata allocat
4830: 69 6f 6e 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  ions */.#ifdef S
4840: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
4850: 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 69  T_SCANSTATUS.  i
4860: 36 34 20 2a 61 6e 45 78 65 63 3b 20 20 20 20 20  64 *anExec;     
4870: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
4880: 20 6f 66 20 74 69 6d 65 73 20 65 61 63 68 20 6f   of times each o
4890: 70 20 68 61 73 20 62 65 65 6e 20 65 78 65 63 75  p has been execu
48a0: 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63  ted */.  int nSc
48b0: 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  an;             
48c0: 20 2f 2a 20 45 6e 74 72 69 65 73 20 69 6e 20 61   /* Entries in a
48d0: 53 63 61 6e 5b 5d 20 2a 2f 0a 20 20 53 63 61 6e  Scan[] */.  Scan
48e0: 53 74 61 74 75 73 20 2a 61 53 63 61 6e 3b 20 20  Status *aScan;  
48f0: 20 20 20 20 2f 2a 20 53 63 61 6e 20 64 65 66 69      /* Scan defi
4900: 6e 69 74 69 6f 6e 73 20 66 6f 72 20 73 71 6c 69  nitions for sqli
4910: 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61  te3_stmt_scansta
4920: 74 75 73 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  tus() */.#endif.
4930: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
4940: 6c 6c 6f 77 69 6e 67 20 61 72 65 20 61 6c 6c 6f  llowing are allo
4950: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 56  wed values for V
4960: 64 62 65 2e 6d 61 67 69 63 0a 2a 2f 0a 23 64 65  dbe.magic.*/.#de
4970: 66 69 6e 65 20 56 44 42 45 5f 4d 41 47 49 43 5f  fine VDBE_MAGIC_
4980: 49 4e 49 54 20 20 20 20 20 30 78 32 36 62 63 65  INIT     0x26bce
4990: 61 61 35 20 20 20 20 2f 2a 20 42 75 69 6c 64 69  aa5    /* Buildi
49a0: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
49b0: 6d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 56 44 42  m */.#define VDB
49c0: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 20 20 20 20  E_MAGIC_RUN     
49d0: 20 30 78 62 64 66 32 30 64 61 33 20 20 20 20 2f   0xbdf20da3    /
49e0: 2a 20 56 44 42 45 20 69 73 20 72 65 61 64 79 20  * VDBE is ready 
49f0: 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 23 64  to execute */.#d
4a00: 65 66 69 6e 65 20 56 44 42 45 5f 4d 41 47 49 43  efine VDBE_MAGIC
4a10: 5f 48 41 4c 54 20 20 20 20 20 30 78 35 31 39 63  _HALT     0x519c
4a20: 32 39 37 33 20 20 20 20 2f 2a 20 56 44 42 45 20  2973    /* VDBE 
4a30: 68 61 73 20 63 6f 6d 70 6c 65 74 65 64 20 65 78  has completed ex
4a40: 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ecution */.#defi
4a50: 6e 65 20 56 44 42 45 5f 4d 41 47 49 43 5f 44 45  ne VDBE_MAGIC_DE
4a60: 41 44 20 20 20 20 20 30 78 62 36 30 36 63 33 63  AD     0xb606c3c
4a70: 38 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45  8    /* The VDBE
4a80: 20 68 61 73 20 62 65 65 6e 20 64 65 61 6c 6c 6f   has been deallo
4a90: 63 61 74 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  cated */../*.** 
4aa0: 46 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79  Function prototy
4ab0: 70 65 73 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  pes.*/.void sqli
4ac0: 74 65 33 56 64 62 65 45 72 72 6f 72 28 56 64 62  te3VdbeError(Vdb
4ad0: 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
4ae0: 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  , ...);.void sql
4af0: 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73  ite3VdbeFreeCurs
4b00: 6f 72 28 56 64 62 65 20 2a 2c 20 56 64 62 65 43  or(Vdbe *, VdbeC
4b10: 75 72 73 6f 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ursor*);.void sq
4b20: 6c 69 74 65 56 64 62 65 50 6f 70 53 74 61 63 6b  liteVdbePopStack
4b30: 28 56 64 62 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74  (Vdbe*,int);.int
4b40: 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
4b50: 6f 72 4d 6f 76 65 74 6f 28 56 64 62 65 43 75 72  orMoveto(VdbeCur
4b60: 73 6f 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  sor*);.int sqlit
4b70: 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74  e3VdbeCursorRest
4b80: 6f 72 65 28 56 64 62 65 43 75 72 73 6f 72 2a 29  ore(VdbeCursor*)
4b90: 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
4ba0: 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
4bb0: 65 66 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46  efined(VDBE_PROF
4bc0: 49 4c 45 29 0a 76 6f 69 64 20 73 71 6c 69 74 65  ILE).void sqlite
4bd0: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 46 49 4c  3VdbePrintOp(FIL
4be0: 45 2a 2c 20 69 6e 74 2c 20 4f 70 2a 29 3b 0a 23  E*, int, Op*);.#
4bf0: 65 6e 64 69 66 0a 75 33 32 20 73 71 6c 69 74 65  endif.u32 sqlite
4c00: 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
4c10: 65 6e 28 75 33 32 29 3b 0a 75 33 32 20 73 71 6c  en(u32);.u32 sql
4c20: 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
4c30: 70 65 28 4d 65 6d 2a 2c 20 69 6e 74 29 3b 0a 75  pe(Mem*, int);.u
4c40: 33 32 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  32 sqlite3VdbeSe
4c50: 72 69 61 6c 50 75 74 28 75 6e 73 69 67 6e 65 64  rialPut(unsigned
4c60: 20 63 68 61 72 2a 2c 20 4d 65 6d 2a 2c 20 75 33   char*, Mem*, u3
4c70: 32 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 56  2);.u32 sqlite3V
4c80: 64 62 65 53 65 72 69 61 6c 47 65 74 28 63 6f 6e  dbeSerialGet(con
4c90: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
4ca0: 2a 2c 20 75 33 32 2c 20 4d 65 6d 2a 29 3b 0a 76  *, u32, Mem*);.v
4cb0: 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 44  oid sqlite3VdbeD
4cc0: 65 6c 65 74 65 41 75 78 44 61 74 61 28 56 64 62  eleteAuxData(Vdb
4cd0: 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a  e*, int, int);..
4ce0: 69 6e 74 20 73 71 6c 69 74 65 32 42 74 72 65 65  int sqlite2Btree
4cf0: 4b 65 79 43 6f 6d 70 61 72 65 28 42 74 43 75 72  KeyCompare(BtCur
4d00: 73 6f 72 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69  sor *, const voi
4d10: 64 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  d *, int, int, i
4d20: 6e 74 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nt *);.int sqlit
4d30: 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70  e3VdbeIdxKeyComp
4d40: 61 72 65 28 73 71 6c 69 74 65 33 2a 2c 56 64 62  are(sqlite3*,Vdb
4d50: 65 43 75 72 73 6f 72 2a 2c 55 6e 70 61 63 6b 65  eCursor*,Unpacke
4d60: 64 52 65 63 6f 72 64 2a 2c 69 6e 74 2a 29 3b 0a  dRecord*,int*);.
4d70: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 49  int sqlite3VdbeI
4d80: 64 78 52 6f 77 69 64 28 73 71 6c 69 74 65 33 2a  dxRowid(sqlite3*
4d90: 2c 20 42 74 43 75 72 73 6f 72 2a 2c 20 69 36 34  , BtCursor*, i64
4da0: 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
4db0: 64 62 65 45 78 65 63 28 56 64 62 65 2a 29 3b 0a  dbeExec(Vdbe*);.
4dc0: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4c  int sqlite3VdbeL
4dd0: 69 73 74 28 56 64 62 65 2a 29 3b 0a 69 6e 74 20  ist(Vdbe*);.int 
4de0: 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
4df0: 56 64 62 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Vdbe*);.int sqli
4e00: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
4e10: 6f 64 69 6e 67 28 4d 65 6d 20 2a 2c 20 69 6e 74  oding(Mem *, int
4e20: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
4e30: 62 65 4d 65 6d 54 6f 6f 42 69 67 28 4d 65 6d 2a  beMemTooBig(Mem*
4e40: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
4e50: 62 65 4d 65 6d 43 6f 70 79 28 4d 65 6d 2a 2c 20  beMemCopy(Mem*, 
4e60: 63 6f 6e 73 74 20 4d 65 6d 2a 29 3b 0a 76 6f 69  const Mem*);.voi
4e70: 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  d sqlite3VdbeMem
4e80: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 4d 65 6d 2a  ShallowCopy(Mem*
4e90: 2c 20 63 6f 6e 73 74 20 4d 65 6d 2a 2c 20 69 6e  , const Mem*, in
4ea0: 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
4eb0: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 4d 65 6d 2a  VdbeMemMove(Mem*
4ec0: 2c 20 4d 65 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c  , Mem*);.int sql
4ed0: 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65  ite3VdbeMemNulTe
4ee0: 72 6d 69 6e 61 74 65 28 4d 65 6d 2a 29 3b 0a 69  rminate(Mem*);.i
4ef0: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  nt sqlite3VdbeMe
4f00: 6d 53 65 74 53 74 72 28 4d 65 6d 2a 2c 20 63 6f  mSetStr(Mem*, co
4f10: 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20  nst char*, int, 
4f20: 75 38 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64  u8, void(*)(void
4f30: 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *));.void sqlite
4f40: 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
4f50: 28 4d 65 6d 2a 2c 20 69 36 34 29 3b 0a 23 69 66  (Mem*, i64);.#if
4f60: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
4f70: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23  FLOATING_POINT.#
4f80: 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
4f90: 64 62 65 4d 65 6d 53 65 74 44 6f 75 62 6c 65 20  dbeMemSetDouble 
4fa0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
4fb0: 74 49 6e 74 36 34 0a 23 65 6c 73 65 0a 20 20 76  tInt64.#else.  v
4fc0: 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d  oid sqlite3VdbeM
4fd0: 65 6d 53 65 74 44 6f 75 62 6c 65 28 4d 65 6d 2a  emSetDouble(Mem*
4fe0: 2c 20 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69  , double);.#endi
4ff0: 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  f.void sqlite3Vd
5000: 62 65 4d 65 6d 49 6e 69 74 28 4d 65 6d 2a 2c 73  beMemInit(Mem*,s
5010: 71 6c 69 74 65 33 2a 2c 75 31 36 29 3b 0a 76 6f  qlite3*,u16);.vo
5020: 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  id sqlite3VdbeMe
5030: 6d 53 65 74 4e 75 6c 6c 28 4d 65 6d 2a 29 3b 0a  mSetNull(Mem*);.
5040: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
5050: 4d 65 6d 53 65 74 5a 65 72 6f 42 6c 6f 62 28 4d  MemSetZeroBlob(M
5060: 65 6d 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  em*,int);.void s
5070: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
5080: 52 6f 77 53 65 74 28 4d 65 6d 2a 29 3b 0a 69 6e  RowSet(Mem*);.in
5090: 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  t sqlite3VdbeMem
50a0: 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 4d 65  MakeWriteable(Me
50b0: 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  m*);.int sqlite3
50c0: 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79  VdbeMemStringify
50d0: 28 4d 65 6d 2a 2c 20 75 38 2c 20 75 38 29 3b 0a  (Mem*, u8, u8);.
50e0: 69 36 34 20 73 71 6c 69 74 65 33 56 64 62 65 49  i64 sqlite3VdbeI
50f0: 6e 74 56 61 6c 75 65 28 4d 65 6d 2a 29 3b 0a 69  ntValue(Mem*);.i
5100: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  nt sqlite3VdbeMe
5110: 6d 49 6e 74 65 67 65 72 69 66 79 28 4d 65 6d 2a  mIntegerify(Mem*
5120: 29 3b 0a 64 6f 75 62 6c 65 20 73 71 6c 69 74 65  );.double sqlite
5130: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 4d  3VdbeRealValue(M
5140: 65 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  em*);.void sqlit
5150: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
5160: 69 6e 69 74 79 28 4d 65 6d 2a 29 3b 0a 69 6e 74  inity(Mem*);.int
5170: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
5180: 65 61 6c 69 66 79 28 4d 65 6d 2a 29 3b 0a 69 6e  ealify(Mem*);.in
5190: 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  t sqlite3VdbeMem
51a0: 4e 75 6d 65 72 69 66 79 28 4d 65 6d 2a 29 3b 0a  Numerify(Mem*);.
51b0: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
51c0: 4d 65 6d 43 61 73 74 28 4d 65 6d 2a 2c 75 38 2c  MemCast(Mem*,u8,
51d0: 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
51e0: 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
51f0: 28 42 74 43 75 72 73 6f 72 2a 2c 75 33 32 2c 75  (BtCursor*,u32,u
5200: 33 32 2c 69 6e 74 2c 4d 65 6d 2a 29 3b 0a 76 6f  32,int,Mem*);.vo
5210: 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  id sqlite3VdbeMe
5220: 6d 52 65 6c 65 61 73 65 28 4d 65 6d 20 2a 70 29  mRelease(Mem *p)
5230: 3b 0a 23 64 65 66 69 6e 65 20 56 64 62 65 4d 65  ;.#define VdbeMe
5240: 6d 44 79 6e 61 6d 69 63 28 58 29 20 20 5c 0a 20  mDynamic(X)  \. 
5250: 20 28 28 28 58 29 2d 3e 66 6c 61 67 73 26 28 4d   (((X)->flags&(M
5260: 45 4d 5f 41 67 67 7c 4d 45 4d 5f 44 79 6e 7c 4d  EM_Agg|MEM_Dyn|M
5270: 45 4d 5f 52 6f 77 53 65 74 7c 4d 45 4d 5f 46 72  EM_RowSet|MEM_Fr
5280: 61 6d 65 29 29 21 3d 30 29 0a 69 6e 74 20 73 71  ame))!=0).int sq
5290: 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61  lite3VdbeMemFina
52a0: 6c 69 7a 65 28 4d 65 6d 2a 2c 20 46 75 6e 63 44  lize(Mem*, FuncD
52b0: 65 66 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72  ef*);.const char
52c0: 20 2a 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 4e   *sqlite3OpcodeN
52d0: 61 6d 65 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ame(int);.int sq
52e0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
52f0: 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 69 6e 74 20  (Mem *pMem, int 
5300: 6e 2c 20 69 6e 74 20 70 72 65 73 65 72 76 65 29  n, int preserve)
5310: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  ;.int sqlite3Vdb
5320: 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69  eMemClearAndResi
5330: 7a 65 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 69 6e  ze(Mem *pMem, in
5340: 74 20 6e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t n);.int sqlite
5350: 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d  3VdbeCloseStatem
5360: 65 6e 74 28 56 64 62 65 20 2a 2c 20 69 6e 74 29  ent(Vdbe *, int)
5370: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
5380: 62 65 46 72 61 6d 65 44 65 6c 65 74 65 28 56 64  beFrameDelete(Vd
5390: 62 65 46 72 61 6d 65 2a 29 3b 0a 69 6e 74 20 73  beFrame*);.int s
53a0: 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 52  qlite3VdbeFrameR
53b0: 65 73 74 6f 72 65 28 56 64 62 65 46 72 61 6d 65  estore(VdbeFrame
53c0: 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
53d0: 56 64 62 65 54 72 61 6e 73 66 65 72 45 72 72 6f  VdbeTransferErro
53e0: 72 28 56 64 62 65 20 2a 70 29 3b 0a 0a 69 6e 74  r(Vdbe *p);..int
53f0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
5400: 65 72 49 6e 69 74 28 73 71 6c 69 74 65 33 20 2a  erInit(sqlite3 *
5410: 2c 20 69 6e 74 2c 20 56 64 62 65 43 75 72 73 6f  , int, VdbeCurso
5420: 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r *);.void sqlit
5430: 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 73 65  e3VdbeSorterRese
5440: 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 64 62  t(sqlite3 *, Vdb
5450: 65 53 6f 72 74 65 72 20 2a 29 3b 0a 76 6f 69 64  eSorter *);.void
5460: 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
5470: 65 72 43 6c 6f 73 65 28 73 71 6c 69 74 65 33 20  erClose(sqlite3 
5480: 2a 2c 20 56 64 62 65 43 75 72 73 6f 72 20 2a 29  *, VdbeCursor *)
5490: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  ;.int sqlite3Vdb
54a0: 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 63 6f  eSorterRowkey(co
54b0: 6e 73 74 20 56 64 62 65 43 75 72 73 6f 72 20 2a  nst VdbeCursor *
54c0: 2c 20 4d 65 6d 20 2a 29 3b 0a 69 6e 74 20 73 71  , Mem *);.int sq
54d0: 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 4e  lite3VdbeSorterN
54e0: 65 78 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  ext(sqlite3 *, c
54f0: 6f 6e 73 74 20 56 64 62 65 43 75 72 73 6f 72 20  onst VdbeCursor 
5500: 2a 2c 20 69 6e 74 20 2a 29 3b 0a 69 6e 74 20 73  *, int *);.int s
5510: 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
5520: 52 65 77 69 6e 64 28 63 6f 6e 73 74 20 56 64 62  Rewind(const Vdb
5530: 65 43 75 72 73 6f 72 20 2a 2c 20 69 6e 74 20 2a  eCursor *, int *
5540: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
5550: 62 65 53 6f 72 74 65 72 57 72 69 74 65 28 63 6f  beSorterWrite(co
5560: 6e 73 74 20 56 64 62 65 43 75 72 73 6f 72 20 2a  nst VdbeCursor *
5570: 2c 20 4d 65 6d 20 2a 29 3b 0a 69 6e 74 20 73 71  , Mem *);.int sq
5580: 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 43  lite3VdbeSorterC
5590: 6f 6d 70 61 72 65 28 63 6f 6e 73 74 20 56 64 62  ompare(const Vdb
55a0: 65 43 75 72 73 6f 72 20 2a 2c 20 4d 65 6d 20 2a  eCursor *, Mem *
55b0: 2c 20 69 6e 74 2c 20 69 6e 74 20 2a 29 3b 0a 0a  , int, int *);..
55c0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
55d0: 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
55e0: 43 41 43 48 45 29 20 26 26 20 53 51 4c 49 54 45  CACHE) && SQLITE
55f0: 5f 54 48 52 45 41 44 53 41 46 45 3e 30 0a 20 20  _THREADSAFE>0.  
5600: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
5610: 45 6e 74 65 72 28 56 64 62 65 2a 29 3b 0a 20 20  Enter(Vdbe*);.  
5620: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
5630: 4c 65 61 76 65 28 56 64 62 65 2a 29 3b 0a 23 65  Leave(Vdbe*);.#e
5640: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
5650: 69 74 65 33 56 64 62 65 45 6e 74 65 72 28 58 29  ite3VdbeEnter(X)
5660: 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
5670: 33 56 64 62 65 4c 65 61 76 65 28 58 29 0a 23 65  3VdbeLeave(X).#e
5680: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
5690: 49 54 45 5f 44 45 42 55 47 0a 76 6f 69 64 20 73  ITE_DEBUG.void s
56a0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
56b0: 75 74 54 6f 43 68 61 6e 67 65 28 56 64 62 65 2a  utToChange(Vdbe*
56c0: 2c 4d 65 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ,Mem*);.int sqli
56d0: 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
56e0: 6e 76 61 72 69 61 6e 74 73 28 4d 65 6d 2a 29 3b  nvariants(Mem*);
56f0: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
5700: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
5710: 45 49 47 4e 5f 4b 45 59 0a 69 6e 74 20 73 71 6c  EIGN_KEY.int sql
5720: 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
5730: 56 64 62 65 20 2a 2c 20 69 6e 74 29 3b 0a 23 65  Vdbe *, int);.#e
5740: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
5750: 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
5760: 70 2c 69 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69  p,i) 0.#endif..i
5770: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  nt sqlite3VdbeMe
5780: 6d 54 72 61 6e 73 6c 61 74 65 28 4d 65 6d 2a 2c  mTranslate(Mem*,
5790: 20 75 38 29 3b 0a 23 69 66 64 65 66 20 53 51 4c   u8);.#ifdef SQL
57a0: 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64  ITE_DEBUG.  void
57b0: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
57c0: 74 53 71 6c 28 56 64 62 65 2a 29 3b 0a 20 20 76  tSql(Vdbe*);.  v
57d0: 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d  oid sqlite3VdbeM
57e0: 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 4d 65  emPrettyPrint(Me
57f0: 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72 20 2a 7a  m *pMem, char *z
5800: 42 75 66 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  Buf);.#endif.int
5810: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 48   sqlite3VdbeMemH
5820: 61 6e 64 6c 65 42 6f 6d 28 4d 65 6d 20 2a 70 4d  andleBom(Mem *pM
5830: 65 6d 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  em);..#ifndef SQ
5840: 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 43 52 42 4c  LITE_OMIT_INCRBL
5850: 4f 42 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  OB.  int sqlite3
5860: 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
5870: 62 28 4d 65 6d 20 2a 29 3b 0a 20 20 23 64 65 66  b(Mem *);.  #def
5880: 69 6e 65 20 45 78 70 61 6e 64 42 6c 6f 62 28 50  ine ExpandBlob(P
5890: 29 20 28 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  ) (((P)->flags&M
58a0: 45 4d 5f 5a 65 72 6f 29 3f 73 71 6c 69 74 65 33  EM_Zero)?sqlite3
58b0: 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
58c0: 62 28 50 29 3a 30 29 0a 23 65 6c 73 65 0a 20 20  b(P):0).#else.  
58d0: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56  #define sqlite3V
58e0: 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
58f0: 28 78 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  (x) SQLITE_OK.  
5900: 23 64 65 66 69 6e 65 20 45 78 70 61 6e 64 42 6c  #define ExpandBl
5910: 6f 62 28 50 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  ob(P) SQLITE_OK.
5920: 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f  #endif..#endif /
5930: 2a 20 21 64 65 66 69 6e 65 64 28 5f 56 44 42 45  * !defined(_VDBE
5940: 49 4e 54 5f 48 5f 29 20 2a 2f 0a                 INT_H_) */.