/ Hex Artifact Content
Login

Artifact d8a56a491b752dbb5f671963b8c861ec72ea875e:


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 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
02c0: 56 44 42 45 49 4e 54 5f 48 0a 23 64 65 66 69 6e  VDBEINT_H.#defin
02d0: 65 20 53 51 4c 49 54 45 5f 56 44 42 45 49 4e 54  e SQLITE_VDBEINT
02e0: 5f 48 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  _H../*.** The ma
02f0: 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
0300: 74 69 6d 65 73 20 74 68 61 74 20 61 20 73 74 61  times that a sta
0310: 74 65 6d 65 6e 74 20 77 69 6c 6c 20 74 72 79 20  tement will try 
0320: 74 6f 20 72 65 70 61 72 73 65 0a 2a 2a 20 69 74  to reparse.** it
0330: 73 65 6c 66 20 62 65 66 6f 72 65 20 67 69 76 69  self before givi
0340: 6e 67 20 75 70 20 61 6e 64 20 72 65 74 75 72 6e  ng up and return
0350: 69 6e 67 20 53 51 4c 49 54 45 5f 53 43 48 45 4d  ing SQLITE_SCHEM
0360: 41 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  A..*/.#ifndef SQ
0370: 4c 49 54 45 5f 4d 41 58 5f 53 43 48 45 4d 41 5f  LITE_MAX_SCHEMA_
0380: 52 45 54 52 59 0a 23 20 64 65 66 69 6e 65 20 53  RETRY.# define S
0390: 51 4c 49 54 45 5f 4d 41 58 5f 53 43 48 45 4d 41  QLITE_MAX_SCHEMA
03a0: 5f 52 45 54 52 59 20 35 30 0a 23 65 6e 64 69 66  _RETRY 50.#endif
03b0: 0a 0a 2f 2a 0a 2a 2a 20 56 44 42 45 5f 44 49 53  ../*.** VDBE_DIS
03c0: 50 4c 41 59 5f 50 34 20 69 73 20 74 72 75 65 20  PLAY_P4 is true 
03d0: 6f 72 20 66 61 6c 73 65 20 64 65 70 65 6e 64 69  or false dependi
03e0: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72  ng on whether or
03f0: 20 6e 6f 74 20 74 68 65 0a 2a 2a 20 22 65 78 70   not the.** "exp
0400: 6c 61 69 6e 22 20 50 34 20 64 69 73 70 6c 61 79  lain" P4 display
0410: 20 6c 6f 67 69 63 20 69 73 20 65 6e 61 62 6c 65   logic is enable
0420: 64 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  d..*/.#if !defin
0430: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ed(SQLITE_OMIT_E
0440: 58 50 4c 41 49 4e 29 20 7c 7c 20 21 64 65 66 69  XPLAIN) || !defi
0450: 6e 65 64 28 4e 44 45 42 55 47 29 20 5c 0a 20 20  ned(NDEBUG) \.  
0460: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 56 44     || defined(VD
0470: 42 45 5f 50 52 4f 46 49 4c 45 29 20 7c 7c 20 64  BE_PROFILE) || d
0480: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
0490: 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 56 44  BUG).# define VD
04a0: 42 45 5f 44 49 53 50 4c 41 59 5f 50 34 20 31 0a  BE_DISPLAY_P4 1.
04b0: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 56  #else.# define V
04c0: 44 42 45 5f 44 49 53 50 4c 41 59 5f 50 34 20 30  DBE_DISPLAY_P4 0
04d0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53  .#endif../*.** S
04e0: 51 4c 20 69 73 20 74 72 61 6e 73 6c 61 74 65 64  QL is translated
04f0: 20 69 6e 74 6f 20 61 20 73 65 71 75 65 6e 63 65   into a sequence
0500: 20 6f 66 20 69 6e 73 74 72 75 63 74 69 6f 6e 73   of instructions
0510: 20 74 6f 20 62 65 0a 2a 2a 20 65 78 65 63 75 74   to be.** execut
0520: 65 64 20 62 79 20 61 20 76 69 72 74 75 61 6c 20  ed by a virtual 
0530: 6d 61 63 68 69 6e 65 2e 20 20 45 61 63 68 20 69  machine.  Each i
0540: 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 6e  nstruction is an
0550: 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
0560: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
0570: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 74 79 70 65  ructure..*/.type
0580: 64 65 66 20 73 74 72 75 63 74 20 56 64 62 65 4f  def struct VdbeO
0590: 70 20 4f 70 3b 0a 0a 2f 2a 0a 2a 2a 20 42 6f 6f  p Op;../*.** Boo
05a0: 6c 65 61 6e 20 76 61 6c 75 65 73 0a 2a 2f 0a 74  lean values.*/.t
05b0: 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
05c0: 42 6f 6f 6c 3b 0a 0a 2f 2a 20 4f 70 61 71 75 65  Bool;../* Opaque
05d0: 20 74 79 70 65 20 75 73 65 64 20 62 79 20 63 6f   type used by co
05e0: 64 65 20 69 6e 20 76 64 62 65 73 6f 72 74 2e 63  de in vdbesort.c
05f0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75   */.typedef stru
0600: 63 74 20 56 64 62 65 53 6f 72 74 65 72 20 56 64  ct VdbeSorter Vd
0610: 62 65 53 6f 72 74 65 72 3b 0a 0a 2f 2a 20 45 6c  beSorter;../* El
0620: 65 6d 65 6e 74 73 20 6f 66 20 74 68 65 20 6c 69  ements of the li
0630: 6e 6b 65 64 20 6c 69 73 74 20 61 74 20 56 64 62  nked list at Vdb
0640: 65 2e 70 41 75 78 44 61 74 61 20 2a 2f 0a 74 79  e.pAuxData */.ty
0650: 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75 78  pedef struct Aux
0660: 44 61 74 61 20 41 75 78 44 61 74 61 3b 0a 0a 2f  Data AuxData;../
0670: 2a 20 54 79 70 65 73 20 6f 66 20 56 44 42 45 20  * Types of VDBE 
0680: 63 75 72 73 6f 72 73 20 2a 2f 0a 23 64 65 66 69  cursors */.#defi
0690: 6e 65 20 43 55 52 54 59 50 45 5f 42 54 52 45 45  ne CURTYPE_BTREE
06a0: 20 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65         0.#define
06b0: 20 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52 20   CURTYPE_SORTER 
06c0: 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 43       1.#define C
06d0: 55 52 54 59 50 45 5f 56 54 41 42 20 20 20 20 20  URTYPE_VTAB     
06e0: 20 20 20 32 0a 23 64 65 66 69 6e 65 20 43 55 52     2.#define CUR
06f0: 54 59 50 45 5f 50 53 45 55 44 4f 20 20 20 20 20  TYPE_PSEUDO     
0700: 20 33 0a 0a 2f 2a 0a 2a 2a 20 41 20 56 64 62 65   3../*.** A Vdbe
0710: 43 75 72 73 6f 72 20 69 73 20 61 6e 20 73 75 70  Cursor is an sup
0720: 65 72 63 6c 61 73 73 20 28 61 20 77 72 61 70 70  erclass (a wrapp
0730: 65 72 29 20 66 6f 72 20 76 61 72 69 6f 75 73 20  er) for various 
0740: 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 73 3a 0a  cursor objects:.
0750: 2a 2a 0a 2a 2a 20 20 20 20 20 20 2a 20 41 20 62  **.**      * A b
0760: 2d 74 72 65 65 20 63 75 72 73 6f 72 0a 2a 2a 20  -tree cursor.** 
0770: 20 20 20 20 20 20 20 20 20 2d 20 20 49 6e 20 74           -  In t
0780: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
0790: 20 6f 72 20 69 6e 20 61 6e 20 65 70 68 65 6d 65   or in an epheme
07a0: 72 61 6c 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ral database.** 
07b0: 20 20 20 20 20 20 20 20 20 2d 20 20 4f 6e 20 65           -  On e
07c0: 69 74 68 65 72 20 61 6e 20 69 6e 64 65 78 20 6f  ither an index o
07d0: 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20  r a table.**    
07e0: 20 20 2a 20 41 20 73 6f 72 74 65 72 0a 2a 2a 20    * A sorter.** 
07f0: 20 20 20 20 20 2a 20 41 20 76 69 72 74 75 61 6c       * A virtual
0800: 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 2a   table.**      *
0810: 20 41 20 6f 6e 65 2d 72 6f 77 20 22 70 73 65 75   A one-row "pseu
0820: 64 6f 74 61 62 6c 65 22 20 73 74 6f 72 65 64 20  dotable" stored 
0830: 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 65 67 69  in a single regi
0840: 73 74 65 72 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ster.*/.typedef 
0850: 73 74 72 75 63 74 20 56 64 62 65 43 75 72 73 6f  struct VdbeCurso
0860: 72 20 56 64 62 65 43 75 72 73 6f 72 3b 0a 73 74  r VdbeCursor;.st
0870: 72 75 63 74 20 56 64 62 65 43 75 72 73 6f 72 20  ruct VdbeCursor 
0880: 7b 0a 20 20 75 38 20 65 43 75 72 54 79 70 65 3b  {.  u8 eCurType;
0890: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
08a0: 20 6f 66 20 74 68 65 20 43 55 52 54 59 50 45 5f   of the CURTYPE_
08b0: 2a 20 76 61 6c 75 65 73 20 61 62 6f 76 65 20 2a  * values above *
08c0: 2f 0a 20 20 69 38 20 69 44 62 3b 20 20 20 20 20  /.  i8 iDb;     
08d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
08e0: 65 78 20 6f 66 20 63 75 72 73 6f 72 20 64 61 74  ex of cursor dat
08f0: 61 62 61 73 65 20 69 6e 20 64 62 2d 3e 61 44 62  abase in db->aDb
0900: 5b 5d 20 28 6f 72 20 2d 31 29 20 2a 2f 0a 20 20  [] (or -1) */.  
0910: 75 38 20 6e 75 6c 6c 52 6f 77 3b 20 20 20 20 20  u8 nullRow;     
0920: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
0930: 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 72   pointing to a r
0940: 6f 77 20 77 69 74 68 20 6e 6f 20 64 61 74 61 20  ow with no data 
0950: 2a 2f 0a 20 20 75 38 20 64 65 66 65 72 72 65 64  */.  u8 deferred
0960: 4d 6f 76 65 74 6f 3b 20 20 20 20 2f 2a 20 41 20  Moveto;    /* A 
0970: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 42  call to sqlite3B
0980: 74 72 65 65 4d 6f 76 65 74 6f 28 29 20 69 73 20  treeMoveto() is 
0990: 6e 65 65 64 65 64 20 2a 2f 0a 20 20 75 38 20 69  needed */.  u8 i
09a0: 73 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  sTable;         
09b0: 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 6f    /* True for ro
09c0: 77 69 64 20 74 61 62 6c 65 73 2e 20 20 46 61 6c  wid tables.  Fal
09d0: 73 65 20 66 6f 72 20 69 6e 64 65 78 65 73 20 2a  se for indexes *
09e0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
09f0: 44 45 42 55 47 0a 20 20 75 38 20 73 65 65 6b 4f  DEBUG.  u8 seekO
0a00: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  p;            /*
0a10: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65   Most recent see
0a20: 6b 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 74  k operation on t
0a30: 68 69 73 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  his cursor */.  
0a40: 75 38 20 77 72 46 6c 61 67 3b 20 20 20 20 20 20  u8 wrFlag;      
0a50: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 77 72 46        /* The wrF
0a60: 6c 61 67 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  lag argument to 
0a70: 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
0a80: 6f 72 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  or() */.#endif. 
0a90: 20 42 6f 6f 6c 20 69 73 45 70 68 65 6d 65 72 61   Bool isEphemera
0aa0: 6c 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66  l:1;   /* True f
0ab0: 6f 72 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20  or an ephemeral 
0ac0: 74 61 62 6c 65 20 2a 2f 0a 20 20 42 6f 6f 6c 20  table */.  Bool 
0ad0: 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 3a 31  useRandomRowid:1
0ae0: 3b 2f 2a 20 47 65 6e 65 72 61 74 65 20 6e 65 77  ;/* Generate new
0af0: 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20   record numbers 
0b00: 73 65 6d 69 2d 72 61 6e 64 6f 6d 6c 79 20 2a 2f  semi-randomly */
0b10: 0a 20 20 42 6f 6f 6c 20 69 73 4f 72 64 65 72 65  .  Bool isOrdere
0b20: 64 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75 65  d:1;     /* True
0b30: 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 69 73   if the table is
0b40: 20 6e 6f 74 20 42 54 52 45 45 5f 55 4e 4f 52 44   not BTREE_UNORD
0b50: 45 52 45 44 20 2a 2f 0a 20 20 50 67 6e 6f 20 70  ERED */.  Pgno p
0b60: 67 6e 6f 52 6f 6f 74 3b 20 20 20 20 20 20 20 20  gnoRoot;        
0b70: 2f 2a 20 52 6f 6f 74 20 70 61 67 65 20 6f 66 20  /* Root page of 
0b80: 74 68 65 20 6f 70 65 6e 20 62 74 72 65 65 20 63  the open btree c
0b90: 75 72 73 6f 72 20 2a 2f 0a 20 20 69 31 36 20 6e  ursor */.  i16 n
0ba0: 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20  Field;          
0bb0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69   /* Number of fi
0bc0: 65 6c 64 73 20 69 6e 20 74 68 65 20 68 65 61 64  elds in the head
0bd0: 65 72 20 2a 2f 0a 20 20 75 31 36 20 6e 48 64 72  er */.  u16 nHdr
0be0: 50 61 72 73 65 64 3b 20 20 20 20 20 20 20 2f 2a  Parsed;       /*
0bf0: 20 4e 75 6d 62 65 72 20 6f 66 20 68 65 61 64 65   Number of heade
0c00: 72 20 66 69 65 6c 64 73 20 70 61 72 73 65 64 20  r fields parsed 
0c10: 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 6e 69 6f  so far */.  unio
0c20: 6e 20 7b 0a 20 20 20 20 42 74 43 75 72 73 6f 72  n {.    BtCursor
0c30: 20 2a 70 43 75 72 73 6f 72 3b 20 20 20 20 20 20   *pCursor;      
0c40: 20 20 20 20 2f 2a 20 43 55 52 54 59 50 45 5f 42      /* CURTYPE_B
0c50: 54 52 45 45 2e 20 20 42 74 72 65 65 20 63 75 72  TREE.  Btree cur
0c60: 73 6f 72 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  sor */.    sqlit
0c70: 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a  e3_vtab_cursor *
0c80: 70 56 43 75 72 3b 20 2f 2a 20 43 55 52 54 59 50  pVCur; /* CURTYP
0c90: 45 5f 56 54 41 42 2e 20 20 20 56 74 61 62 20 63  E_VTAB.   Vtab c
0ca0: 75 72 73 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74  ursor */.    int
0cb0: 20 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3b   pseudoTableReg;
0cc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 55 52 54           /* CURT
0cd0: 59 50 45 5f 50 53 45 55 44 4f 2e 20 52 65 67 20  YPE_PSEUDO. Reg 
0ce0: 68 6f 6c 64 69 6e 67 20 63 6f 6e 74 65 6e 74 2e  holding content.
0cf0: 20 2a 2f 0a 20 20 20 20 56 64 62 65 53 6f 72 74   */.    VdbeSort
0d00: 65 72 20 2a 70 53 6f 72 74 65 72 3b 20 20 20 20  er *pSorter;    
0d10: 20 20 20 20 2f 2a 20 43 55 52 54 59 50 45 5f 53      /* CURTYPE_S
0d20: 4f 52 54 45 52 2e 20 53 6f 72 74 65 72 20 6f 62  ORTER. Sorter ob
0d30: 6a 65 63 74 20 2a 2f 0a 20 20 7d 20 75 63 3b 0a  ject */.  } uc;.
0d40: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
0d50: 20 20 20 20 20 20 20 20 2f 2a 20 53 65 70 61 72          /* Separ
0d60: 61 74 65 20 66 69 6c 65 20 68 6f 6c 64 69 6e 67  ate file holding
0d70: 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
0d80: 20 2a 2f 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70   */.  KeyInfo *p
0d90: 4b 65 79 49 6e 66 6f 3b 20 20 20 20 2f 2a 20 49  KeyInfo;    /* I
0da0: 6e 66 6f 20 61 62 6f 75 74 20 69 6e 64 65 78 20  nfo about index 
0db0: 6b 65 79 73 20 6e 65 65 64 65 64 20 62 79 20 69  keys needed by i
0dc0: 6e 64 65 78 20 63 75 72 73 6f 72 73 20 2a 2f 0a  ndex cursors */.
0dd0: 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74    int seekResult
0de0: 3b 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c  ;       /* Resul
0df0: 74 20 6f 66 20 70 72 65 76 69 6f 75 73 20 73 71  t of previous sq
0e00: 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
0e10: 28 29 20 2a 2f 0a 20 20 69 36 34 20 73 65 71 43  () */.  i64 seqC
0e20: 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  ount;         /*
0e30: 20 53 65 71 75 65 6e 63 65 20 63 6f 75 6e 74 65   Sequence counte
0e40: 72 20 2a 2f 0a 20 20 69 36 34 20 6d 6f 76 65 74  r */.  i64 movet
0e50: 6f 54 61 72 67 65 74 3b 20 20 20 20 20 2f 2a 20  oTarget;     /* 
0e60: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
0e70: 64 65 66 65 72 72 65 64 20 73 71 6c 69 74 65 33  deferred sqlite3
0e80: 42 74 72 65 65 4d 6f 76 65 74 6f 28 29 20 2a 2f  BtreeMoveto() */
0e90: 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
0ea0: 41 6c 74 43 75 72 73 6f 72 3b 20 2f 2a 20 41 73  AltCursor; /* As
0eb0: 73 6f 63 69 61 74 65 64 20 69 6e 64 65 78 20 63  sociated index c
0ec0: 75 72 73 6f 72 20 66 72 6f 6d 20 77 68 69 63 68  ursor from which
0ed0: 20 74 6f 20 72 65 61 64 20 2a 2f 0a 20 20 69 6e   to read */.  in
0ee0: 74 20 2a 61 41 6c 74 4d 61 70 3b 20 20 20 20 20  t *aAltMap;     
0ef0: 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67        /* Mapping
0f00: 20 66 72 6f 6d 20 74 61 62 6c 65 20 74 6f 20 69   from table to i
0f10: 6e 64 65 78 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62  ndex column numb
0f20: 65 72 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ers */.#ifdef SQ
0f30: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55  LITE_ENABLE_COLU
0f40: 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 0a 20 20 75  MN_USED_MASK.  u
0f50: 36 34 20 6d 61 73 6b 55 73 65 64 3b 20 20 20 20  64 maskUsed;    
0f60: 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
0f70: 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20  columns used by 
0f80: 74 68 69 73 20 63 75 72 73 6f 72 20 2a 2f 0a 23  this cursor */.#
0f90: 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 43 61 63 68  endif..  /* Cach
0fa0: 65 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ed information a
0fb0: 62 6f 75 74 20 74 68 65 20 68 65 61 64 65 72 20  bout the header 
0fc0: 66 6f 72 20 74 68 65 20 64 61 74 61 20 72 65 63  for the data rec
0fd0: 6f 72 64 20 74 68 61 74 20 74 68 65 0a 20 20 2a  ord that the.  *
0fe0: 2a 20 63 75 72 73 6f 72 20 69 73 20 63 75 72 72  * cursor is curr
0ff0: 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
1000: 6f 2e 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69  o.  Only valid i
1010: 66 20 63 61 63 68 65 53 74 61 74 75 73 20 6d 61  f cacheStatus ma
1020: 74 63 68 65 73 0a 20 20 2a 2a 20 56 64 62 65 2e  tches.  ** Vdbe.
1030: 63 61 63 68 65 43 74 72 2e 20 20 56 64 62 65 2e  cacheCtr.  Vdbe.
1040: 63 61 63 68 65 43 74 72 20 77 69 6c 6c 20 6e 65  cacheCtr will ne
1050: 76 65 72 20 74 61 6b 65 20 6f 6e 20 74 68 65 20  ver take on the 
1060: 76 61 6c 75 65 20 6f 66 0a 20 20 2a 2a 20 43 41  value of.  ** CA
1070: 43 48 45 5f 53 54 41 4c 45 20 61 6e 64 20 73 6f  CHE_STALE and so
1080: 20 73 65 74 74 69 6e 67 20 63 61 63 68 65 53 74   setting cacheSt
1090: 61 74 75 73 3d 43 41 43 48 45 5f 53 54 41 4c 45  atus=CACHE_STALE
10a0: 20 67 75 61 72 61 6e 74 65 65 73 20 74 68 61 74   guarantees that
10b0: 0a 20 20 2a 2a 20 74 68 65 20 63 61 63 68 65 20  .  ** the cache 
10c0: 69 73 20 6f 75 74 20 6f 66 20 64 61 74 65 2e 0a  is out of date..
10d0: 20 20 2a 2a 0a 20 20 2a 2a 20 61 52 6f 77 20 6d    **.  ** aRow m
10e0: 69 67 68 74 20 70 6f 69 6e 74 20 74 6f 20 28 65  ight point to (e
10f0: 70 68 65 6d 65 72 61 6c 29 20 64 61 74 61 20 66  phemeral) data f
1100: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  or the current r
1110: 6f 77 2c 20 6f 72 20 69 74 20 6d 69 67 68 74 0a  ow, or it might.
1120: 20 20 2a 2a 20 62 65 20 4e 55 4c 4c 2e 0a 20 20    ** be NULL..  
1130: 2a 2f 0a 20 20 75 33 32 20 63 61 63 68 65 53 74  */.  u32 cacheSt
1140: 61 74 75 73 3b 20 20 20 20 20 20 2f 2a 20 43 61  atus;      /* Ca
1150: 63 68 65 20 69 73 20 76 61 6c 69 64 20 69 66 20  che is valid if 
1160: 74 68 69 73 20 6d 61 74 63 68 65 73 20 56 64 62  this matches Vdb
1170: 65 2e 63 61 63 68 65 43 74 72 20 2a 2f 0a 20 20  e.cacheCtr */.  
1180: 75 33 32 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b  u32 payloadSize;
1190: 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e        /* Total n
11a0: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
11b0: 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
11c0: 20 20 75 33 32 20 73 7a 52 6f 77 3b 20 20 20 20    u32 szRow;    
11d0: 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 20          /* Byte 
11e0: 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 61 52 6f  available in aRo
11f0: 77 20 2a 2f 0a 20 20 75 33 32 20 69 48 64 72 4f  w */.  u32 iHdrO
1200: 66 66 73 65 74 3b 20 20 20 20 20 20 20 2f 2a 20  ffset;       /* 
1210: 4f 66 66 73 65 74 20 74 6f 20 6e 65 78 74 20 75  Offset to next u
1220: 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f 66 20  nparsed byte of 
1230: 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
1240: 63 6f 6e 73 74 20 75 38 20 2a 61 52 6f 77 3b 20  const u8 *aRow; 
1250: 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20 66 6f        /* Data fo
1260: 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  r the current ro
1270: 77 2c 20 69 66 20 61 6c 6c 20 6f 6e 20 6f 6e 65  w, if all on one
1280: 20 70 61 67 65 20 2a 2f 0a 20 20 75 33 32 20 2a   page */.  u32 *
1290: 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20  aOffset;        
12a0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 61   /* Pointer to a
12b0: 54 79 70 65 5b 6e 46 69 65 6c 64 5d 20 2a 2f 0a  Type[nField] */.
12c0: 20 20 75 33 32 20 61 54 79 70 65 5b 31 5d 3b 20    u32 aType[1]; 
12d0: 20 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20          /* Type 
12e0: 76 61 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20 65  values for all e
12f0: 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 72 65  ntries in the re
1300: 63 6f 72 64 20 2a 2f 0a 20 20 2f 2a 20 32 2a 6e  cord */.  /* 2*n
1310: 46 69 65 6c 64 20 65 78 74 72 61 20 61 72 72 61  Field extra arra
1320: 79 20 65 6c 65 6d 65 6e 74 73 20 61 6c 6c 6f 63  y elements alloc
1330: 61 74 65 64 20 66 6f 72 20 61 54 79 70 65 5b 5d  ated for aType[]
1340: 2c 20 62 65 79 6f 6e 64 20 74 68 65 20 6f 6e 65  , beyond the one
1350: 0a 20 20 2a 2a 20 73 74 61 74 69 63 20 65 6c 65  .  ** static ele
1360: 6d 65 6e 74 20 64 65 63 6c 61 72 65 64 20 69 6e  ment declared in
1370: 20 74 68 65 20 73 74 72 75 63 74 75 72 65 2e 20   the structure. 
1380: 20 6e 46 69 65 6c 64 20 74 6f 74 61 6c 20 61 72   nField total ar
1390: 72 61 79 20 73 6c 6f 74 73 20 66 6f 72 0a 20 20  ray slots for.  
13a0: 2a 2a 20 61 54 79 70 65 5b 5d 20 61 6e 64 20 6e  ** aType[] and n
13b0: 46 69 65 6c 64 2b 31 20 61 72 72 61 79 20 73 6c  Field+1 array sl
13c0: 6f 74 73 20 66 6f 72 20 61 4f 66 66 73 65 74 5b  ots for aOffset[
13d0: 5d 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20  ] */.};.../*.** 
13e0: 41 20 76 61 6c 75 65 20 66 6f 72 20 56 64 62 65  A value for Vdbe
13f0: 43 75 72 73 6f 72 2e 63 61 63 68 65 53 74 61 74  Cursor.cacheStat
1400: 75 73 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  us that means th
1410: 65 20 63 61 63 68 65 20 69 73 20 61 6c 77 61 79  e cache is alway
1420: 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2f 0a 23 64  s invalid..*/.#d
1430: 65 66 69 6e 65 20 43 41 43 48 45 5f 53 54 41 4c  efine CACHE_STAL
1440: 45 20 30 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20  E 0../*.** When 
1450: 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73  a sub-program is
1460: 20 65 78 65 63 75 74 65 64 20 28 4f 50 5f 50 72   executed (OP_Pr
1470: 6f 67 72 61 6d 29 2c 20 61 20 73 74 72 75 63 74  ogram), a struct
1480: 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65  ure of this type
1490: 0a 2a 2a 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  .** is allocated
14a0: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 75   to store the cu
14b0: 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74  rrent value of t
14c0: 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74  he program count
14d0: 65 72 2c 20 61 73 0a 2a 2a 20 77 65 6c 6c 20 61  er, as.** well a
14e0: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 65  s the current me
14f0: 6d 6f 72 79 20 63 65 6c 6c 20 61 72 72 61 79 20  mory cell array 
1500: 61 6e 64 20 76 61 72 69 6f 75 73 20 6f 74 68 65  and various othe
1510: 72 20 66 72 61 6d 65 20 73 70 65 63 69 66 69 63  r frame specific
1520: 0a 2a 2a 20 76 61 6c 75 65 73 20 73 74 6f 72 65  .** values store
1530: 64 20 69 6e 20 74 68 65 20 56 64 62 65 20 73 74  d in the Vdbe st
1540: 72 75 63 74 2e 20 57 68 65 6e 20 74 68 65 20 73  ruct. When the s
1550: 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 66 69  ub-program is fi
1560: 6e 69 73 68 65 64 2c 20 0a 2a 2a 20 74 68 65 73  nished, .** thes
1570: 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 70  e values are cop
1580: 69 65 64 20 62 61 63 6b 20 74 6f 20 74 68 65 20  ied back to the 
1590: 56 64 62 65 20 66 72 6f 6d 20 74 68 65 20 56 64  Vdbe from the Vd
15a0: 62 65 46 72 61 6d 65 20 73 74 72 75 63 74 75 72  beFrame structur
15b0: 65 2c 0a 2a 2a 20 72 65 73 74 6f 72 69 6e 67 20  e,.** restoring 
15c0: 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65  the state of the
15d0: 20 56 4d 20 74 6f 20 61 73 20 69 74 20 77 61 73   VM to as it was
15e0: 20 62 65 66 6f 72 65 20 74 68 65 20 73 75 62 2d   before the sub-
15f0: 70 72 6f 67 72 61 6d 0a 2a 2a 20 62 65 67 61 6e  program.** began
1600: 20 65 78 65 63 75 74 69 6e 67 2e 0a 2a 2a 0a 2a   executing..**.*
1610: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72  * The memory for
1620: 20 61 20 56 64 62 65 46 72 61 6d 65 20 6f 62 6a   a VdbeFrame obj
1630: 65 63 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ect is allocated
1640: 20 61 6e 64 20 6d 61 6e 61 67 65 64 20 62 79 20   and managed by 
1650: 61 20 6d 65 6d 6f 72 79 0a 2a 2a 20 63 65 6c 6c  a memory.** cell
1660: 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 28   in the parent (
1670: 63 61 6c 6c 69 6e 67 29 20 66 72 61 6d 65 2e 20  calling) frame. 
1680: 57 68 65 6e 20 74 68 65 20 6d 65 6d 6f 72 79 20  When the memory 
1690: 63 65 6c 6c 20 69 73 20 64 65 6c 65 74 65 64 20  cell is deleted 
16a0: 6f 72 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74 65  or.** overwritte
16b0: 6e 2c 20 74 68 65 20 56 64 62 65 46 72 61 6d 65  n, the VdbeFrame
16c0: 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f 74 20 66   object is not f
16d0: 72 65 65 64 20 69 6d 6d 65 64 69 61 74 65 6c 79  reed immediately
16e0: 2e 20 49 6e 73 74 65 61 64 2c 20 69 74 0a 2a 2a  . Instead, it.**
16f0: 20 69 73 20 6c 69 6e 6b 65 64 20 69 6e 74 6f 20   is linked into 
1700: 74 68 65 20 56 64 62 65 2e 70 44 65 6c 46 72 61  the Vdbe.pDelFra
1710: 6d 65 20 6c 69 73 74 2e 20 54 68 65 20 63 6f 6e  me list. The con
1720: 74 65 6e 74 73 20 6f 66 20 74 68 65 20 56 64 62  tents of the Vdb
1730: 65 2e 70 44 65 6c 46 72 61 6d 65 0a 2a 2a 20 6c  e.pDelFrame.** l
1740: 69 73 74 20 69 73 20 64 65 6c 65 74 65 64 20 77  ist is deleted w
1750: 68 65 6e 20 74 68 65 20 56 4d 20 69 73 20 72 65  hen the VM is re
1760: 73 65 74 20 69 6e 20 56 64 62 65 48 61 6c 74 28  set in VdbeHalt(
1770: 29 2e 20 54 68 65 20 72 65 61 73 6f 6e 20 66 6f  ). The reason fo
1780: 72 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 69 73 20  r doing.** this 
1790: 69 6e 73 74 65 61 64 20 6f 66 20 64 65 6c 65 74  instead of delet
17a0: 69 6e 67 20 74 68 65 20 56 64 62 65 46 72 61 6d  ing the VdbeFram
17b0: 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 69 73  e immediately is
17c0: 20 74 6f 20 61 76 6f 69 64 20 72 65 63 75 72 73   to avoid recurs
17d0: 69 76 65 0a 2a 2a 20 63 61 6c 6c 73 20 74 6f 20  ive.** calls to 
17e0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
17f0: 6c 65 61 73 65 28 29 20 77 68 65 6e 20 74 68 65  lease() when the
1800: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 62 65   memory cells be
1810: 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65 0a 2a  longing to the.*
1820: 2a 20 63 68 69 6c 64 20 66 72 61 6d 65 20 61 72  * child frame ar
1830: 65 20 72 65 6c 65 61 73 65 64 2e 0a 2a 2a 0a 2a  e released..**.*
1840: 2a 20 54 68 65 20 63 75 72 72 65 6e 74 6c 79 20  * The currently 
1850: 65 78 65 63 75 74 69 6e 67 20 66 72 61 6d 65 20  executing frame 
1860: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 56 64 62  is stored in Vdb
1870: 65 2e 70 46 72 61 6d 65 2e 20 56 64 62 65 2e 70  e.pFrame. Vdbe.p
1880: 46 72 61 6d 65 20 69 73 0a 2a 2a 20 73 65 74 20  Frame is.** set 
1890: 74 6f 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 63  to NULL if the c
18a0: 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69  urrently executi
18b0: 6e 67 20 66 72 61 6d 65 20 69 73 20 74 68 65 20  ng frame is the 
18c0: 6d 61 69 6e 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f  main program..*/
18d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
18e0: 56 64 62 65 46 72 61 6d 65 20 56 64 62 65 46 72  VdbeFrame VdbeFr
18f0: 61 6d 65 3b 0a 73 74 72 75 63 74 20 56 64 62 65  ame;.struct Vdbe
1900: 46 72 61 6d 65 20 7b 0a 20 20 56 64 62 65 20 2a  Frame {.  Vdbe *
1910: 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  v;              
1920: 20 20 2f 2a 20 56 4d 20 74 68 69 73 20 66 72 61    /* VM this fra
1930: 6d 65 20 62 65 6c 6f 6e 67 73 20 74 6f 20 2a 2f  me belongs to */
1940: 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 50  .  VdbeFrame *pP
1950: 61 72 65 6e 74 3b 20 20 20 20 20 2f 2a 20 50 61  arent;     /* Pa
1960: 72 65 6e 74 20 6f 66 20 74 68 69 73 20 66 72 61  rent of this fra
1970: 6d 65 2c 20 6f 72 20 4e 55 4c 4c 20 69 66 20 70  me, or NULL if p
1980: 61 72 65 6e 74 20 69 73 20 6d 61 69 6e 20 2a 2f  arent is main */
1990: 0a 20 20 4f 70 20 2a 61 4f 70 3b 20 20 20 20 20  .  Op *aOp;     
19a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72             /* Pr
19b0: 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f  ogram instructio
19c0: 6e 73 20 66 6f 72 20 70 61 72 65 6e 74 20 66 72  ns for parent fr
19d0: 61 6d 65 20 2a 2f 0a 20 20 69 36 34 20 2a 61 6e  ame */.  i64 *an
19e0: 45 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20  Exec;           
19f0: 20 2f 2a 20 45 76 65 6e 74 20 63 6f 75 6e 74 65   /* Event counte
1a00: 72 73 20 66 72 6f 6d 20 70 61 72 65 6e 74 20 66  rs from parent f
1a10: 72 61 6d 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61  rame */.  Mem *a
1a20: 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
1a30: 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 6d 65    /* Array of me
1a40: 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f 72 20 70  mory cells for p
1a50: 61 72 65 6e 74 20 66 72 61 6d 65 20 2a 2f 0a 20  arent frame */. 
1a60: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 2a 61 70   VdbeCursor **ap
1a70: 43 73 72 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  Csr;     /* Arra
1a80: 79 20 6f 66 20 56 64 62 65 20 63 75 72 73 6f 72  y of Vdbe cursor
1a90: 73 20 66 6f 72 20 70 61 72 65 6e 74 20 66 72 61  s for parent fra
1aa0: 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 6f  me */.  void *to
1ab0: 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ken;            
1ac0: 2f 2a 20 43 6f 70 79 20 6f 66 20 53 75 62 50 72  /* Copy of SubPr
1ad0: 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 2a 2f 0a 20  ogram.token */. 
1ae0: 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20   i64 lastRowid; 
1af0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
1b00: 20 69 6e 73 65 72 74 20 72 6f 77 69 64 20 28 73   insert rowid (s
1b10: 71 6c 69 74 65 33 2e 6c 61 73 74 52 6f 77 69 64  qlite3.lastRowid
1b20: 29 20 2a 2f 0a 20 20 41 75 78 44 61 74 61 20 2a  ) */.  AuxData *
1b30: 70 41 75 78 44 61 74 61 3b 20 20 20 20 20 20 2f  pAuxData;      /
1b40: 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
1b50: 20 61 75 78 64 61 74 61 20 61 6c 6c 6f 63 61 74   auxdata allocat
1b60: 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 43  ions */.  int nC
1b70: 75 72 73 6f 72 3b 20 20 20 20 20 20 20 20 20 20  ursor;          
1b80: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
1b90: 6e 74 72 69 65 73 20 69 6e 20 61 70 43 73 72 20  ntries in apCsr 
1ba0: 2a 2f 0a 20 20 69 6e 74 20 70 63 3b 20 20 20 20  */.  int pc;    
1bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1bc0: 50 72 6f 67 72 61 6d 20 43 6f 75 6e 74 65 72 20  Program Counter 
1bd0: 69 6e 20 70 61 72 65 6e 74 20 28 63 61 6c 6c 69  in parent (calli
1be0: 6e 67 29 20 66 72 61 6d 65 20 2a 2f 0a 20 20 69  ng) frame */.  i
1bf0: 6e 74 20 6e 4f 70 3b 20 20 20 20 20 20 20 20 20  nt nOp;         
1c00: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1c10: 66 20 61 4f 70 20 61 72 72 61 79 20 2a 2f 0a 20  f aOp array */. 
1c20: 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
1c30: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1c40: 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
1c50: 20 61 4d 65 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e   aMem */.  int n
1c60: 43 68 69 6c 64 4d 65 6d 3b 20 20 20 20 20 20 20  ChildMem;       
1c70: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1c80: 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f 72  memory cells for
1c90: 20 63 68 69 6c 64 20 66 72 61 6d 65 20 2a 2f 0a   child frame */.
1ca0: 20 20 69 6e 74 20 6e 43 68 69 6c 64 43 73 72 3b    int nChildCsr;
1cb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1cc0: 62 65 72 20 6f 66 20 63 75 72 73 6f 72 73 20 66  ber of cursors f
1cd0: 6f 72 20 63 68 69 6c 64 20 66 72 61 6d 65 20 2a  or child frame *
1ce0: 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  /.  int nChange;
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1d00: 74 61 74 65 6d 65 6e 74 20 63 68 61 6e 67 65 73  tatement changes
1d10: 20 28 56 64 62 65 2e 6e 43 68 61 6e 67 65 29 20   (Vdbe.nChange) 
1d20: 20 20 20 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62      */.  int nDb
1d30: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
1d40: 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 64 62 2d   /* Value of db-
1d50: 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 7d 3b 0a 0a  >nChange */.};..
1d60: 23 64 65 66 69 6e 65 20 56 64 62 65 46 72 61 6d  #define VdbeFram
1d70: 65 4d 65 6d 28 70 29 20 28 28 4d 65 6d 20 2a 29  eMem(p) ((Mem *)
1d80: 26 28 28 75 38 20 2a 29 70 29 5b 52 4f 55 4e 44  &((u8 *)p)[ROUND
1d90: 38 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61  8(sizeof(VdbeFra
1da0: 6d 65 29 29 5d 29 0a 0a 2f 2a 0a 2a 2a 20 49 6e  me))])../*.** In
1db0: 74 65 72 6e 61 6c 6c 79 2c 20 74 68 65 20 76 64  ternally, the vd
1dc0: 62 65 20 6d 61 6e 69 70 75 6c 61 74 65 73 20 6e  be manipulates n
1dd0: 65 61 72 6c 79 20 61 6c 6c 20 53 51 4c 20 76 61  early all SQL va
1de0: 6c 75 65 73 20 61 73 20 4d 65 6d 0a 2a 2a 20 73  lues as Mem.** s
1df0: 74 72 75 63 74 75 72 65 73 2e 20 45 61 63 68 20  tructures. Each 
1e00: 4d 65 6d 20 73 74 72 75 63 74 20 6d 61 79 20 63  Mem struct may c
1e10: 61 63 68 65 20 6d 75 6c 74 69 70 6c 65 20 72 65  ache multiple re
1e20: 70 72 65 73 65 6e 74 61 74 69 6f 6e 73 20 28 73  presentations (s
1e30: 74 72 69 6e 67 2c 0a 2a 2a 20 69 6e 74 65 67 65  tring,.** intege
1e40: 72 20 65 74 63 2e 29 20 6f 66 20 74 68 65 20 73  r etc.) of the s
1e50: 61 6d 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74  ame value..*/.st
1e60: 72 75 63 74 20 4d 65 6d 20 7b 0a 20 20 75 6e 69  ruct Mem {.  uni
1e70: 6f 6e 20 4d 65 6d 56 61 6c 75 65 20 7b 0a 20 20  on MemValue {.  
1e80: 20 20 64 6f 75 62 6c 65 20 72 3b 20 20 20 20 20    double r;     
1e90: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
1ea0: 6c 75 65 20 75 73 65 64 20 77 68 65 6e 20 4d 45  lue used when ME
1eb0: 4d 5f 52 65 61 6c 20 69 73 20 73 65 74 20 69 6e  M_Real is set in
1ec0: 20 66 6c 61 67 73 20 2a 2f 0a 20 20 20 20 69 36   flags */.    i6
1ed0: 34 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  4 i;            
1ee0: 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c    /* Integer val
1ef0: 75 65 20 75 73 65 64 20 77 68 65 6e 20 4d 45 4d  ue used when MEM
1f00: 5f 49 6e 74 20 69 73 20 73 65 74 20 69 6e 20 66  _Int is set in f
1f10: 6c 61 67 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20  lags */.    int 
1f20: 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20  nZero;          
1f30: 2f 2a 20 55 73 65 64 20 77 68 65 6e 20 62 69 74  /* Used when bit
1f40: 20 4d 45 4d 5f 5a 65 72 6f 20 69 73 20 73 65 74   MEM_Zero is set
1f50: 20 69 6e 20 66 6c 61 67 73 20 2a 2f 0a 20 20 20   in flags */.   
1f60: 20 46 75 6e 63 44 65 66 20 2a 70 44 65 66 3b 20   FuncDef *pDef; 
1f70: 20 20 20 20 20 2f 2a 20 55 73 65 64 20 6f 6e 6c       /* Used onl
1f80: 79 20 77 68 65 6e 20 66 6c 61 67 73 3d 3d 4d 45  y when flags==ME
1f90: 4d 5f 41 67 67 20 2a 2f 0a 20 20 20 20 52 6f 77  M_Agg */.    Row
1fa0: 53 65 74 20 2a 70 52 6f 77 53 65 74 3b 20 20 20  Set *pRowSet;   
1fb0: 20 2f 2a 20 55 73 65 64 20 6f 6e 6c 79 20 77 68   /* Used only wh
1fc0: 65 6e 20 66 6c 61 67 73 3d 3d 4d 45 4d 5f 52 6f  en flags==MEM_Ro
1fd0: 77 53 65 74 20 2a 2f 0a 20 20 20 20 56 64 62 65  wSet */.    Vdbe
1fe0: 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20  Frame *pFrame;  
1ff0: 2f 2a 20 55 73 65 64 20 77 68 65 6e 20 66 6c 61  /* Used when fla
2000: 67 73 3d 3d 4d 45 4d 5f 46 72 61 6d 65 20 2a 2f  gs==MEM_Frame */
2010: 0a 20 20 7d 20 75 3b 0a 20 20 75 31 36 20 66 6c  .  } u;.  u16 fl
2020: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ags;          /*
2030: 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f   Some combinatio
2040: 6e 20 6f 66 20 4d 45 4d 5f 4e 75 6c 6c 2c 20 4d  n of MEM_Null, M
2050: 45 4d 5f 53 74 72 2c 20 4d 45 4d 5f 44 79 6e 2c  EM_Str, MEM_Dyn,
2060: 20 65 74 63 2e 20 2a 2f 0a 20 20 75 38 20 20 65   etc. */.  u8  e
2070: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  nc;            /
2080: 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  * SQLITE_UTF8, S
2090: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2c 20 53  QLITE_UTF16BE, S
20a0: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 2a 2f  QLITE_UTF16LE */
20b0: 0a 20 20 75 38 20 20 65 53 75 62 74 79 70 65 3b  .  u8  eSubtype;
20c0: 20 20 20 20 20 20 20 2f 2a 20 53 75 62 74 79 70         /* Subtyp
20d0: 65 20 66 6f 72 20 74 68 69 73 20 76 61 6c 75 65  e for this value
20e0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20   */.  int n;    
20f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
2100: 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
2110: 73 20 69 6e 20 73 74 72 69 6e 67 20 76 61 6c 75  s in string valu
2120: 65 2c 20 65 78 63 6c 75 64 69 6e 67 20 27 5c 30  e, excluding '\0
2130: 27 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20  ' */.  char *z; 
2140: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
2150: 72 69 6e 67 20 6f 72 20 42 4c 4f 42 20 76 61 6c  ring or BLOB val
2160: 75 65 20 2a 2f 0a 20 20 2f 2a 20 53 68 61 6c 6c  ue */.  /* Shall
2170: 6f 77 43 6f 70 79 20 6f 6e 6c 79 20 6e 65 65 64  owCopy only need
2180: 73 20 74 6f 20 63 6f 70 79 20 74 68 65 20 69 6e  s to copy the in
2190: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 76 65 20  formation above 
21a0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c  */.  char *zMall
21b0: 6f 63 3b 20 20 20 20 20 20 2f 2a 20 53 70 61 63  oc;      /* Spac
21c0: 65 20 74 6f 20 68 6f 6c 64 20 4d 45 4d 5f 53 74  e to hold MEM_St
21d0: 72 20 6f 72 20 4d 45 4d 5f 42 6c 6f 62 20 69 66  r or MEM_Blob if
21e0: 20 73 7a 4d 61 6c 6c 6f 63 3e 30 20 2a 2f 0a 20   szMalloc>0 */. 
21f0: 20 69 6e 74 20 73 7a 4d 61 6c 6c 6f 63 3b 20 20   int szMalloc;  
2200: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
2210: 74 68 65 20 7a 4d 61 6c 6c 6f 63 20 61 6c 6c 6f  the zMalloc allo
2220: 63 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 33 32 20  cation */.  u32 
2230: 75 54 65 6d 70 3b 20 20 20 20 20 20 20 20 20 20  uTemp;          
2240: 2f 2a 20 54 72 61 6e 73 69 65 6e 74 20 73 74 6f  /* Transient sto
2250: 72 61 67 65 20 66 6f 72 20 73 65 72 69 61 6c 5f  rage for serial_
2260: 74 79 70 65 20 69 6e 20 4f 50 5f 4d 61 6b 65 52  type in OP_MakeR
2270: 65 63 6f 72 64 20 2a 2f 0a 20 20 73 71 6c 69 74  ecord */.  sqlit
2280: 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
2290: 2a 20 54 68 65 20 61 73 73 6f 63 69 61 74 65 64  * The associated
22a0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
22b0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tion */.  void (
22c0: 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 2f 2a  *xDel)(void*);/*
22d0: 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20   Destructor for 
22e0: 4d 65 6d 2e 7a 20 2d 20 6f 6e 6c 79 20 76 61 6c  Mem.z - only val
22f0: 69 64 20 69 66 20 4d 45 4d 5f 44 79 6e 20 2a 2f  id if MEM_Dyn */
2300: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2310: 45 42 55 47 0a 20 20 4d 65 6d 20 2a 70 53 63 6f  EBUG.  Mem *pSco
2320: 70 79 46 72 6f 6d 3b 20 20 20 20 2f 2a 20 54 68  pyFrom;    /* Th
2330: 69 73 20 4d 65 6d 20 69 73 20 61 20 73 68 61 6c  is Mem is a shal
2340: 6c 6f 77 20 63 6f 70 79 20 6f 66 20 70 53 63 6f  low copy of pSco
2350: 70 79 46 72 6f 6d 20 2a 2f 0a 20 20 76 6f 69 64  pyFrom */.  void
2360: 20 2a 70 46 69 6c 6c 65 72 3b 20 20 20 20 20 20   *pFiller;      
2370: 2f 2a 20 53 6f 20 74 68 61 74 20 73 69 7a 65 6f  /* So that sizeo
2380: 66 28 4d 65 6d 29 20 69 73 20 61 20 6d 75 6c 74  f(Mem) is a mult
2390: 69 70 6c 65 20 6f 66 20 38 20 2a 2f 0a 23 65 6e  iple of 8 */.#en
23a0: 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69  dif.};../*.** Si
23b0: 7a 65 20 6f 66 20 73 74 72 75 63 74 20 4d 65 6d  ze of struct Mem
23c0: 20 6e 6f 74 20 69 6e 63 6c 75 64 69 6e 67 20 74   not including t
23d0: 68 65 20 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 6d  he Mem.zMalloc m
23e0: 65 6d 62 65 72 20 6f 72 20 61 6e 79 74 68 69 6e  ember or anythin
23f0: 67 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77  g that.** follow
2400: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  s..*/.#define ME
2410: 4d 43 45 4c 4c 53 49 5a 45 20 6f 66 66 73 65 74  MCELLSIZE offset
2420: 6f 66 28 4d 65 6d 2c 7a 4d 61 6c 6c 6f 63 29 0a  of(Mem,zMalloc).
2430: 0a 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20  ./* One or more 
2440: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
2450: 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 74   flags are set t
2460: 6f 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 76  o indicate the v
2470: 61 6c 69 64 4f 4b 0a 2a 2a 20 72 65 70 72 65 73  alidOK.** repres
2480: 65 6e 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65  entations of the
2490: 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e   value stored in
24a0: 20 74 68 65 20 4d 65 6d 20 73 74 72 75 63 74 2e   the Mem struct.
24b0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4d 45  .**.** If the ME
24c0: 4d 5f 4e 75 6c 6c 20 66 6c 61 67 20 69 73 20 73  M_Null flag is s
24d0: 65 74 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  et, then the val
24e0: 75 65 20 69 73 20 61 6e 20 53 51 4c 20 4e 55 4c  ue is an SQL NUL
24f0: 4c 20 76 61 6c 75 65 2e 0a 2a 2a 20 4e 6f 20 6f  L value..** No o
2500: 74 68 65 72 20 66 6c 61 67 73 20 6d 61 79 20 62  ther flags may b
2510: 65 20 73 65 74 20 69 6e 20 74 68 69 73 20 63 61  e set in this ca
2520: 73 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  se..**.** If the
2530: 20 4d 45 4d 5f 53 74 72 20 66 6c 61 67 20 69 73   MEM_Str flag is
2540: 20 73 65 74 20 74 68 65 6e 20 4d 65 6d 2e 7a 20   set then Mem.z 
2550: 70 6f 69 6e 74 73 20 61 74 20 61 20 73 74 72 69  points at a stri
2560: 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ng representatio
2570: 6e 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 74 68  n..** Usually th
2580: 69 73 20 69 73 20 65 6e 63 6f 64 65 64 20 69 6e  is is encoded in
2590: 20 74 68 65 20 73 61 6d 65 20 75 6e 69 63 6f 64   the same unicod
25a0: 65 20 65 6e 63 6f 64 69 6e 67 20 61 73 20 74 68  e encoding as th
25b0: 65 20 6d 61 69 6e 0a 2a 2a 20 64 61 74 61 62 61  e main.** databa
25c0: 73 65 20 28 73 65 65 20 62 65 6c 6f 77 20 66 6f  se (see below fo
25d0: 72 20 65 78 63 65 70 74 69 6f 6e 73 29 2e 20 49  r exceptions). I
25e0: 66 20 74 68 65 20 4d 45 4d 5f 54 65 72 6d 20 66  f the MEM_Term f
25f0: 6c 61 67 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 73  lag is also.** s
2600: 65 74 2c 20 74 68 65 6e 20 74 68 65 20 73 74 72  et, then the str
2610: 69 6e 67 20 69 73 20 6e 75 6c 20 74 65 72 6d 69  ing is nul termi
2620: 6e 61 74 65 64 2e 20 54 68 65 20 4d 45 4d 5f 49  nated. The MEM_I
2630: 6e 74 20 61 6e 64 20 4d 45 4d 5f 52 65 61 6c 20  nt and MEM_Real 
2640: 0a 2a 2a 20 66 6c 61 67 73 20 6d 61 79 20 63 6f  .** flags may co
2650: 65 78 69 73 74 20 77 69 74 68 20 74 68 65 20 4d  exist with the M
2660: 45 4d 5f 53 74 72 20 66 6c 61 67 2e 0a 2a 2f 0a  EM_Str flag..*/.
2670: 23 64 65 66 69 6e 65 20 4d 45 4d 5f 4e 75 6c 6c  #define MEM_Null
2680: 20 20 20 20 20 20 30 78 30 30 30 31 20 20 20 2f        0x0001   /
2690: 2a 20 56 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20  * Value is NULL 
26a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f 53  */.#define MEM_S
26b0: 74 72 20 20 20 20 20 20 20 30 78 30 30 30 32 20  tr       0x0002 
26c0: 20 20 2f 2a 20 56 61 6c 75 65 20 69 73 20 61 20    /* Value is a 
26d0: 73 74 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  string */.#defin
26e0: 65 20 4d 45 4d 5f 49 6e 74 20 20 20 20 20 20 20  e MEM_Int       
26f0: 30 78 30 30 30 34 20 20 20 2f 2a 20 56 61 6c 75  0x0004   /* Valu
2700: 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  e is an integer 
2710: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f 52  */.#define MEM_R
2720: 65 61 6c 20 20 20 20 20 20 30 78 30 30 30 38 20  eal      0x0008 
2730: 20 20 2f 2a 20 56 61 6c 75 65 20 69 73 20 61 20    /* Value is a 
2740: 72 65 61 6c 20 6e 75 6d 62 65 72 20 2a 2f 0a 23  real number */.#
2750: 64 65 66 69 6e 65 20 4d 45 4d 5f 42 6c 6f 62 20  define MEM_Blob 
2760: 20 20 20 20 20 30 78 30 30 31 30 20 20 20 2f 2a       0x0010   /*
2770: 20 56 61 6c 75 65 20 69 73 20 61 20 42 4c 4f 42   Value is a BLOB
2780: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f   */.#define MEM_
2790: 41 66 66 4d 61 73 6b 20 20 20 30 78 30 30 31 66  AffMask   0x001f
27a0: 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 61 66     /* Mask of af
27b0: 66 69 6e 69 74 79 20 62 69 74 73 20 2a 2f 0a 23  finity bits */.#
27c0: 64 65 66 69 6e 65 20 4d 45 4d 5f 52 6f 77 53 65  define MEM_RowSe
27d0: 74 20 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a  t    0x0020   /*
27e0: 20 56 61 6c 75 65 20 69 73 20 61 20 52 6f 77 53   Value is a RowS
27f0: 65 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 23 64 65  et object */.#de
2800: 66 69 6e 65 20 4d 45 4d 5f 46 72 61 6d 65 20 20  fine MEM_Frame  
2810: 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a 20 56     0x0040   /* V
2820: 61 6c 75 65 20 69 73 20 61 20 56 64 62 65 46 72  alue is a VdbeFr
2830: 61 6d 65 20 6f 62 6a 65 63 74 20 2a 2f 0a 23 64  ame object */.#d
2840: 65 66 69 6e 65 20 4d 45 4d 5f 55 6e 64 65 66 69  efine MEM_Undefi
2850: 6e 65 64 20 30 78 30 30 38 30 20 20 20 2f 2a 20  ned 0x0080   /* 
2860: 56 61 6c 75 65 20 69 73 20 75 6e 64 65 66 69 6e  Value is undefin
2870: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ed */.#define ME
2880: 4d 5f 43 6c 65 61 72 65 64 20 20 20 30 78 30 31  M_Cleared   0x01
2890: 30 30 20 20 20 2f 2a 20 4e 55 4c 4c 20 73 65 74  00   /* NULL set
28a0: 20 62 79 20 4f 50 5f 4e 75 6c 6c 2c 20 6e 6f 74   by OP_Null, not
28b0: 20 66 72 6f 6d 20 64 61 74 61 20 2a 2f 0a 23 64   from data */.#d
28c0: 65 66 69 6e 65 20 4d 45 4d 5f 54 79 70 65 4d 61  efine MEM_TypeMa
28d0: 73 6b 20 20 30 78 38 31 66 66 20 20 20 2f 2a 20  sk  0x81ff   /* 
28e0: 4d 61 73 6b 20 6f 66 20 74 79 70 65 20 62 69 74  Mask of type bit
28f0: 73 20 2a 2f 0a 0a 0a 2f 2a 20 57 68 65 6e 65 76  s */.../* Whenev
2900: 65 72 20 4d 65 6d 20 63 6f 6e 74 61 69 6e 73 20  er Mem contains 
2910: 61 20 76 61 6c 69 64 20 73 74 72 69 6e 67 20 6f  a valid string o
2920: 72 20 62 6c 6f 62 20 72 65 70 72 65 73 65 6e 74  r blob represent
2930: 61 74 69 6f 6e 2c 20 6f 6e 65 20 6f 66 0a 2a 2a  ation, one of.**
2940: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66   the following f
2950: 6c 61 67 73 20 6d 75 73 74 20 62 65 20 73 65 74  lags must be set
2960: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
2970: 65 20 6d 65 6d 6f 72 79 20 6d 61 6e 61 67 65 6d  e memory managem
2980: 65 6e 74 0a 2a 2a 20 70 6f 6c 69 63 79 20 66 6f  ent.** policy fo
2990: 72 20 4d 65 6d 2e 7a 2e 20 20 54 68 65 20 4d 45  r Mem.z.  The ME
29a0: 4d 5f 54 65 72 6d 20 66 6c 61 67 20 74 65 6c 6c  M_Term flag tell
29b0: 73 20 75 73 20 77 68 65 74 68 65 72 20 6f 72 20  s us whether or 
29c0: 6e 6f 74 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e  not the.** strin
29d0: 67 20 69 73 20 5c 30 30 30 20 6f 72 20 5c 75 30  g is \000 or \u0
29e0: 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 2a  000 terminated.*
29f0: 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f 54 65  /.#define MEM_Te
2a00: 72 6d 20 20 20 20 20 20 30 78 30 32 30 30 20 20  rm      0x0200  
2a10: 20 2f 2a 20 53 74 72 69 6e 67 20 72 65 70 20 69   /* String rep i
2a20: 73 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64  s nul terminated
2a30: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f   */.#define MEM_
2a40: 44 79 6e 20 20 20 20 20 20 20 30 78 30 34 30 30  Dyn       0x0400
2a50: 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 63 61     /* Need to ca
2a60: 6c 6c 20 4d 65 6d 2e 78 44 65 6c 28 29 20 6f 6e  ll Mem.xDel() on
2a70: 20 4d 65 6d 2e 7a 20 2a 2f 0a 23 64 65 66 69 6e   Mem.z */.#defin
2a80: 65 20 4d 45 4d 5f 53 74 61 74 69 63 20 20 20 20  e MEM_Static    
2a90: 30 78 30 38 30 30 20 20 20 2f 2a 20 4d 65 6d 2e  0x0800   /* Mem.
2aa0: 7a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 73 74  z points to a st
2ab0: 61 74 69 63 20 73 74 72 69 6e 67 20 2a 2f 0a 23  atic string */.#
2ac0: 64 65 66 69 6e 65 20 4d 45 4d 5f 45 70 68 65 6d  define MEM_Ephem
2ad0: 20 20 20 20 20 30 78 31 30 30 30 20 20 20 2f 2a       0x1000   /*
2ae0: 20 4d 65 6d 2e 7a 20 70 6f 69 6e 74 73 20 74 6f   Mem.z points to
2af0: 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74   an ephemeral st
2b00: 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ring */.#define 
2b10: 4d 45 4d 5f 41 67 67 20 20 20 20 20 20 20 30 78  MEM_Agg       0x
2b20: 32 30 30 30 20 20 20 2f 2a 20 4d 65 6d 2e 7a 20  2000   /* Mem.z 
2b30: 70 6f 69 6e 74 73 20 74 6f 20 61 6e 20 61 67 67  points to an agg
2b40: 20 66 75 6e 63 74 69 6f 6e 20 63 6f 6e 74 65 78   function contex
2b50: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  t */.#define MEM
2b60: 5f 5a 65 72 6f 20 20 20 20 20 20 30 78 34 30 30  _Zero      0x400
2b70: 30 20 20 20 2f 2a 20 4d 65 6d 2e 69 20 63 6f 6e  0   /* Mem.i con
2b80: 74 61 69 6e 73 20 63 6f 75 6e 74 20 6f 66 20 30  tains count of 0
2b90: 73 20 61 70 70 65 6e 64 65 64 20 74 6f 20 62 6c  s appended to bl
2ba0: 6f 62 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ob */.#define ME
2bb0: 4d 5f 53 75 62 74 79 70 65 20 20 20 30 78 38 30  M_Subtype   0x80
2bc0: 30 30 20 20 20 2f 2a 20 4d 65 6d 2e 65 53 75 62  00   /* Mem.eSub
2bd0: 74 79 70 65 20 69 73 20 76 61 6c 69 64 20 2a 2f  type is valid */
2be0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
2bf0: 4d 49 54 5f 49 4e 43 52 42 4c 4f 42 0a 20 20 23  MIT_INCRBLOB.  #
2c00: 75 6e 64 65 66 20 4d 45 4d 5f 5a 65 72 6f 0a 20  undef MEM_Zero. 
2c10: 20 23 64 65 66 69 6e 65 20 4d 45 4d 5f 5a 65 72   #define MEM_Zer
2c20: 6f 20 30 78 30 30 30 30 0a 23 65 6e 64 69 66 0a  o 0x0000.#endif.
2c30: 0a 2f 2a 20 52 65 74 75 72 6e 20 54 52 55 45 20  ./* Return TRUE 
2c40: 69 66 20 4d 65 6d 20 58 20 63 6f 6e 74 61 69 6e  if Mem X contain
2c50: 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  s dynamically al
2c60: 6c 6f 63 61 74 65 64 20 63 6f 6e 74 65 6e 74 20  located content 
2c70: 2d 20 61 6e 79 74 68 69 6e 67 0a 2a 2a 20 74 68  - anything.** th
2c80: 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64  at needs to be d
2c90: 65 61 6c 6c 6f 63 61 74 65 64 20 74 6f 20 61 76  eallocated to av
2ca0: 6f 69 64 20 61 20 6c 65 61 6b 2e 0a 2a 2f 0a 23  oid a leak..*/.#
2cb0: 64 65 66 69 6e 65 20 56 64 62 65 4d 65 6d 44 79  define VdbeMemDy
2cc0: 6e 61 6d 69 63 28 58 29 20 20 5c 0a 20 20 28 28  namic(X)  \.  ((
2cd0: 28 58 29 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f  (X)->flags&(MEM_
2ce0: 41 67 67 7c 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f  Agg|MEM_Dyn|MEM_
2cf0: 52 6f 77 53 65 74 7c 4d 45 4d 5f 46 72 61 6d 65  RowSet|MEM_Frame
2d00: 29 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6c  ))!=0)../*.** Cl
2d10: 65 61 72 20 61 6e 79 20 65 78 69 73 74 69 6e 67  ear any existing
2d20: 20 74 79 70 65 20 66 6c 61 67 73 20 66 72 6f 6d   type flags from
2d30: 20 61 20 4d 65 6d 20 61 6e 64 20 72 65 70 6c 61   a Mem and repla
2d40: 63 65 20 74 68 65 6d 20 77 69 74 68 20 66 0a 2a  ce them with f.*
2d50: 2f 0a 23 64 65 66 69 6e 65 20 4d 65 6d 53 65 74  /.#define MemSet
2d60: 54 79 70 65 46 6c 61 67 28 70 2c 20 66 29 20 5c  TypeFlag(p, f) \
2d70: 0a 20 20 20 28 28 70 29 2d 3e 66 6c 61 67 73 20  .   ((p)->flags 
2d80: 3d 20 28 28 70 29 2d 3e 66 6c 61 67 73 26 7e 28  = ((p)->flags&~(
2d90: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 7c 4d 45 4d  MEM_TypeMask|MEM
2da0: 5f 5a 65 72 6f 29 29 7c 66 29 0a 0a 2f 2a 0a 2a  _Zero))|f)../*.*
2db0: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
2dc0: 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69   a memory cell i
2dd0: 73 20 6e 6f 74 20 6d 61 72 6b 65 64 20 61 73 20  s not marked as 
2de0: 69 6e 76 61 6c 69 64 2e 20 20 54 68 69 73 20 6d  invalid.  This m
2df0: 61 63 72 6f 0a 2a 2a 20 69 73 20 66 6f 72 20 75  acro.** is for u
2e00: 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74  se inside assert
2e10: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e  () statements on
2e20: 6c 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ly..*/.#ifdef SQ
2e30: 4c 49 54 45 5f 44 45 42 55 47 0a 23 64 65 66 69  LITE_DEBUG.#defi
2e40: 6e 65 20 6d 65 6d 49 73 56 61 6c 69 64 28 4d 29  ne memIsValid(M)
2e50: 20 20 28 28 4d 29 2d 3e 66 6c 61 67 73 20 26 20    ((M)->flags & 
2e60: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 29 3d 3d  MEM_Undefined)==
2e70: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
2e80: 45 61 63 68 20 61 75 78 69 6c 69 61 72 79 20 64  Each auxiliary d
2e90: 61 74 61 20 70 6f 69 6e 74 65 72 20 73 74 6f 72  ata pointer stor
2ea0: 65 64 20 62 79 20 61 20 75 73 65 72 20 64 65 66  ed by a user def
2eb0: 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 0a 2a  ined function .*
2ec0: 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * implementation
2ed0: 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33   calling sqlite3
2ee0: 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 69  _set_auxdata() i
2ef0: 73 20 73 74 6f 72 65 64 20 69 6e 20 61 6e 20 69  s stored in an i
2f00: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
2f10: 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 41 6c  is structure. Al
2f20: 6c 20 73 75 63 68 20 73 74 72 75 63 74 75 72 65  l such structure
2f30: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
2f40: 68 20 61 20 73 69 6e 67 6c 65 20 56 4d 0a 2a 2a  h a single VM.**
2f50: 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
2f60: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
2f70: 64 65 64 20 61 74 20 56 64 62 65 2e 70 41 75 78  ded at Vdbe.pAux
2f80: 44 61 74 61 2e 20 41 6c 6c 20 61 72 65 20 64 65  Data. All are de
2f90: 73 74 72 6f 79 65 64 0a 2a 2a 20 77 68 65 6e 20  stroyed.** when 
2fa0: 74 68 65 20 56 4d 20 69 73 20 68 61 6c 74 65 64  the VM is halted
2fb0: 20 28 69 66 20 6e 6f 74 20 62 65 66 6f 72 65 29   (if not before)
2fc0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 78 44  ..*/.struct AuxD
2fd0: 61 74 61 20 7b 0a 20 20 69 6e 74 20 69 4f 70 3b  ata {.  int iOp;
2fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff0: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72          /* Instr
3000: 75 63 74 69 6f 6e 20 6e 75 6d 62 65 72 20 6f 66  uction number of
3010: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 6f 70 63   OP_Function opc
3020: 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 69 41 72  ode */.  int iAr
3030: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
3040: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
3050: 78 20 6f 66 20 66 75 6e 63 74 69 6f 6e 20 61 72  x of function ar
3060: 67 75 6d 65 6e 74 2e 20 2a 2f 0a 20 20 76 6f 69  gument. */.  voi
3070: 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20  d *pAux;        
3080: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3090: 41 75 78 20 64 61 74 61 20 70 6f 69 6e 74 65 72  Aux data pointer
30a0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65   */.  void (*xDe
30b0: 6c 65 74 65 29 28 76 6f 69 64 20 2a 29 3b 20 20  lete)(void *);  
30c0: 20 20 20 20 20 20 2f 2a 20 44 65 73 74 72 75 63        /* Destruc
30d0: 74 6f 72 20 66 6f 72 20 74 68 65 20 61 75 78 20  tor for the aux 
30e0: 64 61 74 61 20 2a 2f 0a 20 20 41 75 78 44 61 74  data */.  AuxDat
30f0: 61 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  a *pNext;       
3100: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78            /* Nex
3110: 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 73  t element in lis
3120: 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  t */.};../*.** T
3130: 68 65 20 22 63 6f 6e 74 65 78 74 22 20 61 72 67  he "context" arg
3140: 75 6d 65 6e 74 20 66 6f 72 20 61 6e 20 69 6e 73  ument for an ins
3150: 74 61 6c 6c 61 62 6c 65 20 66 75 6e 63 74 69 6f  tallable functio
3160: 6e 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  n.  A pointer to
3170: 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
3180: 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
3190: 65 20 69 73 20 74 68 65 20 66 69 72 73 74 20 61  e is the first a
31a0: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 72  rgument to the r
31b0: 6f 75 74 69 6e 65 73 20 75 73 65 64 0a 2a 2a 20  outines used.** 
31c0: 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 53 51  implement the SQ
31d0: 4c 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  L functions..**.
31e0: 2a 2a 20 54 68 65 72 65 20 69 73 20 61 20 74 79  ** There is a ty
31f0: 70 65 64 65 66 20 66 6f 72 20 74 68 69 73 20 73  pedef for this s
3200: 74 72 75 63 74 75 72 65 20 69 6e 20 73 71 6c 69  tructure in sqli
3210: 74 65 2e 68 2e 20 20 53 6f 20 61 6c 6c 20 72 6f  te.h.  So all ro
3220: 75 74 69 6e 65 73 2c 0a 2a 2a 20 65 76 65 6e 20  utines,.** even 
3230: 74 68 65 20 70 75 62 6c 69 63 20 69 6e 74 65 72  the public inter
3240: 66 61 63 65 20 74 6f 20 53 51 4c 69 74 65 2c 20  face to SQLite, 
3250: 63 61 6e 20 75 73 65 20 61 20 70 6f 69 6e 74 65  can use a pointe
3260: 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
3270: 75 72 65 2e 0a 2a 2a 20 42 75 74 20 74 68 69 73  ure..** But this
3280: 20 66 69 6c 65 20 69 73 20 74 68 65 20 6f 6e 6c   file is the onl
3290: 79 20 70 6c 61 63 65 20 77 68 65 72 65 20 74 68  y place where th
32a0: 65 20 69 6e 74 65 72 6e 61 6c 20 64 65 74 61 69  e internal detai
32b0: 6c 73 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74  ls of this.** st
32c0: 72 75 63 74 75 72 65 20 61 72 65 20 6b 6e 6f 77  ructure are know
32d0: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74  n..**.** This st
32e0: 72 75 63 74 75 72 65 20 69 73 20 64 65 66 69 6e  ructure is defin
32f0: 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 64 62  ed inside of vdb
3300: 65 49 6e 74 2e 68 20 62 65 63 61 75 73 65 20 69  eInt.h because i
3310: 74 20 75 73 65 73 20 73 75 62 73 74 72 75 63 74  t uses substruct
3320: 75 72 65 73 0a 2a 2a 20 28 4d 65 6d 29 20 77 68  ures.** (Mem) wh
3330: 69 63 68 20 61 72 65 20 6f 6e 6c 79 20 64 65 66  ich are only def
3340: 69 6e 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 73  ined there..*/.s
3350: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 63 6f  truct sqlite3_co
3360: 6e 74 65 78 74 20 7b 0a 20 20 4d 65 6d 20 2a 70  ntext {.  Mem *p
3370: 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Out;            
3380: 20 20 2f 2a 20 54 68 65 20 72 65 74 75 72 6e 20    /* The return 
3390: 76 61 6c 75 65 20 69 73 20 73 74 6f 72 65 64 20  value is stored 
33a0: 68 65 72 65 20 2a 2f 0a 20 20 46 75 6e 63 44 65  here */.  FuncDe
33b0: 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20  f *pFunc;       
33c0: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
33d0: 66 75 6e 63 74 69 6f 6e 20 69 6e 66 6f 72 6d 61  function informa
33e0: 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  tion */.  Mem *p
33f0: 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
3400: 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c    /* Memory cell
3410: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61   used to store a
3420: 67 67 72 65 67 61 74 65 20 63 6f 6e 74 65 78 74  ggregate context
3430: 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62   */.  Vdbe *pVdb
3440: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
3450: 20 54 68 65 20 56 4d 20 74 68 61 74 20 6f 77 6e   The VM that own
3460: 73 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a  s this context *
3470: 2f 0a 20 20 69 6e 74 20 69 4f 70 3b 20 20 20 20  /.  int iOp;    
3480: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
3490: 6e 73 74 72 75 63 74 69 6f 6e 20 6e 75 6d 62 65  nstruction numbe
34a0: 72 20 6f 66 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  r of OP_Function
34b0: 20 2a 2f 0a 20 20 69 6e 74 20 69 73 45 72 72 6f   */.  int isErro
34c0: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
34d0: 20 45 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75   Error code retu
34e0: 72 6e 65 64 20 62 79 20 74 68 65 20 66 75 6e 63  rned by the func
34f0: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 38 20 73 6b  tion. */.  u8 sk
3500: 69 70 46 6c 61 67 3b 20 20 20 20 20 20 20 20 20  ipFlag;         
3510: 20 20 20 2f 2a 20 53 6b 69 70 20 61 63 63 75 6d     /* Skip accum
3520: 75 6c 61 74 6f 72 20 6c 6f 61 64 69 6e 67 20 69  ulator loading i
3530: 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 66  f true */.  u8 f
3540: 45 72 72 6f 72 4f 72 41 75 78 3b 20 20 20 20 20  ErrorOrAux;     
3550: 20 20 20 20 2f 2a 20 69 73 45 72 72 6f 72 21 3d      /* isError!=
3560: 30 20 6f 72 20 70 56 64 62 65 2d 3e 70 41 75 78  0 or pVdbe->pAux
3570: 44 61 74 61 20 6d 6f 64 69 66 69 65 64 20 2a 2f  Data modified */
3580: 0a 20 20 75 38 20 61 72 67 63 3b 20 20 20 20 20  .  u8 argc;     
3590: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
35a0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
35b0: 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  s */.  sqlite3_v
35c0: 61 6c 75 65 20 2a 61 72 67 76 5b 31 5d 3b 20 2f  alue *argv[1]; /
35d0: 2a 20 41 72 67 75 6d 65 6e 74 20 73 65 74 20 2a  * Argument set *
35e0: 2f 0a 7d 3b 0a 0a 2f 2a 20 41 20 62 69 74 66 69  /.};../* A bitfi
35f0: 65 6c 64 20 74 79 70 65 20 66 6f 72 20 75 73 65  eld type for use
3600: 20 69 6e 73 69 64 65 20 6f 66 20 73 74 72 75 63   inside of struc
3610: 74 75 72 65 73 2e 20 20 41 6c 77 61 79 73 20 66  tures.  Always f
3620: 6f 6c 6c 6f 77 20 77 69 74 68 20 3a 4e 20 77 68  ollow with :N wh
3630: 65 72 65 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20  ere.** N is the 
3640: 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 2e 0a  number of bits..
3650: 2a 2f 0a 74 79 70 65 64 65 66 20 75 6e 73 69 67  */.typedef unsig
3660: 6e 65 64 20 62 66 74 3b 20 20 2f 2a 20 42 69 74  ned bft;  /* Bit
3670: 20 46 69 65 6c 64 20 54 79 70 65 20 2a 2f 0a 0a   Field Type */..
3680: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
3690: 63 61 6e 53 74 61 74 75 73 20 53 63 61 6e 53 74  canStatus ScanSt
36a0: 61 74 75 73 3b 0a 73 74 72 75 63 74 20 53 63 61  atus;.struct Sca
36b0: 6e 53 74 61 74 75 73 20 7b 0a 20 20 69 6e 74 20  nStatus {.  int 
36c0: 61 64 64 72 45 78 70 6c 61 69 6e 3b 20 20 20 20  addrExplain;    
36d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
36e0: 50 5f 45 78 70 6c 61 69 6e 20 66 6f 72 20 6c 6f  P_Explain for lo
36f0: 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  op */.  int addr
3700: 4c 6f 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  Loop;           
3710: 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65          /* Addre
3720: 73 73 20 6f 66 20 22 6c 6f 6f 70 73 22 20 63 6f  ss of "loops" co
3730: 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61  unter */.  int a
3740: 64 64 72 56 69 73 69 74 3b 20 20 20 20 20 20 20  ddrVisit;       
3750: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 64             /* Ad
3760: 64 72 65 73 73 20 6f 66 20 22 72 6f 77 73 20 76  dress of "rows v
3770: 69 73 69 74 65 64 22 20 63 6f 75 6e 74 65 72 20  isited" counter 
3780: 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74  */.  int iSelect
3790: 49 44 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ID;             
37a0: 20 20 20 20 20 2f 2a 20 54 68 65 20 22 53 65 6c       /* The "Sel
37b0: 65 63 74 2d 49 44 22 20 66 6f 72 20 74 68 69 73  ect-ID" for this
37c0: 20 6c 6f 6f 70 20 2a 2f 0a 20 20 4c 6f 67 45 73   loop */.  LogEs
37d0: 74 20 6e 45 73 74 3b 20 20 20 20 20 20 20 20 20  t nEst;         
37e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73             /* Es
37f0: 74 69 6d 61 74 65 64 20 6f 75 74 70 75 74 20 72  timated output r
3800: 6f 77 73 20 70 65 72 20 6c 6f 6f 70 20 2a 2f 0a  ows per loop */.
3810: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
3820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3830: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62    /* Name of tab
3840: 6c 65 20 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 7d  le or index */.}
3850: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
3860: 61 6e 63 65 20 6f 66 20 74 68 65 20 76 69 72 74  ance of the virt
3870: 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 54 68  ual machine.  Th
3880: 69 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  is structure con
3890: 74 61 69 6e 73 20 74 68 65 20 63 6f 6d 70 6c 65  tains the comple
38a0: 74 65 0a 2a 2a 20 73 74 61 74 65 20 6f 66 20 74  te.** state of t
38b0: 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  he virtual machi
38c0: 6e 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 73  ne..**.** The "s
38d0: 71 6c 69 74 65 33 5f 73 74 6d 74 22 20 73 74 72  qlite3_stmt" str
38e0: 75 63 74 75 72 65 20 70 6f 69 6e 74 65 72 20 74  ucture pointer t
38f0: 68 61 74 20 69 73 20 72 65 74 75 72 6e 65 64 20  hat is returned 
3900: 62 79 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  by sqlite3_prepa
3910: 72 65 28 29 0a 2a 2a 20 69 73 20 72 65 61 6c 6c  re().** is reall
3920: 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  y a pointer to a
3930: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
3940: 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  is structure..*/
3950: 0a 73 74 72 75 63 74 20 56 64 62 65 20 7b 0a 20  .struct Vdbe {. 
3960: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
3970: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
3980: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
3990: 69 6f 6e 20 74 68 61 74 20 6f 77 6e 73 20 74 68  ion that owns th
39a0: 69 73 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  is statement */.
39b0: 20 20 56 64 62 65 20 2a 70 50 72 65 76 2c 2a 70    Vdbe *pPrev,*p
39c0: 4e 65 78 74 3b 20 20 20 20 20 2f 2a 20 4c 69 6e  Next;     /* Lin
39d0: 6b 65 64 20 6c 69 73 74 20 6f 66 20 56 44 42 45  ked list of VDBE
39e0: 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  s with the same 
39f0: 56 64 62 65 2e 64 62 20 2a 2f 0a 20 20 50 61 72  Vdbe.db */.  Par
3a00: 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
3a10: 20 20 20 20 20 2f 2a 20 50 61 72 73 69 6e 67 20       /* Parsing 
3a20: 63 6f 6e 74 65 78 74 20 75 73 65 64 20 74 6f 20  context used to 
3a30: 63 72 65 61 74 65 20 74 68 69 73 20 56 64 62 65  create this Vdbe
3a40: 20 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56 61 72   */.  ynVar nVar
3a50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
3a60: 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
3a70: 65 73 20 69 6e 20 61 56 61 72 5b 5d 20 2a 2f 0a  es in aVar[] */.
3a80: 20 20 79 6e 56 61 72 20 6e 7a 56 61 72 3b 20 20    ynVar nzVar;  
3a90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
3aa0: 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
3ab0: 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75  n azVar[] */.  u
3ac0: 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20  32 magic;       
3ad0: 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20         /* Magic 
3ae0: 6e 75 6d 62 65 72 20 66 6f 72 20 73 61 6e 69 74  number for sanit
3af0: 79 20 63 68 65 63 6b 69 6e 67 20 2a 2f 0a 20 20  y checking */.  
3b00: 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20  int nMem;       
3b10: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
3b20: 72 20 6f 66 20 6d 65 6d 6f 72 79 20 6c 6f 63 61  r of memory loca
3b30: 74 69 6f 6e 73 20 63 75 72 72 65 6e 74 6c 79 20  tions currently 
3b40: 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 69  allocated */.  i
3b50: 6e 74 20 6e 43 75 72 73 6f 72 3b 20 20 20 20 20  nt nCursor;     
3b60: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
3b70: 20 6f 66 20 73 6c 6f 74 73 20 69 6e 20 61 70 43   of slots in apC
3b80: 73 72 5b 5d 20 2a 2f 0a 20 20 75 33 32 20 63 61  sr[] */.  u32 ca
3b90: 63 68 65 43 74 72 3b 20 20 20 20 20 20 20 20 20  cheCtr;         
3ba0: 20 20 2f 2a 20 56 64 62 65 43 75 72 73 6f 72 20    /* VdbeCursor 
3bb0: 72 6f 77 20 63 61 63 68 65 20 67 65 6e 65 72 61  row cache genera
3bc0: 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  tion counter */.
3bd0: 20 20 69 6e 74 20 70 63 3b 20 20 20 20 20 20 20    int pc;       
3be0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
3bf0: 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72   program counter
3c00: 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
3c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3c20: 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
3c30: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67   */.  int nChang
3c40: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
3c50: 20 4e 75 6d 62 65 72 20 6f 66 20 64 62 20 63 68   Number of db ch
3c60: 61 6e 67 65 73 20 6d 61 64 65 20 73 69 6e 63 65  anges made since
3c70: 20 6c 61 73 74 20 72 65 73 65 74 20 2a 2f 0a 20   last reset */. 
3c80: 20 69 6e 74 20 69 53 74 61 74 65 6d 65 6e 74 3b   int iStatement;
3c90: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74           /* Stat
3ca0: 65 6d 65 6e 74 20 6e 75 6d 62 65 72 20 28 6f 72  ement number (or
3cb0: 20 30 20 69 66 20 68 61 73 20 6e 6f 74 20 6f 70   0 if has not op
3cc0: 65 6e 65 64 20 73 74 6d 74 29 20 2a 2f 0a 20 20  ened stmt) */.  
3cd0: 69 36 34 20 69 43 75 72 72 65 6e 74 54 69 6d 65  i64 iCurrentTime
3ce0: 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65  ;       /* Value
3cf0: 20 6f 66 20 6a 75 6c 69 61 6e 64 61 79 28 27 6e   of julianday('n
3d00: 6f 77 27 29 20 66 6f 72 20 74 68 69 73 20 73 74  ow') for this st
3d10: 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 69 36 34  atement */.  i64
3d20: 20 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3b 20   nFkConstraint; 
3d30: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
3d40: 66 20 69 6d 6d 2e 20 46 4b 20 63 6f 6e 73 74 72  f imm. FK constr
3d50: 61 69 6e 74 73 20 74 68 69 73 20 56 4d 20 2a 2f  aints this VM */
3d60: 0a 20 20 69 36 34 20 6e 53 74 6d 74 44 65 66 43  .  i64 nStmtDefC
3d70: 6f 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  ons;       /* Nu
3d80: 6d 62 65 72 20 6f 66 20 64 65 66 2e 20 63 6f 6e  mber of def. con
3d90: 73 74 72 61 69 6e 74 73 20 77 68 65 6e 20 73 74  straints when st
3da0: 6d 74 20 73 74 61 72 74 65 64 20 2a 2f 0a 20 20  mt started */.  
3db0: 69 36 34 20 6e 53 74 6d 74 44 65 66 49 6d 6d 43  i64 nStmtDefImmC
3dc0: 6f 6e 73 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ons;    /* Numbe
3dd0: 72 20 6f 66 20 64 65 66 2e 20 69 6d 6d 20 63 6f  r of def. imm co
3de0: 6e 73 74 72 61 69 6e 74 73 20 77 68 65 6e 20 73  nstraints when s
3df0: 74 6d 74 20 73 74 61 72 74 65 64 20 2a 2f 0a 0a  tmt started */..
3e00: 20 20 2f 2a 20 57 68 65 6e 20 61 6c 6c 6f 63 61    /* When alloca
3e10: 74 69 6e 67 20 61 20 6e 65 77 20 56 64 62 65 20  ting a new Vdbe 
3e20: 6f 62 6a 65 63 74 2c 20 61 6c 6c 20 6f 66 20 74  object, all of t
3e30: 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
3e40: 73 68 6f 75 6c 64 20 62 65 0a 20 20 2a 2a 20 69  should be.  ** i
3e50: 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65  nitialized to ze
3e60: 72 6f 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20  ro or NULL */.. 
3e70: 20 4f 70 20 2a 61 4f 70 3b 20 20 20 20 20 20 20   Op *aOp;       
3e80: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
3e90: 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 76 69  e to hold the vi
3ea0: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 27 73 20  rtual machine's 
3eb0: 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d  program */.  Mem
3ec0: 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *aMem;         
3ed0: 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 65 6d 6f       /* The memo
3ee0: 72 79 20 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a  ry locations */.
3ef0: 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 20 20    Mem **apArg;  
3f00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
3f10: 75 6d 65 6e 74 73 20 74 6f 20 63 75 72 72 65 6e  uments to curren
3f20: 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 75 73  tly executing us
3f30: 65 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  er function */. 
3f40: 20 4d 65 6d 20 2a 61 43 6f 6c 4e 61 6d 65 3b 20   Mem *aColName; 
3f50: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75           /* Colu
3f60: 6d 6e 20 6e 61 6d 65 73 20 74 6f 20 72 65 74 75  mn names to retu
3f70: 72 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65  rn */.  Mem *pRe
3f80: 73 75 6c 74 53 65 74 3b 20 20 20 20 20 20 20 20  sultSet;        
3f90: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 61 6e  /* Pointer to an
3fa0: 20 61 72 72 61 79 20 6f 66 20 72 65 73 75 6c 74   array of result
3fb0: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72  s */.  char *zEr
3fc0: 72 4d 73 67 3b 20 20 20 20 20 20 20 20 20 20 2f  rMsg;          /
3fd0: 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
3fe0: 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
3ff0: 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 2a 61    VdbeCursor **a
4000: 70 43 73 72 3b 20 20 20 20 20 2f 2a 20 4f 6e 65  pCsr;     /* One
4010: 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 69 73   element of this
4020: 20 61 72 72 61 79 20 66 6f 72 20 65 61 63 68 20   array for each 
4030: 6f 70 65 6e 20 63 75 72 73 6f 72 20 2a 2f 0a 20  open cursor */. 
4040: 20 4d 65 6d 20 2a 61 56 61 72 3b 20 20 20 20 20   Mem *aVar;     
4050: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
4060: 65 73 20 66 6f 72 20 74 68 65 20 4f 50 5f 56 61  es for the OP_Va
4070: 72 69 61 62 6c 65 20 6f 70 63 6f 64 65 2e 20 2a  riable opcode. *
4080: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72  /.  char **azVar
4090: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
40a0: 61 6d 65 20 6f 66 20 76 61 72 69 61 62 6c 65 73  ame of variables
40b0: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
40c0: 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20  TE_OMIT_TRACE.  
40d0: 69 36 34 20 73 74 61 72 74 54 69 6d 65 3b 20 20  i64 startTime;  
40e0: 20 20 20 20 20 20 20 20 2f 2a 20 54 69 6d 65 20          /* Time 
40f0: 77 68 65 6e 20 71 75 65 72 79 20 73 74 61 72 74  when query start
4100: 65 64 20 2d 20 75 73 65 64 20 66 6f 72 20 70 72  ed - used for pr
4110: 6f 66 69 6c 69 6e 67 20 2a 2f 0a 23 65 6e 64 69  ofiling */.#endi
4120: 66 0a 20 20 69 6e 74 20 6e 4f 70 3b 20 20 20 20  f.  int nOp;    
4130: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
4140: 75 6d 62 65 72 20 6f 66 20 69 6e 73 74 72 75 63  umber of instruc
4150: 74 69 6f 6e 73 20 69 6e 20 74 68 65 20 70 72 6f  tions in the pro
4160: 67 72 61 6d 20 2a 2f 0a 23 69 66 64 65 66 20 53  gram */.#ifdef S
4170: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e  QLITE_DEBUG.  in
4180: 74 20 72 63 41 70 70 3b 20 20 20 20 20 20 20 20  t rcApp;        
4190: 20 20 20 20 20 20 2f 2a 20 65 72 72 63 6f 64 65        /* errcode
41a0: 20 73 65 74 20 62 79 20 73 71 6c 69 74 65 33 5f   set by sqlite3_
41b0: 72 65 73 75 6c 74 5f 65 72 72 6f 72 5f 63 6f 64  result_error_cod
41c0: 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  e() */.#endif.  
41d0: 75 31 36 20 6e 52 65 73 43 6f 6c 75 6d 6e 3b 20  u16 nResColumn; 
41e0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
41f0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
4200: 6f 6e 65 20 72 6f 77 20 6f 66 20 74 68 65 20 72  one row of the r
4210: 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 75  esult set */.  u
4220: 38 20 65 72 72 6f 72 41 63 74 69 6f 6e 3b 20 20  8 errorAction;  
4230: 20 20 20 20 20 20 20 2f 2a 20 52 65 63 6f 76 65         /* Recove
4240: 72 79 20 61 63 74 69 6f 6e 20 74 6f 20 64 6f 20  ry action to do 
4250: 69 6e 20 63 61 73 65 20 6f 66 20 61 6e 20 65 72  in case of an er
4260: 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6d 69 6e 57  ror */.  u8 minW
4270: 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 20  riteFileFormat; 
4280: 20 2f 2a 20 4d 69 6e 69 6d 75 6d 20 66 69 6c 65   /* Minimum file
4290: 20 66 6f 72 6d 61 74 20 66 6f 72 20 77 72 69 74   format for writ
42a0: 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 66 69  able database fi
42b0: 6c 65 73 20 2a 2f 0a 20 20 62 66 74 20 65 78 70  les */.  bft exp
42c0: 69 72 65 64 3a 31 3b 20 20 20 20 20 20 20 20 20  ired:1;         
42d0: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
42e0: 56 4d 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  VM needs to be r
42f0: 65 63 6f 6d 70 69 6c 65 64 20 2a 2f 0a 20 20 62  ecompiled */.  b
4300: 66 74 20 64 6f 69 6e 67 52 65 72 75 6e 3a 31 3b  ft doingRerun:1;
4310: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
4320: 66 20 72 65 72 75 6e 6e 69 6e 67 20 61 66 74 65  f rerunning afte
4330: 72 20 61 6e 20 61 75 74 6f 2d 72 65 70 72 65 70  r an auto-reprep
4340: 61 72 65 20 2a 2f 0a 20 20 62 66 74 20 65 78 70  are */.  bft exp
4350: 6c 61 69 6e 3a 32 3b 20 20 20 20 20 20 20 20 20  lain:2;         
4360: 20 2f 2a 20 54 72 75 65 20 69 66 20 45 58 50 4c   /* True if EXPL
4370: 41 49 4e 20 70 72 65 73 65 6e 74 20 6f 6e 20 53  AIN present on S
4380: 51 4c 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  QL command */.  
4390: 62 66 74 20 63 68 61 6e 67 65 43 6e 74 4f 6e 3a  bft changeCntOn:
43a0: 31 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20  1;      /* True 
43b0: 74 6f 20 75 70 64 61 74 65 20 74 68 65 20 63 68  to update the ch
43c0: 61 6e 67 65 2d 63 6f 75 6e 74 65 72 20 2a 2f 0a  ange-counter */.
43d0: 20 20 62 66 74 20 72 75 6e 4f 6e 6c 79 4f 6e 63    bft runOnlyOnc
43e0: 65 3a 31 3b 20 20 20 20 20 20 2f 2a 20 41 75 74  e:1;      /* Aut
43f0: 6f 6d 61 74 69 63 61 6c 6c 79 20 65 78 70 69 72  omatically expir
4400: 65 20 6f 6e 20 72 65 73 65 74 20 2a 2f 0a 20 20  e on reset */.  
4410: 62 66 74 20 75 73 65 73 53 74 6d 74 4a 6f 75 72  bft usesStmtJour
4420: 6e 61 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  nal:1;  /* True 
4430: 69 66 20 75 73 65 73 20 61 20 73 74 61 74 65 6d  if uses a statem
4440: 65 6e 74 20 6a 6f 75 72 6e 61 6c 20 2a 2f 0a 20  ent journal */. 
4450: 20 62 66 74 20 72 65 61 64 4f 6e 6c 79 3a 31 3b   bft readOnly:1;
4460: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
4470: 20 66 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20   for statements 
4480: 74 68 61 74 20 64 6f 20 6e 6f 74 20 77 72 69 74  that do not writ
4490: 65 20 2a 2f 0a 20 20 62 66 74 20 62 49 73 52 65  e */.  bft bIsRe
44a0: 61 64 65 72 3a 31 3b 20 20 20 20 20 20 20 20 2f  ader:1;        /
44b0: 2a 20 54 72 75 65 20 66 6f 72 20 73 74 61 74 65  * True for state
44c0: 6d 65 6e 74 73 20 74 68 61 74 20 72 65 61 64 20  ments that read 
44d0: 2a 2f 0a 20 20 62 66 74 20 69 73 50 72 65 70 61  */.  bft isPrepa
44e0: 72 65 56 32 3a 31 3b 20 20 20 20 20 20 2f 2a 20  reV2:1;      /* 
44f0: 54 72 75 65 20 69 66 20 70 72 65 70 61 72 65 64  True if prepared
4500: 20 77 69 74 68 20 70 72 65 70 61 72 65 5f 76 32   with prepare_v2
4510: 28 29 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20  () */.  yDbMask 
4520: 62 74 72 65 65 4d 61 73 6b 3b 20 20 20 20 20 20  btreeMask;      
4530: 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 64 62  /* Bitmask of db
4540: 2d 3e 61 44 62 5b 5d 20 65 6e 74 72 69 65 73 20  ->aDb[] entries 
4550: 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
4560: 79 44 62 4d 61 73 6b 20 6c 6f 63 6b 4d 61 73 6b  yDbMask lockMask
4570: 3b 20 20 20 20 20 20 20 2f 2a 20 53 75 62 73 65  ;       /* Subse
4580: 74 20 6f 66 20 62 74 72 65 65 4d 61 73 6b 20 74  t of btreeMask t
4590: 68 61 74 20 72 65 71 75 69 72 65 73 20 61 20 6c  hat requires a l
45a0: 6f 63 6b 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f  ock */.  u32 aCo
45b0: 75 6e 74 65 72 5b 35 5d 3b 20 20 20 20 20 20 20  unter[5];       
45c0: 20 2f 2a 20 43 6f 75 6e 74 65 72 73 20 75 73 65   /* Counters use
45d0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73 74 6d  d by sqlite3_stm
45e0: 74 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 20 20  t_status() */.  
45f0: 63 68 61 72 20 2a 7a 53 71 6c 3b 20 20 20 20 20  char *zSql;     
4600: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
4610: 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  of the SQL state
4620: 6d 65 6e 74 20 74 68 61 74 20 67 65 6e 65 72 61  ment that genera
4630: 74 65 64 20 74 68 69 73 20 2a 2f 0a 20 20 76 6f  ted this */.  vo
4640: 69 64 20 2a 70 46 72 65 65 3b 20 20 20 20 20 20  id *pFree;      
4650: 20 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68        /* Free th
4660: 69 73 20 77 68 65 6e 20 64 65 6c 65 74 69 6e 67  is when deleting
4670: 20 74 68 65 20 76 64 62 65 20 2a 2f 0a 20 20 56   the vdbe */.  V
4680: 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
4690: 3b 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74  ;      /* Parent
46a0: 20 66 72 61 6d 65 20 2a 2f 0a 20 20 56 64 62 65   frame */.  Vdbe
46b0: 46 72 61 6d 65 20 2a 70 44 65 6c 46 72 61 6d 65  Frame *pDelFrame
46c0: 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 66  ;   /* List of f
46d0: 72 61 6d 65 20 6f 62 6a 65 63 74 73 20 74 6f 20  rame objects to 
46e0: 66 72 65 65 20 6f 6e 20 56 4d 20 72 65 73 65 74  free on VM reset
46f0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 72 61 6d 65   */.  int nFrame
4700: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4710: 20 4e 75 6d 62 65 72 20 6f 66 20 66 72 61 6d 65   Number of frame
4720: 73 20 69 6e 20 70 46 72 61 6d 65 20 6c 69 73 74  s in pFrame list
4730: 20 2a 2f 0a 20 20 75 33 32 20 65 78 70 6d 61 73   */.  u32 expmas
4740: 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  k;            /*
4750: 20 42 69 6e 64 69 6e 67 20 74 6f 20 74 68 65 73   Binding to thes
4760: 65 20 76 61 72 73 20 69 6e 76 61 6c 69 64 61 74  e vars invalidat
4770: 65 73 20 56 4d 20 2a 2f 0a 20 20 53 75 62 50 72  es VM */.  SubPr
4780: 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
4790: 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73     /* Linked lis
47a0: 74 20 6f 66 20 61 6c 6c 20 73 75 62 2d 70 72 6f  t of all sub-pro
47b0: 67 72 61 6d 73 20 75 73 65 64 20 62 79 20 56 4d  grams used by VM
47c0: 20 2a 2f 0a 20 20 41 75 78 44 61 74 61 20 2a 70   */.  AuxData *p
47d0: 41 75 78 44 61 74 61 3b 20 20 20 20 20 20 2f 2a  AuxData;      /*
47e0: 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   Linked list of 
47f0: 61 75 78 64 61 74 61 20 61 6c 6c 6f 63 61 74 69  auxdata allocati
4800: 6f 6e 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ons */.#ifdef SQ
4810: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
4820: 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 69 36  _SCANSTATUS.  i6
4830: 34 20 2a 61 6e 45 78 65 63 3b 20 20 20 20 20 20  4 *anExec;      
4840: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
4850: 6f 66 20 74 69 6d 65 73 20 65 61 63 68 20 6f 70  of times each op
4860: 20 68 61 73 20 62 65 65 6e 20 65 78 65 63 75 74   has been execut
4870: 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 61  ed */.  int nSca
4880: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
4890: 2f 2a 20 45 6e 74 72 69 65 73 20 69 6e 20 61 53  /* Entries in aS
48a0: 63 61 6e 5b 5d 20 2a 2f 0a 20 20 53 63 61 6e 53  can[] */.  ScanS
48b0: 74 61 74 75 73 20 2a 61 53 63 61 6e 3b 20 20 20  tatus *aScan;   
48c0: 20 20 20 2f 2a 20 53 63 61 6e 20 64 65 66 69 6e     /* Scan defin
48d0: 69 74 69 6f 6e 73 20 66 6f 72 20 73 71 6c 69 74  itions for sqlit
48e0: 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61 74  e3_stmt_scanstat
48f0: 75 73 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d  us() */.#endif.}
4900: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
4910: 6c 6f 77 69 6e 67 20 61 72 65 20 61 6c 6c 6f 77  lowing are allow
4920: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 56 64  ed values for Vd
4930: 62 65 2e 6d 61 67 69 63 0a 2a 2f 0a 23 64 65 66  be.magic.*/.#def
4940: 69 6e 65 20 56 44 42 45 5f 4d 41 47 49 43 5f 49  ine VDBE_MAGIC_I
4950: 4e 49 54 20 20 20 20 20 30 78 31 36 62 63 65 61  NIT     0x16bcea
4960: 61 35 20 20 20 20 2f 2a 20 42 75 69 6c 64 69 6e  a5    /* Buildin
4970: 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d  g a VDBE program
4980: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 56 44 42 45   */.#define VDBE
4990: 5f 4d 41 47 49 43 5f 52 55 4e 20 20 20 20 20 20  _MAGIC_RUN      
49a0: 30 78 32 64 66 32 30 64 61 33 20 20 20 20 2f 2a  0x2df20da3    /*
49b0: 20 56 44 42 45 20 69 73 20 72 65 61 64 79 20 74   VDBE is ready t
49c0: 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 23 64 65  o execute */.#de
49d0: 66 69 6e 65 20 56 44 42 45 5f 4d 41 47 49 43 5f  fine VDBE_MAGIC_
49e0: 48 41 4c 54 20 20 20 20 20 30 78 33 31 39 63 32  HALT     0x319c2
49f0: 39 37 33 20 20 20 20 2f 2a 20 56 44 42 45 20 68  973    /* VDBE h
4a00: 61 73 20 63 6f 6d 70 6c 65 74 65 64 20 65 78 65  as completed exe
4a10: 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  cution */.#defin
4a20: 65 20 56 44 42 45 5f 4d 41 47 49 43 5f 52 45 53  e VDBE_MAGIC_RES
4a30: 45 54 20 20 20 20 30 78 34 38 66 61 39 66 37 36  ET    0x48fa9f76
4a40: 20 20 20 20 2f 2a 20 52 65 73 65 74 20 61 6e 64      /* Reset and
4a50: 20 72 65 61 64 79 20 74 6f 20 72 75 6e 20 61 67   ready to run ag
4a60: 61 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 56  ain */.#define V
4a70: 44 42 45 5f 4d 41 47 49 43 5f 44 45 41 44 20 20  DBE_MAGIC_DEAD  
4a80: 20 20 20 30 78 35 36 30 36 63 33 63 38 20 20 20     0x5606c3c8   
4a90: 20 2f 2a 20 54 68 65 20 56 44 42 45 20 68 61 73   /* The VDBE has
4aa0: 20 62 65 65 6e 20 64 65 61 6c 6c 6f 63 61 74 65   been deallocate
4ab0: 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75  d */../*.** Stru
4ac0: 63 74 75 72 65 20 75 73 65 64 20 74 6f 20 73 74  cture used to st
4ad0: 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 78 74 20  ore the context 
4ae0: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
4af0: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 70 72 65 75  .** sqlite3_preu
4b00: 70 64 61 74 65 5f 2a 28 29 20 41 50 49 20 66 75  pdate_*() API fu
4b10: 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75  nctions..*/.stru
4b20: 63 74 20 50 72 65 55 70 64 61 74 65 20 7b 0a 20  ct PreUpdate {. 
4b30: 20 56 64 62 65 20 2a 76 3b 0a 20 20 56 64 62 65   Vdbe *v;.  Vdbe
4b40: 43 75 72 73 6f 72 20 2a 70 43 73 72 3b 20 20 20  Cursor *pCsr;   
4b50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
4b60: 75 72 73 6f 72 20 74 6f 20 72 65 61 64 20 6f 6c  ursor to read ol
4b70: 64 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 2a 2f  d values from */
4b80: 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20 20  .  int op;      
4b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ba0: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 53 51 4c     /* One of SQL
4bb0: 49 54 45 5f 49 4e 53 45 52 54 2c 20 55 50 44 41  ITE_INSERT, UPDA
4bc0: 54 45 2c 20 44 45 4c 45 54 45 20 2a 2f 0a 20 20  TE, DELETE */.  
4bd0: 75 38 20 2a 61 52 65 63 6f 72 64 3b 20 20 20 20  u8 *aRecord;    
4be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4bf0: 2f 2a 20 6f 6c 64 2e 2a 20 64 61 74 61 62 61 73  /* old.* databas
4c00: 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4b 65  e record */.  Ke
4c10: 79 49 6e 66 6f 20 6b 65 79 69 6e 66 6f 3b 0a 20  yInfo keyinfo;. 
4c20: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
4c30: 2a 70 55 6e 70 61 63 6b 65 64 3b 20 20 20 20 20  *pUnpacked;     
4c40: 20 2f 2a 20 55 6e 70 61 63 6b 65 64 20 76 65 72   /* Unpacked ver
4c50: 73 69 6f 6e 20 6f 66 20 61 52 65 63 6f 72 64 5b  sion of aRecord[
4c60: 5d 20 2a 2f 0a 20 20 55 6e 70 61 63 6b 65 64 52  ] */.  UnpackedR
4c70: 65 63 6f 72 64 20 2a 70 4e 65 77 55 6e 70 61 63  ecord *pNewUnpac
4c80: 6b 65 64 3b 20 20 20 2f 2a 20 55 6e 70 61 63 6b  ked;   /* Unpack
4c90: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 6e 65  ed version of ne
4ca0: 77 2e 2a 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  w.* record */.  
4cb0: 69 6e 74 20 69 4e 65 77 52 65 67 3b 20 20 20 20  int iNewReg;    
4cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4cd0: 2f 2a 20 52 65 67 69 73 74 65 72 20 66 6f 72 20  /* Register for 
4ce0: 6e 65 77 2e 2a 20 76 61 6c 75 65 73 20 2a 2f 0a  new.* values */.
4cf0: 20 20 69 36 34 20 69 4b 65 79 31 3b 20 20 20 20    i64 iKey1;    
4d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d10: 20 20 2f 2a 20 46 69 72 73 74 20 6b 65 79 20 76    /* First key v
4d20: 61 6c 75 65 20 70 61 73 73 65 64 20 74 6f 20 68  alue passed to h
4d30: 6f 6f 6b 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65  ook */.  i64 iKe
4d40: 79 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  y2;             
4d50: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65 63 6f           /* Seco
4d60: 6e 64 20 6b 65 79 20 76 61 6c 75 65 20 70 61 73  nd key value pas
4d70: 73 65 64 20 74 6f 20 68 6f 6f 6b 20 2a 2f 0a 20  sed to hook */. 
4d80: 20 4d 65 6d 20 2a 61 4e 65 77 3b 20 20 20 20 20   Mem *aNew;     
4d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4da0: 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 6e 65 77   /* Array of new
4db0: 2e 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 54  .* values */.  T
4dc0: 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
4dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4de0: 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  * Schema object 
4df0: 62 65 69 6e 67 20 75 70 61 74 65 64 20 2a 2f 20  being upated */ 
4e00: 20 20 20 20 20 20 20 20 20 0a 7d 3b 0a 0a 2f 2a           .};../*
4e10: 0a 2a 2a 20 46 75 6e 63 74 69 6f 6e 20 70 72 6f  .** Function pro
4e20: 74 6f 74 79 70 65 73 0a 2a 2f 0a 76 6f 69 64 20  totypes.*/.void 
4e30: 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
4e40: 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68  (Vdbe*, const ch
4e50: 61 72 20 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  ar *, ...);.void
4e60: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
4e70: 43 75 72 73 6f 72 28 56 64 62 65 20 2a 2c 20 56  Cursor(Vdbe *, V
4e80: 64 62 65 43 75 72 73 6f 72 2a 29 3b 0a 76 6f 69  dbeCursor*);.voi
4e90: 64 20 73 71 6c 69 74 65 56 64 62 65 50 6f 70 53  d sqliteVdbePopS
4ea0: 74 61 63 6b 28 56 64 62 65 2a 2c 69 6e 74 29 3b  tack(Vdbe*,int);
4eb0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
4ec0: 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 56 64 62  CursorMoveto(Vdb
4ed0: 65 43 75 72 73 6f 72 2a 2a 2c 20 69 6e 74 2a 29  eCursor**, int*)
4ee0: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  ;.int sqlite3Vdb
4ef0: 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 56  eCursorRestore(V
4f00: 64 62 65 43 75 72 73 6f 72 2a 29 3b 0a 23 69 66  dbeCursor*);.#if
4f10: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
4f20: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
4f30: 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a  d(VDBE_PROFILE).
4f40: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
4f50: 50 72 69 6e 74 4f 70 28 46 49 4c 45 2a 2c 20 69  PrintOp(FILE*, i
4f60: 6e 74 2c 20 4f 70 2a 29 3b 0a 23 65 6e 64 69 66  nt, Op*);.#endif
4f70: 0a 75 33 32 20 73 71 6c 69 74 65 33 56 64 62 65  .u32 sqlite3Vdbe
4f80: 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 75 33  SerialTypeLen(u3
4f90: 32 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 56 64  2);.u8 sqlite3Vd
4fa0: 62 65 4f 6e 65 42 79 74 65 53 65 72 69 61 6c 54  beOneByteSerialT
4fb0: 79 70 65 4c 65 6e 28 75 38 29 3b 0a 75 33 32 20  ypeLen(u8);.u32 
4fc0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
4fd0: 6c 54 79 70 65 28 4d 65 6d 2a 2c 20 69 6e 74 2c  lType(Mem*, int,
4fe0: 20 75 33 32 2a 29 3b 0a 75 33 32 20 73 71 6c 69   u32*);.u32 sqli
4ff0: 74 65 33 56 64 62 65 53 65 72 69 61 6c 50 75 74  te3VdbeSerialPut
5000: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c  (unsigned char*,
5010: 20 4d 65 6d 2a 2c 20 75 33 32 29 3b 0a 75 33 32   Mem*, u32);.u32
5020: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
5030: 61 6c 47 65 74 28 63 6f 6e 73 74 20 75 6e 73 69  alGet(const unsi
5040: 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 33 32 2c  gned char*, u32,
5050: 20 4d 65 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   Mem*);.void sql
5060: 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75  ite3VdbeDeleteAu
5070: 78 44 61 74 61 28 73 71 6c 69 74 65 33 2a 2c 20  xData(sqlite3*, 
5080: 41 75 78 44 61 74 61 2a 2a 2c 20 69 6e 74 2c 20  AuxData**, int, 
5090: 69 6e 74 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74  int);..int sqlit
50a0: 65 32 42 74 72 65 65 4b 65 79 43 6f 6d 70 61 72  e2BtreeKeyCompar
50b0: 65 28 42 74 43 75 72 73 6f 72 20 2a 2c 20 63 6f  e(BtCursor *, co
50c0: 6e 73 74 20 76 6f 69 64 20 2a 2c 20 69 6e 74 2c  nst void *, int,
50d0: 20 69 6e 74 2c 20 69 6e 74 20 2a 29 3b 0a 69 6e   int, int *);.in
50e0: 74 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  t sqlite3VdbeIdx
50f0: 4b 65 79 43 6f 6d 70 61 72 65 28 73 71 6c 69 74  KeyCompare(sqlit
5100: 65 33 2a 2c 56 64 62 65 43 75 72 73 6f 72 2a 2c  e3*,VdbeCursor*,
5110: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2c  UnpackedRecord*,
5120: 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
5130: 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 73  e3VdbeIdxRowid(s
5140: 71 6c 69 74 65 33 2a 2c 20 42 74 43 75 72 73 6f  qlite3*, BtCurso
5150: 72 2a 2c 20 69 36 34 2a 29 3b 0a 69 6e 74 20 73  r*, i64*);.int s
5160: 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 56  qlite3VdbeExec(V
5170: 64 62 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  dbe*);.int sqlit
5180: 65 33 56 64 62 65 4c 69 73 74 28 56 64 62 65 2a  e3VdbeList(Vdbe*
5190: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
51a0: 62 65 48 61 6c 74 28 56 64 62 65 2a 29 3b 0a 69  beHalt(Vdbe*);.i
51b0: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  nt sqlite3VdbeCh
51c0: 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 4d 65 6d  angeEncoding(Mem
51d0: 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71   *, int);.int sq
51e0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
51f0: 69 67 28 4d 65 6d 2a 29 3b 0a 69 6e 74 20 73 71  ig(Mem*);.int sq
5200: 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79  lite3VdbeMemCopy
5210: 28 4d 65 6d 2a 2c 20 63 6f 6e 73 74 20 4d 65 6d  (Mem*, const Mem
5220: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
5230: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
5240: 70 79 28 4d 65 6d 2a 2c 20 63 6f 6e 73 74 20 4d  py(Mem*, const M
5250: 65 6d 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  em*, int);.void 
5260: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
5270: 76 65 28 4d 65 6d 2a 2c 20 4d 65 6d 2a 29 3b 0a  ve(Mem*, Mem*);.
5280: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d  int sqlite3VdbeM
5290: 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 4d  emNulTerminate(M
52a0: 65 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  em*);.int sqlite
52b0: 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 4d  3VdbeMemSetStr(M
52c0: 65 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  em*, const char*
52d0: 2c 20 69 6e 74 2c 20 75 38 2c 20 76 6f 69 64 28  , int, u8, void(
52e0: 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64  *)(void*));.void
52f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
5300: 65 74 49 6e 74 36 34 28 4d 65 6d 2a 2c 20 69 36  etInt64(Mem*, i6
5310: 34 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  4);.#ifdef SQLIT
5320: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
5330: 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 73  POINT.# define s
5340: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
5350: 44 6f 75 62 6c 65 20 73 71 6c 69 74 65 33 56 64  Double sqlite3Vd
5360: 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 0a 23 65  beMemSetInt64.#e
5370: 6c 73 65 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  lse.  void sqlit
5380: 65 33 56 64 62 65 4d 65 6d 53 65 74 44 6f 75 62  e3VdbeMemSetDoub
5390: 6c 65 28 4d 65 6d 2a 2c 20 64 6f 75 62 6c 65 29  le(Mem*, double)
53a0: 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
53b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 69 74  lite3VdbeMemInit
53c0: 28 4d 65 6d 2a 2c 73 71 6c 69 74 65 33 2a 2c 75  (Mem*,sqlite3*,u
53d0: 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  16);.void sqlite
53e0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
53f0: 4d 65 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  Mem*);.void sqli
5400: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 5a 65 72  te3VdbeMemSetZer
5410: 6f 42 6c 6f 62 28 4d 65 6d 2a 2c 69 6e 74 29 3b  oBlob(Mem*,int);
5420: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
5430: 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 4d 65  eMemSetRowSet(Me
5440: 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  m*);.int sqlite3
5450: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
5460: 61 62 6c 65 28 4d 65 6d 2a 29 3b 0a 69 6e 74 20  able(Mem*);.int 
5470: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
5480: 72 69 6e 67 69 66 79 28 4d 65 6d 2a 2c 20 75 38  ringify(Mem*, u8
5490: 2c 20 75 38 29 3b 0a 69 36 34 20 73 71 6c 69 74  , u8);.i64 sqlit
54a0: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 4d  e3VdbeIntValue(M
54b0: 65 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  em*);.int sqlite
54c0: 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
54d0: 66 79 28 4d 65 6d 2a 29 3b 0a 64 6f 75 62 6c 65  fy(Mem*);.double
54e0: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
54f0: 56 61 6c 75 65 28 4d 65 6d 2a 29 3b 0a 76 6f 69  Value(Mem*);.voi
5500: 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  d sqlite3VdbeInt
5510: 65 67 65 72 41 66 66 69 6e 69 74 79 28 4d 65 6d  egerAffinity(Mem
5520: 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
5530: 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 4d 65  dbeMemRealify(Me
5540: 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  m*);.int sqlite3
5550: 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28  VdbeMemNumerify(
5560: 4d 65 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  Mem*);.void sqli
5570: 74 65 33 56 64 62 65 4d 65 6d 43 61 73 74 28 4d  te3VdbeMemCast(M
5580: 65 6d 2a 2c 75 38 2c 75 38 29 3b 0a 69 6e 74 20  em*,u8,u8);.int 
5590: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
55a0: 6f 6d 42 74 72 65 65 28 42 74 43 75 72 73 6f 72  omBtree(BtCursor
55b0: 2a 2c 75 33 32 2c 75 33 32 2c 69 6e 74 2c 4d 65  *,u32,u32,int,Me
55c0: 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
55d0: 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
55e0: 4d 65 6d 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c  Mem *p);.int sql
55f0: 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c  ite3VdbeMemFinal
5600: 69 7a 65 28 4d 65 6d 2a 2c 20 46 75 6e 63 44 65  ize(Mem*, FuncDe
5610: 66 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  f*);.const char 
5620: 2a 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 4e 61  *sqlite3OpcodeNa
5630: 6d 65 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  me(int);.int sql
5640: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
5650: 4d 65 6d 20 2a 70 4d 65 6d 2c 20 69 6e 74 20 6e  Mem *pMem, int n
5660: 2c 20 69 6e 74 20 70 72 65 73 65 72 76 65 29 3b  , int preserve);
5670: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
5680: 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a  MemClearAndResiz
5690: 65 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 69 6e 74  e(Mem *pMem, int
56a0: 20 6e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   n);.int sqlite3
56b0: 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65  VdbeCloseStateme
56c0: 6e 74 28 56 64 62 65 20 2a 2c 20 69 6e 74 29 3b  nt(Vdbe *, int);
56d0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
56e0: 65 46 72 61 6d 65 44 65 6c 65 74 65 28 56 64 62  eFrameDelete(Vdb
56f0: 65 46 72 61 6d 65 2a 29 3b 0a 69 6e 74 20 73 71  eFrame*);.int sq
5700: 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 52 65  lite3VdbeFrameRe
5710: 73 74 6f 72 65 28 56 64 62 65 46 72 61 6d 65 20  store(VdbeFrame 
5720: 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
5730: 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
5740: 54 45 5f 48 4f 4f 4b 0a 76 6f 69 64 20 73 71 6c  TE_HOOK.void sql
5750: 69 74 65 33 56 64 62 65 50 72 65 55 70 64 61 74  ite3VdbePreUpdat
5760: 65 48 6f 6f 6b 28 56 64 62 65 2a 2c 56 64 62 65  eHook(Vdbe*,Vdbe
5770: 43 75 72 73 6f 72 2a 2c 69 6e 74 2c 63 6f 6e 73  Cursor*,int,cons
5780: 74 20 63 68 61 72 2a 2c 54 61 62 6c 65 2a 2c 69  t char*,Table*,i
5790: 36 34 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  64,int);.#endif.
57a0: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 54  int sqlite3VdbeT
57b0: 72 61 6e 73 66 65 72 45 72 72 6f 72 28 56 64 62  ransferError(Vdb
57c0: 65 20 2a 70 29 3b 0a 0a 69 6e 74 20 73 71 6c 69  e *p);..int sqli
57d0: 74 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69  te3VdbeSorterIni
57e0: 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  t(sqlite3 *, int
57f0: 2c 20 56 64 62 65 43 75 72 73 6f 72 20 2a 29 3b  , VdbeCursor *);
5800: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
5810: 65 53 6f 72 74 65 72 52 65 73 65 74 28 73 71 6c  eSorterReset(sql
5820: 69 74 65 33 20 2a 2c 20 56 64 62 65 53 6f 72 74  ite3 *, VdbeSort
5830: 65 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  er *);.void sqli
5840: 74 65 33 56 64 62 65 53 6f 72 74 65 72 43 6c 6f  te3VdbeSorterClo
5850: 73 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 64  se(sqlite3 *, Vd
5860: 62 65 43 75 72 73 6f 72 20 2a 29 3b 0a 69 6e 74  beCursor *);.int
5870: 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
5880: 65 72 52 6f 77 6b 65 79 28 63 6f 6e 73 74 20 56  erRowkey(const V
5890: 64 62 65 43 75 72 73 6f 72 20 2a 2c 20 4d 65 6d  dbeCursor *, Mem
58a0: 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
58b0: 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28 73  VdbeSorterNext(s
58c0: 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
58d0: 56 64 62 65 43 75 72 73 6f 72 20 2a 2c 20 69 6e  VdbeCursor *, in
58e0: 74 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t *);.int sqlite
58f0: 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e  3VdbeSorterRewin
5900: 64 28 63 6f 6e 73 74 20 56 64 62 65 43 75 72 73  d(const VdbeCurs
5910: 6f 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 69 6e  or *, int *);.in
5920: 74 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  t sqlite3VdbeSor
5930: 74 65 72 57 72 69 74 65 28 63 6f 6e 73 74 20 56  terWrite(const V
5940: 64 62 65 43 75 72 73 6f 72 20 2a 2c 20 4d 65 6d  dbeCursor *, Mem
5950: 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
5960: 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72  VdbeSorterCompar
5970: 65 28 63 6f 6e 73 74 20 56 64 62 65 43 75 72 73  e(const VdbeCurs
5980: 6f 72 20 2a 2c 20 4d 65 6d 20 2a 2c 20 69 6e 74  or *, Mem *, int
5990: 2c 20 69 6e 74 20 2a 29 3b 0a 0a 23 69 66 20 21  , int *);..#if !
59a0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
59b0: 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
59c0: 29 20 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ) .  void sqlite
59d0: 33 56 64 62 65 45 6e 74 65 72 28 56 64 62 65 2a  3VdbeEnter(Vdbe*
59e0: 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
59f0: 65 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e 74  e sqlite3VdbeEnt
5a00: 65 72 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69  er(X).#endif..#i
5a10: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
5a20: 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
5a30: 43 48 45 29 20 26 26 20 53 51 4c 49 54 45 5f 54  CHE) && SQLITE_T
5a40: 48 52 45 41 44 53 41 46 45 3e 30 0a 20 20 76 6f  HREADSAFE>0.  vo
5a50: 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4c 65  id sqlite3VdbeLe
5a60: 61 76 65 28 56 64 62 65 2a 29 3b 0a 23 65 6c 73  ave(Vdbe*);.#els
5a70: 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
5a80: 65 33 56 64 62 65 4c 65 61 76 65 28 58 29 0a 23  e3VdbeLeave(X).#
5a90: 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
5aa0: 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f 69 64 20  LITE_DEBUG.void 
5ab0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62  sqlite3VdbeMemAb
5ac0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 56 64 62 65  outToChange(Vdbe
5ad0: 2a 2c 4d 65 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c  *,Mem*);.int sql
5ae0: 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
5af0: 49 6e 76 61 72 69 61 6e 74 73 28 4d 65 6d 2a 29  Invariants(Mem*)
5b00: 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ;.#endif..#ifnde
5b10: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
5b20: 52 45 49 47 4e 5f 4b 45 59 0a 69 6e 74 20 73 71  REIGN_KEY.int sq
5b30: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
5b40: 28 56 64 62 65 20 2a 2c 20 69 6e 74 29 3b 0a 23  (Vdbe *, int);.#
5b50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
5b60: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
5b70: 28 70 2c 69 29 20 30 0a 23 65 6e 64 69 66 0a 0a  (p,i) 0.#endif..
5b80: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d  int sqlite3VdbeM
5b90: 65 6d 54 72 61 6e 73 6c 61 74 65 28 4d 65 6d 2a  emTranslate(Mem*
5ba0: 2c 20 75 38 29 3b 0a 23 69 66 64 65 66 20 53 51  , u8);.#ifdef SQ
5bb0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69  LITE_DEBUG.  voi
5bc0: 64 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69  d sqlite3VdbePri
5bd0: 6e 74 53 71 6c 28 56 64 62 65 2a 29 3b 0a 20 20  ntSql(Vdbe*);.  
5be0: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
5bf0: 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 4d  MemPrettyPrint(M
5c00: 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72 20 2a  em *pMem, char *
5c10: 7a 42 75 66 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  zBuf);.#endif.in
5c20: 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  t sqlite3VdbeMem
5c30: 48 61 6e 64 6c 65 42 6f 6d 28 4d 65 6d 20 2a 70  HandleBom(Mem *p
5c40: 4d 65 6d 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  Mem);..#ifndef S
5c50: 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 43 52 42  QLITE_OMIT_INCRB
5c60: 4c 4f 42 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  LOB.  int sqlite
5c70: 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
5c80: 6f 62 28 4d 65 6d 20 2a 29 3b 0a 20 20 23 64 65  ob(Mem *);.  #de
5c90: 66 69 6e 65 20 45 78 70 61 6e 64 42 6c 6f 62 28  fine ExpandBlob(
5ca0: 50 29 20 28 28 28 50 29 2d 3e 66 6c 61 67 73 26  P) (((P)->flags&
5cb0: 4d 45 4d 5f 5a 65 72 6f 29 3f 73 71 6c 69 74 65  MEM_Zero)?sqlite
5cc0: 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
5cd0: 6f 62 28 50 29 3a 30 29 0a 23 65 6c 73 65 0a 20  ob(P):0).#else. 
5ce0: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
5cf0: 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
5d00: 62 28 78 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  b(x) SQLITE_OK. 
5d10: 20 23 64 65 66 69 6e 65 20 45 78 70 61 6e 64 42   #define ExpandB
5d20: 6c 6f 62 28 50 29 20 53 51 4c 49 54 45 5f 4f 4b  lob(P) SQLITE_OK
5d30: 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20  .#endif..#endif 
5d40: 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
5d50: 54 45 5f 56 44 42 45 49 4e 54 5f 48 29 20 2a 2f  TE_VDBEINT_H) */
5d60: 0a                                               .