/ Hex Artifact Content
Login

Artifact 2de43968dc47f1961d5bc76aa3cb68eacf433a7c:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 53 65 70 74 65  /*.** 2003 Septe
0010: 6d 62 65 72 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65  mber 6.**.** The
0020: 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69 6d   author disclaim
0030: 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20 74  s copyright to t
0040: 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65 2e  his source code.
0050: 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a 2a    In place of.**
0060: 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65 2c   a legal notice,
0070: 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73 73   here is a bless
0080: 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61  ing:.**.**    Ma
0090: 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61 6e  y you do good an
00a0: 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20 20  d not evil..**  
00b0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00c0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00d0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00e0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20 20  ive others..**  
00f0: 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20    May you share 
0100: 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61  freely, never ta
0110: 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79  king more than y
0120: 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a  ou give..**.****
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73  *****.** This is
0180: 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65   the header file
0190: 20 66 6f 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   for information
01a0: 20 74 68 61 74 20 69 73 20 70 72 69 76 61 74 65   that is private
01b0: 20 74 6f 20 74 68 65 0a 2a 2a 20 56 44 42 45 2e   to the.** VDBE.
01c0: 20 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69    This informati
01d0: 6f 6e 20 75 73 65 64 20 74 6f 20 61 6c 6c 20 62  on used to all b
01e0: 65 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20  e at the top of 
01f0: 74 68 65 20 73 69 6e 67 6c 65 0a 2a 2a 20 73 6f  the single.** so
0200: 75 72 63 65 20 63 6f 64 65 20 66 69 6c 65 20 22  urce code file "
0210: 76 64 62 65 2e 63 22 2e 20 20 57 68 65 6e 20 74  vdbe.c".  When t
0220: 68 61 74 20 66 69 6c 65 20 62 65 63 61 6d 65 20  hat file became 
0230: 74 6f 6f 20 62 69 67 20 28 6f 76 65 72 0a 2a 2a  too big (over.**
0240: 20 36 30 30 30 20 6c 69 6e 65 73 20 6c 6f 6e 67   6000 lines long
0250: 29 20 69 74 20 77 61 73 20 73 70 6c 69 74 20 75  ) it was split u
0260: 70 20 69 6e 74 6f 20 73 65 76 65 72 61 6c 20 73  p into several s
0270: 6d 61 6c 6c 65 72 20 66 69 6c 65 73 20 61 6e 64  maller files and
0280: 0a 2a 2a 20 74 68 69 73 20 68 65 61 64 65 72 20  .** this header 
0290: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 77 61 73 20  information was 
02a0: 66 61 63 74 6f 72 65 64 20 6f 75 74 2e 0a 2a 2f  factored out..*/
02b0: 0a 23 69 66 6e 64 65 66 20 5f 56 44 42 45 49 4e  .#ifndef _VDBEIN
02c0: 54 5f 48 5f 0a 23 64 65 66 69 6e 65 20 5f 56 44  T_H_.#define _VD
02d0: 42 45 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20  BEINT_H_../*.** 
02e0: 53 51 4c 20 69 73 20 74 72 61 6e 73 6c 61 74 65  SQL is translate
02f0: 64 20 69 6e 74 6f 20 61 20 73 65 71 75 65 6e 63  d into a sequenc
0300: 65 20 6f 66 20 69 6e 73 74 72 75 63 74 69 6f 6e  e of instruction
0310: 73 20 74 6f 20 62 65 0a 2a 2a 20 65 78 65 63 75  s to be.** execu
0320: 74 65 64 20 62 79 20 61 20 76 69 72 74 75 61 6c  ted by a virtual
0330: 20 6d 61 63 68 69 6e 65 2e 20 20 45 61 63 68 20   machine.  Each 
0340: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61  instruction is a
0350: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
0360: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
0370: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 74 79 70  tructure..*/.typ
0380: 65 64 65 66 20 73 74 72 75 63 74 20 56 64 62 65  edef struct Vdbe
0390: 4f 70 20 4f 70 3b 0a 0a 2f 2a 0a 2a 2a 20 42 6f  Op Op;../*.** Bo
03a0: 6f 6c 65 61 6e 20 76 61 6c 75 65 73 0a 2a 2f 0a  olean values.*/.
03b0: 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64  typedef unsigned
03c0: 20 63 68 61 72 20 42 6f 6f 6c 3b 0a 0a 2f 2a 20   char Bool;../* 
03d0: 4f 70 61 71 75 65 20 74 79 70 65 20 75 73 65 64  Opaque type used
03e0: 20 62 79 20 63 6f 64 65 20 69 6e 20 76 64 62 65   by code in vdbe
03f0: 73 6f 72 74 2e 63 20 2a 2f 0a 74 79 70 65 64 65  sort.c */.typede
0400: 66 20 73 74 72 75 63 74 20 56 64 62 65 53 6f 72  f struct VdbeSor
0410: 74 65 72 20 56 64 62 65 53 6f 72 74 65 72 3b 0a  ter VdbeSorter;.
0420: 0a 2f 2a 20 4f 70 61 71 75 65 20 74 79 70 65 20  ./* Opaque type 
0430: 75 73 65 64 20 62 79 20 74 68 65 20 65 78 70 6c  used by the expl
0440: 61 69 6e 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  ainer */.typedef
0450: 20 73 74 72 75 63 74 20 45 78 70 6c 61 69 6e 20   struct Explain 
0460: 45 78 70 6c 61 69 6e 3b 0a 0a 2f 2a 0a 2a 2a 20  Explain;../*.** 
0470: 41 20 63 75 72 73 6f 72 20 69 73 20 61 20 70 6f  A cursor is a po
0480: 69 6e 74 65 72 20 69 6e 74 6f 20 61 20 73 69 6e  inter into a sin
0490: 67 6c 65 20 42 54 72 65 65 20 77 69 74 68 69 6e  gle BTree within
04a0: 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   a database file
04b0: 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  ..** The cursor 
04c0: 63 61 6e 20 73 65 65 6b 20 74 6f 20 61 20 42 54  can seek to a BT
04d0: 72 65 65 20 65 6e 74 72 79 20 77 69 74 68 20 61  ree entry with a
04e0: 20 70 61 72 74 69 63 75 6c 61 72 20 6b 65 79 2c   particular key,
04f0: 20 6f 72 0a 2a 2a 20 6c 6f 6f 70 20 6f 76 65 72   or.** loop over
0500: 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 6f 66 20   all entries of 
0510: 74 68 65 20 42 74 72 65 65 2e 20 20 59 6f 75 20  the Btree.  You 
0520: 63 61 6e 20 61 6c 73 6f 20 69 6e 73 65 72 74 20  can also insert 
0530: 6e 65 77 20 42 54 72 65 65 0a 2a 2a 20 65 6e 74  new BTree.** ent
0540: 72 69 65 73 20 6f 72 20 72 65 74 72 69 65 76 65  ries or retrieve
0550: 20 74 68 65 20 6b 65 79 20 6f 72 20 64 61 74 61   the key or data
0560: 20 66 72 6f 6d 20 74 68 65 20 65 6e 74 72 79 20   from the entry 
0570: 74 68 61 74 20 74 68 65 20 63 75 72 73 6f 72 0a  that the cursor.
0580: 2a 2a 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  ** is currently 
0590: 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 0a 2a 2a 20  pointing to..** 
05a0: 0a 2a 2a 20 45 76 65 72 79 20 63 75 72 73 6f 72  .** Every cursor
05b0: 20 74 68 61 74 20 74 68 65 20 76 69 72 74 75 61   that the virtua
05c0: 6c 20 6d 61 63 68 69 6e 65 20 68 61 73 20 6f 70  l machine has op
05d0: 65 6e 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  en is represente
05e0: 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  d by an.** insta
05f0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
0600: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
0610: 2a 2f 0a 73 74 72 75 63 74 20 56 64 62 65 43 75  */.struct VdbeCu
0620: 72 73 6f 72 20 7b 0a 20 20 42 74 43 75 72 73 6f  rsor {.  BtCurso
0630: 72 20 2a 70 43 75 72 73 6f 72 3b 20 20 20 20 2f  r *pCursor;    /
0640: 2a 20 54 68 65 20 63 75 72 73 6f 72 20 73 74 72  * The cursor str
0650: 75 63 74 75 72 65 20 6f 66 20 74 68 65 20 62 61  ucture of the ba
0660: 63 6b 65 6e 64 20 2a 2f 0a 20 20 42 74 72 65 65  ckend */.  Btree
0670: 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20   *pBt;          
0680: 20 2f 2a 20 53 65 70 61 72 61 74 65 20 66 69 6c   /* Separate fil
0690: 65 20 68 6f 6c 64 69 6e 67 20 74 65 6d 70 6f 72  e holding tempor
06a0: 61 72 79 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4b  ary table */.  K
06b0: 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
06c0: 3b 20 20 20 20 2f 2a 20 49 6e 66 6f 20 61 62 6f  ;    /* Info abo
06d0: 75 74 20 69 6e 64 65 78 20 6b 65 79 73 20 6e 65  ut index keys ne
06e0: 65 64 65 64 20 62 79 20 69 6e 64 65 78 20 63 75  eded by index cu
06f0: 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 69  rsors */.  int i
0700: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
0710: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 75 72   /* Index of cur
0720: 73 6f 72 20 64 61 74 61 62 61 73 65 20 69 6e 20  sor database in 
0730: 64 62 2d 3e 61 44 62 5b 5d 20 28 6f 72 20 2d 31  db->aDb[] (or -1
0740: 29 20 2a 2f 0a 20 20 69 6e 74 20 70 73 65 75 64  ) */.  int pseud
0750: 6f 54 61 62 6c 65 52 65 67 3b 20 20 20 2f 2a 20  oTableReg;   /* 
0760: 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
0770: 20 70 73 65 75 64 6f 74 61 62 6c 65 20 63 6f 6e   pseudotable con
0780: 74 65 6e 74 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e  tent. */.  int n
0790: 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20  Field;          
07a0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69   /* Number of fi
07b0: 65 6c 64 73 20 69 6e 20 74 68 65 20 68 65 61 64  elds in the head
07c0: 65 72 20 2a 2f 0a 20 20 42 6f 6f 6c 20 7a 65 72  er */.  Bool zer
07d0: 6f 65 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  oed;          /*
07e0: 20 54 72 75 65 20 69 66 20 7a 65 72 6f 65 64 20   True if zeroed 
07f0: 6f 75 74 20 61 6e 64 20 72 65 61 64 79 20 66 6f  out and ready fo
0800: 72 20 72 65 75 73 65 20 2a 2f 0a 20 20 42 6f 6f  r reuse */.  Boo
0810: 6c 20 72 6f 77 69 64 49 73 56 61 6c 69 64 3b 20  l rowidIsValid; 
0820: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6c 61     /* True if la
0830: 73 74 52 6f 77 69 64 20 69 73 20 76 61 6c 69 64  stRowid is valid
0840: 20 2a 2f 0a 20 20 42 6f 6f 6c 20 61 74 46 69 72   */.  Bool atFir
0850: 73 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  st;         /* T
0860: 72 75 65 20 69 66 20 70 6f 69 6e 74 69 6e 67 20  rue if pointing 
0870: 74 6f 20 66 69 72 73 74 20 65 6e 74 72 79 20 2a  to first entry *
0880: 2f 0a 20 20 42 6f 6f 6c 20 75 73 65 52 61 6e 64  /.  Bool useRand
0890: 6f 6d 52 6f 77 69 64 3b 20 20 2f 2a 20 47 65 6e  omRowid;  /* Gen
08a0: 65 72 61 74 65 20 6e 65 77 20 72 65 63 6f 72 64  erate new record
08b0: 20 6e 75 6d 62 65 72 73 20 73 65 6d 69 2d 72 61   numbers semi-ra
08c0: 6e 64 6f 6d 6c 79 20 2a 2f 0a 20 20 42 6f 6f 6c  ndomly */.  Bool
08d0: 20 6e 75 6c 6c 52 6f 77 3b 20 20 20 20 20 20 20   nullRow;       
08e0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 6f 69    /* True if poi
08f0: 6e 74 69 6e 67 20 74 6f 20 61 20 72 6f 77 20 77  nting to a row w
0900: 69 74 68 20 6e 6f 20 64 61 74 61 20 2a 2f 0a 20  ith no data */. 
0910: 20 42 6f 6f 6c 20 64 65 66 65 72 72 65 64 4d 6f   Bool deferredMo
0920: 76 65 74 6f 3b 20 20 2f 2a 20 41 20 63 61 6c 6c  veto;  /* A call
0930: 20 74 6f 20 73 71 6c 69 74 65 33 42 74 72 65 65   to sqlite3Btree
0940: 4d 6f 76 65 74 6f 28 29 20 69 73 20 6e 65 65 64  Moveto() is need
0950: 65 64 20 2a 2f 0a 20 20 42 6f 6f 6c 20 69 73 54  ed */.  Bool isT
0960: 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  able;         /*
0970: 20 54 72 75 65 20 69 66 20 61 20 74 61 62 6c 65   True if a table
0980: 20 72 65 71 75 69 72 69 6e 67 20 69 6e 74 65 67   requiring integ
0990: 65 72 20 6b 65 79 73 20 2a 2f 0a 20 20 42 6f 6f  er keys */.  Boo
09a0: 6c 20 69 73 49 6e 64 65 78 3b 20 20 20 20 20 20  l isIndex;      
09b0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e     /* True if an
09c0: 20 69 6e 64 65 78 20 63 6f 6e 74 61 69 6e 69 6e   index containin
09d0: 67 20 6b 65 79 73 20 6f 6e 6c 79 20 2d 20 6e 6f  g keys only - no
09e0: 20 64 61 74 61 20 2a 2f 0a 20 20 42 6f 6f 6c 20   data */.  Bool 
09f0: 69 73 4f 72 64 65 72 65 64 3b 20 20 20 20 20 20  isOrdered;      
0a00: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
0a10: 75 6e 64 65 72 6c 79 69 6e 67 20 74 61 62 6c 65  underlying table
0a20: 20 69 73 20 42 54 52 45 45 5f 55 4e 4f 52 44 45   is BTREE_UNORDE
0a30: 52 45 44 20 2a 2f 0a 20 20 42 6f 6f 6c 20 69 73  RED */.  Bool is
0a40: 53 6f 72 74 65 72 3b 20 20 20 20 20 20 20 20 2f  Sorter;        /
0a50: 2a 20 54 72 75 65 20 69 66 20 61 20 6e 65 77 2d  * True if a new-
0a60: 73 74 79 6c 65 20 73 6f 72 74 65 72 20 2a 2f 0a  style sorter */.
0a70: 20 20 42 6f 6f 6c 20 6d 75 6c 74 69 50 73 65 75    Bool multiPseu
0a80: 64 6f 3b 20 20 20 20 20 2f 2a 20 4d 75 6c 74 69  do;     /* Multi
0a90: 2d 72 65 67 69 73 74 65 72 20 70 73 65 75 64 6f  -register pseudo
0aa0: 2d 63 75 72 73 6f 72 20 2a 2f 0a 20 20 73 71 6c  -cursor */.  sql
0ab0: 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
0ac0: 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 20 20   *pVtabCursor;  
0ad0: 2f 2a 20 54 68 65 20 63 75 72 73 6f 72 20 66 6f  /* The cursor fo
0ae0: 72 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  r a virtual tabl
0af0: 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 73 71 6c  e */.  const sql
0b00: 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
0b10: 64 75 6c 65 3b 20 20 20 20 20 2f 2a 20 4d 6f 64  dule;     /* Mod
0b20: 75 6c 65 20 66 6f 72 20 63 75 72 73 6f 72 20 70  ule for cursor p
0b30: 56 74 61 62 43 75 72 73 6f 72 20 2a 2f 0a 20 20  VtabCursor */.  
0b40: 69 36 34 20 73 65 71 43 6f 75 6e 74 3b 20 20 20  i64 seqCount;   
0b50: 20 20 20 20 20 20 2f 2a 20 53 65 71 75 65 6e 63        /* Sequenc
0b60: 65 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  e counter */.  i
0b70: 36 34 20 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b  64 movetoTarget;
0b80: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
0b90: 20 74 6f 20 74 68 65 20 64 65 66 65 72 72 65 64   to the deferred
0ba0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
0bb0: 65 74 6f 28 29 20 2a 2f 0a 20 20 69 36 34 20 6c  eto() */.  i64 l
0bc0: 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20  astRowid;       
0bd0: 20 2f 2a 20 4c 61 73 74 20 72 6f 77 69 64 20 66   /* Last rowid f
0be0: 72 6f 6d 20 61 20 4e 65 78 74 20 6f 72 20 4e 65  rom a Next or Ne
0bf0: 78 74 49 64 78 20 6f 70 65 72 61 74 69 6f 6e 20  xtIdx operation 
0c00: 2a 2f 0a 20 20 56 64 62 65 53 6f 72 74 65 72 20  */.  VdbeSorter 
0c10: 2a 70 53 6f 72 74 65 72 3b 20 20 2f 2a 20 53 6f  *pSorter;  /* So
0c20: 72 74 65 72 20 6f 62 6a 65 63 74 20 66 6f 72 20  rter object for 
0c30: 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 20 63 75  OP_SorterOpen cu
0c40: 72 73 6f 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 52  rsors */..  /* R
0c50: 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20 73 71  esult of last sq
0c60: 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
0c70: 28 29 20 64 6f 6e 65 20 62 79 20 61 6e 20 4f 50  () done by an OP
0c80: 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 20 0a 20  _NotExists or . 
0c90: 20 2a 2a 20 4f 50 5f 49 73 55 6e 69 71 75 65 20   ** OP_IsUnique 
0ca0: 6f 70 63 6f 64 65 20 6f 6e 20 74 68 69 73 20 63  opcode on this c
0cb0: 75 72 73 6f 72 2e 20 2a 2f 0a 20 20 69 6e 74 20  ursor. */.  int 
0cc0: 73 65 65 6b 52 65 73 75 6c 74 3b 0a 0a 20 20 2f  seekResult;..  /
0cd0: 2a 20 43 61 63 68 65 64 20 69 6e 66 6f 72 6d 61  * Cached informa
0ce0: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 68  tion about the h
0cf0: 65 61 64 65 72 20 66 6f 72 20 74 68 65 20 64 61  eader for the da
0d00: 74 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 74  ta record that t
0d10: 68 65 0a 20 20 2a 2a 20 63 75 72 73 6f 72 20 69  he.  ** cursor i
0d20: 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
0d30: 74 69 6e 67 20 74 6f 2e 20 20 4f 6e 6c 79 20 76  ting to.  Only v
0d40: 61 6c 69 64 20 69 66 20 63 61 63 68 65 53 74 61  alid if cacheSta
0d50: 74 75 73 20 6d 61 74 63 68 65 73 0a 20 20 2a 2a  tus matches.  **
0d60: 20 56 64 62 65 2e 63 61 63 68 65 43 74 72 2e 20   Vdbe.cacheCtr. 
0d70: 20 56 64 62 65 2e 63 61 63 68 65 43 74 72 20 77   Vdbe.cacheCtr w
0d80: 69 6c 6c 20 6e 65 76 65 72 20 74 61 6b 65 20 6f  ill never take o
0d90: 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 0a 20  n the value of. 
0da0: 20 2a 2a 20 43 41 43 48 45 5f 53 54 41 4c 45 20   ** CACHE_STALE 
0db0: 61 6e 64 20 73 6f 20 73 65 74 74 69 6e 67 20 63  and so setting c
0dc0: 61 63 68 65 53 74 61 74 75 73 3d 43 41 43 48 45  acheStatus=CACHE
0dd0: 5f 53 54 41 4c 45 20 67 75 61 72 61 6e 74 65 65  _STALE guarantee
0de0: 73 20 74 68 61 74 0a 20 20 2a 2a 20 74 68 65 20  s that.  ** the 
0df0: 63 61 63 68 65 20 69 73 20 6f 75 74 20 6f 66 20  cache is out of 
0e00: 64 61 74 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  date..  **.  ** 
0e10: 61 52 6f 77 20 6d 69 67 68 74 20 70 6f 69 6e 74  aRow might point
0e20: 20 74 6f 20 28 65 70 68 65 6d 65 72 61 6c 29 20   to (ephemeral) 
0e30: 64 61 74 61 20 66 6f 72 20 74 68 65 20 63 75 72  data for the cur
0e40: 72 65 6e 74 20 72 6f 77 2c 20 6f 72 20 69 74 20  rent row, or it 
0e50: 6d 69 67 68 74 0a 20 20 2a 2a 20 62 65 20 4e 55  might.  ** be NU
0e60: 4c 4c 2e 0a 20 20 2a 2f 0a 20 20 75 33 32 20 63  LL..  */.  u32 c
0e70: 61 63 68 65 53 74 61 74 75 73 3b 20 20 20 20 20  acheStatus;     
0e80: 20 2f 2a 20 43 61 63 68 65 20 69 73 20 76 61 6c   /* Cache is val
0e90: 69 64 20 69 66 20 74 68 69 73 20 6d 61 74 63 68  id if this match
0ea0: 65 73 20 56 64 62 65 2e 63 61 63 68 65 43 74 72  es Vdbe.cacheCtr
0eb0: 20 2a 2f 0a 20 20 69 6e 74 20 70 61 79 6c 6f 61   */.  int payloa
0ec0: 64 53 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 54  dSize;      /* T
0ed0: 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62  otal number of b
0ee0: 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ytes in the reco
0ef0: 72 64 20 2a 2f 0a 20 20 75 33 32 20 2a 61 54 79  rd */.  u32 *aTy
0f00: 70 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  pe;           /*
0f10: 20 54 79 70 65 20 76 61 6c 75 65 73 20 66 6f 72   Type values for
0f20: 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 69 6e 20   all entries in 
0f30: 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
0f40: 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20  u32 *aOffset;   
0f50: 20 20 20 20 20 20 2f 2a 20 43 61 63 68 65 64 20        /* Cached 
0f60: 6f 66 66 73 65 74 73 20 74 6f 20 74 68 65 20 73  offsets to the s
0f70: 74 61 72 74 20 6f 66 20 65 61 63 68 20 63 6f 6c  tart of each col
0f80: 75 6d 6e 73 20 64 61 74 61 20 2a 2f 0a 20 20 75  umns data */.  u
0f90: 38 20 2a 61 52 6f 77 3b 20 20 20 20 20 20 20 20  8 *aRow;        
0fa0: 20 20 20 20 20 2f 2a 20 44 61 74 61 20 66 6f 72       /* Data for
0fb0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
0fc0: 2c 20 69 66 20 61 6c 6c 20 6f 6e 20 6f 6e 65 20  , if all on one 
0fd0: 70 61 67 65 20 2a 2f 0a 7d 3b 0a 74 79 70 65 64  page */.};.typed
0fe0: 65 66 20 73 74 72 75 63 74 20 56 64 62 65 43 75  ef struct VdbeCu
0ff0: 72 73 6f 72 20 56 64 62 65 43 75 72 73 6f 72 3b  rsor VdbeCursor;
1000: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 73  ../*.** When a s
1010: 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 65 78  ub-program is ex
1020: 65 63 75 74 65 64 20 28 4f 50 5f 50 72 6f 67 72  ecuted (OP_Progr
1030: 61 6d 29 2c 20 61 20 73 74 72 75 63 74 75 72 65  am), a structure
1040: 20 6f 66 20 74 68 69 73 20 74 79 70 65 0a 2a 2a   of this type.**
1050: 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 74 6f   is allocated to
1060: 20 73 74 6f 72 65 20 74 68 65 20 63 75 72 72 65   store the curre
1070: 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  nt value of the 
1080: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 2c  program counter,
1090: 20 61 73 0a 2a 2a 20 77 65 6c 6c 20 61 73 20 74   as.** well as t
10a0: 68 65 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72  he current memor
10b0: 79 20 63 65 6c 6c 20 61 72 72 61 79 20 61 6e 64  y cell array and
10c0: 20 76 61 72 69 6f 75 73 20 6f 74 68 65 72 20 66   various other f
10d0: 72 61 6d 65 20 73 70 65 63 69 66 69 63 0a 2a 2a  rame specific.**
10e0: 20 76 61 6c 75 65 73 20 73 74 6f 72 65 64 20 69   values stored i
10f0: 6e 20 74 68 65 20 56 64 62 65 20 73 74 72 75 63  n the Vdbe struc
1100: 74 2e 20 57 68 65 6e 20 74 68 65 20 73 75 62 2d  t. When the sub-
1110: 70 72 6f 67 72 61 6d 20 69 73 20 66 69 6e 69 73  program is finis
1120: 68 65 64 2c 20 0a 2a 2a 20 74 68 65 73 65 20 76  hed, .** these v
1130: 61 6c 75 65 73 20 61 72 65 20 63 6f 70 69 65 64  alues are copied
1140: 20 62 61 63 6b 20 74 6f 20 74 68 65 20 56 64 62   back to the Vdb
1150: 65 20 66 72 6f 6d 20 74 68 65 20 56 64 62 65 46  e from the VdbeF
1160: 72 61 6d 65 20 73 74 72 75 63 74 75 72 65 2c 0a  rame structure,.
1170: 2a 2a 20 72 65 73 74 6f 72 69 6e 67 20 74 68 65  ** restoring the
1180: 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 56 4d   state of the VM
1190: 20 74 6f 20 61 73 20 69 74 20 77 61 73 20 62 65   to as it was be
11a0: 66 6f 72 65 20 74 68 65 20 73 75 62 2d 70 72 6f  fore the sub-pro
11b0: 67 72 61 6d 0a 2a 2a 20 62 65 67 61 6e 20 65 78  gram.** began ex
11c0: 65 63 75 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54  ecuting..**.** T
11d0: 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 61 20  he memory for a 
11e0: 56 64 62 65 46 72 61 6d 65 20 6f 62 6a 65 63 74  VdbeFrame object
11f0: 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e   is allocated an
1200: 64 20 6d 61 6e 61 67 65 64 20 62 79 20 61 20 6d  d managed by a m
1210: 65 6d 6f 72 79 0a 2a 2a 20 63 65 6c 6c 20 69 6e  emory.** cell in
1220: 20 74 68 65 20 70 61 72 65 6e 74 20 28 63 61 6c   the parent (cal
1230: 6c 69 6e 67 29 20 66 72 61 6d 65 2e 20 57 68 65  ling) frame. Whe
1240: 6e 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  n the memory cel
1250: 6c 20 69 73 20 64 65 6c 65 74 65 64 20 6f 72 0a  l is deleted or.
1260: 2a 2a 20 6f 76 65 72 77 72 69 74 74 65 6e 2c 20  ** overwritten, 
1270: 74 68 65 20 56 64 62 65 46 72 61 6d 65 20 6f 62  the VdbeFrame ob
1280: 6a 65 63 74 20 69 73 20 6e 6f 74 20 66 72 65 65  ject is not free
1290: 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49  d immediately. I
12a0: 6e 73 74 65 61 64 2c 20 69 74 0a 2a 2a 20 69 73  nstead, it.** is
12b0: 20 6c 69 6e 6b 65 64 20 69 6e 74 6f 20 74 68 65   linked into the
12c0: 20 56 64 62 65 2e 70 44 65 6c 46 72 61 6d 65 20   Vdbe.pDelFrame 
12d0: 6c 69 73 74 2e 20 54 68 65 20 63 6f 6e 74 65 6e  list. The conten
12e0: 74 73 20 6f 66 20 74 68 65 20 56 64 62 65 2e 70  ts of the Vdbe.p
12f0: 44 65 6c 46 72 61 6d 65 0a 2a 2a 20 6c 69 73 74  DelFrame.** list
1300: 20 69 73 20 64 65 6c 65 74 65 64 20 77 68 65 6e   is deleted when
1310: 20 74 68 65 20 56 4d 20 69 73 20 72 65 73 65 74   the VM is reset
1320: 20 69 6e 20 56 64 62 65 48 61 6c 74 28 29 2e 20   in VdbeHalt(). 
1330: 54 68 65 20 72 65 61 73 6f 6e 20 66 6f 72 20 64  The reason for d
1340: 6f 69 6e 67 0a 2a 2a 20 74 68 69 73 20 69 6e 73  oing.** this ins
1350: 74 65 61 64 20 6f 66 20 64 65 6c 65 74 69 6e 67  tead of deleting
1360: 20 74 68 65 20 56 64 62 65 46 72 61 6d 65 20 69   the VdbeFrame i
1370: 6d 6d 65 64 69 61 74 65 6c 79 20 69 73 20 74 6f  mmediately is to
1380: 20 61 76 6f 69 64 20 72 65 63 75 72 73 69 76 65   avoid recursive
1390: 0a 2a 2a 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c  .** calls to sql
13a0: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
13b0: 73 65 28 29 20 77 68 65 6e 20 74 68 65 20 6d 65  se() when the me
13c0: 6d 6f 72 79 20 63 65 6c 6c 73 20 62 65 6c 6f 6e  mory cells belon
13d0: 67 69 6e 67 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ging to the.** c
13e0: 68 69 6c 64 20 66 72 61 6d 65 20 61 72 65 20 72  hild frame are r
13f0: 65 6c 65 61 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  eleased..**.** T
1400: 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65  he currently exe
1410: 63 75 74 69 6e 67 20 66 72 61 6d 65 20 69 73 20  cuting frame is 
1420: 73 74 6f 72 65 64 20 69 6e 20 56 64 62 65 2e 70  stored in Vdbe.p
1430: 46 72 61 6d 65 2e 20 56 64 62 65 2e 70 46 72 61  Frame. Vdbe.pFra
1440: 6d 65 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20  me is.** set to 
1450: 4e 55 4c 4c 20 69 66 20 74 68 65 20 63 75 72 72  NULL if the curr
1460: 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
1470: 66 72 61 6d 65 20 69 73 20 74 68 65 20 6d 61 69  frame is the mai
1480: 6e 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 74 79  n program..*/.ty
1490: 70 65 64 65 66 20 73 74 72 75 63 74 20 56 64 62  pedef struct Vdb
14a0: 65 46 72 61 6d 65 20 56 64 62 65 46 72 61 6d 65  eFrame VdbeFrame
14b0: 3b 0a 73 74 72 75 63 74 20 56 64 62 65 46 72 61  ;.struct VdbeFra
14c0: 6d 65 20 7b 0a 20 20 56 64 62 65 20 2a 76 3b 20  me {.  Vdbe *v; 
14d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14e0: 2a 20 56 4d 20 74 68 69 73 20 66 72 61 6d 65 20  * VM this frame 
14f0: 62 65 6c 6f 6e 67 73 20 74 6f 20 2a 2f 0a 20 20  belongs to */.  
1500: 56 64 62 65 46 72 61 6d 65 20 2a 70 50 61 72 65  VdbeFrame *pPare
1510: 6e 74 3b 20 20 20 20 20 2f 2a 20 50 61 72 65 6e  nt;     /* Paren
1520: 74 20 6f 66 20 74 68 69 73 20 66 72 61 6d 65 2c  t of this frame,
1530: 20 6f 72 20 4e 55 4c 4c 20 69 66 20 70 61 72 65   or NULL if pare
1540: 6e 74 20 69 73 20 6d 61 69 6e 20 2a 2f 0a 20 20  nt is main */.  
1550: 4f 70 20 2a 61 4f 70 3b 20 20 20 20 20 20 20 20  Op *aOp;        
1560: 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f 67 72          /* Progr
1570: 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  am instructions 
1580: 66 6f 72 20 70 61 72 65 6e 74 20 66 72 61 6d 65  for parent frame
1590: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b   */.  Mem *aMem;
15a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
15b0: 20 41 72 72 61 79 20 6f 66 20 6d 65 6d 6f 72 79   Array of memory
15c0: 20 63 65 6c 6c 73 20 66 6f 72 20 70 61 72 65 6e   cells for paren
15d0: 74 20 66 72 61 6d 65 20 2a 2f 0a 20 20 75 38 20  t frame */.  u8 
15e0: 2a 61 4f 6e 63 65 46 6c 61 67 3b 20 20 20 20 20  *aOnceFlag;     
15f0: 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
1600: 20 4f 50 5f 4f 6e 63 65 20 66 6c 61 67 73 20 66   OP_Once flags f
1610: 6f 72 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20  or parent frame 
1620: 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
1630: 2a 2a 61 70 43 73 72 3b 20 20 20 20 20 2f 2a 20  **apCsr;     /* 
1640: 41 72 72 61 79 20 6f 66 20 56 64 62 65 20 63 75  Array of Vdbe cu
1650: 72 73 6f 72 73 20 66 6f 72 20 70 61 72 65 6e 74  rsors for parent
1660: 20 66 72 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64   frame */.  void
1670: 20 2a 74 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20   *token;        
1680: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 53      /* Copy of S
1690: 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20  ubProgram.token 
16a0: 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77  */.  i64 lastRow
16b0: 69 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  id;          /* 
16c0: 4c 61 73 74 20 69 6e 73 65 72 74 20 72 6f 77 69  Last insert rowi
16d0: 64 20 28 73 71 6c 69 74 65 33 2e 6c 61 73 74 52  d (sqlite3.lastR
16e0: 6f 77 69 64 29 20 2a 2f 0a 20 20 75 31 36 20 6e  owid) */.  u16 n
16f0: 43 75 72 73 6f 72 3b 20 20 20 20 20 20 20 20 20  Cursor;         
1700: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1710: 65 6e 74 72 69 65 73 20 69 6e 20 61 70 43 73 72  entries in apCsr
1720: 20 2a 2f 0a 20 20 69 6e 74 20 70 63 3b 20 20 20   */.  int pc;   
1730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1740: 20 50 72 6f 67 72 61 6d 20 43 6f 75 6e 74 65 72   Program Counter
1750: 20 69 6e 20 70 61 72 65 6e 74 20 28 63 61 6c 6c   in parent (call
1760: 69 6e 67 29 20 66 72 61 6d 65 20 2a 2f 0a 20 20  ing) frame */.  
1770: 69 6e 74 20 6e 4f 70 3b 20 20 20 20 20 20 20 20  int nOp;        
1780: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
1790: 6f 66 20 61 4f 70 20 61 72 72 61 79 20 2a 2f 0a  of aOp array */.
17a0: 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
17b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17c0: 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
17d0: 6e 20 61 4d 65 6d 20 2a 2f 0a 20 20 69 6e 74 20  n aMem */.  int 
17e0: 6e 4f 6e 63 65 46 6c 61 67 3b 20 20 20 20 20 20  nOnceFlag;      
17f0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1800: 20 65 6e 74 72 69 65 73 20 69 6e 20 61 4f 6e 63   entries in aOnc
1810: 65 46 6c 61 67 20 2a 2f 0a 20 20 69 6e 74 20 6e  eFlag */.  int n
1820: 43 68 69 6c 64 4d 65 6d 3b 20 20 20 20 20 20 20  ChildMem;       
1830: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1840: 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f 72  memory cells for
1850: 20 63 68 69 6c 64 20 66 72 61 6d 65 20 2a 2f 0a   child frame */.
1860: 20 20 69 6e 74 20 6e 43 68 69 6c 64 43 73 72 3b    int nChildCsr;
1870: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1880: 62 65 72 20 6f 66 20 63 75 72 73 6f 72 73 20 66  ber of cursors f
1890: 6f 72 20 63 68 69 6c 64 20 66 72 61 6d 65 20 2a  or child frame *
18a0: 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  /.  int nChange;
18b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
18c0: 74 61 74 65 6d 65 6e 74 20 63 68 61 6e 67 65 73  tatement changes
18d0: 20 28 56 64 62 65 2e 6e 43 68 61 6e 67 65 73 29   (Vdbe.nChanges)
18e0: 20 20 20 20 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66       */.};..#def
18f0: 69 6e 65 20 56 64 62 65 46 72 61 6d 65 4d 65 6d  ine VdbeFrameMem
1900: 28 70 29 20 28 28 4d 65 6d 20 2a 29 26 28 28 75  (p) ((Mem *)&((u
1910: 38 20 2a 29 70 29 5b 52 4f 55 4e 44 38 28 73 69  8 *)p)[ROUND8(si
1920: 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29  zeof(VdbeFrame))
1930: 5d 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 76 61 6c 75  ])../*.** A valu
1940: 65 20 66 6f 72 20 56 64 62 65 43 75 72 73 6f 72  e for VdbeCursor
1950: 2e 63 61 63 68 65 56 61 6c 69 64 20 74 68 61 74  .cacheValid that
1960: 20 6d 65 61 6e 73 20 74 68 65 20 63 61 63 68 65   means the cache
1970: 20 69 73 20 61 6c 77 61 79 73 20 69 6e 76 61 6c   is always inval
1980: 69 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  id..*/.#define C
1990: 41 43 48 45 5f 53 54 41 4c 45 20 30 0a 0a 2f 2a  ACHE_STALE 0../*
19a0: 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 6c 79 2c 20  .** Internally, 
19b0: 74 68 65 20 76 64 62 65 20 6d 61 6e 69 70 75 6c  the vdbe manipul
19c0: 61 74 65 73 20 6e 65 61 72 6c 79 20 61 6c 6c 20  ates nearly all 
19d0: 53 51 4c 20 76 61 6c 75 65 73 20 61 73 20 4d 65  SQL values as Me
19e0: 6d 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 73 2e  m.** structures.
19f0: 20 45 61 63 68 20 4d 65 6d 20 73 74 72 75 63 74   Each Mem struct
1a00: 20 6d 61 79 20 63 61 63 68 65 20 6d 75 6c 74 69   may cache multi
1a10: 70 6c 65 20 72 65 70 72 65 73 65 6e 74 61 74 69  ple representati
1a20: 6f 6e 73 20 28 73 74 72 69 6e 67 2c 0a 2a 2a 20  ons (string,.** 
1a30: 69 6e 74 65 67 65 72 20 65 74 63 2e 29 20 6f 66  integer etc.) of
1a40: 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 2e   the same value.
1a50: 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 65 6d 20 7b  .*/.struct Mem {
1a60: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
1a70: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 73         /* The as
1a80: 73 6f 63 69 61 74 65 64 20 64 61 74 61 62 61 73  sociated databas
1a90: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  e connection */.
1aa0: 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20    char *z;      
1ab0: 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
1ac0: 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 20 2a 2f  or BLOB value */
1ad0: 0a 20 20 64 6f 75 62 6c 65 20 72 3b 20 20 20 20  .  double r;    
1ae0: 20 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76         /* Real v
1af0: 61 6c 75 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  alue */.  union 
1b00: 7b 0a 20 20 20 20 69 36 34 20 69 3b 20 20 20 20  {.    i64 i;    
1b10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74            /* Int
1b20: 65 67 65 72 20 76 61 6c 75 65 20 75 73 65 64 20  eger value used 
1b30: 77 68 65 6e 20 4d 45 4d 5f 49 6e 74 20 69 73 20  when MEM_Int is 
1b40: 73 65 74 20 69 6e 20 66 6c 61 67 73 20 2a 2f 0a  set in flags */.
1b50: 20 20 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20      int nZero;  
1b60: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20          /* Used 
1b70: 77 68 65 6e 20 62 69 74 20 4d 45 4d 5f 5a 65 72  when bit MEM_Zer
1b80: 6f 20 69 73 20 73 65 74 20 69 6e 20 66 6c 61 67  o is set in flag
1b90: 73 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66  s */.    FuncDef
1ba0: 20 2a 70 44 65 66 3b 20 20 20 20 20 20 2f 2a 20   *pDef;      /* 
1bb0: 55 73 65 64 20 6f 6e 6c 79 20 77 68 65 6e 20 66  Used only when f
1bc0: 6c 61 67 73 3d 3d 4d 45 4d 5f 41 67 67 20 2a 2f  lags==MEM_Agg */
1bd0: 0a 20 20 20 20 52 6f 77 53 65 74 20 2a 70 52 6f  .    RowSet *pRo
1be0: 77 53 65 74 3b 20 20 20 20 2f 2a 20 55 73 65 64  wSet;    /* Used
1bf0: 20 6f 6e 6c 79 20 77 68 65 6e 20 66 6c 61 67 73   only when flags
1c00: 3d 3d 4d 45 4d 5f 52 6f 77 53 65 74 20 2a 2f 0a  ==MEM_RowSet */.
1c10: 20 20 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70      VdbeFrame *p
1c20: 46 72 61 6d 65 3b 20 20 2f 2a 20 55 73 65 64 20  Frame;  /* Used 
1c30: 77 68 65 6e 20 66 6c 61 67 73 3d 3d 4d 45 4d 5f  when flags==MEM_
1c40: 46 72 61 6d 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a  Frame */.  } u;.
1c50: 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
1c60: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1c70: 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  of characters in
1c80: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 2c 20 65   string value, e
1c90: 78 63 6c 75 64 69 6e 67 20 27 5c 30 27 20 2a 2f  xcluding '\0' */
1ca0: 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20  .  u16 flags;   
1cb0: 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63         /* Some c
1cc0: 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4d 45  ombination of ME
1cd0: 4d 5f 4e 75 6c 6c 2c 20 4d 45 4d 5f 53 74 72 2c  M_Null, MEM_Str,
1ce0: 20 4d 45 4d 5f 44 79 6e 2c 20 65 74 63 2e 20 2a   MEM_Dyn, etc. *
1cf0: 2f 0a 20 20 75 38 20 20 74 79 70 65 3b 20 20 20  /.  u8  type;   
1d00: 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
1d10: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 53  f SQLITE_NULL, S
1d20: 51 4c 49 54 45 5f 54 45 58 54 2c 20 53 51 4c 49  QLITE_TEXT, SQLI
1d30: 54 45 5f 49 4e 54 45 47 45 52 2c 20 65 74 63 20  TE_INTEGER, etc 
1d40: 2a 2f 0a 20 20 75 38 20 20 65 6e 63 3b 20 20 20  */.  u8  enc;   
1d50: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49           /* SQLI
1d60: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
1d70: 55 54 46 31 36 42 45 2c 20 53 51 4c 49 54 45 5f  UTF16BE, SQLITE_
1d80: 55 54 46 31 36 4c 45 20 2a 2f 0a 23 69 66 64 65  UTF16LE */.#ifde
1d90: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1da0: 20 4d 65 6d 20 2a 70 53 63 6f 70 79 46 72 6f 6d   Mem *pScopyFrom
1db0: 3b 20 20 20 20 2f 2a 20 54 68 69 73 20 4d 65 6d  ;    /* This Mem
1dc0: 20 69 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f   is a shallow co
1dd0: 70 79 20 6f 66 20 70 53 63 6f 70 79 46 72 6f 6d  py of pScopyFrom
1de0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 46 69 6c   */.  void *pFil
1df0: 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 53 6f 20  ler;      /* So 
1e00: 74 68 61 74 20 73 69 7a 65 6f 66 28 4d 65 6d 29  that sizeof(Mem)
1e10: 20 69 73 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f   is a multiple o
1e20: 66 20 38 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  f 8 */.#endif.  
1e30: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
1e40: 64 20 2a 29 3b 20 20 2f 2a 20 49 66 20 6e 6f 74  d *);  /* If not
1e50: 20 6e 75 6c 6c 2c 20 63 61 6c 6c 20 74 68 69 73   null, call this
1e60: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 64 65 6c   function to del
1e70: 65 74 65 20 4d 65 6d 2e 7a 20 2a 2f 0a 20 20 63  ete Mem.z */.  c
1e80: 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20 20 20  har *zMalloc;   
1e90: 20 20 20 2f 2a 20 44 79 6e 61 6d 69 63 20 62 75     /* Dynamic bu
1ea0: 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 20 62  ffer allocated b
1eb0: 79 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  y sqlite3_malloc
1ec0: 28 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 4f 6e 65  () */.};../* One
1ed0: 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20   or more of the 
1ee0: 66 6f 6c 6c 6f 77 69 6e 67 20 66 6c 61 67 73 20  following flags 
1ef0: 61 72 65 20 73 65 74 20 74 6f 20 69 6e 64 69 63  are set to indic
1f00: 61 74 65 20 74 68 65 20 76 61 6c 69 64 4f 4b 0a  ate the validOK.
1f10: 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ** representatio
1f20: 6e 73 20 6f 66 20 74 68 65 20 76 61 6c 75 65 20  ns of the value 
1f30: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 4d 65  stored in the Me
1f40: 6d 20 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20  m struct..**.** 
1f50: 49 66 20 74 68 65 20 4d 45 4d 5f 4e 75 6c 6c 20  If the MEM_Null 
1f60: 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
1f70: 6e 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 61  n the value is a
1f80: 6e 20 53 51 4c 20 4e 55 4c 4c 20 76 61 6c 75 65  n SQL NULL value
1f90: 2e 0a 2a 2a 20 4e 6f 20 6f 74 68 65 72 20 66 6c  ..** No other fl
1fa0: 61 67 73 20 6d 61 79 20 62 65 20 73 65 74 20 69  ags may be set i
1fb0: 6e 20 74 68 69 73 20 63 61 73 65 2e 0a 2a 2a 0a  n this case..**.
1fc0: 2a 2a 20 49 66 20 74 68 65 20 4d 45 4d 5f 53 74  ** If the MEM_St
1fd0: 72 20 66 6c 61 67 20 69 73 20 73 65 74 20 74 68  r flag is set th
1fe0: 65 6e 20 4d 65 6d 2e 7a 20 70 6f 69 6e 74 73 20  en Mem.z points 
1ff0: 61 74 20 61 20 73 74 72 69 6e 67 20 72 65 70 72  at a string repr
2000: 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 20 55  esentation..** U
2010: 73 75 61 6c 6c 79 20 74 68 69 73 20 69 73 20 65  sually this is e
2020: 6e 63 6f 64 65 64 20 69 6e 20 74 68 65 20 73 61  ncoded in the sa
2030: 6d 65 20 75 6e 69 63 6f 64 65 20 65 6e 63 6f 64  me unicode encod
2040: 69 6e 67 20 61 73 20 74 68 65 20 6d 61 69 6e 0a  ing as the main.
2050: 2a 2a 20 64 61 74 61 62 61 73 65 20 28 73 65 65  ** database (see
2060: 20 62 65 6c 6f 77 20 66 6f 72 20 65 78 63 65 70   below for excep
2070: 74 69 6f 6e 73 29 2e 20 49 66 20 74 68 65 20 4d  tions). If the M
2080: 45 4d 5f 54 65 72 6d 20 66 6c 61 67 20 69 73 20  EM_Term flag is 
2090: 61 6c 73 6f 0a 2a 2a 20 73 65 74 2c 20 74 68 65  also.** set, the
20a0: 6e 20 74 68 65 20 73 74 72 69 6e 67 20 69 73 20  n the string is 
20b0: 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 2e 20  nul terminated. 
20c0: 54 68 65 20 4d 45 4d 5f 49 6e 74 20 61 6e 64 20  The MEM_Int and 
20d0: 4d 45 4d 5f 52 65 61 6c 20 0a 2a 2a 20 66 6c 61  MEM_Real .** fla
20e0: 67 73 20 6d 61 79 20 63 6f 65 78 69 73 74 20 77  gs may coexist w
20f0: 69 74 68 20 74 68 65 20 4d 45 4d 5f 53 74 72 20  ith the MEM_Str 
2100: 66 6c 61 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  flag..*/.#define
2110: 20 4d 45 4d 5f 4e 75 6c 6c 20 20 20 20 20 20 30   MEM_Null      0
2120: 78 30 30 30 31 20 20 20 2f 2a 20 56 61 6c 75 65  x0001   /* Value
2130: 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   is NULL */.#def
2140: 69 6e 65 20 4d 45 4d 5f 53 74 72 20 20 20 20 20  ine MEM_Str     
2150: 20 20 30 78 30 30 30 32 20 20 20 2f 2a 20 56 61    0x0002   /* Va
2160: 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e 67 20  lue is a string 
2170: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f 49  */.#define MEM_I
2180: 6e 74 20 20 20 20 20 20 20 30 78 30 30 30 34 20  nt       0x0004 
2190: 20 20 2f 2a 20 56 61 6c 75 65 20 69 73 20 61 6e    /* Value is an
21a0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 23 64 65 66   integer */.#def
21b0: 69 6e 65 20 4d 45 4d 5f 52 65 61 6c 20 20 20 20  ine MEM_Real    
21c0: 20 20 30 78 30 30 30 38 20 20 20 2f 2a 20 56 61    0x0008   /* Va
21d0: 6c 75 65 20 69 73 20 61 20 72 65 61 6c 20 6e 75  lue is a real nu
21e0: 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mber */.#define 
21f0: 4d 45 4d 5f 42 6c 6f 62 20 20 20 20 20 20 30 78  MEM_Blob      0x
2200: 30 30 31 30 20 20 20 2f 2a 20 56 61 6c 75 65 20  0010   /* Value 
2210: 69 73 20 61 20 42 4c 4f 42 20 2a 2f 0a 23 64 65  is a BLOB */.#de
2220: 66 69 6e 65 20 4d 45 4d 5f 52 6f 77 53 65 74 20  fine MEM_RowSet 
2230: 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 56     0x0020   /* V
2240: 61 6c 75 65 20 69 73 20 61 20 52 6f 77 53 65 74  alue is a RowSet
2250: 20 6f 62 6a 65 63 74 20 2a 2f 0a 23 64 65 66 69   object */.#defi
2260: 6e 65 20 4d 45 4d 5f 46 72 61 6d 65 20 20 20 20  ne MEM_Frame    
2270: 20 30 78 30 30 34 30 20 20 20 2f 2a 20 56 61 6c   0x0040   /* Val
2280: 75 65 20 69 73 20 61 20 56 64 62 65 46 72 61 6d  ue is a VdbeFram
2290: 65 20 6f 62 6a 65 63 74 20 2a 2f 0a 23 64 65 66  e object */.#def
22a0: 69 6e 65 20 4d 45 4d 5f 49 6e 76 61 6c 69 64 20  ine MEM_Invalid 
22b0: 20 20 30 78 30 30 38 30 20 20 20 2f 2a 20 56 61    0x0080   /* Va
22c0: 6c 75 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64  lue is undefined
22d0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f   */.#define MEM_
22e0: 43 6c 65 61 72 65 64 20 20 20 30 78 30 31 30 30  Cleared   0x0100
22f0: 20 20 20 2f 2a 20 4e 55 4c 4c 20 73 65 74 20 62     /* NULL set b
2300: 79 20 4f 50 5f 4e 75 6c 6c 2c 20 6e 6f 74 20 66  y OP_Null, not f
2310: 72 6f 6d 20 64 61 74 61 20 2a 2f 0a 23 64 65 66  rom data */.#def
2320: 69 6e 65 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  ine MEM_TypeMask
2330: 20 20 30 78 30 31 66 66 20 20 20 2f 2a 20 4d 61    0x01ff   /* Ma
2340: 73 6b 20 6f 66 20 74 79 70 65 20 62 69 74 73 20  sk of type bits 
2350: 2a 2f 0a 0a 0a 2f 2a 20 57 68 65 6e 65 76 65 72  */.../* Whenever
2360: 20 4d 65 6d 20 63 6f 6e 74 61 69 6e 73 20 61 20   Mem contains a 
2370: 76 61 6c 69 64 20 73 74 72 69 6e 67 20 6f 72 20  valid string or 
2380: 62 6c 6f 62 20 72 65 70 72 65 73 65 6e 74 61 74  blob representat
2390: 69 6f 6e 2c 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74  ion, one of.** t
23a0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6c 61  he following fla
23b0: 67 73 20 6d 75 73 74 20 62 65 20 73 65 74 20 74  gs must be set t
23c0: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
23d0: 6d 65 6d 6f 72 79 20 6d 61 6e 61 67 65 6d 65 6e  memory managemen
23e0: 74 0a 2a 2a 20 70 6f 6c 69 63 79 20 66 6f 72 20  t.** policy for 
23f0: 4d 65 6d 2e 7a 2e 20 20 54 68 65 20 4d 45 4d 5f  Mem.z.  The MEM_
2400: 54 65 72 6d 20 66 6c 61 67 20 74 65 6c 6c 73 20  Term flag tells 
2410: 75 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  us whether or no
2420: 74 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  t the.** string 
2430: 69 73 20 5c 30 30 30 20 6f 72 20 5c 75 30 30 30  is \000 or \u000
2440: 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 2a 2f 0a  0 terminated.*/.
2450: 23 64 65 66 69 6e 65 20 4d 45 4d 5f 54 65 72 6d  #define MEM_Term
2460: 20 20 20 20 20 20 30 78 30 32 30 30 20 20 20 2f        0x0200   /
2470: 2a 20 53 74 72 69 6e 67 20 72 65 70 20 69 73 20  * String rep is 
2480: 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 2a  nul terminated *
2490: 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f 44 79  /.#define MEM_Dy
24a0: 6e 20 20 20 20 20 20 20 30 78 30 34 30 30 20 20  n       0x0400  
24b0: 20 2f 2a 20 4e 65 65 64 20 74 6f 20 63 61 6c 6c   /* Need to call
24c0: 20 73 71 6c 69 74 65 46 72 65 65 28 29 20 6f 6e   sqliteFree() on
24d0: 20 4d 65 6d 2e 7a 20 2a 2f 0a 23 64 65 66 69 6e   Mem.z */.#defin
24e0: 65 20 4d 45 4d 5f 53 74 61 74 69 63 20 20 20 20  e MEM_Static    
24f0: 30 78 30 38 30 30 20 20 20 2f 2a 20 4d 65 6d 2e  0x0800   /* Mem.
2500: 7a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 73 74  z points to a st
2510: 61 74 69 63 20 73 74 72 69 6e 67 20 2a 2f 0a 23  atic string */.#
2520: 64 65 66 69 6e 65 20 4d 45 4d 5f 45 70 68 65 6d  define MEM_Ephem
2530: 20 20 20 20 20 30 78 31 30 30 30 20 20 20 2f 2a       0x1000   /*
2540: 20 4d 65 6d 2e 7a 20 70 6f 69 6e 74 73 20 74 6f   Mem.z points to
2550: 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74   an ephemeral st
2560: 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ring */.#define 
2570: 4d 45 4d 5f 41 67 67 20 20 20 20 20 20 20 30 78  MEM_Agg       0x
2580: 32 30 30 30 20 20 20 2f 2a 20 4d 65 6d 2e 7a 20  2000   /* Mem.z 
2590: 70 6f 69 6e 74 73 20 74 6f 20 61 6e 20 61 67 67  points to an agg
25a0: 20 66 75 6e 63 74 69 6f 6e 20 63 6f 6e 74 65 78   function contex
25b0: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  t */.#define MEM
25c0: 5f 5a 65 72 6f 20 20 20 20 20 20 30 78 34 30 30  _Zero      0x400
25d0: 30 20 20 20 2f 2a 20 4d 65 6d 2e 69 20 63 6f 6e  0   /* Mem.i con
25e0: 74 61 69 6e 73 20 63 6f 75 6e 74 20 6f 66 20 30  tains count of 0
25f0: 73 20 61 70 70 65 6e 64 65 64 20 74 6f 20 62 6c  s appended to bl
2600: 6f 62 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ob */.#ifdef SQL
2610: 49 54 45 5f 4f 4d 49 54 5f 49 4e 43 52 42 4c 4f  ITE_OMIT_INCRBLO
2620: 42 0a 20 20 23 75 6e 64 65 66 20 4d 45 4d 5f 5a  B.  #undef MEM_Z
2630: 65 72 6f 0a 20 20 23 64 65 66 69 6e 65 20 4d 45  ero.  #define ME
2640: 4d 5f 5a 65 72 6f 20 30 78 30 30 30 30 0a 23 65  M_Zero 0x0000.#e
2650: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6c 65 61  ndif../*.** Clea
2660: 72 20 61 6e 79 20 65 78 69 73 74 69 6e 67 20 74  r any existing t
2670: 79 70 65 20 66 6c 61 67 73 20 66 72 6f 6d 20 61  ype flags from a
2680: 20 4d 65 6d 20 61 6e 64 20 72 65 70 6c 61 63 65   Mem and replace
2690: 20 74 68 65 6d 20 77 69 74 68 20 66 0a 2a 2f 0a   them with f.*/.
26a0: 23 64 65 66 69 6e 65 20 4d 65 6d 53 65 74 54 79  #define MemSetTy
26b0: 70 65 46 6c 61 67 28 70 2c 20 66 29 20 5c 0a 20  peFlag(p, f) \. 
26c0: 20 20 28 28 70 29 2d 3e 66 6c 61 67 73 20 3d 20    ((p)->flags = 
26d0: 28 28 70 29 2d 3e 66 6c 61 67 73 26 7e 28 4d 45  ((p)->flags&~(ME
26e0: 4d 5f 54 79 70 65 4d 61 73 6b 7c 4d 45 4d 5f 5a  M_TypeMask|MEM_Z
26f0: 65 72 6f 29 29 7c 66 29 0a 0a 2f 2a 0a 2a 2a 20  ero))|f)../*.** 
2700: 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 61  Return true if a
2710: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20   memory cell is 
2720: 6e 6f 74 20 6d 61 72 6b 65 64 20 61 73 20 69 6e  not marked as in
2730: 76 61 6c 69 64 2e 20 20 54 68 69 73 20 6d 61 63  valid.  This mac
2740: 72 6f 0a 2a 2a 20 69 73 20 66 6f 72 20 75 73 65  ro.** is for use
2750: 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29   inside assert()
2760: 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79   statements only
2770: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
2780: 54 45 5f 44 45 42 55 47 0a 23 64 65 66 69 6e 65  TE_DEBUG.#define
2790: 20 6d 65 6d 49 73 56 61 6c 69 64 28 4d 29 20 20   memIsValid(M)  
27a0: 28 28 4d 29 2d 3e 66 6c 61 67 73 20 26 20 4d 45  ((M)->flags & ME
27b0: 4d 5f 49 6e 76 61 6c 69 64 29 3d 3d 30 0a 23 65  M_Invalid)==0.#e
27c0: 6e 64 69 66 0a 0a 0a 2f 2a 20 41 20 56 64 62 65  ndif.../* A Vdbe
27d0: 46 75 6e 63 20 69 73 20 6a 75 73 74 20 61 20 46  Func is just a F
27e0: 75 6e 63 44 65 66 20 28 64 65 66 69 6e 65 64 20  uncDef (defined 
27f0: 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 29 20  in sqliteInt.h) 
2800: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  that contains.**
2810: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
2820: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 75  rmation about au
2830: 78 69 6c 69 61 72 79 20 69 6e 66 6f 72 6d 61 74  xiliary informat
2840: 69 6f 6e 20 62 6f 75 6e 64 20 74 6f 20 61 72 67  ion bound to arg
2850: 75 6d 65 6e 74 73 0a 2a 2a 20 6f 66 20 74 68 65  uments.** of the
2860: 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 69 73   function.  This
2870: 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
2880: 65 6d 65 6e 74 20 74 68 65 20 73 71 6c 69 74 65  ement the sqlite
2890: 33 5f 67 65 74 5f 61 75 78 64 61 74 61 28 29 0a  3_get_auxdata().
28a0: 2a 2a 20 61 6e 64 20 73 71 6c 69 74 65 33 5f 73  ** and sqlite3_s
28b0: 65 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49  et_auxdata() API
28c0: 73 2e 20 20 54 68 65 20 22 61 75 78 64 61 74 61  s.  The "auxdata
28d0: 22 20 69 73 20 73 6f 6d 65 20 61 75 78 69 6c 69  " is some auxili
28e0: 61 72 79 20 64 61 74 61 0a 2a 2a 20 74 68 61 74  ary data.** that
28f0: 20 63 61 6e 20 62 65 20 61 73 73 6f 63 69 61 74   can be associat
2900: 65 64 20 77 69 74 68 20 61 20 63 6f 6e 73 74 61  ed with a consta
2910: 6e 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  nt argument to a
2920: 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 69 73   function.  This
2930: 0a 2a 2a 20 61 6c 6c 6f 77 73 20 66 75 6e 63 74  .** allows funct
2940: 69 6f 6e 73 20 73 75 63 68 20 61 73 20 22 72 65  ions such as "re
2950: 67 65 78 70 22 20 74 6f 20 63 6f 6d 70 69 6c 65  gexp" to compile
2960: 20 74 68 65 69 72 20 63 6f 6e 73 74 61 6e 74 20   their constant 
2970: 72 65 67 75 6c 61 72 0a 2a 2a 20 65 78 70 72 65  regular.** expre
2980: 73 73 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f  ssion argument o
2990: 6e 63 65 20 61 6e 64 20 72 65 75 73 65 64 20 74  nce and reused t
29a0: 68 65 20 63 6f 6d 70 69 6c 65 64 20 63 6f 64 65  he compiled code
29b0: 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a   for multiple.**
29c0: 20 69 6e 76 6f 63 61 74 69 6f 6e 73 2e 0a 2a 2f   invocations..*/
29d0: 0a 73 74 72 75 63 74 20 56 64 62 65 46 75 6e 63  .struct VdbeFunc
29e0: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 46   {.  FuncDef *pF
29f0: 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
2a00: 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e 69     /* The defini
2a10: 74 69 6f 6e 20 6f 66 20 74 68 65 20 66 75 6e 63  tion of the func
2a20: 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  tion */.  int nA
2a30: 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ux;             
2a40: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
2a50: 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c  r of entries all
2a60: 6f 63 61 74 65 64 20 66 6f 72 20 61 70 41 75 78  ocated for apAux
2a70: 5b 5d 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41  [] */.  struct A
2a80: 75 78 44 61 74 61 20 7b 0a 20 20 20 20 76 6f 69  uxData {.    voi
2a90: 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20  d *pAux;        
2aa0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 75             /* Au
2ab0: 78 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 69  x data for the i
2ac0: 2d 74 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  -th argument */.
2ad0: 20 20 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 65      void (*xDele
2ae0: 74 65 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  te)(void *);    
2af0: 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20    /* Destructor 
2b00: 66 6f 72 20 74 68 65 20 61 75 78 20 64 61 74 61  for the aux data
2b10: 20 2a 2f 0a 20 20 7d 20 61 70 41 75 78 5b 31 5d   */.  } apAux[1]
2b20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2b30: 20 20 20 20 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20      /* One slot 
2b40: 66 6f 72 20 65 61 63 68 20 66 75 6e 63 74 69 6f  for each functio
2b50: 6e 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 7d 3b  n argument */.};
2b60: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22 63 6f 6e  ../*.** The "con
2b70: 74 65 78 74 22 20 61 72 67 75 6d 65 6e 74 20 66  text" argument f
2b80: 6f 72 20 61 20 69 6e 73 74 61 6c 6c 61 62 6c 65  or a installable
2b90: 20 66 75 6e 63 74 69 6f 6e 2e 20 20 41 20 70 6f   function.  A po
2ba0: 69 6e 74 65 72 20 74 6f 20 61 6e 0a 2a 2a 20 69  inter to an.** i
2bb0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
2bc0: 73 74 72 75 63 74 75 72 65 20 69 73 20 74 68 65  structure is the
2bd0: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   first argument 
2be0: 74 6f 20 74 68 65 20 72 6f 75 74 69 6e 65 73 20  to the routines 
2bf0: 75 73 65 64 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e  used.** implemen
2c00: 74 20 74 68 65 20 53 51 4c 20 66 75 6e 63 74 69  t the SQL functi
2c10: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  ons..**.** There
2c20: 20 69 73 20 61 20 74 79 70 65 64 65 66 20 66 6f   is a typedef fo
2c30: 72 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  r this structure
2c40: 20 69 6e 20 73 71 6c 69 74 65 2e 68 2e 20 20 53   in sqlite.h.  S
2c50: 6f 20 61 6c 6c 20 72 6f 75 74 69 6e 65 73 2c 0a  o all routines,.
2c60: 2a 2a 20 65 76 65 6e 20 74 68 65 20 70 75 62 6c  ** even the publ
2c70: 69 63 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  ic interface to 
2c80: 53 51 4c 69 74 65 2c 20 63 61 6e 20 75 73 65 20  SQLite, can use 
2c90: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  a pointer to thi
2ca0: 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  s structure..** 
2cb0: 42 75 74 20 74 68 69 73 20 66 69 6c 65 20 69 73  But this file is
2cc0: 20 74 68 65 20 6f 6e 6c 79 20 70 6c 61 63 65 20   the only place 
2cd0: 77 68 65 72 65 20 74 68 65 20 69 6e 74 65 72 6e  where the intern
2ce0: 61 6c 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68  al details of th
2cf0: 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
2d00: 61 72 65 20 6b 6e 6f 77 6e 2e 0a 2a 2a 0a 2a 2a  are known..**.**
2d10: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
2d20: 69 73 20 64 65 66 69 6e 65 64 20 69 6e 73 69 64  is defined insid
2d30: 65 20 6f 66 20 76 64 62 65 49 6e 74 2e 68 20 62  e of vdbeInt.h b
2d40: 65 63 61 75 73 65 20 69 74 20 75 73 65 73 20 73  ecause it uses s
2d50: 75 62 73 74 72 75 63 74 75 72 65 73 0a 2a 2a 20  ubstructures.** 
2d60: 28 4d 65 6d 29 20 77 68 69 63 68 20 61 72 65 20  (Mem) which are 
2d70: 6f 6e 6c 79 20 64 65 66 69 6e 65 64 20 74 68 65  only defined the
2d80: 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71  re..*/.struct sq
2d90: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 7b 0a  lite3_context {.
2da0: 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63    FuncDef *pFunc
2db0: 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ;       /* Point
2dc0: 65 72 20 74 6f 20 66 75 6e 63 74 69 6f 6e 20 69  er to function i
2dd0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 4d 55 53  nformation.  MUS
2de0: 54 20 42 45 20 46 49 52 53 54 20 2a 2f 0a 20 20  T BE FIRST */.  
2df0: 56 64 62 65 46 75 6e 63 20 2a 70 56 64 62 65 46  VdbeFunc *pVdbeF
2e00: 75 6e 63 3b 20 20 2f 2a 20 41 75 78 69 6c 61 72  unc;  /* Auxilar
2e10: 79 20 64 61 74 61 2c 20 69 66 20 63 72 65 61 74  y data, if creat
2e20: 65 64 2e 20 2a 2f 0a 20 20 4d 65 6d 20 73 3b 20  ed. */.  Mem s; 
2e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2e40: 2a 20 54 68 65 20 72 65 74 75 72 6e 20 76 61 6c  * The return val
2e50: 75 65 20 69 73 20 73 74 6f 72 65 64 20 68 65 72  ue is stored her
2e60: 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  e */.  Mem *pMem
2e70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
2e80: 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 75 73 65 64  Memory cell used
2e90: 20 74 6f 20 73 74 6f 72 65 20 61 67 67 72 65 67   to store aggreg
2ea0: 61 74 65 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  ate context */. 
2eb0: 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b   CollSeq *pColl;
2ec0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74         /* Collat
2ed0: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 2a 2f 0a  ing sequence */.
2ee0: 20 20 69 6e 74 20 69 73 45 72 72 6f 72 3b 20 20    int isError;  
2ef0: 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72          /* Error
2f00: 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62   code returned b
2f10: 79 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  y the function. 
2f20: 2a 2f 0a 20 20 69 6e 74 20 73 6b 69 70 46 6c 61  */.  int skipFla
2f30: 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6b  g;         /* Sk
2f40: 69 70 20 73 6b 69 70 20 61 63 63 75 6d 75 6c 61  ip skip accumula
2f50: 74 6f 72 20 6c 6f 61 64 69 6e 67 20 69 66 20 74  tor loading if t
2f60: 72 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  rue */.};../*.**
2f70: 20 41 6e 20 45 78 70 6c 61 69 6e 20 6f 62 6a 65   An Explain obje
2f80: 63 74 20 61 63 63 75 6d 75 6c 61 74 65 73 20 69  ct accumulates i
2f90: 6e 64 65 6e 74 65 64 20 6f 75 74 70 75 74 20 77  ndented output w
2fa0: 68 69 63 68 20 69 73 20 68 65 6c 70 66 75 6c 0a  hich is helpful.
2fb0: 2a 2a 20 69 6e 20 64 65 73 63 72 69 62 69 6e 67  ** in describing
2fc0: 20 72 65 63 75 72 73 69 76 65 20 64 61 74 61 20   recursive data 
2fd0: 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73  structures..*/.s
2fe0: 74 72 75 63 74 20 45 78 70 6c 61 69 6e 20 7b 0a  truct Explain {.
2ff0: 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20    Vdbe *pVdbe;  
3000: 20 20 20 20 20 2f 2a 20 41 74 74 61 63 68 20 74       /* Attach t
3010: 68 65 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 74  he explanation t
3020: 6f 20 74 68 69 73 20 56 64 62 65 20 2a 2f 0a 20  o this Vdbe */. 
3030: 20 53 74 72 41 63 63 75 6d 20 73 74 72 3b 20 20   StrAccum str;  
3040: 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e      /* The strin
3050: 67 20 62 65 69 6e 67 20 61 63 63 75 6d 75 6c 61  g being accumula
3060: 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 49 6e  ted */.  int nIn
3070: 64 65 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e  dent;       /* N
3080: 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74  umber of element
3090: 73 20 69 6e 20 61 49 6e 64 65 6e 74 20 2a 2f 0a  s in aIndent */.
30a0: 20 20 75 31 36 20 61 49 6e 64 65 6e 74 5b 31 30    u16 aIndent[10
30b0: 30 5d 3b 20 20 2f 2a 20 4c 65 76 65 6c 73 20 6f  0];  /* Levels o
30c0: 66 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 2a 2f  f indentation */
30d0: 0a 20 20 63 68 61 72 20 7a 42 61 73 65 5b 31 30  .  char zBase[10
30e0: 30 5d 3b 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c  0];   /* Initial
30f0: 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   space */.};../*
3100: 20 41 20 62 69 74 66 69 65 6c 64 20 74 79 70 65   A bitfield type
3110: 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20   for use inside 
3120: 6f 66 20 73 74 72 75 63 74 75 72 65 73 2e 20 20  of structures.  
3130: 41 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 77 69  Always follow wi
3140: 74 68 20 3a 4e 20 77 68 65 72 65 0a 2a 2a 20 4e  th :N where.** N
3150: 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
3160: 66 20 62 69 74 73 2e 0a 2a 2f 0a 74 79 70 65 64  f bits..*/.typed
3170: 65 66 20 75 6e 73 69 67 6e 65 64 20 62 66 74 3b  ef unsigned bft;
3180: 20 20 2f 2a 20 42 69 74 20 46 69 65 6c 64 20 54    /* Bit Field T
3190: 79 70 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  ype */../*.** An
31a0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
31b0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
31c0: 2e 20 20 54 68 69 73 20 73 74 72 75 63 74 75 72  .  This structur
31d0: 65 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 63  e contains the c
31e0: 6f 6d 70 6c 65 74 65 0a 2a 2a 20 73 74 61 74 65  omplete.** state
31f0: 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   of the virtual 
3200: 6d 61 63 68 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 54  machine..**.** T
3210: 68 65 20 22 73 71 6c 69 74 65 33 5f 73 74 6d 74  he "sqlite3_stmt
3220: 22 20 73 74 72 75 63 74 75 72 65 20 70 6f 69 6e  " structure poin
3230: 74 65 72 20 74 68 61 74 20 69 73 20 72 65 74 75  ter that is retu
3240: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
3250: 70 72 65 70 61 72 65 28 29 0a 2a 2a 20 69 73 20  prepare().** is 
3260: 72 65 61 6c 6c 79 20 61 20 70 6f 69 6e 74 65 72  really a pointer
3270: 20 74 6f 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   to an instance 
3280: 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
3290: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 56 64 62  e..**.** The Vdb
32a0: 65 2e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 76  e.inVtabMethod v
32b0: 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
32c0: 6f 20 6e 6f 6e 2d 7a 65 72 6f 20 66 6f 72 20 74  o non-zero for t
32d0: 68 65 20 64 75 72 61 74 69 6f 6e 20 6f 66 0a 2a  he duration of.*
32e0: 2a 20 61 6e 79 20 76 69 72 74 75 61 6c 20 74 61  * any virtual ta
32f0: 62 6c 65 20 6d 65 74 68 6f 64 20 69 6e 76 6f 63  ble method invoc
3300: 61 74 69 6f 6e 73 20 6d 61 64 65 20 62 79 20 74  ations made by t
3310: 68 65 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e  he vdbe program.
3320: 20 49 74 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f   It is.** set to
3330: 20 32 20 66 6f 72 20 78 44 65 73 74 72 6f 79 20   2 for xDestroy 
3340: 6d 65 74 68 6f 64 20 63 61 6c 6c 73 20 61 6e 64  method calls and
3350: 20 31 20 66 6f 72 20 61 6c 6c 20 6f 74 68 65 72   1 for all other
3360: 20 6d 65 74 68 6f 64 73 2e 20 54 68 69 73 0a 2a   methods. This.*
3370: 2a 20 76 61 72 69 61 62 6c 65 20 69 73 20 75 73  * variable is us
3380: 65 64 20 66 6f 72 20 74 77 6f 20 70 75 72 70 6f  ed for two purpo
3390: 73 65 73 3a 20 74 6f 20 61 6c 6c 6f 77 20 78 44  ses: to allow xD
33a0: 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 73 20 74  estroy methods t
33b0: 6f 20 65 78 65 63 75 74 65 0a 2a 2a 20 22 44 52  o execute.** "DR
33c0: 4f 50 20 54 41 42 4c 45 22 20 73 74 61 74 65 6d  OP TABLE" statem
33d0: 65 6e 74 73 20 61 6e 64 20 74 6f 20 70 72 65 76  ents and to prev
33e0: 65 6e 74 20 73 6f 6d 65 20 6e 61 73 74 79 20 73  ent some nasty s
33f0: 69 64 65 20 65 66 66 65 63 74 73 20 6f 66 0a 2a  ide effects of.*
3400: 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  * malloc failure
3410: 20 77 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20   when SQLite is 
3420: 69 6e 76 6f 6b 65 64 20 72 65 63 75 72 73 69 76  invoked recursiv
3430: 65 6c 79 20 62 79 20 61 20 76 69 72 74 75 61 6c  ely by a virtual
3440: 20 74 61 62 6c 65 20 0a 2a 2a 20 6d 65 74 68 6f   table .** metho
3450: 64 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  d function..*/.s
3460: 74 72 75 63 74 20 56 64 62 65 20 7b 0a 20 20 73  truct Vdbe {.  s
3470: 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
3480: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
3490: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
34a0: 6e 20 74 68 61 74 20 6f 77 6e 73 20 74 68 69 73  n that owns this
34b0: 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20   statement */.  
34c0: 4f 70 20 2a 61 4f 70 3b 20 20 20 20 20 20 20 20  Op *aOp;        
34d0: 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
34e0: 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 76 69 72   to hold the vir
34f0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 27 73 20 70  tual machine's p
3500: 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20  rogram */.  Mem 
3510: 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *aMem;          
3520: 20 20 20 20 2f 2a 20 54 68 65 20 6d 65 6d 6f 72      /* The memor
3530: 79 20 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 20  y locations */. 
3540: 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 20 20 20   Mem **apArg;   
3550: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
3560: 6d 65 6e 74 73 20 74 6f 20 63 75 72 72 65 6e 74  ments to current
3570: 6c 79 20 65 78 65 63 75 74 69 6e 67 20 75 73 65  ly executing use
3580: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  r function */.  
3590: 4d 65 6d 20 2a 61 43 6f 6c 4e 61 6d 65 3b 20 20  Mem *aColName;  
35a0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d          /* Colum
35b0: 6e 20 6e 61 6d 65 73 20 74 6f 20 72 65 74 75 72  n names to retur
35c0: 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 73  n */.  Mem *pRes
35d0: 75 6c 74 53 65 74 3b 20 20 20 20 20 20 20 20 2f  ultSet;        /
35e0: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20  * Pointer to an 
35f0: 61 72 72 61 79 20 6f 66 20 72 65 73 75 6c 74 73  array of results
3600: 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
3610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3620: 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   Number of memor
3630: 79 20 6c 6f 63 61 74 69 6f 6e 73 20 63 75 72 72  y locations curr
3640: 65 6e 74 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  ently allocated 
3650: 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 3b 20 20 20  */.  int nOp;   
3660: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3670: 4e 75 6d 62 65 72 20 6f 66 20 69 6e 73 74 72 75  Number of instru
3680: 63 74 69 6f 6e 73 20 69 6e 20 74 68 65 20 70 72  ctions in the pr
3690: 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e  ogram */.  int n
36a0: 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  OpAlloc;        
36b0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
36c0: 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20  slots allocated 
36d0: 66 6f 72 20 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69  for aOp[] */.  i
36e0: 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20  nt nLabel;      
36f0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
3700: 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20   of labels used 
3710: 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c  */.  int *aLabel
3720: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
3730: 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68  Space to hold th
3740: 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 75 31  e labels */.  u1
3750: 36 20 6e 52 65 73 43 6f 6c 75 6d 6e 3b 20 20 20  6 nResColumn;   
3760: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
3770: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 6e  of columns in on
3780: 65 20 72 6f 77 20 6f 66 20 74 68 65 20 72 65 73  e row of the res
3790: 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 75 31 36  ult set */.  u16
37a0: 20 6e 43 75 72 73 6f 72 3b 20 20 20 20 20 20 20   nCursor;       
37b0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
37c0: 66 20 73 6c 6f 74 73 20 69 6e 20 61 70 43 73 72  f slots in apCsr
37d0: 5b 5d 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69  [] */.  u32 magi
37e0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
37f0: 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20  /* Magic number 
3800: 66 6f 72 20 73 61 6e 69 74 79 20 63 68 65 63 6b  for sanity check
3810: 69 6e 67 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ing */.  char *z
3820: 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 20 20  ErrMsg;         
3830: 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67   /* Error messag
3840: 65 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a  e written here *
3850: 2f 0a 20 20 56 64 62 65 20 2a 70 50 72 65 76 2c  /.  Vdbe *pPrev,
3860: 2a 70 4e 65 78 74 3b 20 20 20 20 20 2f 2a 20 4c  *pNext;     /* L
3870: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 56 44  inked list of VD
3880: 42 45 73 20 77 69 74 68 20 74 68 65 20 73 61 6d  BEs with the sam
3890: 65 20 56 64 62 65 2e 64 62 20 2a 2f 0a 20 20 56  e Vdbe.db */.  V
38a0: 64 62 65 43 75 72 73 6f 72 20 2a 2a 61 70 43 73  dbeCursor **apCs
38b0: 72 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6c  r;     /* One el
38c0: 65 6d 65 6e 74 20 6f 66 20 74 68 69 73 20 61 72  ement of this ar
38d0: 72 61 79 20 66 6f 72 20 65 61 63 68 20 6f 70 65  ray for each ope
38e0: 6e 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 4d 65  n cursor */.  Me
38f0: 6d 20 2a 61 56 61 72 3b 20 20 20 20 20 20 20 20  m *aVar;        
3900: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20        /* Values 
3910: 66 6f 72 20 74 68 65 20 4f 50 5f 56 61 72 69 61  for the OP_Varia
3920: 62 6c 65 20 6f 70 63 6f 64 65 2e 20 2a 2f 0a 20  ble opcode. */. 
3930: 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20   char **azVar;  
3940: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
3950: 20 6f 66 20 76 61 72 69 61 62 6c 65 73 20 2a 2f   of variables */
3960: 0a 20 20 79 6e 56 61 72 20 6e 56 61 72 3b 20 20  .  ynVar nVar;  
3970: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
3980: 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
3990: 69 6e 20 61 56 61 72 5b 5d 20 2a 2f 0a 20 20 79  in aVar[] */.  y
39a0: 6e 56 61 72 20 6e 7a 56 61 72 3b 20 20 20 20 20  nVar nzVar;     
39b0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
39c0: 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
39d0: 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 33 32 20  zVar[] */.  u32 
39e0: 63 61 63 68 65 43 74 72 3b 20 20 20 20 20 20 20  cacheCtr;       
39f0: 20 20 20 20 2f 2a 20 56 64 62 65 43 75 72 73 6f      /* VdbeCurso
3a00: 72 20 72 6f 77 20 63 61 63 68 65 20 67 65 6e 65  r row cache gene
3a10: 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 2a  ration counter *
3a20: 2f 0a 20 20 69 6e 74 20 70 63 3b 20 20 20 20 20  /.  int pc;     
3a30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
3a40: 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74  he program count
3a50: 65 72 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  er */.  int rc; 
3a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a70: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
3a80: 72 6e 20 2a 2f 0a 20 20 75 38 20 65 72 72 6f 72  rn */.  u8 error
3a90: 41 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  Action;         
3aa0: 2f 2a 20 52 65 63 6f 76 65 72 79 20 61 63 74 69  /* Recovery acti
3ab0: 6f 6e 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65  on to do in case
3ac0: 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a   of an error */.
3ad0: 20 20 75 38 20 6d 69 6e 57 72 69 74 65 46 69 6c    u8 minWriteFil
3ae0: 65 46 6f 72 6d 61 74 3b 20 20 2f 2a 20 4d 69 6e  eFormat;  /* Min
3af0: 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74  imum file format
3b00: 20 66 6f 72 20 77 72 69 74 61 62 6c 65 20 64 61   for writable da
3b10: 74 61 62 61 73 65 20 66 69 6c 65 73 20 2a 2f 0a  tabase files */.
3b20: 20 20 62 66 74 20 65 78 70 6c 61 69 6e 3a 32 3b    bft explain:2;
3b30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
3b40: 65 20 69 66 20 45 58 50 4c 41 49 4e 20 70 72 65  e if EXPLAIN pre
3b50: 73 65 6e 74 20 6f 6e 20 53 51 4c 20 63 6f 6d 6d  sent on SQL comm
3b60: 61 6e 64 20 2a 2f 0a 20 20 62 66 74 20 69 6e 56  and */.  bft inV
3b70: 74 61 62 4d 65 74 68 6f 64 3a 32 3b 20 20 20 20  tabMethod:2;    
3b80: 20 2f 2a 20 53 65 65 20 63 6f 6d 6d 65 6e 74 73   /* See comments
3b90: 20 61 62 6f 76 65 20 2a 2f 0a 20 20 62 66 74 20   above */.  bft 
3ba0: 63 68 61 6e 67 65 43 6e 74 4f 6e 3a 31 3b 20 20  changeCntOn:1;  
3bb0: 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 75      /* True to u
3bc0: 70 64 61 74 65 20 74 68 65 20 63 68 61 6e 67 65  pdate the change
3bd0: 2d 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 62 66  -counter */.  bf
3be0: 74 20 65 78 70 69 72 65 64 3a 31 3b 20 20 20 20  t expired:1;    
3bf0: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
3c00: 20 74 68 65 20 56 4d 20 6e 65 65 64 73 20 74 6f   the VM needs to
3c10: 20 62 65 20 72 65 63 6f 6d 70 69 6c 65 64 20 2a   be recompiled *
3c20: 2f 0a 20 20 62 66 74 20 72 75 6e 4f 6e 6c 79 4f  /.  bft runOnlyO
3c30: 6e 63 65 3a 31 3b 20 20 20 20 20 20 2f 2a 20 41  nce:1;      /* A
3c40: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 65 78 70  utomatically exp
3c50: 69 72 65 20 6f 6e 20 72 65 73 65 74 20 2a 2f 0a  ire on reset */.
3c60: 20 20 62 66 74 20 75 73 65 73 53 74 6d 74 4a 6f    bft usesStmtJo
3c70: 75 72 6e 61 6c 3a 31 3b 20 20 2f 2a 20 54 72 75  urnal:1;  /* Tru
3c80: 65 20 69 66 20 75 73 65 73 20 61 20 73 74 61 74  e if uses a stat
3c90: 65 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 20 2a 2f  ement journal */
3ca0: 0a 20 20 62 66 74 20 72 65 61 64 4f 6e 6c 79 3a  .  bft readOnly:
3cb0: 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  1;         /* Tr
3cc0: 75 65 20 66 6f 72 20 72 65 61 64 2d 6f 6e 6c 79  ue for read-only
3cd0: 20 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20   statements */. 
3ce0: 20 62 66 74 20 69 73 50 72 65 70 61 72 65 56 32   bft isPrepareV2
3cf0: 3a 31 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65  :1;      /* True
3d00: 20 69 66 20 70 72 65 70 61 72 65 64 20 77 69 74   if prepared wit
3d10: 68 20 70 72 65 70 61 72 65 5f 76 32 28 29 20 2a  h prepare_v2() *
3d20: 2f 0a 20 20 62 66 74 20 64 6f 69 6e 67 52 65 72  /.  bft doingRer
3d30: 75 6e 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 54  un:1;       /* T
3d40: 72 75 65 20 69 66 20 72 65 72 75 6e 6e 69 6e 67  rue if rerunning
3d50: 20 61 66 74 65 72 20 61 6e 20 61 75 74 6f 2d 72   after an auto-r
3d60: 65 70 72 65 70 61 72 65 20 2a 2f 0a 20 20 69 6e  eprepare */.  in
3d70: 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20  t nChange;      
3d80: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
3d90: 6f 66 20 64 62 20 63 68 61 6e 67 65 73 20 6d 61  of db changes ma
3da0: 64 65 20 73 69 6e 63 65 20 6c 61 73 74 20 72 65  de since last re
3db0: 73 65 74 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b  set */.  yDbMask
3dc0: 20 62 74 72 65 65 4d 61 73 6b 3b 20 20 20 20 20   btreeMask;     
3dd0: 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 64   /* Bitmask of d
3de0: 62 2d 3e 61 44 62 5b 5d 20 65 6e 74 72 69 65 73  b->aDb[] entries
3df0: 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20   referenced */. 
3e00: 20 79 44 62 4d 61 73 6b 20 6c 6f 63 6b 4d 61 73   yDbMask lockMas
3e10: 6b 3b 20 20 20 20 20 20 20 2f 2a 20 53 75 62 73  k;       /* Subs
3e20: 65 74 20 6f 66 20 62 74 72 65 65 4d 61 73 6b 20  et of btreeMask 
3e30: 74 68 61 74 20 72 65 71 75 69 72 65 73 20 61 20  that requires a 
3e40: 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 53  lock */.  int iS
3e50: 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20  tatement;       
3e60: 20 20 2f 2a 20 53 74 61 74 65 6d 65 6e 74 20 6e    /* Statement n
3e70: 75 6d 62 65 72 20 28 6f 72 20 30 20 69 66 20 68  umber (or 0 if h
3e80: 61 73 20 6e 6f 74 20 6f 70 65 6e 65 64 20 73 74  as not opened st
3e90: 6d 74 29 20 2a 2f 0a 20 20 69 6e 74 20 61 43 6f  mt) */.  int aCo
3ea0: 75 6e 74 65 72 5b 33 5d 3b 20 20 20 20 20 20 20  unter[3];       
3eb0: 20 2f 2a 20 43 6f 75 6e 74 65 72 73 20 75 73 65   /* Counters use
3ec0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73 74 6d  d by sqlite3_stm
3ed0: 74 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 23 69  t_status() */.#i
3ee0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
3ef0: 54 5f 54 52 41 43 45 0a 20 20 69 36 34 20 73 74  T_TRACE.  i64 st
3f00: 61 72 74 54 69 6d 65 3b 20 20 20 20 20 20 20 20  artTime;        
3f10: 20 20 2f 2a 20 54 69 6d 65 20 77 68 65 6e 20 71    /* Time when q
3f20: 75 65 72 79 20 73 74 61 72 74 65 64 20 2d 20 75  uery started - u
3f30: 73 65 64 20 66 6f 72 20 70 72 6f 66 69 6c 69 6e  sed for profilin
3f40: 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 36  g */.#endif.  i6
3f50: 34 20 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3b  4 nFkConstraint;
3f60: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
3f70: 6f 66 20 69 6d 6d 2e 20 46 4b 20 63 6f 6e 73 74  of imm. FK const
3f80: 72 61 69 6e 74 73 20 74 68 69 73 20 56 4d 20 2a  raints this VM *
3f90: 2f 0a 20 20 69 36 34 20 6e 53 74 6d 74 44 65 66  /.  i64 nStmtDef
3fa0: 43 6f 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 4e  Cons;       /* N
3fb0: 75 6d 62 65 72 20 6f 66 20 64 65 66 2e 20 63 6f  umber of def. co
3fc0: 6e 73 74 72 61 69 6e 74 73 20 77 68 65 6e 20 73  nstraints when s
3fd0: 74 6d 74 20 73 74 61 72 74 65 64 20 2a 2f 0a 20  tmt started */. 
3fe0: 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20 20 20 20   char *zSql;    
3ff0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
4000: 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74   of the SQL stat
4010: 65 6d 65 6e 74 20 74 68 61 74 20 67 65 6e 65 72  ement that gener
4020: 61 74 65 64 20 74 68 69 73 20 2a 2f 0a 20 20 76  ated this */.  v
4030: 6f 69 64 20 2a 70 46 72 65 65 3b 20 20 20 20 20  oid *pFree;     
4040: 20 20 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74         /* Free t
4050: 68 69 73 20 77 68 65 6e 20 64 65 6c 65 74 69 6e  his when deletin
4060: 67 20 74 68 65 20 76 64 62 65 20 2a 2f 0a 23 69  g the vdbe */.#i
4070: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
4080: 47 0a 20 20 46 49 4c 45 20 2a 74 72 61 63 65 3b  G.  FILE *trace;
4090: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
40a0: 72 69 74 65 20 61 6e 20 65 78 65 63 75 74 69 6f  rite an executio
40b0: 6e 20 74 72 61 63 65 20 68 65 72 65 2c 20 69 66  n trace here, if
40c0: 20 6e 6f 74 20 4e 55 4c 4c 20 2a 2f 0a 23 65 6e   not NULL */.#en
40d0: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
40e0: 45 5f 45 4e 41 42 4c 45 5f 54 52 45 45 5f 45 58  E_ENABLE_TREE_EX
40f0: 50 4c 41 49 4e 0a 20 20 45 78 70 6c 61 69 6e 20  PLAIN.  Explain 
4100: 2a 70 45 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  *pExplain;      
4110: 2f 2a 20 54 68 65 20 65 78 70 6c 61 69 6e 65 72  /* The explainer
4120: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 78 70   */.  char *zExp
4130: 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  lain;         /*
4140: 20 45 78 70 6c 61 6e 61 74 69 6f 6e 20 6f 66 20   Explanation of 
4150: 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
4160: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 56 64 62 65  */.#endif.  Vdbe
4170: 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20  Frame *pFrame;  
4180: 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 66 72      /* Parent fr
4190: 61 6d 65 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  ame */.  VdbeFra
41a0: 6d 65 20 2a 70 44 65 6c 46 72 61 6d 65 3b 20 20  me *pDelFrame;  
41b0: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 66 72 61 6d   /* List of fram
41c0: 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 66 72 65  e objects to fre
41d0: 65 20 6f 6e 20 56 4d 20 72 65 73 65 74 20 2a 2f  e on VM reset */
41e0: 0a 20 20 69 6e 74 20 6e 46 72 61 6d 65 3b 20 20  .  int nFrame;  
41f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
4200: 6d 62 65 72 20 6f 66 20 66 72 61 6d 65 73 20 69  mber of frames i
4210: 6e 20 70 46 72 61 6d 65 20 6c 69 73 74 20 2a 2f  n pFrame list */
4220: 0a 20 20 75 33 32 20 65 78 70 6d 61 73 6b 3b 20  .  u32 expmask; 
4230: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 69             /* Bi
4240: 6e 64 69 6e 67 20 74 6f 20 74 68 65 73 65 20 76  nding to these v
4250: 61 72 73 20 69 6e 76 61 6c 69 64 61 74 65 73 20  ars invalidates 
4260: 56 4d 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  VM */.  SubProgr
4270: 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
4280: 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
4290: 66 20 61 6c 6c 20 73 75 62 2d 70 72 6f 67 72 61  f all sub-progra
42a0: 6d 73 20 75 73 65 64 20 62 79 20 56 4d 20 2a 2f  ms used by VM */
42b0: 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 46 6c 61 67  .  int nOnceFlag
42c0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69  ;          /* Si
42d0: 7a 65 20 6f 66 20 61 72 72 61 79 20 61 4f 6e 63  ze of array aOnc
42e0: 65 46 6c 61 67 5b 5d 20 2a 2f 0a 20 20 75 38 20  eFlag[] */.  u8 
42f0: 2a 61 4f 6e 63 65 46 6c 61 67 3b 20 20 20 20 20  *aOnceFlag;     
4300: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 66 6f       /* Flags fo
4310: 72 20 4f 50 5f 4f 6e 63 65 20 2a 2f 0a 7d 3b 0a  r OP_Once */.};.
4320: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
4330: 77 69 6e 67 20 61 72 65 20 61 6c 6c 6f 77 65 64  wing are allowed
4340: 20 76 61 6c 75 65 73 20 66 6f 72 20 56 64 62 65   values for Vdbe
4350: 2e 6d 61 67 69 63 0a 2a 2f 0a 23 64 65 66 69 6e  .magic.*/.#defin
4360: 65 20 56 44 42 45 5f 4d 41 47 49 43 5f 49 4e 49  e VDBE_MAGIC_INI
4370: 54 20 20 20 20 20 30 78 32 36 62 63 65 61 61 35  T     0x26bceaa5
4380: 20 20 20 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20      /* Building 
4390: 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 2a  a VDBE program *
43a0: 2f 0a 23 64 65 66 69 6e 65 20 56 44 42 45 5f 4d  /.#define VDBE_M
43b0: 41 47 49 43 5f 52 55 4e 20 20 20 20 20 20 30 78  AGIC_RUN      0x
43c0: 62 64 66 32 30 64 61 33 20 20 20 20 2f 2a 20 56  bdf20da3    /* V
43d0: 44 42 45 20 69 73 20 72 65 61 64 79 20 74 6f 20  DBE is ready to 
43e0: 65 78 65 63 75 74 65 20 2a 2f 0a 23 64 65 66 69  execute */.#defi
43f0: 6e 65 20 56 44 42 45 5f 4d 41 47 49 43 5f 48 41  ne VDBE_MAGIC_HA
4400: 4c 54 20 20 20 20 20 30 78 35 31 39 63 32 39 37  LT     0x519c297
4410: 33 20 20 20 20 2f 2a 20 56 44 42 45 20 68 61 73  3    /* VDBE has
4420: 20 63 6f 6d 70 6c 65 74 65 64 20 65 78 65 63 75   completed execu
4430: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
4440: 56 44 42 45 5f 4d 41 47 49 43 5f 44 45 41 44 20  VDBE_MAGIC_DEAD 
4450: 20 20 20 20 30 78 62 36 30 36 63 33 63 38 20 20      0xb606c3c8  
4460: 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 68 61    /* The VDBE ha
4470: 73 20 62 65 65 6e 20 64 65 61 6c 6c 6f 63 61 74  s been deallocat
4480: 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 74 72  ed */../*.** Str
4490: 75 63 74 75 72 65 20 75 73 65 64 20 74 6f 20 73  ucture used to s
44a0: 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 78 74  tore the context
44b0: 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
44c0: 20 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 70 72 65   .** sqlite3_pre
44d0: 75 70 64 61 74 65 5f 2a 28 29 20 41 50 49 20 66  update_*() API f
44e0: 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 72  unctions..*/.str
44f0: 75 63 74 20 50 72 65 55 70 64 61 74 65 20 7b 0a  uct PreUpdate {.
4500: 20 20 56 64 62 65 20 2a 76 3b 0a 20 20 56 64 62    Vdbe *v;.  Vdb
4510: 65 43 75 72 73 6f 72 20 2a 70 43 73 72 3b 20 20  eCursor *pCsr;  
4520: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4530: 43 75 72 73 6f 72 20 74 6f 20 72 65 61 64 20 6f  Cursor to read o
4540: 6c 64 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 2a  ld values from *
4550: 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20  /.  int op;     
4560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4570: 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 53 51      /* One of SQ
4580: 4c 49 54 45 5f 49 4e 53 45 52 54 2c 20 55 50 44  LITE_INSERT, UPD
4590: 41 54 45 2c 20 44 45 4c 45 54 45 20 2a 2f 0a 20  ATE, DELETE */. 
45a0: 20 75 38 20 2a 61 52 65 63 6f 72 64 3b 20 20 20   u8 *aRecord;   
45b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45c0: 20 2f 2a 20 6f 6c 64 2e 2a 20 64 61 74 61 62 61   /* old.* databa
45d0: 73 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4b  se record */.  K
45e0: 65 79 49 6e 66 6f 20 6b 65 79 69 6e 66 6f 3b 0a  eyInfo keyinfo;.
45f0: 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
4600: 20 2a 70 55 6e 70 61 63 6b 65 64 3b 20 20 20 20   *pUnpacked;    
4610: 20 20 2f 2a 20 55 6e 70 61 63 6b 65 64 20 76 65    /* Unpacked ve
4620: 72 73 69 6f 6e 20 6f 66 20 61 52 65 63 6f 72 64  rsion of aRecord
4630: 5b 5d 20 2a 2f 0a 20 20 55 6e 70 61 63 6b 65 64  [] */.  Unpacked
4640: 52 65 63 6f 72 64 20 2a 70 4e 65 77 55 6e 70 61  Record *pNewUnpa
4650: 63 6b 65 64 3b 20 20 20 2f 2a 20 55 6e 70 61 63  cked;   /* Unpac
4660: 6b 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 6e  ked version of n
4670: 65 77 2e 2a 20 72 65 63 6f 72 64 20 2a 2f 0a 20  ew.* record */. 
4680: 20 69 6e 74 20 69 4e 65 77 52 65 67 3b 20 20 20   int iNewReg;   
4690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46a0: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 66 6f 72   /* Register for
46b0: 20 6e 65 77 2e 2a 20 76 61 6c 75 65 73 20 2a 2f   new.* values */
46c0: 0a 20 20 69 36 34 20 69 4b 65 79 31 3b 20 20 20  .  i64 iKey1;   
46d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46e0: 20 20 20 2f 2a 20 46 69 72 73 74 20 6b 65 79 20     /* First key 
46f0: 76 61 6c 75 65 20 70 61 73 73 65 64 20 74 6f 20  value passed to 
4700: 68 6f 6f 6b 20 2a 2f 0a 20 20 69 36 34 20 69 4b  hook */.  i64 iK
4710: 65 79 32 3b 20 20 20 20 20 20 20 20 20 20 20 20  ey2;            
4720: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65 63            /* Sec
4730: 6f 6e 64 20 6b 65 79 20 76 61 6c 75 65 20 70 61  ond key value pa
4740: 73 73 65 64 20 74 6f 20 68 6f 6f 6b 20 2a 2f 0a  ssed to hook */.
4750: 20 20 69 6e 74 20 69 50 4b 65 79 3b 20 20 20 20    int iPKey;    
4760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4770: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61    /* If not nega
4780: 74 69 76 65 20 69 6e 64 65 78 20 6f 66 20 49 50  tive index of IP
4790: 4b 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 4d 65  K column */.  Me
47a0: 6d 20 2a 61 4e 65 77 3b 20 20 20 20 20 20 20 20  m *aNew;        
47b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
47c0: 20 41 72 72 61 79 20 6f 66 20 6e 65 77 2e 2a 20   Array of new.* 
47d0: 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  values */.};../*
47e0: 0a 2a 2a 20 46 75 6e 63 74 69 6f 6e 20 70 72 6f  .** Function pro
47f0: 74 6f 74 79 70 65 73 0a 2a 2f 0a 76 6f 69 64 20  totypes.*/.void 
4800: 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43  sqlite3VdbeFreeC
4810: 75 72 73 6f 72 28 56 64 62 65 20 2a 2c 20 56 64  ursor(Vdbe *, Vd
4820: 62 65 43 75 72 73 6f 72 2a 29 3b 0a 76 6f 69 64  beCursor*);.void
4830: 20 73 71 6c 69 74 65 56 64 62 65 50 6f 70 53 74   sqliteVdbePopSt
4840: 61 63 6b 28 56 64 62 65 2a 2c 69 6e 74 29 3b 0a  ack(Vdbe*,int);.
4850: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 43  int sqlite3VdbeC
4860: 75 72 73 6f 72 4d 6f 76 65 74 6f 28 56 64 62 65  ursorMoveto(Vdbe
4870: 43 75 72 73 6f 72 2a 29 3b 0a 23 69 66 20 64 65  Cursor*);.#if de
4880: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
4890: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 56  UG) || defined(V
48a0: 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 76 6f 69  DBE_PROFILE).voi
48b0: 64 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69  d sqlite3VdbePri
48c0: 6e 74 4f 70 28 46 49 4c 45 2a 2c 20 69 6e 74 2c  ntOp(FILE*, int,
48d0: 20 4f 70 2a 29 3b 0a 23 65 6e 64 69 66 0a 75 33   Op*);.#endif.u3
48e0: 32 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  2 sqlite3VdbeSer
48f0: 69 61 6c 54 79 70 65 4c 65 6e 28 75 33 32 29 3b  ialTypeLen(u32);
4900: 0a 75 33 32 20 73 71 6c 69 74 65 33 56 64 62 65  .u32 sqlite3Vdbe
4910: 53 65 72 69 61 6c 54 79 70 65 28 4d 65 6d 2a 2c  SerialType(Mem*,
4920: 20 69 6e 74 29 3b 0a 75 33 32 20 73 71 6c 69 74   int);.u32 sqlit
4930: 65 33 56 64 62 65 53 65 72 69 61 6c 50 75 74 28  e3VdbeSerialPut(
4940: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
4950: 69 6e 74 2c 20 4d 65 6d 2a 2c 20 69 6e 74 29 3b  int, Mem*, int);
4960: 0a 75 33 32 20 73 71 6c 69 74 65 33 56 64 62 65  .u32 sqlite3Vdbe
4970: 53 65 72 69 61 6c 47 65 74 28 63 6f 6e 73 74 20  SerialGet(const 
4980: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
4990: 75 33 32 2c 20 4d 65 6d 2a 29 3b 0a 76 6f 69 64  u32, Mem*);.void
49a0: 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65   sqlite3VdbeDele
49b0: 74 65 41 75 78 44 61 74 61 28 56 64 62 65 46 75  teAuxData(VdbeFu
49c0: 6e 63 2a 2c 20 69 6e 74 29 3b 0a 0a 69 6e 74 20  nc*, int);..int 
49d0: 73 71 6c 69 74 65 32 42 74 72 65 65 4b 65 79 43  sqlite2BtreeKeyC
49e0: 6f 6d 70 61 72 65 28 42 74 43 75 72 73 6f 72 20  ompare(BtCursor 
49f0: 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c  *, const void *,
4a00: 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 20 2a   int, int, int *
4a10: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
4a20: 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28  beIdxKeyCompare(
4a30: 56 64 62 65 43 75 72 73 6f 72 2a 2c 55 6e 70 61  VdbeCursor*,Unpa
4a40: 63 6b 65 64 52 65 63 6f 72 64 2a 2c 69 6e 74 2a  ckedRecord*,int*
4a50: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
4a60: 62 65 49 64 78 52 6f 77 69 64 28 73 71 6c 69 74  beIdxRowid(sqlit
4a70: 65 33 2a 2c 20 42 74 43 75 72 73 6f 72 20 2a 2c  e3*, BtCursor *,
4a80: 20 69 36 34 20 2a 29 3b 0a 69 6e 74 20 73 71 6c   i64 *);.int sql
4a90: 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 63  ite3MemCompare(c
4aa0: 6f 6e 73 74 20 4d 65 6d 2a 2c 20 63 6f 6e 73 74  onst Mem*, const
4ab0: 20 4d 65 6d 2a 2c 20 63 6f 6e 73 74 20 43 6f 6c   Mem*, const Col
4ac0: 6c 53 65 71 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lSeq*);.int sqli
4ad0: 74 65 33 56 64 62 65 45 78 65 63 28 56 64 62 65  te3VdbeExec(Vdbe
4ae0: 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
4af0: 64 62 65 4c 69 73 74 28 56 64 62 65 2a 29 3b 0a  dbeList(Vdbe*);.
4b00: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 48  int sqlite3VdbeH
4b10: 61 6c 74 28 56 64 62 65 2a 29 3b 0a 69 6e 74 20  alt(Vdbe*);.int 
4b20: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
4b30: 65 45 6e 63 6f 64 69 6e 67 28 4d 65 6d 20 2a 2c  eEncoding(Mem *,
4b40: 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
4b50: 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
4b60: 4d 65 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Mem*);.int sqlit
4b70: 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28 4d 65  e3VdbeMemCopy(Me
4b80: 6d 2a 2c 20 63 6f 6e 73 74 20 4d 65 6d 2a 29 3b  m*, const Mem*);
4b90: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
4ba0: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
4bb0: 4d 65 6d 2a 2c 20 63 6f 6e 73 74 20 4d 65 6d 2a  Mem*, const Mem*
4bc0: 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
4bd0: 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
4be0: 4d 65 6d 2a 2c 20 4d 65 6d 2a 29 3b 0a 69 6e 74  Mem*, Mem*);.int
4bf0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
4c00: 75 6c 54 65 72 6d 69 6e 61 74 65 28 4d 65 6d 2a  ulTerminate(Mem*
4c10: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
4c20: 62 65 4d 65 6d 53 65 74 53 74 72 28 4d 65 6d 2a  beMemSetStr(Mem*
4c30: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  , const char*, i
4c40: 6e 74 2c 20 75 38 2c 20 76 6f 69 64 28 2a 29 28  nt, u8, void(*)(
4c50: 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71  void*));.void sq
4c60: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
4c70: 6e 74 36 34 28 4d 65 6d 2a 2c 20 69 36 34 29 3b  nt64(Mem*, i64);
4c80: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
4c90: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
4ca0: 4e 54 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  NT.# define sqli
4cb0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 44 6f 75  te3VdbeMemSetDou
4cc0: 62 6c 65 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ble sqlite3VdbeM
4cd0: 65 6d 53 65 74 49 6e 74 36 34 0a 23 65 6c 73 65  emSetInt64.#else
4ce0: 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56  .  void sqlite3V
4cf0: 64 62 65 4d 65 6d 53 65 74 44 6f 75 62 6c 65 28  dbeMemSetDouble(
4d00: 4d 65 6d 2a 2c 20 64 6f 75 62 6c 65 29 3b 0a 23  Mem*, double);.#
4d10: 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
4d20: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
4d30: 28 4d 65 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  (Mem*);.void sql
4d40: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 5a 65  ite3VdbeMemSetZe
4d50: 72 6f 42 6c 6f 62 28 4d 65 6d 2a 2c 69 6e 74 29  roBlob(Mem*,int)
4d60: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
4d70: 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 4d  beMemSetRowSet(M
4d80: 65 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  em*);.int sqlite
4d90: 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74  3VdbeMemMakeWrit
4da0: 65 61 62 6c 65 28 4d 65 6d 2a 29 3b 0a 69 6e 74  eable(Mem*);.int
4db0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
4dc0: 74 72 69 6e 67 69 66 79 28 4d 65 6d 2a 2c 20 69  tringify(Mem*, i
4dd0: 6e 74 29 3b 0a 69 36 34 20 73 71 6c 69 74 65 33  nt);.i64 sqlite3
4de0: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 4d 65 6d  VdbeIntValue(Mem
4df0: 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
4e00: 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
4e10: 28 4d 65 6d 2a 29 3b 0a 64 6f 75 62 6c 65 20 73  (Mem*);.double s
4e20: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
4e30: 6c 75 65 28 4d 65 6d 2a 29 3b 0a 76 6f 69 64 20  lue(Mem*);.void 
4e40: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67  sqlite3VdbeInteg
4e50: 65 72 41 66 66 69 6e 69 74 79 28 4d 65 6d 2a 29  erAffinity(Mem*)
4e60: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  ;.int sqlite3Vdb
4e70: 65 4d 65 6d 52 65 61 6c 69 66 79 28 4d 65 6d 2a  eMemRealify(Mem*
4e80: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
4e90: 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 4d 65  beMemNumerify(Me
4ea0: 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  m*);.int sqlite3
4eb0: 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
4ec0: 28 42 74 43 75 72 73 6f 72 2a 2c 69 6e 74 2c 69  (BtCursor*,int,i
4ed0: 6e 74 2c 69 6e 74 2c 4d 65 6d 2a 29 3b 0a 76 6f  nt,int,Mem*);.vo
4ee0: 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  id sqlite3VdbeMe
4ef0: 6d 52 65 6c 65 61 73 65 28 4d 65 6d 20 2a 70 29  mRelease(Mem *p)
4f00: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
4f10: 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78 74 65  beMemReleaseExte
4f20: 72 6e 61 6c 28 4d 65 6d 20 2a 70 29 3b 0a 23 64  rnal(Mem *p);.#d
4f30: 65 66 69 6e 65 20 56 64 62 65 4d 65 6d 52 65 6c  efine VdbeMemRel
4f40: 65 61 73 65 28 58 29 20 20 5c 0a 20 20 69 66 28  ease(X)  \.  if(
4f50: 28 58 29 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f  (X)->flags&(MEM_
4f60: 41 67 67 7c 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f  Agg|MEM_Dyn|MEM_
4f70: 52 6f 77 53 65 74 7c 4d 45 4d 5f 46 72 61 6d 65  RowSet|MEM_Frame
4f80: 29 29 20 5c 0a 20 20 20 20 73 71 6c 69 74 65 33  )) \.    sqlite3
4f90: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78  VdbeMemReleaseEx
4fa0: 74 65 72 6e 61 6c 28 58 29 3b 0a 69 6e 74 20 73  ternal(X);.int s
4fb0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e  qlite3VdbeMemFin
4fc0: 61 6c 69 7a 65 28 4d 65 6d 2a 2c 20 46 75 6e 63  alize(Mem*, Func
4fd0: 44 65 66 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61  Def*);.const cha
4fe0: 72 20 2a 73 71 6c 69 74 65 33 4f 70 63 6f 64 65  r *sqlite3Opcode
4ff0: 4e 61 6d 65 28 69 6e 74 29 3b 0a 69 6e 74 20 73  Name(int);.int s
5000: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
5010: 77 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 69 6e 74  w(Mem *pMem, int
5020: 20 6e 2c 20 69 6e 74 20 70 72 65 73 65 72 76 65   n, int preserve
5030: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
5040: 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74  beCloseStatement
5050: 28 56 64 62 65 20 2a 2c 20 69 6e 74 29 3b 0a 76  (Vdbe *, int);.v
5060: 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 46  oid sqlite3VdbeF
5070: 72 61 6d 65 44 65 6c 65 74 65 28 56 64 62 65 46  rameDelete(VdbeF
5080: 72 61 6d 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  rame*);.int sqli
5090: 74 65 33 56 64 62 65 46 72 61 6d 65 52 65 73 74  te3VdbeFrameRest
50a0: 6f 72 65 28 56 64 62 65 46 72 61 6d 65 20 2a 29  ore(VdbeFrame *)
50b0: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
50c0: 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 4d  beMemStoreType(M
50d0: 65 6d 20 2a 70 4d 65 6d 29 3b 0a 76 6f 69 64 20  em *pMem);.void 
50e0: 73 71 6c 69 74 65 33 56 64 62 65 50 72 65 55 70  sqlite3VdbePreUp
50f0: 64 61 74 65 48 6f 6f 6b 28 0a 20 20 20 20 56 64  dateHook(.    Vd
5100: 62 65 20 2a 2c 20 56 64 62 65 43 75 72 73 6f 72  be *, VdbeCursor
5110: 20 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63   *, int, const c
5120: 68 61 72 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  har*, Table *, i
5130: 36 34 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  64, int);.int sq
5140: 6c 69 74 65 33 56 64 62 65 54 72 61 6e 73 66 65  lite3VdbeTransfe
5150: 72 45 72 72 6f 72 28 56 64 62 65 20 2a 70 29 3b  rError(Vdbe *p);
5160: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
5170: 4f 4d 49 54 5f 4d 45 52 47 45 5f 53 4f 52 54 0a  OMIT_MERGE_SORT.
5180: 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
5190: 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28 59  VdbeSorterInit(Y
51a0: 2c 5a 29 20 20 20 20 20 20 53 51 4c 49 54 45 5f  ,Z)      SQLITE_
51b0: 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  OK.# define sqli
51c0: 74 65 33 56 64 62 65 53 6f 72 74 65 72 57 72 69  te3VdbeSorterWri
51d0: 74 65 28 58 2c 59 2c 5a 29 20 20 20 53 51 4c 49  te(X,Y,Z)   SQLI
51e0: 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73  TE_OK.# define s
51f0: 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
5200: 43 6c 6f 73 65 28 59 2c 5a 29 0a 23 20 64 65 66  Close(Y,Z).# def
5210: 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 53  ine sqlite3VdbeS
5220: 6f 72 74 65 72 52 6f 77 6b 65 79 28 59 2c 5a 29  orterRowkey(Y,Z)
5230: 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20      SQLITE_OK.# 
5240: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64  define sqlite3Vd
5250: 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64 28 58  beSorterRewind(X
5260: 2c 59 2c 5a 29 20 20 53 51 4c 49 54 45 5f 4f 4b  ,Y,Z)  SQLITE_OK
5270: 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
5280: 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28  3VdbeSorterNext(
5290: 58 2c 59 2c 5a 29 20 20 20 20 53 51 4c 49 54 45  X,Y,Z)    SQLITE
52a0: 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  _OK.# define sql
52b0: 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f  ite3VdbeSorterCo
52c0: 6d 70 61 72 65 28 58 2c 59 2c 5a 29 20 53 51 4c  mpare(X,Y,Z) SQL
52d0: 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 69 6e 74  ITE_OK.#else.int
52e0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
52f0: 65 72 49 6e 69 74 28 73 71 6c 69 74 65 33 20 2a  erInit(sqlite3 *
5300: 2c 20 56 64 62 65 43 75 72 73 6f 72 20 2a 29 3b  , VdbeCursor *);
5310: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
5320: 65 53 6f 72 74 65 72 43 6c 6f 73 65 28 73 71 6c  eSorterClose(sql
5330: 69 74 65 33 20 2a 2c 20 56 64 62 65 43 75 72 73  ite3 *, VdbeCurs
5340: 6f 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  or *);.int sqlit
5350: 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f 77 6b  e3VdbeSorterRowk
5360: 65 79 28 63 6f 6e 73 74 20 56 64 62 65 43 75 72  ey(const VdbeCur
5370: 73 6f 72 20 2a 2c 20 4d 65 6d 20 2a 29 3b 0a 69  sor *, Mem *);.i
5380: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f  nt sqlite3VdbeSo
5390: 72 74 65 72 4e 65 78 74 28 73 71 6c 69 74 65 33  rterNext(sqlite3
53a0: 20 2a 2c 20 63 6f 6e 73 74 20 56 64 62 65 43 75   *, const VdbeCu
53b0: 72 73 6f 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a  rsor *, int *);.
53c0: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 53  int sqlite3VdbeS
53d0: 6f 72 74 65 72 52 65 77 69 6e 64 28 73 71 6c 69  orterRewind(sqli
53e0: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 56 64 62  te3 *, const Vdb
53f0: 65 43 75 72 73 6f 72 20 2a 2c 20 69 6e 74 20 2a  eCursor *, int *
5400: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
5410: 62 65 53 6f 72 74 65 72 57 72 69 74 65 28 73 71  beSorterWrite(sq
5420: 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 56  lite3 *, const V
5430: 64 62 65 43 75 72 73 6f 72 20 2a 2c 20 4d 65 6d  dbeCursor *, Mem
5440: 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
5450: 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72  VdbeSorterCompar
5460: 65 28 63 6f 6e 73 74 20 56 64 62 65 43 75 72 73  e(const VdbeCurs
5470: 6f 72 20 2a 2c 20 4d 65 6d 20 2a 2c 20 69 6e 74  or *, Mem *, int
5480: 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66   *);.#endif..#if
5490: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
54a0: 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
54b0: 48 45 29 20 26 26 20 53 51 4c 49 54 45 5f 54 48  HE) && SQLITE_TH
54c0: 52 45 41 44 53 41 46 45 3e 30 0a 20 20 76 6f 69  READSAFE>0.  voi
54d0: 64 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e 74  d sqlite3VdbeEnt
54e0: 65 72 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69  er(Vdbe*);.  voi
54f0: 64 20 73 71 6c 69 74 65 33 56 64 62 65 4c 65 61  d sqlite3VdbeLea
5500: 76 65 28 56 64 62 65 2a 29 3b 0a 23 65 6c 73 65  ve(Vdbe*);.#else
5510: 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
5520: 33 56 64 62 65 45 6e 74 65 72 28 58 29 0a 23 20  3VdbeEnter(X).# 
5530: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64  define sqlite3Vd
5540: 62 65 4c 65 61 76 65 28 58 29 0a 23 65 6e 64 69  beLeave(X).#endi
5550: 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
5560: 5f 44 45 42 55 47 0a 76 6f 69 64 20 73 71 6c 69  _DEBUG.void sqli
5570: 74 65 33 56 64 62 65 4d 65 6d 41 62 6f 75 74 54  te3VdbeMemAboutT
5580: 6f 43 68 61 6e 67 65 28 56 64 62 65 2a 2c 4d 65  oChange(Vdbe*,Me
5590: 6d 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  m*);.#endif..#if
55a0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
55b0: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 69 6e 74  _FOREIGN_KEY.int
55c0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
55d0: 6b 46 6b 28 56 64 62 65 20 2a 2c 20 69 6e 74 29  kFk(Vdbe *, int)
55e0: 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
55f0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
5600: 6b 46 6b 28 70 2c 69 29 20 30 0a 23 65 6e 64 69  kFk(p,i) 0.#endi
5610: 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  f..int sqlite3Vd
5620: 62 65 4d 65 6d 54 72 61 6e 73 6c 61 74 65 28 4d  beMemTranslate(M
5630: 65 6d 2a 2c 20 75 38 29 3b 0a 23 69 66 64 65 66  em*, u8);.#ifdef
5640: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
5650: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
5660: 50 72 69 6e 74 53 71 6c 28 56 64 62 65 2a 29 3b  PrintSql(Vdbe*);
5670: 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56  .  void sqlite3V
5680: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
5690: 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61  t(Mem *pMem, cha
56a0: 72 20 2a 7a 42 75 66 29 3b 0a 23 65 6e 64 69 66  r *zBuf);.#endif
56b0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
56c0: 4d 65 6d 48 61 6e 64 6c 65 42 6f 6d 28 4d 65 6d  MemHandleBom(Mem
56d0: 20 2a 70 4d 65 6d 29 3b 0a 0a 23 69 66 6e 64 65   *pMem);..#ifnde
56e0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  f SQLITE_OMIT_IN
56f0: 43 52 42 4c 4f 42 0a 20 20 69 6e 74 20 73 71 6c  CRBLOB.  int sql
5700: 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e  ite3VdbeMemExpan
5710: 64 42 6c 6f 62 28 4d 65 6d 20 2a 29 3b 0a 20 20  dBlob(Mem *);.  
5720: 23 64 65 66 69 6e 65 20 45 78 70 61 6e 64 42 6c  #define ExpandBl
5730: 6f 62 28 50 29 20 28 28 28 50 29 2d 3e 66 6c 61  ob(P) (((P)->fla
5740: 67 73 26 4d 45 4d 5f 5a 65 72 6f 29 3f 73 71 6c  gs&MEM_Zero)?sql
5750: 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e  ite3VdbeMemExpan
5760: 64 42 6c 6f 62 28 50 29 3a 30 29 0a 23 65 6c 73  dBlob(P):0).#els
5770: 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
5780: 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64  te3VdbeMemExpand
5790: 42 6c 6f 62 28 78 29 20 53 51 4c 49 54 45 5f 4f  Blob(x) SQLITE_O
57a0: 4b 0a 20 20 23 64 65 66 69 6e 65 20 45 78 70 61  K.  #define Expa
57b0: 6e 64 42 6c 6f 62 28 50 29 20 53 51 4c 49 54 45  ndBlob(P) SQLITE
57c0: 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64  _OK.#endif..#end
57d0: 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 5f  if /* !defined(_
57e0: 56 44 42 45 49 4e 54 5f 48 5f 29 20 2a 2f 0a     VDBEINT_H_) */.