/ Hex Artifact Content
Login

Artifact 6931139cefc2f01f8612b771a31d96d06b1a6860:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 53 65 70 74 65  /*.** 2003 Septe
0010: 6d 62 65 72 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65  mber 6.**.** The
0020: 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69 6d   author disclaim
0030: 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20 74  s copyright to t
0040: 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65 2e  his source code.
0050: 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a 2a    In place of.**
0060: 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65 2c   a legal notice,
0070: 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73 73   here is a bless
0080: 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61  ing:.**.**    Ma
0090: 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61 6e  y you do good an
00a0: 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20 20  d not evil..**  
00b0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00c0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00d0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00e0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20 20  ive others..**  
00f0: 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20    May you share 
0100: 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61  freely, never ta
0110: 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79  king more than y
0120: 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a  ou give..**.****
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73  *****.** This is
0180: 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65   the header file
0190: 20 66 6f 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   for information
01a0: 20 74 68 61 74 20 69 73 20 70 72 69 76 61 74 65   that is private
01b0: 20 74 6f 20 74 68 65 0a 2a 2a 20 56 44 42 45 2e   to the.** VDBE.
01c0: 20 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69    This informati
01d0: 6f 6e 20 75 73 65 64 20 74 6f 20 61 6c 6c 20 62  on used to all b
01e0: 65 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20  e at the top of 
01f0: 74 68 65 20 73 69 6e 67 6c 65 0a 2a 2a 20 73 6f  the single.** so
0200: 75 72 63 65 20 63 6f 64 65 20 66 69 6c 65 20 22  urce code file "
0210: 76 64 62 65 2e 63 22 2e 20 20 57 68 65 6e 20 74  vdbe.c".  When t
0220: 68 61 74 20 66 69 6c 65 20 62 65 63 61 6d 65 20  hat file became 
0230: 74 6f 6f 20 62 69 67 20 28 6f 76 65 72 0a 2a 2a  too big (over.**
0240: 20 36 30 30 30 20 6c 69 6e 65 73 20 6c 6f 6e 67   6000 lines long
0250: 29 20 69 74 20 77 61 73 20 73 70 6c 69 74 20 75  ) it was split u
0260: 70 20 69 6e 74 6f 20 73 65 76 65 72 61 6c 20 73  p into several s
0270: 6d 61 6c 6c 65 72 20 66 69 6c 65 73 20 61 6e 64  maller files and
0280: 0a 2a 2a 20 74 68 69 73 20 68 65 61 64 65 72 20  .** this header 
0290: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 77 61 73 20  information was 
02a0: 66 61 63 74 6f 72 65 64 20 6f 75 74 2e 0a 2a 2f  factored out..*/
02b0: 0a 23 69 66 6e 64 65 66 20 5f 56 44 42 45 49 4e  .#ifndef _VDBEIN
02c0: 54 5f 48 5f 0a 23 64 65 66 69 6e 65 20 5f 56 44  T_H_.#define _VD
02d0: 42 45 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20  BEINT_H_../*.** 
02e0: 54 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  The maximum numb
02f0: 65 72 20 6f 66 20 74 69 6d 65 73 20 74 68 61 74  er of times that
0300: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c   a statement wil
0310: 6c 20 74 72 79 20 74 6f 20 72 65 70 61 72 73 65  l try to reparse
0320: 0a 2a 2a 20 69 74 73 65 6c 66 20 62 65 66 6f 72  .** itself befor
0330: 65 20 67 69 76 69 6e 67 20 75 70 20 61 6e 64 20  e giving up and 
0340: 72 65 74 75 72 6e 69 6e 67 20 53 51 4c 49 54 45  returning SQLITE
0350: 5f 53 43 48 45 4d 41 2e 0a 2a 2f 0a 23 69 66 6e  _SCHEMA..*/.#ifn
0360: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 53  def SQLITE_MAX_S
0370: 43 48 45 4d 41 5f 52 45 54 52 59 0a 23 20 64 65  CHEMA_RETRY.# de
0380: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
0390: 53 43 48 45 4d 41 5f 52 45 54 52 59 20 35 30 0a  SCHEMA_RETRY 50.
03a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 51  #endif../*.** SQ
03b0: 4c 20 69 73 20 74 72 61 6e 73 6c 61 74 65 64 20  L is translated 
03c0: 69 6e 74 6f 20 61 20 73 65 71 75 65 6e 63 65 20  into a sequence 
03d0: 6f 66 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  of instructions 
03e0: 74 6f 20 62 65 0a 2a 2a 20 65 78 65 63 75 74 65  to be.** execute
03f0: 64 20 62 79 20 61 20 76 69 72 74 75 61 6c 20 6d  d by a virtual m
0400: 61 63 68 69 6e 65 2e 20 20 45 61 63 68 20 69 6e  achine.  Each in
0410: 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 6e 20  struction is an 
0420: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
0430: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
0440: 75 63 74 75 72 65 2e 0a 2a 2f 0a 74 79 70 65 64  ucture..*/.typed
0450: 65 66 20 73 74 72 75 63 74 20 56 64 62 65 4f 70  ef struct VdbeOp
0460: 20 4f 70 3b 0a 0a 2f 2a 0a 2a 2a 20 42 6f 6f 6c   Op;../*.** Bool
0470: 65 61 6e 20 76 61 6c 75 65 73 0a 2a 2f 0a 74 79  ean values.*/.ty
0480: 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63  pedef unsigned c
0490: 68 61 72 20 42 6f 6f 6c 3b 0a 0a 2f 2a 20 4f 70  har Bool;../* Op
04a0: 61 71 75 65 20 74 79 70 65 20 75 73 65 64 20 62  aque type used b
04b0: 79 20 63 6f 64 65 20 69 6e 20 76 64 62 65 73 6f  y code in vdbeso
04c0: 72 74 2e 63 20 2a 2f 0a 74 79 70 65 64 65 66 20  rt.c */.typedef 
04d0: 73 74 72 75 63 74 20 56 64 62 65 53 6f 72 74 65  struct VdbeSorte
04e0: 72 20 56 64 62 65 53 6f 72 74 65 72 3b 0a 0a 2f  r VdbeSorter;../
04f0: 2a 20 4f 70 61 71 75 65 20 74 79 70 65 20 75 73  * Opaque type us
0500: 65 64 20 62 79 20 74 68 65 20 65 78 70 6c 61 69  ed by the explai
0510: 6e 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73  ner */.typedef s
0520: 74 72 75 63 74 20 45 78 70 6c 61 69 6e 20 45 78  truct Explain Ex
0530: 70 6c 61 69 6e 3b 0a 0a 2f 2a 20 45 6c 65 6d 65  plain;../* Eleme
0540: 6e 74 73 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65  nts of the linke
0550: 64 20 6c 69 73 74 20 61 74 20 56 64 62 65 2e 70  d list at Vdbe.p
0560: 41 75 78 44 61 74 61 20 2a 2f 0a 74 79 70 65 64  AuxData */.typed
0570: 65 66 20 73 74 72 75 63 74 20 41 75 78 44 61 74  ef struct AuxDat
0580: 61 20 41 75 78 44 61 74 61 3b 0a 0a 2f 2a 0a 2a  a AuxData;../*.*
0590: 2a 20 41 20 63 75 72 73 6f 72 20 69 73 20 61 20  * A cursor is a 
05a0: 70 6f 69 6e 74 65 72 20 69 6e 74 6f 20 61 20 73  pointer into a s
05b0: 69 6e 67 6c 65 20 42 54 72 65 65 20 77 69 74 68  ingle BTree with
05c0: 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69  in a database fi
05d0: 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
05e0: 72 20 63 61 6e 20 73 65 65 6b 20 74 6f 20 61 20  r can seek to a 
05f0: 42 54 72 65 65 20 65 6e 74 72 79 20 77 69 74 68  BTree entry with
0600: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 6b 65   a particular ke
0610: 79 2c 20 6f 72 0a 2a 2a 20 6c 6f 6f 70 20 6f 76  y, or.** loop ov
0620: 65 72 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 6f  er all entries o
0630: 66 20 74 68 65 20 42 74 72 65 65 2e 20 20 59 6f  f the Btree.  Yo
0640: 75 20 63 61 6e 20 61 6c 73 6f 20 69 6e 73 65 72  u can also inser
0650: 74 20 6e 65 77 20 42 54 72 65 65 0a 2a 2a 20 65  t new BTree.** e
0660: 6e 74 72 69 65 73 20 6f 72 20 72 65 74 72 69 65  ntries or retrie
0670: 76 65 20 74 68 65 20 6b 65 79 20 6f 72 20 64 61  ve the key or da
0680: 74 61 20 66 72 6f 6d 20 74 68 65 20 65 6e 74 72  ta from the entr
0690: 79 20 74 68 61 74 20 74 68 65 20 63 75 72 73 6f  y that the curso
06a0: 72 0a 2a 2a 20 69 73 20 63 75 72 72 65 6e 74 6c  r.** is currentl
06b0: 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 0a 2a  y pointing to..*
06c0: 2a 20 0a 2a 2a 20 45 76 65 72 79 20 63 75 72 73  * .** Every curs
06d0: 6f 72 20 74 68 61 74 20 74 68 65 20 76 69 72 74  or that the virt
06e0: 75 61 6c 20 6d 61 63 68 69 6e 65 20 68 61 73 20  ual machine has 
06f0: 6f 70 65 6e 20 69 73 20 72 65 70 72 65 73 65 6e  open is represen
0700: 74 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ted by an.** ins
0710: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
0720: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
0730: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 64 62 65  ..*/.struct Vdbe
0740: 43 75 72 73 6f 72 20 7b 0a 20 20 42 74 43 75 72  Cursor {.  BtCur
0750: 73 6f 72 20 2a 70 43 75 72 73 6f 72 3b 20 20 20  sor *pCursor;   
0760: 20 2f 2a 20 54 68 65 20 63 75 72 73 6f 72 20 73   /* The cursor s
0770: 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 65 20  tructure of the 
0780: 62 61 63 6b 65 6e 64 20 2a 2f 0a 20 20 42 74 72  backend */.  Btr
0790: 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20  ee *pBt;        
07a0: 20 20 20 2f 2a 20 53 65 70 61 72 61 74 65 20 66     /* Separate f
07b0: 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65 6d 70  ile holding temp
07c0: 6f 72 61 72 79 20 74 61 62 6c 65 20 2a 2f 0a 20  orary table */. 
07d0: 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
07e0: 66 6f 3b 20 20 20 20 2f 2a 20 49 6e 66 6f 20 61  fo;    /* Info a
07f0: 62 6f 75 74 20 69 6e 64 65 78 20 6b 65 79 73 20  bout index keys 
0800: 6e 65 65 64 65 64 20 62 79 20 69 6e 64 65 78 20  needed by index 
0810: 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74  cursors */.  int
0820: 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
0830: 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63     /* Index of c
0840: 75 72 73 6f 72 20 64 61 74 61 62 61 73 65 20 69  ursor database i
0850: 6e 20 64 62 2d 3e 61 44 62 5b 5d 20 28 6f 72 20  n db->aDb[] (or 
0860: 2d 31 29 20 2a 2f 0a 20 20 69 6e 74 20 70 73 65  -1) */.  int pse
0870: 75 64 6f 54 61 62 6c 65 52 65 67 3b 20 20 20 2f  udoTableReg;   /
0880: 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
0890: 6e 67 20 70 73 65 75 64 6f 74 61 62 6c 65 20 63  ng pseudotable c
08a0: 6f 6e 74 65 6e 74 2e 20 2a 2f 0a 20 20 69 6e 74  ontent. */.  int
08b0: 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
08c0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
08d0: 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 68 65  fields in the he
08e0: 61 64 65 72 20 2a 2f 0a 20 20 42 6f 6f 6c 20 7a  ader */.  Bool z
08f0: 65 72 6f 65 64 3b 20 20 20 20 20 20 20 20 20 20  eroed;          
0900: 2f 2a 20 54 72 75 65 20 69 66 20 7a 65 72 6f 65  /* True if zeroe
0910: 64 20 6f 75 74 20 61 6e 64 20 72 65 61 64 79 20  d out and ready 
0920: 66 6f 72 20 72 65 75 73 65 20 2a 2f 0a 20 20 42  for reuse */.  B
0930: 6f 6f 6c 20 72 6f 77 69 64 49 73 56 61 6c 69 64  ool rowidIsValid
0940: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
0950: 6c 61 73 74 52 6f 77 69 64 20 69 73 20 76 61 6c  lastRowid is val
0960: 69 64 20 2a 2f 0a 20 20 42 6f 6f 6c 20 61 74 46  id */.  Bool atF
0970: 69 72 73 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  irst;         /*
0980: 20 54 72 75 65 20 69 66 20 70 6f 69 6e 74 69 6e   True if pointin
0990: 67 20 74 6f 20 66 69 72 73 74 20 65 6e 74 72 79  g to first entry
09a0: 20 2a 2f 0a 20 20 42 6f 6f 6c 20 75 73 65 52 61   */.  Bool useRa
09b0: 6e 64 6f 6d 52 6f 77 69 64 3b 20 20 2f 2a 20 47  ndomRowid;  /* G
09c0: 65 6e 65 72 61 74 65 20 6e 65 77 20 72 65 63 6f  enerate new reco
09d0: 72 64 20 6e 75 6d 62 65 72 73 20 73 65 6d 69 2d  rd numbers semi-
09e0: 72 61 6e 64 6f 6d 6c 79 20 2a 2f 0a 20 20 42 6f  randomly */.  Bo
09f0: 6f 6c 20 6e 75 6c 6c 52 6f 77 3b 20 20 20 20 20  ol nullRow;     
0a00: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70      /* True if p
0a10: 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 72 6f 77  ointing to a row
0a20: 20 77 69 74 68 20 6e 6f 20 64 61 74 61 20 2a 2f   with no data */
0a30: 0a 20 20 42 6f 6f 6c 20 64 65 66 65 72 72 65 64  .  Bool deferred
0a40: 4d 6f 76 65 74 6f 3b 20 20 2f 2a 20 41 20 63 61  Moveto;  /* A ca
0a50: 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 42 74 72  ll to sqlite3Btr
0a60: 65 65 4d 6f 76 65 74 6f 28 29 20 69 73 20 6e 65  eeMoveto() is ne
0a70: 65 64 65 64 20 2a 2f 0a 20 20 42 6f 6f 6c 20 69  eded */.  Bool i
0a80: 73 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  sTable;         
0a90: 2f 2a 20 54 72 75 65 20 69 66 20 61 20 74 61 62  /* True if a tab
0aa0: 6c 65 20 72 65 71 75 69 72 69 6e 67 20 69 6e 74  le requiring int
0ab0: 65 67 65 72 20 6b 65 79 73 20 2a 2f 0a 20 20 42  eger keys */.  B
0ac0: 6f 6f 6c 20 69 73 49 6e 64 65 78 3b 20 20 20 20  ool isIndex;    
0ad0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
0ae0: 61 6e 20 69 6e 64 65 78 20 63 6f 6e 74 61 69 6e  an index contain
0af0: 69 6e 67 20 6b 65 79 73 20 6f 6e 6c 79 20 2d 20  ing keys only - 
0b00: 6e 6f 20 64 61 74 61 20 2a 2f 0a 20 20 42 6f 6f  no data */.  Boo
0b10: 6c 20 69 73 4f 72 64 65 72 65 64 3b 20 20 20 20  l isOrdered;    
0b20: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
0b30: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 74 61 62  e underlying tab
0b40: 6c 65 20 69 73 20 42 54 52 45 45 5f 55 4e 4f 52  le is BTREE_UNOR
0b50: 44 45 52 45 44 20 2a 2f 0a 20 20 42 6f 6f 6c 20  DERED */.  Bool 
0b60: 69 73 53 6f 72 74 65 72 3b 20 20 20 20 20 20 20  isSorter;       
0b70: 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20 6e 65   /* True if a ne
0b80: 77 2d 73 74 79 6c 65 20 73 6f 72 74 65 72 20 2a  w-style sorter *
0b90: 2f 0a 20 20 42 6f 6f 6c 20 6d 75 6c 74 69 50 73  /.  Bool multiPs
0ba0: 65 75 64 6f 3b 20 20 20 20 20 2f 2a 20 4d 75 6c  eudo;     /* Mul
0bb0: 74 69 2d 72 65 67 69 73 74 65 72 20 70 73 65 75  ti-register pseu
0bc0: 64 6f 2d 63 75 72 73 6f 72 20 2a 2f 0a 20 20 73  do-cursor */.  s
0bd0: 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
0be0: 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b  or *pVtabCursor;
0bf0: 20 20 2f 2a 20 54 68 65 20 63 75 72 73 6f 72 20    /* The cursor 
0c00: 66 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74 61  for a virtual ta
0c10: 62 6c 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 73  ble */.  const s
0c20: 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
0c30: 4d 6f 64 75 6c 65 3b 20 20 20 20 20 2f 2a 20 4d  Module;     /* M
0c40: 6f 64 75 6c 65 20 66 6f 72 20 63 75 72 73 6f 72  odule for cursor
0c50: 20 70 56 74 61 62 43 75 72 73 6f 72 20 2a 2f 0a   pVtabCursor */.
0c60: 20 20 69 36 34 20 73 65 71 43 6f 75 6e 74 3b 20    i64 seqCount; 
0c70: 20 20 20 20 20 20 20 20 2f 2a 20 53 65 71 75 65          /* Seque
0c80: 6e 63 65 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  nce counter */. 
0c90: 20 69 36 34 20 6d 6f 76 65 74 6f 54 61 72 67 65   i64 movetoTarge
0ca0: 74 3b 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65  t;     /* Argume
0cb0: 6e 74 20 74 6f 20 74 68 65 20 64 65 66 65 72 72  nt to the deferr
0cc0: 65 64 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d  ed sqlite3BtreeM
0cd0: 6f 76 65 74 6f 28 29 20 2a 2f 0a 20 20 69 36 34  oveto() */.  i64
0ce0: 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20   lastRowid;     
0cf0: 20 20 20 2f 2a 20 4c 61 73 74 20 72 6f 77 69 64     /* Last rowid
0d00: 20 66 72 6f 6d 20 61 20 4e 65 78 74 20 6f 72 20   from a Next or 
0d10: 4e 65 78 74 49 64 78 20 6f 70 65 72 61 74 69 6f  NextIdx operatio
0d20: 6e 20 2a 2f 0a 20 20 56 64 62 65 53 6f 72 74 65  n */.  VdbeSorte
0d30: 72 20 2a 70 53 6f 72 74 65 72 3b 20 20 2f 2a 20  r *pSorter;  /* 
0d40: 53 6f 72 74 65 72 20 6f 62 6a 65 63 74 20 66 6f  Sorter object fo
0d50: 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 20  r OP_SorterOpen 
0d60: 63 75 72 73 6f 72 73 20 2a 2f 0a 0a 20 20 2f 2a  cursors */..  /*
0d70: 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20   Result of last 
0d80: 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
0d90: 74 6f 28 29 20 64 6f 6e 65 20 62 79 20 61 6e 20  to() done by an 
0da0: 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 20  OP_NotExists or 
0db0: 0a 20 20 2a 2a 20 4f 50 5f 49 73 55 6e 69 71 75  .  ** OP_IsUniqu
0dc0: 65 20 6f 70 63 6f 64 65 20 6f 6e 20 74 68 69 73  e opcode on this
0dd0: 20 63 75 72 73 6f 72 2e 20 2a 2f 0a 20 20 69 6e   cursor. */.  in
0de0: 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 0a 0a 20  t seekResult;.. 
0df0: 20 2f 2a 20 43 61 63 68 65 64 20 69 6e 66 6f 72   /* Cached infor
0e00: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
0e10: 20 68 65 61 64 65 72 20 66 6f 72 20 74 68 65 20   header for the 
0e20: 64 61 74 61 20 72 65 63 6f 72 64 20 74 68 61 74  data record that
0e30: 20 74 68 65 0a 20 20 2a 2a 20 63 75 72 73 6f 72   the.  ** cursor
0e40: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
0e50: 69 6e 74 69 6e 67 20 74 6f 2e 20 20 4f 6e 6c 79  inting to.  Only
0e60: 20 76 61 6c 69 64 20 69 66 20 63 61 63 68 65 53   valid if cacheS
0e70: 74 61 74 75 73 20 6d 61 74 63 68 65 73 0a 20 20  tatus matches.  
0e80: 2a 2a 20 56 64 62 65 2e 63 61 63 68 65 43 74 72  ** Vdbe.cacheCtr
0e90: 2e 20 20 56 64 62 65 2e 63 61 63 68 65 43 74 72  .  Vdbe.cacheCtr
0ea0: 20 77 69 6c 6c 20 6e 65 76 65 72 20 74 61 6b 65   will never take
0eb0: 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66   on the value of
0ec0: 0a 20 20 2a 2a 20 43 41 43 48 45 5f 53 54 41 4c  .  ** CACHE_STAL
0ed0: 45 20 61 6e 64 20 73 6f 20 73 65 74 74 69 6e 67  E and so setting
0ee0: 20 63 61 63 68 65 53 74 61 74 75 73 3d 43 41 43   cacheStatus=CAC
0ef0: 48 45 5f 53 54 41 4c 45 20 67 75 61 72 61 6e 74  HE_STALE guarant
0f00: 65 65 73 20 74 68 61 74 0a 20 20 2a 2a 20 74 68  ees that.  ** th
0f10: 65 20 63 61 63 68 65 20 69 73 20 6f 75 74 20 6f  e cache is out o
0f20: 66 20 64 61 74 65 2e 0a 20 20 2a 2a 0a 20 20 2a  f date..  **.  *
0f30: 2a 20 61 52 6f 77 20 6d 69 67 68 74 20 70 6f 69  * aRow might poi
0f40: 6e 74 20 74 6f 20 28 65 70 68 65 6d 65 72 61 6c  nt to (ephemeral
0f50: 29 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 63  ) data for the c
0f60: 75 72 72 65 6e 74 20 72 6f 77 2c 20 6f 72 20 69  urrent row, or i
0f70: 74 20 6d 69 67 68 74 0a 20 20 2a 2a 20 62 65 20  t might.  ** be 
0f80: 4e 55 4c 4c 2e 0a 20 20 2a 2f 0a 20 20 75 33 32  NULL..  */.  u32
0f90: 20 63 61 63 68 65 53 74 61 74 75 73 3b 20 20 20   cacheStatus;   
0fa0: 20 20 20 2f 2a 20 43 61 63 68 65 20 69 73 20 76     /* Cache is v
0fb0: 61 6c 69 64 20 69 66 20 74 68 69 73 20 6d 61 74  alid if this mat
0fc0: 63 68 65 73 20 56 64 62 65 2e 63 61 63 68 65 43  ches Vdbe.cacheC
0fd0: 74 72 20 2a 2f 0a 20 20 69 6e 74 20 70 61 79 6c  tr */.  int payl
0fe0: 6f 61 64 53 69 7a 65 3b 20 20 20 20 20 20 2f 2a  oadSize;      /*
0ff0: 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   Total number of
1000: 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65   bytes in the re
1010: 63 6f 72 64 20 2a 2f 0a 20 20 75 33 32 20 2a 61  cord */.  u32 *a
1020: 54 79 70 65 3b 20 20 20 20 20 20 20 20 20 20 20  Type;           
1030: 2f 2a 20 54 79 70 65 20 76 61 6c 75 65 73 20 66  /* Type values f
1040: 6f 72 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 69  or all entries i
1050: 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
1060: 20 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20    u32 *aOffset; 
1070: 20 20 20 20 20 20 20 20 2f 2a 20 43 61 63 68 65          /* Cache
1080: 64 20 6f 66 66 73 65 74 73 20 74 6f 20 74 68 65  d offsets to the
1090: 20 73 74 61 72 74 20 6f 66 20 65 61 63 68 20 63   start of each c
10a0: 6f 6c 75 6d 6e 73 20 64 61 74 61 20 2a 2f 0a 20  olumns data */. 
10b0: 20 75 38 20 2a 61 52 6f 77 3b 20 20 20 20 20 20   u8 *aRow;      
10c0: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20 66         /* Data f
10d0: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  or the current r
10e0: 6f 77 2c 20 69 66 20 61 6c 6c 20 6f 6e 20 6f 6e  ow, if all on on
10f0: 65 20 70 61 67 65 20 2a 2f 0a 7d 3b 0a 74 79 70  e page */.};.typ
1100: 65 64 65 66 20 73 74 72 75 63 74 20 56 64 62 65  edef struct Vdbe
1110: 43 75 72 73 6f 72 20 56 64 62 65 43 75 72 73 6f  Cursor VdbeCurso
1120: 72 3b 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 61  r;../*.** When a
1130: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20   sub-program is 
1140: 65 78 65 63 75 74 65 64 20 28 4f 50 5f 50 72 6f  executed (OP_Pro
1150: 67 72 61 6d 29 2c 20 61 20 73 74 72 75 63 74 75  gram), a structu
1160: 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65 0a  re of this type.
1170: 2a 2a 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  ** is allocated 
1180: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 75 72  to store the cur
1190: 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68  rent value of th
11a0: 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  e program counte
11b0: 72 2c 20 61 73 0a 2a 2a 20 77 65 6c 6c 20 61 73  r, as.** well as
11c0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 65 6d   the current mem
11d0: 6f 72 79 20 63 65 6c 6c 20 61 72 72 61 79 20 61  ory cell array a
11e0: 6e 64 20 76 61 72 69 6f 75 73 20 6f 74 68 65 72  nd various other
11f0: 20 66 72 61 6d 65 20 73 70 65 63 69 66 69 63 0a   frame specific.
1200: 2a 2a 20 76 61 6c 75 65 73 20 73 74 6f 72 65 64  ** values stored
1210: 20 69 6e 20 74 68 65 20 56 64 62 65 20 73 74 72   in the Vdbe str
1220: 75 63 74 2e 20 57 68 65 6e 20 74 68 65 20 73 75  uct. When the su
1230: 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 66 69 6e  b-program is fin
1240: 69 73 68 65 64 2c 20 0a 2a 2a 20 74 68 65 73 65  ished, .** these
1250: 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 70 69   values are copi
1260: 65 64 20 62 61 63 6b 20 74 6f 20 74 68 65 20 56  ed back to the V
1270: 64 62 65 20 66 72 6f 6d 20 74 68 65 20 56 64 62  dbe from the Vdb
1280: 65 46 72 61 6d 65 20 73 74 72 75 63 74 75 72 65  eFrame structure
1290: 2c 0a 2a 2a 20 72 65 73 74 6f 72 69 6e 67 20 74  ,.** restoring t
12a0: 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  he state of the 
12b0: 56 4d 20 74 6f 20 61 73 20 69 74 20 77 61 73 20  VM to as it was 
12c0: 62 65 66 6f 72 65 20 74 68 65 20 73 75 62 2d 70  before the sub-p
12d0: 72 6f 67 72 61 6d 0a 2a 2a 20 62 65 67 61 6e 20  rogram.** began 
12e0: 65 78 65 63 75 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a  executing..**.**
12f0: 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20   The memory for 
1300: 61 20 56 64 62 65 46 72 61 6d 65 20 6f 62 6a 65  a VdbeFrame obje
1310: 63 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  ct is allocated 
1320: 61 6e 64 20 6d 61 6e 61 67 65 64 20 62 79 20 61  and managed by a
1330: 20 6d 65 6d 6f 72 79 0a 2a 2a 20 63 65 6c 6c 20   memory.** cell 
1340: 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 28 63  in the parent (c
1350: 61 6c 6c 69 6e 67 29 20 66 72 61 6d 65 2e 20 57  alling) frame. W
1360: 68 65 6e 20 74 68 65 20 6d 65 6d 6f 72 79 20 63  hen the memory c
1370: 65 6c 6c 20 69 73 20 64 65 6c 65 74 65 64 20 6f  ell is deleted o
1380: 72 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74 65 6e  r.** overwritten
1390: 2c 20 74 68 65 20 56 64 62 65 46 72 61 6d 65 20  , the VdbeFrame 
13a0: 6f 62 6a 65 63 74 20 69 73 20 6e 6f 74 20 66 72  object is not fr
13b0: 65 65 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  eed immediately.
13c0: 20 49 6e 73 74 65 61 64 2c 20 69 74 0a 2a 2a 20   Instead, it.** 
13d0: 69 73 20 6c 69 6e 6b 65 64 20 69 6e 74 6f 20 74  is linked into t
13e0: 68 65 20 56 64 62 65 2e 70 44 65 6c 46 72 61 6d  he Vdbe.pDelFram
13f0: 65 20 6c 69 73 74 2e 20 54 68 65 20 63 6f 6e 74  e list. The cont
1400: 65 6e 74 73 20 6f 66 20 74 68 65 20 56 64 62 65  ents of the Vdbe
1410: 2e 70 44 65 6c 46 72 61 6d 65 0a 2a 2a 20 6c 69  .pDelFrame.** li
1420: 73 74 20 69 73 20 64 65 6c 65 74 65 64 20 77 68  st is deleted wh
1430: 65 6e 20 74 68 65 20 56 4d 20 69 73 20 72 65 73  en the VM is res
1440: 65 74 20 69 6e 20 56 64 62 65 48 61 6c 74 28 29  et in VdbeHalt()
1450: 2e 20 54 68 65 20 72 65 61 73 6f 6e 20 66 6f 72  . The reason for
1460: 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 69 73 20 69   doing.** this i
1470: 6e 73 74 65 61 64 20 6f 66 20 64 65 6c 65 74 69  nstead of deleti
1480: 6e 67 20 74 68 65 20 56 64 62 65 46 72 61 6d 65  ng the VdbeFrame
1490: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 69 73 20   immediately is 
14a0: 74 6f 20 61 76 6f 69 64 20 72 65 63 75 72 73 69  to avoid recursi
14b0: 76 65 0a 2a 2a 20 63 61 6c 6c 73 20 74 6f 20 73  ve.** calls to s
14c0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
14d0: 65 61 73 65 28 29 20 77 68 65 6e 20 74 68 65 20  ease() when the 
14e0: 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 62 65 6c  memory cells bel
14f0: 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65 0a 2a 2a  onging to the.**
1500: 20 63 68 69 6c 64 20 66 72 61 6d 65 20 61 72 65   child frame are
1510: 20 72 65 6c 65 61 73 65 64 2e 0a 2a 2a 0a 2a 2a   released..**.**
1520: 20 54 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65   The currently e
1530: 78 65 63 75 74 69 6e 67 20 66 72 61 6d 65 20 69  xecuting frame i
1540: 73 20 73 74 6f 72 65 64 20 69 6e 20 56 64 62 65  s stored in Vdbe
1550: 2e 70 46 72 61 6d 65 2e 20 56 64 62 65 2e 70 46  .pFrame. Vdbe.pF
1560: 72 61 6d 65 20 69 73 0a 2a 2a 20 73 65 74 20 74  rame is.** set t
1570: 6f 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 63 75  o NULL if the cu
1580: 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e  rrently executin
1590: 67 20 66 72 61 6d 65 20 69 73 20 74 68 65 20 6d  g frame is the m
15a0: 61 69 6e 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  ain program..*/.
15b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56  typedef struct V
15c0: 64 62 65 46 72 61 6d 65 20 56 64 62 65 46 72 61  dbeFrame VdbeFra
15d0: 6d 65 3b 0a 73 74 72 75 63 74 20 56 64 62 65 46  me;.struct VdbeF
15e0: 72 61 6d 65 20 7b 0a 20 20 56 64 62 65 20 2a 76  rame {.  Vdbe *v
15f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1600: 20 2f 2a 20 56 4d 20 74 68 69 73 20 66 72 61 6d   /* VM this fram
1610: 65 20 62 65 6c 6f 6e 67 73 20 74 6f 20 2a 2f 0a  e belongs to */.
1620: 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 50 61    VdbeFrame *pPa
1630: 72 65 6e 74 3b 20 20 20 20 20 2f 2a 20 50 61 72  rent;     /* Par
1640: 65 6e 74 20 6f 66 20 74 68 69 73 20 66 72 61 6d  ent of this fram
1650: 65 2c 20 6f 72 20 4e 55 4c 4c 20 69 66 20 70 61  e, or NULL if pa
1660: 72 65 6e 74 20 69 73 20 6d 61 69 6e 20 2a 2f 0a  rent is main */.
1670: 20 20 4f 70 20 2a 61 4f 70 3b 20 20 20 20 20 20    Op *aOp;      
1680: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f            /* Pro
1690: 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  gram instruction
16a0: 73 20 66 6f 72 20 70 61 72 65 6e 74 20 66 72 61  s for parent fra
16b0: 6d 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65  me */.  Mem *aMe
16c0: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
16d0: 2f 2a 20 41 72 72 61 79 20 6f 66 20 6d 65 6d 6f  /* Array of memo
16e0: 72 79 20 63 65 6c 6c 73 20 66 6f 72 20 70 61 72  ry cells for par
16f0: 65 6e 74 20 66 72 61 6d 65 20 2a 2f 0a 20 20 75  ent frame */.  u
1700: 38 20 2a 61 4f 6e 63 65 46 6c 61 67 3b 20 20 20  8 *aOnceFlag;   
1710: 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
1720: 6f 66 20 4f 50 5f 4f 6e 63 65 20 66 6c 61 67 73  of OP_Once flags
1730: 20 66 6f 72 20 70 61 72 65 6e 74 20 66 72 61 6d   for parent fram
1740: 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  e */.  VdbeCurso
1750: 72 20 2a 2a 61 70 43 73 72 3b 20 20 20 20 20 2f  r **apCsr;     /
1760: 2a 20 41 72 72 61 79 20 6f 66 20 56 64 62 65 20  * Array of Vdbe 
1770: 63 75 72 73 6f 72 73 20 66 6f 72 20 70 61 72 65  cursors for pare
1780: 6e 74 20 66 72 61 6d 65 20 2a 2f 0a 20 20 76 6f  nt frame */.  vo
1790: 69 64 20 2a 74 6f 6b 65 6e 3b 20 20 20 20 20 20  id *token;      
17a0: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
17b0: 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65   SubProgram.toke
17c0: 6e 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52  n */.  i64 lastR
17d0: 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 2f  owid;          /
17e0: 2a 20 4c 61 73 74 20 69 6e 73 65 72 74 20 72 6f  * Last insert ro
17f0: 77 69 64 20 28 73 71 6c 69 74 65 33 2e 6c 61 73  wid (sqlite3.las
1800: 74 52 6f 77 69 64 29 20 2a 2f 0a 20 20 69 6e 74  tRowid) */.  int
1810: 20 6e 43 75 72 73 6f 72 3b 20 20 20 20 20 20 20   nCursor;       
1820: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1830: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 43  f entries in apC
1840: 73 72 20 2a 2f 0a 20 20 69 6e 74 20 70 63 3b 20  sr */.  int pc; 
1850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1860: 2f 2a 20 50 72 6f 67 72 61 6d 20 43 6f 75 6e 74  /* Program Count
1870: 65 72 20 69 6e 20 70 61 72 65 6e 74 20 28 63 61  er in parent (ca
1880: 6c 6c 69 6e 67 29 20 66 72 61 6d 65 20 2a 2f 0a  lling) frame */.
1890: 20 20 69 6e 74 20 6e 4f 70 3b 20 20 20 20 20 20    int nOp;      
18a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
18b0: 65 20 6f 66 20 61 4f 70 20 61 72 72 61 79 20 2a  e of aOp array *
18c0: 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
18e0: 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
18f0: 20 69 6e 20 61 4d 65 6d 20 2a 2f 0a 20 20 69 6e   in aMem */.  in
1900: 74 20 6e 4f 6e 63 65 46 6c 61 67 3b 20 20 20 20  t nOnceFlag;    
1910: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1920: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 4f  of entries in aO
1930: 6e 63 65 46 6c 61 67 20 2a 2f 0a 20 20 69 6e 74  nceFlag */.  int
1940: 20 6e 43 68 69 6c 64 4d 65 6d 3b 20 20 20 20 20   nChildMem;     
1950: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1960: 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66  f memory cells f
1970: 6f 72 20 63 68 69 6c 64 20 66 72 61 6d 65 20 2a  or child frame *
1980: 2f 0a 20 20 69 6e 74 20 6e 43 68 69 6c 64 43 73  /.  int nChildCs
1990: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  r;          /* N
19a0: 75 6d 62 65 72 20 6f 66 20 63 75 72 73 6f 72 73  umber of cursors
19b0: 20 66 6f 72 20 63 68 69 6c 64 20 66 72 61 6d 65   for child frame
19c0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67   */.  int nChang
19d0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
19e0: 20 53 74 61 74 65 6d 65 6e 74 20 63 68 61 6e 67   Statement chang
19f0: 65 73 20 28 56 64 62 65 2e 6e 43 68 61 6e 67 65  es (Vdbe.nChange
1a00: 73 29 20 20 20 20 20 2a 2f 0a 7d 3b 0a 0a 23 64  s)     */.};..#d
1a10: 65 66 69 6e 65 20 56 64 62 65 46 72 61 6d 65 4d  efine VdbeFrameM
1a20: 65 6d 28 70 29 20 28 28 4d 65 6d 20 2a 29 26 28  em(p) ((Mem *)&(
1a30: 28 75 38 20 2a 29 70 29 5b 52 4f 55 4e 44 38 28  (u8 *)p)[ROUND8(
1a40: 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65  sizeof(VdbeFrame
1a50: 29 29 5d 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 76 61  ))])../*.** A va
1a60: 6c 75 65 20 66 6f 72 20 56 64 62 65 43 75 72 73  lue for VdbeCurs
1a70: 6f 72 2e 63 61 63 68 65 56 61 6c 69 64 20 74 68  or.cacheValid th
1a80: 61 74 20 6d 65 61 6e 73 20 74 68 65 20 63 61 63  at means the cac
1a90: 68 65 20 69 73 20 61 6c 77 61 79 73 20 69 6e 76  he is always inv
1aa0: 61 6c 69 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  alid..*/.#define
1ab0: 20 43 41 43 48 45 5f 53 54 41 4c 45 20 30 0a 0a   CACHE_STALE 0..
1ac0: 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 6c 79  /*.** Internally
1ad0: 2c 20 74 68 65 20 76 64 62 65 20 6d 61 6e 69 70  , the vdbe manip
1ae0: 75 6c 61 74 65 73 20 6e 65 61 72 6c 79 20 61 6c  ulates nearly al
1af0: 6c 20 53 51 4c 20 76 61 6c 75 65 73 20 61 73 20  l SQL values as 
1b00: 4d 65 6d 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  Mem.** structure
1b10: 73 2e 20 45 61 63 68 20 4d 65 6d 20 73 74 72 75  s. Each Mem stru
1b20: 63 74 20 6d 61 79 20 63 61 63 68 65 20 6d 75 6c  ct may cache mul
1b30: 74 69 70 6c 65 20 72 65 70 72 65 73 65 6e 74 61  tiple representa
1b40: 74 69 6f 6e 73 20 28 73 74 72 69 6e 67 2c 0a 2a  tions (string,.*
1b50: 2a 20 69 6e 74 65 67 65 72 20 65 74 63 2e 29 20  * integer etc.) 
1b60: 6f 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  of the same valu
1b70: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 65 6d  e..*/.struct Mem
1b80: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
1b90: 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
1ba0: 61 73 73 6f 63 69 61 74 65 64 20 64 61 74 61 62  associated datab
1bb0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a  ase connection *
1bc0: 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  /.  char *z;    
1bd0: 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e          /* Strin
1be0: 67 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 20  g or BLOB value 
1bf0: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 3b 20 20  */.  double r;  
1c00: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 61 6c           /* Real
1c10: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 75 6e 69 6f   value */.  unio
1c20: 6e 20 7b 0a 20 20 20 20 69 36 34 20 69 3b 20 20  n {.    i64 i;  
1c30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1c40: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 75 73 65  nteger value use
1c50: 64 20 77 68 65 6e 20 4d 45 4d 5f 49 6e 74 20 69  d when MEM_Int i
1c60: 73 20 73 65 74 20 69 6e 20 66 6c 61 67 73 20 2a  s set in flags *
1c70: 2f 0a 20 20 20 20 69 6e 74 20 6e 5a 65 72 6f 3b  /.    int nZero;
1c80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
1c90: 64 20 77 68 65 6e 20 62 69 74 20 4d 45 4d 5f 5a  d when bit MEM_Z
1ca0: 65 72 6f 20 69 73 20 73 65 74 20 69 6e 20 66 6c  ero is set in fl
1cb0: 61 67 73 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44  ags */.    FuncD
1cc0: 65 66 20 2a 70 44 65 66 3b 20 20 20 20 20 20 2f  ef *pDef;      /
1cd0: 2a 20 55 73 65 64 20 6f 6e 6c 79 20 77 68 65 6e  * Used only when
1ce0: 20 66 6c 61 67 73 3d 3d 4d 45 4d 5f 41 67 67 20   flags==MEM_Agg 
1cf0: 2a 2f 0a 20 20 20 20 52 6f 77 53 65 74 20 2a 70  */.    RowSet *p
1d00: 52 6f 77 53 65 74 3b 20 20 20 20 2f 2a 20 55 73  RowSet;    /* Us
1d10: 65 64 20 6f 6e 6c 79 20 77 68 65 6e 20 66 6c 61  ed only when fla
1d20: 67 73 3d 3d 4d 45 4d 5f 52 6f 77 53 65 74 20 2a  gs==MEM_RowSet *
1d30: 2f 0a 20 20 20 20 56 64 62 65 46 72 61 6d 65 20  /.    VdbeFrame 
1d40: 2a 70 46 72 61 6d 65 3b 20 20 2f 2a 20 55 73 65  *pFrame;  /* Use
1d50: 64 20 77 68 65 6e 20 66 6c 61 67 73 3d 3d 4d 45  d when flags==ME
1d60: 4d 5f 46 72 61 6d 65 20 2a 2f 0a 20 20 7d 20 75  M_Frame */.  } u
1d70: 3b 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20  ;.  int n;      
1d80: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1d90: 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
1da0: 69 6e 20 73 74 72 69 6e 67 20 76 61 6c 75 65 2c  in string value,
1db0: 20 65 78 63 6c 75 64 69 6e 67 20 27 5c 30 27 20   excluding '\0' 
1dc0: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20  */.  u16 flags; 
1dd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65           /* Some
1de0: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
1df0: 4d 45 4d 5f 4e 75 6c 6c 2c 20 4d 45 4d 5f 53 74  MEM_Null, MEM_St
1e00: 72 2c 20 4d 45 4d 5f 44 79 6e 2c 20 65 74 63 2e  r, MEM_Dyn, etc.
1e10: 20 2a 2f 0a 20 20 75 38 20 20 74 79 70 65 3b 20   */.  u8  type; 
1e20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
1e30: 20 6f 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c   of SQLITE_NULL,
1e40: 20 53 51 4c 49 54 45 5f 54 45 58 54 2c 20 53 51   SQLITE_TEXT, SQ
1e50: 4c 49 54 45 5f 49 4e 54 45 47 45 52 2c 20 65 74  LITE_INTEGER, et
1e60: 63 20 2a 2f 0a 20 20 75 38 20 20 65 6e 63 3b 20  c */.  u8  enc; 
1e70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51             /* SQ
1e80: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
1e90: 45 5f 55 54 46 31 36 42 45 2c 20 53 51 4c 49 54  E_UTF16BE, SQLIT
1ea0: 45 5f 55 54 46 31 36 4c 45 20 2a 2f 0a 23 69 66  E_UTF16LE */.#if
1eb0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1ec0: 0a 20 20 4d 65 6d 20 2a 70 53 63 6f 70 79 46 72  .  Mem *pScopyFr
1ed0: 6f 6d 3b 20 20 20 20 2f 2a 20 54 68 69 73 20 4d  om;    /* This M
1ee0: 65 6d 20 69 73 20 61 20 73 68 61 6c 6c 6f 77 20  em is a shallow 
1ef0: 63 6f 70 79 20 6f 66 20 70 53 63 6f 70 79 46 72  copy of pScopyFr
1f00: 6f 6d 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 46  om */.  void *pF
1f10: 69 6c 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 53  iller;      /* S
1f20: 6f 20 74 68 61 74 20 73 69 7a 65 6f 66 28 4d 65  o that sizeof(Me
1f30: 6d 29 20 69 73 20 61 20 6d 75 6c 74 69 70 6c 65  m) is a multiple
1f40: 20 6f 66 20 38 20 2a 2f 0a 23 65 6e 64 69 66 0a   of 8 */.#endif.
1f50: 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76    void (*xDel)(v
1f60: 6f 69 64 20 2a 29 3b 20 20 2f 2a 20 49 66 20 6e  oid *);  /* If n
1f70: 6f 74 20 6e 75 6c 6c 2c 20 63 61 6c 6c 20 74 68  ot null, call th
1f80: 69 73 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 64  is function to d
1f90: 65 6c 65 74 65 20 4d 65 6d 2e 7a 20 2a 2f 0a 20  elete Mem.z */. 
1fa0: 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20   char *zMalloc; 
1fb0: 20 20 20 20 20 2f 2a 20 44 79 6e 61 6d 69 63 20       /* Dynamic 
1fc0: 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64  buffer allocated
1fd0: 20 62 79 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c   by sqlite3_mall
1fe0: 6f 63 28 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 4f  oc() */.};../* O
1ff0: 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68  ne or more of th
2000: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6c 61 67  e following flag
2010: 73 20 61 72 65 20 73 65 74 20 74 6f 20 69 6e 64  s are set to ind
2020: 69 63 61 74 65 20 74 68 65 20 76 61 6c 69 64 4f  icate the validO
2030: 4b 0a 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74  K.** representat
2040: 69 6f 6e 73 20 6f 66 20 74 68 65 20 76 61 6c 75  ions of the valu
2050: 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
2060: 4d 65 6d 20 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a  Mem struct..**.*
2070: 2a 20 49 66 20 74 68 65 20 4d 45 4d 5f 4e 75 6c  * If the MEM_Nul
2080: 6c 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74  l flag is set, t
2090: 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 69 73  hen the value is
20a0: 20 61 6e 20 53 51 4c 20 4e 55 4c 4c 20 76 61 6c   an SQL NULL val
20b0: 75 65 2e 0a 2a 2a 20 4e 6f 20 6f 74 68 65 72 20  ue..** No other 
20c0: 66 6c 61 67 73 20 6d 61 79 20 62 65 20 73 65 74  flags may be set
20d0: 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e 0a 2a   in this case..*
20e0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4d 45 4d 5f  *.** If the MEM_
20f0: 53 74 72 20 66 6c 61 67 20 69 73 20 73 65 74 20  Str flag is set 
2100: 74 68 65 6e 20 4d 65 6d 2e 7a 20 70 6f 69 6e 74  then Mem.z point
2110: 73 20 61 74 20 61 20 73 74 72 69 6e 67 20 72 65  s at a string re
2120: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a  presentation..**
2130: 20 55 73 75 61 6c 6c 79 20 74 68 69 73 20 69 73   Usually this is
2140: 20 65 6e 63 6f 64 65 64 20 69 6e 20 74 68 65 20   encoded in the 
2150: 73 61 6d 65 20 75 6e 69 63 6f 64 65 20 65 6e 63  same unicode enc
2160: 6f 64 69 6e 67 20 61 73 20 74 68 65 20 6d 61 69  oding as the mai
2170: 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 28 73  n.** database (s
2180: 65 65 20 62 65 6c 6f 77 20 66 6f 72 20 65 78 63  ee below for exc
2190: 65 70 74 69 6f 6e 73 29 2e 20 49 66 20 74 68 65  eptions). If the
21a0: 20 4d 45 4d 5f 54 65 72 6d 20 66 6c 61 67 20 69   MEM_Term flag i
21b0: 73 20 61 6c 73 6f 0a 2a 2a 20 73 65 74 2c 20 74  s also.** set, t
21c0: 68 65 6e 20 74 68 65 20 73 74 72 69 6e 67 20 69  hen the string i
21d0: 73 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64  s nul terminated
21e0: 2e 20 54 68 65 20 4d 45 4d 5f 49 6e 74 20 61 6e  . The MEM_Int an
21f0: 64 20 4d 45 4d 5f 52 65 61 6c 20 0a 2a 2a 20 66  d MEM_Real .** f
2200: 6c 61 67 73 20 6d 61 79 20 63 6f 65 78 69 73 74  lags may coexist
2210: 20 77 69 74 68 20 74 68 65 20 4d 45 4d 5f 53 74   with the MEM_St
2220: 72 20 66 6c 61 67 2e 0a 2a 2f 0a 23 64 65 66 69  r flag..*/.#defi
2230: 6e 65 20 4d 45 4d 5f 4e 75 6c 6c 20 20 20 20 20  ne MEM_Null     
2240: 20 30 78 30 30 30 31 20 20 20 2f 2a 20 56 61 6c   0x0001   /* Val
2250: 75 65 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64  ue is NULL */.#d
2260: 65 66 69 6e 65 20 4d 45 4d 5f 53 74 72 20 20 20  efine MEM_Str   
2270: 20 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a 20      0x0002   /* 
2280: 56 61 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e  Value is a strin
2290: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  g */.#define MEM
22a0: 5f 49 6e 74 20 20 20 20 20 20 20 30 78 30 30 30  _Int       0x000
22b0: 34 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 73 20  4   /* Value is 
22c0: 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 23 64  an integer */.#d
22d0: 65 66 69 6e 65 20 4d 45 4d 5f 52 65 61 6c 20 20  efine MEM_Real  
22e0: 20 20 20 20 30 78 30 30 30 38 20 20 20 2f 2a 20      0x0008   /* 
22f0: 56 61 6c 75 65 20 69 73 20 61 20 72 65 61 6c 20  Value is a real 
2300: 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e  number */.#defin
2310: 65 20 4d 45 4d 5f 42 6c 6f 62 20 20 20 20 20 20  e MEM_Blob      
2320: 30 78 30 30 31 30 20 20 20 2f 2a 20 56 61 6c 75  0x0010   /* Valu
2330: 65 20 69 73 20 61 20 42 4c 4f 42 20 2a 2f 0a 23  e is a BLOB */.#
2340: 64 65 66 69 6e 65 20 4d 45 4d 5f 52 6f 77 53 65  define MEM_RowSe
2350: 74 20 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a  t    0x0020   /*
2360: 20 56 61 6c 75 65 20 69 73 20 61 20 52 6f 77 53   Value is a RowS
2370: 65 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 23 64 65  et object */.#de
2380: 66 69 6e 65 20 4d 45 4d 5f 46 72 61 6d 65 20 20  fine MEM_Frame  
2390: 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a 20 56     0x0040   /* V
23a0: 61 6c 75 65 20 69 73 20 61 20 56 64 62 65 46 72  alue is a VdbeFr
23b0: 61 6d 65 20 6f 62 6a 65 63 74 20 2a 2f 0a 23 64  ame object */.#d
23c0: 65 66 69 6e 65 20 4d 45 4d 5f 49 6e 76 61 6c 69  efine MEM_Invali
23d0: 64 20 20 20 30 78 30 30 38 30 20 20 20 2f 2a 20  d   0x0080   /* 
23e0: 56 61 6c 75 65 20 69 73 20 75 6e 64 65 66 69 6e  Value is undefin
23f0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ed */.#define ME
2400: 4d 5f 43 6c 65 61 72 65 64 20 20 20 30 78 30 31  M_Cleared   0x01
2410: 30 30 20 20 20 2f 2a 20 4e 55 4c 4c 20 73 65 74  00   /* NULL set
2420: 20 62 79 20 4f 50 5f 4e 75 6c 6c 2c 20 6e 6f 74   by OP_Null, not
2430: 20 66 72 6f 6d 20 64 61 74 61 20 2a 2f 0a 23 64   from data */.#d
2440: 65 66 69 6e 65 20 4d 45 4d 5f 54 79 70 65 4d 61  efine MEM_TypeMa
2450: 73 6b 20 20 30 78 30 31 66 66 20 20 20 2f 2a 20  sk  0x01ff   /* 
2460: 4d 61 73 6b 20 6f 66 20 74 79 70 65 20 62 69 74  Mask of type bit
2470: 73 20 2a 2f 0a 0a 0a 2f 2a 20 57 68 65 6e 65 76  s */.../* Whenev
2480: 65 72 20 4d 65 6d 20 63 6f 6e 74 61 69 6e 73 20  er Mem contains 
2490: 61 20 76 61 6c 69 64 20 73 74 72 69 6e 67 20 6f  a valid string o
24a0: 72 20 62 6c 6f 62 20 72 65 70 72 65 73 65 6e 74  r blob represent
24b0: 61 74 69 6f 6e 2c 20 6f 6e 65 20 6f 66 0a 2a 2a  ation, one of.**
24c0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66   the following f
24d0: 6c 61 67 73 20 6d 75 73 74 20 62 65 20 73 65 74  lags must be set
24e0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
24f0: 65 20 6d 65 6d 6f 72 79 20 6d 61 6e 61 67 65 6d  e memory managem
2500: 65 6e 74 0a 2a 2a 20 70 6f 6c 69 63 79 20 66 6f  ent.** policy fo
2510: 72 20 4d 65 6d 2e 7a 2e 20 20 54 68 65 20 4d 45  r Mem.z.  The ME
2520: 4d 5f 54 65 72 6d 20 66 6c 61 67 20 74 65 6c 6c  M_Term flag tell
2530: 73 20 75 73 20 77 68 65 74 68 65 72 20 6f 72 20  s us whether or 
2540: 6e 6f 74 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e  not the.** strin
2550: 67 20 69 73 20 5c 30 30 30 20 6f 72 20 5c 75 30  g is \000 or \u0
2560: 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 2a  000 terminated.*
2570: 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f 54 65  /.#define MEM_Te
2580: 72 6d 20 20 20 20 20 20 30 78 30 32 30 30 20 20  rm      0x0200  
2590: 20 2f 2a 20 53 74 72 69 6e 67 20 72 65 70 20 69   /* String rep i
25a0: 73 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64  s nul terminated
25b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f   */.#define MEM_
25c0: 44 79 6e 20 20 20 20 20 20 20 30 78 30 34 30 30  Dyn       0x0400
25d0: 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 63 61     /* Need to ca
25e0: 6c 6c 20 73 71 6c 69 74 65 46 72 65 65 28 29 20  ll sqliteFree() 
25f0: 6f 6e 20 4d 65 6d 2e 7a 20 2a 2f 0a 23 64 65 66  on Mem.z */.#def
2600: 69 6e 65 20 4d 45 4d 5f 53 74 61 74 69 63 20 20  ine MEM_Static  
2610: 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20 4d 65    0x0800   /* Me
2620: 6d 2e 7a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  m.z points to a 
2630: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 2a 2f  static string */
2640: 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f 45 70 68  .#define MEM_Eph
2650: 65 6d 20 20 20 20 20 30 78 31 30 30 30 20 20 20  em     0x1000   
2660: 2f 2a 20 4d 65 6d 2e 7a 20 70 6f 69 6e 74 73 20  /* Mem.z points 
2670: 74 6f 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20  to an ephemeral 
2680: 73 74 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  string */.#defin
2690: 65 20 4d 45 4d 5f 41 67 67 20 20 20 20 20 20 20  e MEM_Agg       
26a0: 30 78 32 30 30 30 20 20 20 2f 2a 20 4d 65 6d 2e  0x2000   /* Mem.
26b0: 7a 20 70 6f 69 6e 74 73 20 74 6f 20 61 6e 20 61  z points to an a
26c0: 67 67 20 66 75 6e 63 74 69 6f 6e 20 63 6f 6e 74  gg function cont
26d0: 65 78 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ext */.#define M
26e0: 45 4d 5f 5a 65 72 6f 20 20 20 20 20 20 30 78 34  EM_Zero      0x4
26f0: 30 30 30 20 20 20 2f 2a 20 4d 65 6d 2e 69 20 63  000   /* Mem.i c
2700: 6f 6e 74 61 69 6e 73 20 63 6f 75 6e 74 20 6f 66  ontains count of
2710: 20 30 73 20 61 70 70 65 6e 64 65 64 20 74 6f 20   0s appended to 
2720: 62 6c 6f 62 20 2a 2f 0a 23 69 66 64 65 66 20 53  blob */.#ifdef S
2730: 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 43 52 42  QLITE_OMIT_INCRB
2740: 4c 4f 42 0a 20 20 23 75 6e 64 65 66 20 4d 45 4d  LOB.  #undef MEM
2750: 5f 5a 65 72 6f 0a 20 20 23 64 65 66 69 6e 65 20  _Zero.  #define 
2760: 4d 45 4d 5f 5a 65 72 6f 20 30 78 30 30 30 30 0a  MEM_Zero 0x0000.
2770: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6c  #endif../*.** Cl
2780: 65 61 72 20 61 6e 79 20 65 78 69 73 74 69 6e 67  ear any existing
2790: 20 74 79 70 65 20 66 6c 61 67 73 20 66 72 6f 6d   type flags from
27a0: 20 61 20 4d 65 6d 20 61 6e 64 20 72 65 70 6c 61   a Mem and repla
27b0: 63 65 20 74 68 65 6d 20 77 69 74 68 20 66 0a 2a  ce them with f.*
27c0: 2f 0a 23 64 65 66 69 6e 65 20 4d 65 6d 53 65 74  /.#define MemSet
27d0: 54 79 70 65 46 6c 61 67 28 70 2c 20 66 29 20 5c  TypeFlag(p, f) \
27e0: 0a 20 20 20 28 28 70 29 2d 3e 66 6c 61 67 73 20  .   ((p)->flags 
27f0: 3d 20 28 28 70 29 2d 3e 66 6c 61 67 73 26 7e 28  = ((p)->flags&~(
2800: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 7c 4d 45 4d  MEM_TypeMask|MEM
2810: 5f 5a 65 72 6f 29 29 7c 66 29 0a 0a 2f 2a 0a 2a  _Zero))|f)../*.*
2820: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
2830: 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69   a memory cell i
2840: 73 20 6e 6f 74 20 6d 61 72 6b 65 64 20 61 73 20  s not marked as 
2850: 69 6e 76 61 6c 69 64 2e 20 20 54 68 69 73 20 6d  invalid.  This m
2860: 61 63 72 6f 0a 2a 2a 20 69 73 20 66 6f 72 20 75  acro.** is for u
2870: 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74  se inside assert
2880: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e  () statements on
2890: 6c 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ly..*/.#ifdef SQ
28a0: 4c 49 54 45 5f 44 45 42 55 47 0a 23 64 65 66 69  LITE_DEBUG.#defi
28b0: 6e 65 20 6d 65 6d 49 73 56 61 6c 69 64 28 4d 29  ne memIsValid(M)
28c0: 20 20 28 28 4d 29 2d 3e 66 6c 61 67 73 20 26 20    ((M)->flags & 
28d0: 4d 45 4d 5f 49 6e 76 61 6c 69 64 29 3d 3d 30 0a  MEM_Invalid)==0.
28e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61  #endif../*.** Ea
28f0: 63 68 20 61 75 78 69 6c 6c 69 61 72 79 20 64 61  ch auxilliary da
2900: 74 61 20 70 6f 69 6e 74 65 72 20 73 74 6f 72 65  ta pointer store
2910: 64 20 62 79 20 61 20 75 73 65 72 20 64 65 66 69  d by a user defi
2920: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 0a 2a 2a  ned function .**
2930: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
2940: 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f  calling sqlite3_
2950: 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 69 73  set_auxdata() is
2960: 20 73 74 6f 72 65 64 20 69 6e 20 61 6e 20 69 6e   stored in an in
2970: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
2980: 73 20 73 74 72 75 63 74 75 72 65 2e 20 41 6c 6c  s structure. All
2990: 20 73 75 63 68 20 73 74 72 75 63 74 75 72 65 73   such structures
29a0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
29b0: 20 61 20 73 69 6e 67 6c 65 20 56 4d 0a 2a 2a 20   a single VM.** 
29c0: 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
29d0: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64  linked list head
29e0: 65 64 20 61 74 20 56 64 62 65 2e 70 41 75 78 44  ed at Vdbe.pAuxD
29f0: 61 74 61 2e 20 41 6c 6c 20 61 72 65 20 64 65 73  ata. All are des
2a00: 74 72 6f 79 65 64 0a 2a 2a 20 77 68 65 6e 20 74  troyed.** when t
2a10: 68 65 20 56 4d 20 69 73 20 68 61 6c 74 65 64 20  he VM is halted 
2a20: 28 69 66 20 6e 6f 74 20 62 65 66 6f 72 65 29 2e  (if not before).
2a30: 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 78 44 61  .*/.struct AuxDa
2a40: 74 61 20 7b 0a 20 20 69 6e 74 20 69 4f 70 3b 20  ta {.  int iOp; 
2a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a60: 20 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75         /* Instru
2a70: 63 74 69 6f 6e 20 6e 75 6d 62 65 72 20 6f 66 20  ction number of 
2a80: 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 6f 70 63 6f  OP_Function opco
2a90: 64 65 20 2a 2f 0a 20 20 69 6e 74 20 69 41 72 67  de */.  int iArg
2aa0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2ab0: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
2ac0: 20 6f 66 20 66 75 6e 63 74 69 6f 6e 20 61 72 67   of function arg
2ad0: 75 6d 65 6e 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ument. */.  void
2ae0: 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20   *pAux;         
2af0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
2b00: 75 78 20 64 61 74 61 20 70 6f 69 6e 74 65 72 20  ux data pointer 
2b10: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  */.  void (*xDel
2b20: 65 74 65 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  ete)(void *);   
2b30: 20 20 20 20 20 2f 2a 20 44 65 73 74 72 75 63 74       /* Destruct
2b40: 6f 72 20 66 6f 72 20 74 68 65 20 61 75 78 20 64  or for the aux d
2b50: 61 74 61 20 2a 2f 0a 20 20 41 75 78 44 61 74 61  ata */.  AuxData
2b60: 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
2b70: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
2b80: 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 73 74   element in list
2b90: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
2ba0: 65 20 22 63 6f 6e 74 65 78 74 22 20 61 72 67 75  e "context" argu
2bb0: 6d 65 6e 74 20 66 6f 72 20 61 20 69 6e 73 74 61  ment for a insta
2bc0: 6c 6c 61 62 6c 65 20 66 75 6e 63 74 69 6f 6e 2e  llable function.
2bd0: 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 61    A pointer to a
2be0: 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
2bf0: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
2c00: 69 73 20 74 68 65 20 66 69 72 73 74 20 61 72 67  is the first arg
2c10: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 72 6f 75  ument to the rou
2c20: 74 69 6e 65 73 20 75 73 65 64 0a 2a 2a 20 69 6d  tines used.** im
2c30: 70 6c 65 6d 65 6e 74 20 74 68 65 20 53 51 4c 20  plement the SQL 
2c40: 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
2c50: 20 54 68 65 72 65 20 69 73 20 61 20 74 79 70 65   There is a type
2c60: 64 65 66 20 66 6f 72 20 74 68 69 73 20 73 74 72  def for this str
2c70: 75 63 74 75 72 65 20 69 6e 20 73 71 6c 69 74 65  ucture in sqlite
2c80: 2e 68 2e 20 20 53 6f 20 61 6c 6c 20 72 6f 75 74  .h.  So all rout
2c90: 69 6e 65 73 2c 0a 2a 2a 20 65 76 65 6e 20 74 68  ines,.** even th
2ca0: 65 20 70 75 62 6c 69 63 20 69 6e 74 65 72 66 61  e public interfa
2cb0: 63 65 20 74 6f 20 53 51 4c 69 74 65 2c 20 63 61  ce to SQLite, ca
2cc0: 6e 20 75 73 65 20 61 20 70 6f 69 6e 74 65 72 20  n use a pointer 
2cd0: 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
2ce0: 65 2e 0a 2a 2a 20 42 75 74 20 74 68 69 73 20 66  e..** But this f
2cf0: 69 6c 65 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  ile is the only 
2d00: 70 6c 61 63 65 20 77 68 65 72 65 20 74 68 65 20  place where the 
2d10: 69 6e 74 65 72 6e 61 6c 20 64 65 74 61 69 6c 73  internal details
2d20: 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75   of this.** stru
2d30: 63 74 75 72 65 20 61 72 65 20 6b 6e 6f 77 6e 2e  cture are known.
2d40: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  .**.** This stru
2d50: 63 74 75 72 65 20 69 73 20 64 65 66 69 6e 65 64  cture is defined
2d60: 20 69 6e 73 69 64 65 20 6f 66 20 76 64 62 65 49   inside of vdbeI
2d70: 6e 74 2e 68 20 62 65 63 61 75 73 65 20 69 74 20  nt.h because it 
2d80: 75 73 65 73 20 73 75 62 73 74 72 75 63 74 75 72  uses substructur
2d90: 65 73 0a 2a 2a 20 28 4d 65 6d 29 20 77 68 69 63  es.** (Mem) whic
2da0: 68 20 61 72 65 20 6f 6e 6c 79 20 64 65 66 69 6e  h are only defin
2db0: 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 73 74 72  ed there..*/.str
2dc0: 75 63 74 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  uct sqlite3_cont
2dd0: 65 78 74 20 7b 0a 20 20 46 75 6e 63 44 65 66 20  ext {.  FuncDef 
2de0: 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 2f 2a  *pFunc;       /*
2df0: 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 75 6e 63   Pointer to func
2e00: 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tion information
2e10: 2e 20 20 4d 55 53 54 20 42 45 20 46 49 52 53 54  .  MUST BE FIRST
2e20: 20 2a 2f 0a 20 20 4d 65 6d 20 73 3b 20 20 20 20   */.  Mem s;    
2e30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
2e40: 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20  he return value 
2e50: 69 73 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  is stored here *
2e60: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
2e70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
2e80: 6f 72 79 20 63 65 6c 6c 20 75 73 65 64 20 74 6f  ory cell used to
2e90: 20 73 74 6f 72 65 20 61 67 67 72 65 67 61 74 65   store aggregate
2ea0: 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 43 6f   context */.  Co
2eb0: 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20  llSeq *pColl;   
2ec0: 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
2ed0: 20 73 65 71 75 65 6e 63 65 20 2a 2f 0a 20 20 56   sequence */.  V
2ee0: 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20  dbe *pVdbe;     
2ef0: 20 20 20 20 20 2f 2a 20 54 68 65 20 56 4d 20 74       /* The VM t
2f00: 68 61 74 20 6f 77 6e 73 20 74 68 69 73 20 63 6f  hat owns this co
2f10: 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 69  ntext */.  int i
2f20: 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Op;             
2f30: 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e 20   /* Instruction 
2f40: 6e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 46 75 6e  number of OP_Fun
2f50: 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 69  ction */.  int i
2f60: 73 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20  sError;         
2f70: 20 2f 2a 20 45 72 72 6f 72 20 63 6f 64 65 20 72   /* Error code r
2f80: 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 66  eturned by the f
2f90: 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 38  unction. */.  u8
2fa0: 20 73 6b 69 70 46 6c 61 67 3b 20 20 20 20 20 20   skipFlag;      
2fb0: 20 20 20 20 2f 2a 20 53 6b 69 70 20 73 6b 69 70      /* Skip skip
2fc0: 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 6c 6f 61   accumulator loa
2fd0: 64 69 6e 67 20 69 66 20 74 72 75 65 20 2a 2f 0a  ding if true */.
2fe0: 20 20 75 38 20 66 45 72 72 6f 72 4f 72 41 75 78    u8 fErrorOrAux
2ff0: 3b 20 20 20 20 20 20 20 2f 2a 20 69 73 45 72 72  ;       /* isErr
3000: 6f 72 21 3d 30 20 6f 72 20 70 56 64 62 65 2d 3e  or!=0 or pVdbe->
3010: 70 41 75 78 44 61 74 61 20 6d 6f 64 69 66 69 65  pAuxData modifie
3020: 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  d */.};../*.** A
3030: 6e 20 45 78 70 6c 61 69 6e 20 6f 62 6a 65 63 74  n Explain object
3040: 20 61 63 63 75 6d 75 6c 61 74 65 73 20 69 6e 64   accumulates ind
3050: 65 6e 74 65 64 20 6f 75 74 70 75 74 20 77 68 69  ented output whi
3060: 63 68 20 69 73 20 68 65 6c 70 66 75 6c 0a 2a 2a  ch is helpful.**
3070: 20 69 6e 20 64 65 73 63 72 69 62 69 6e 67 20 72   in describing r
3080: 65 63 75 72 73 69 76 65 20 64 61 74 61 20 73 74  ecursive data st
3090: 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72  ructures..*/.str
30a0: 75 63 74 20 45 78 70 6c 61 69 6e 20 7b 0a 20 20  uct Explain {.  
30b0: 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20  Vdbe *pVdbe;    
30c0: 20 20 20 2f 2a 20 41 74 74 61 63 68 20 74 68 65     /* Attach the
30d0: 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 74 6f 20   explanation to 
30e0: 74 68 69 73 20 56 64 62 65 20 2a 2f 0a 20 20 53  this Vdbe */.  S
30f0: 74 72 41 63 63 75 6d 20 73 74 72 3b 20 20 20 20  trAccum str;    
3100: 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20    /* The string 
3110: 62 65 69 6e 67 20 61 63 63 75 6d 75 6c 61 74 65  being accumulate
3120: 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 49 6e 64 65  d */.  int nInde
3130: 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  nt;       /* Num
3140: 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
3150: 69 6e 20 61 49 6e 64 65 6e 74 20 2a 2f 0a 20 20  in aIndent */.  
3160: 75 31 36 20 61 49 6e 64 65 6e 74 5b 31 30 30 5d  u16 aIndent[100]
3170: 3b 20 20 2f 2a 20 4c 65 76 65 6c 73 20 6f 66 20  ;  /* Levels of 
3180: 69 6e 64 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  indentation */. 
3190: 20 63 68 61 72 20 7a 42 61 73 65 5b 31 30 30 5d   char zBase[100]
31a0: 3b 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 20 73  ;   /* Initial s
31b0: 70 61 63 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  pace */.};../* A
31c0: 20 62 69 74 66 69 65 6c 64 20 74 79 70 65 20 66   bitfield type f
31d0: 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 6f 66  or use inside of
31e0: 20 73 74 72 75 63 74 75 72 65 73 2e 20 20 41 6c   structures.  Al
31f0: 77 61 79 73 20 66 6f 6c 6c 6f 77 20 77 69 74 68  ways follow with
3200: 20 3a 4e 20 77 68 65 72 65 0a 2a 2a 20 4e 20 69   :N where.** N i
3210: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
3220: 62 69 74 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  bits..*/.typedef
3230: 20 75 6e 73 69 67 6e 65 64 20 62 66 74 3b 20 20   unsigned bft;  
3240: 2f 2a 20 42 69 74 20 46 69 65 6c 64 20 54 79 70  /* Bit Field Typ
3250: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  e */../*.** An i
3260: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 76  nstance of the v
3270: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20  irtual machine. 
3280: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
3290: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 63 6f 6d  contains the com
32a0: 70 6c 65 74 65 0a 2a 2a 20 73 74 61 74 65 20 6f  plete.** state o
32b0: 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  f the virtual ma
32c0: 63 68 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  chine..**.** The
32d0: 20 22 73 71 6c 69 74 65 33 5f 73 74 6d 74 22 20   "sqlite3_stmt" 
32e0: 73 74 72 75 63 74 75 72 65 20 70 6f 69 6e 74 65  structure pointe
32f0: 72 20 74 68 61 74 20 69 73 20 72 65 74 75 72 6e  r that is return
3300: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 70 72  ed by sqlite3_pr
3310: 65 70 61 72 65 28 29 0a 2a 2a 20 69 73 20 72 65  epare().** is re
3320: 61 6c 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74  ally a pointer t
3330: 6f 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  o an instance of
3340: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
3350: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 56 64 62 65 2e  .**.** The Vdbe.
3360: 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 76 61 72  inVtabMethod var
3370: 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20  iable is set to 
3380: 6e 6f 6e 2d 7a 65 72 6f 20 66 6f 72 20 74 68 65  non-zero for the
3390: 20 64 75 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20   duration of.** 
33a0: 61 6e 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c  any virtual tabl
33b0: 65 20 6d 65 74 68 6f 64 20 69 6e 76 6f 63 61 74  e method invocat
33c0: 69 6f 6e 73 20 6d 61 64 65 20 62 79 20 74 68 65  ions made by the
33d0: 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 49   vdbe program. I
33e0: 74 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 32  t is.** set to 2
33f0: 20 66 6f 72 20 78 44 65 73 74 72 6f 79 20 6d 65   for xDestroy me
3400: 74 68 6f 64 20 63 61 6c 6c 73 20 61 6e 64 20 31  thod calls and 1
3410: 20 66 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20 6d   for all other m
3420: 65 74 68 6f 64 73 2e 20 54 68 69 73 0a 2a 2a 20  ethods. This.** 
3430: 76 61 72 69 61 62 6c 65 20 69 73 20 75 73 65 64  variable is used
3440: 20 66 6f 72 20 74 77 6f 20 70 75 72 70 6f 73 65   for two purpose
3450: 73 3a 20 74 6f 20 61 6c 6c 6f 77 20 78 44 65 73  s: to allow xDes
3460: 74 72 6f 79 20 6d 65 74 68 6f 64 73 20 74 6f 20  troy methods to 
3470: 65 78 65 63 75 74 65 0a 2a 2a 20 22 44 52 4f 50  execute.** "DROP
3480: 20 54 41 42 4c 45 22 20 73 74 61 74 65 6d 65 6e   TABLE" statemen
3490: 74 73 20 61 6e 64 20 74 6f 20 70 72 65 76 65 6e  ts and to preven
34a0: 74 20 73 6f 6d 65 20 6e 61 73 74 79 20 73 69 64  t some nasty sid
34b0: 65 20 65 66 66 65 63 74 73 20 6f 66 0a 2a 2a 20  e effects of.** 
34c0: 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 77  malloc failure w
34d0: 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20 69 6e  hen SQLite is in
34e0: 76 6f 6b 65 64 20 72 65 63 75 72 73 69 76 65 6c  voked recursivel
34f0: 79 20 62 79 20 61 20 76 69 72 74 75 61 6c 20 74  y by a virtual t
3500: 61 62 6c 65 20 0a 2a 2a 20 6d 65 74 68 6f 64 20  able .** method 
3510: 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  function..*/.str
3520: 75 63 74 20 56 64 62 65 20 7b 0a 20 20 73 71 6c  uct Vdbe {.  sql
3530: 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
3540: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
3550: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
3560: 74 68 61 74 20 6f 77 6e 73 20 74 68 69 73 20 73  that owns this s
3570: 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 4f 70  tatement */.  Op
3580: 20 2a 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20   *aOp;          
3590: 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74        /* Space t
35a0: 6f 20 68 6f 6c 64 20 74 68 65 20 76 69 72 74 75  o hold the virtu
35b0: 61 6c 20 6d 61 63 68 69 6e 65 27 73 20 70 72 6f  al machine's pro
35c0: 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61  gram */.  Mem *a
35d0: 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
35e0: 20 20 2f 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20    /* The memory 
35f0: 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 4d  locations */.  M
3600: 65 6d 20 2a 2a 61 70 41 72 67 3b 20 20 20 20 20  em **apArg;     
3610: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
3620: 6e 74 73 20 74 6f 20 63 75 72 72 65 6e 74 6c 79  nts to currently
3630: 20 65 78 65 63 75 74 69 6e 67 20 75 73 65 72 20   executing user 
3640: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65  function */.  Me
3650: 6d 20 2a 61 43 6f 6c 4e 61 6d 65 3b 20 20 20 20  m *aColName;    
3660: 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
3670: 6e 61 6d 65 73 20 74 6f 20 72 65 74 75 72 6e 20  names to return 
3680: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 73 75 6c  */.  Mem *pResul
3690: 74 53 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  tSet;        /* 
36a0: 50 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 61 72  Pointer to an ar
36b0: 72 61 79 20 6f 66 20 72 65 73 75 6c 74 73 20 2a  ray of results *
36c0: 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
36d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
36e0: 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
36f0: 6c 6f 63 61 74 69 6f 6e 73 20 63 75 72 72 65 6e  locations curren
3700: 74 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  tly allocated */
3710: 0a 20 20 69 6e 74 20 6e 4f 70 3b 20 20 20 20 20  .  int nOp;     
3720: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
3730: 6d 62 65 72 20 6f 66 20 69 6e 73 74 72 75 63 74  mber of instruct
3740: 69 6f 6e 73 20 69 6e 20 74 68 65 20 70 72 6f 67  ions in the prog
3750: 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70  ram */.  int nOp
3760: 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20  Alloc;          
3770: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c   /* Number of sl
3780: 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f  ots allocated fo
3790: 72 20 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  r aOp[] */.  int
37a0: 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20   nLabel;        
37b0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
37c0: 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f  f labels used */
37d0: 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20  .  int *aLabel; 
37e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
37f0: 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ace to hold the 
3800: 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 75 31 36 20  labels */.  u16 
3810: 6e 52 65 73 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nResColumn;     
3820: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
3830: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 6e 65 20   columns in one 
3840: 72 6f 77 20 6f 66 20 74 68 65 20 72 65 73 75 6c  row of the resul
3850: 74 20 73 65 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  t set */.  int n
3860: 43 75 72 73 6f 72 3b 20 20 20 20 20 20 20 20 20  Cursor;         
3870: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
3880: 73 6c 6f 74 73 20 69 6e 20 61 70 43 73 72 5b 5d  slots in apCsr[]
3890: 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b   */.  u32 magic;
38a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
38b0: 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f   Magic number fo
38c0: 72 20 73 61 6e 69 74 79 20 63 68 65 63 6b 69 6e  r sanity checkin
38d0: 67 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72  g */.  char *zEr
38e0: 72 4d 73 67 3b 20 20 20 20 20 20 20 20 20 20 2f  rMsg;          /
38f0: 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
3900: 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
3910: 20 20 56 64 62 65 20 2a 70 50 72 65 76 2c 2a 70    Vdbe *pPrev,*p
3920: 4e 65 78 74 3b 20 20 20 20 20 2f 2a 20 4c 69 6e  Next;     /* Lin
3930: 6b 65 64 20 6c 69 73 74 20 6f 66 20 56 44 42 45  ked list of VDBE
3940: 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  s with the same 
3950: 56 64 62 65 2e 64 62 20 2a 2f 0a 20 20 56 64 62  Vdbe.db */.  Vdb
3960: 65 43 75 72 73 6f 72 20 2a 2a 61 70 43 73 72 3b  eCursor **apCsr;
3970: 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6c 65 6d       /* One elem
3980: 65 6e 74 20 6f 66 20 74 68 69 73 20 61 72 72 61  ent of this arra
3990: 79 20 66 6f 72 20 65 61 63 68 20 6f 70 65 6e 20  y for each open 
39a0: 63 75 72 73 6f 72 20 2a 2f 0a 20 20 4d 65 6d 20  cursor */.  Mem 
39b0: 2a 61 56 61 72 3b 20 20 20 20 20 20 20 20 20 20  *aVar;          
39c0: 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 66 6f      /* Values fo
39d0: 72 20 74 68 65 20 4f 50 5f 56 61 72 69 61 62 6c  r the OP_Variabl
39e0: 65 20 6f 70 63 6f 64 65 2e 20 2a 2f 0a 20 20 63  e opcode. */.  c
39f0: 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20  har **azVar;    
3a00: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
3a10: 66 20 76 61 72 69 61 62 6c 65 73 20 2a 2f 0a 20  f variables */. 
3a20: 20 79 6e 56 61 72 20 6e 56 61 72 3b 20 20 20 20   ynVar nVar;    
3a30: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
3a40: 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
3a50: 20 61 56 61 72 5b 5d 20 2a 2f 0a 20 20 79 6e 56   aVar[] */.  ynV
3a60: 61 72 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20  ar nzVar;       
3a70: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
3a80: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 7a 56  f entries in azV
3a90: 61 72 5b 5d 20 2a 2f 0a 20 20 75 33 32 20 63 61  ar[] */.  u32 ca
3aa0: 63 68 65 43 74 72 3b 20 20 20 20 20 20 20 20 20  cheCtr;         
3ab0: 20 20 2f 2a 20 56 64 62 65 43 75 72 73 6f 72 20    /* VdbeCursor 
3ac0: 72 6f 77 20 63 61 63 68 65 20 67 65 6e 65 72 61  row cache genera
3ad0: 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  tion counter */.
3ae0: 20 20 69 6e 74 20 70 63 3b 20 20 20 20 20 20 20    int pc;       
3af0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
3b00: 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72   program counter
3b10: 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
3b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3b30: 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
3b40: 20 2a 2f 0a 20 20 75 38 20 65 72 72 6f 72 41 63   */.  u8 errorAc
3b50: 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  tion;         /*
3b60: 20 52 65 63 6f 76 65 72 79 20 61 63 74 69 6f 6e   Recovery action
3b70: 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f   to do in case o
3b80: 66 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20  f an error */.  
3b90: 75 38 20 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  u8 minWriteFileF
3ba0: 6f 72 6d 61 74 3b 20 20 2f 2a 20 4d 69 6e 69 6d  ormat;  /* Minim
3bb0: 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 66  um file format f
3bc0: 6f 72 20 77 72 69 74 61 62 6c 65 20 64 61 74 61  or writable data
3bd0: 62 61 73 65 20 66 69 6c 65 73 20 2a 2f 0a 20 20  base files */.  
3be0: 62 66 74 20 65 78 70 6c 61 69 6e 3a 32 3b 20 20  bft explain:2;  
3bf0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
3c00: 69 66 20 45 58 50 4c 41 49 4e 20 70 72 65 73 65  if EXPLAIN prese
3c10: 6e 74 20 6f 6e 20 53 51 4c 20 63 6f 6d 6d 61 6e  nt on SQL comman
3c20: 64 20 2a 2f 0a 20 20 62 66 74 20 69 6e 56 74 61  d */.  bft inVta
3c30: 62 4d 65 74 68 6f 64 3a 32 3b 20 20 20 20 20 2f  bMethod:2;     /
3c40: 2a 20 53 65 65 20 63 6f 6d 6d 65 6e 74 73 20 61  * See comments a
3c50: 62 6f 76 65 20 2a 2f 0a 20 20 62 66 74 20 63 68  bove */.  bft ch
3c60: 61 6e 67 65 43 6e 74 4f 6e 3a 31 3b 20 20 20 20  angeCntOn:1;    
3c70: 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 75 70 64    /* True to upd
3c80: 61 74 65 20 74 68 65 20 63 68 61 6e 67 65 2d 63  ate the change-c
3c90: 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 62 66 74 20  ounter */.  bft 
3ca0: 65 78 70 69 72 65 64 3a 31 3b 20 20 20 20 20 20  expired:1;      
3cb0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
3cc0: 68 65 20 56 4d 20 6e 65 65 64 73 20 74 6f 20 62  he VM needs to b
3cd0: 65 20 72 65 63 6f 6d 70 69 6c 65 64 20 2a 2f 0a  e recompiled */.
3ce0: 20 20 62 66 74 20 72 75 6e 4f 6e 6c 79 4f 6e 63    bft runOnlyOnc
3cf0: 65 3a 31 3b 20 20 20 20 20 20 2f 2a 20 41 75 74  e:1;      /* Aut
3d00: 6f 6d 61 74 69 63 61 6c 6c 79 20 65 78 70 69 72  omatically expir
3d10: 65 20 6f 6e 20 72 65 73 65 74 20 2a 2f 0a 20 20  e on reset */.  
3d20: 62 66 74 20 75 73 65 73 53 74 6d 74 4a 6f 75 72  bft usesStmtJour
3d30: 6e 61 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  nal:1;  /* True 
3d40: 69 66 20 75 73 65 73 20 61 20 73 74 61 74 65 6d  if uses a statem
3d50: 65 6e 74 20 6a 6f 75 72 6e 61 6c 20 2a 2f 0a 20  ent journal */. 
3d60: 20 62 66 74 20 72 65 61 64 4f 6e 6c 79 3a 31 3b   bft readOnly:1;
3d70: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
3d80: 20 66 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20   for statements 
3d90: 74 68 61 74 20 64 6f 20 6e 6f 74 20 77 72 69 74  that do not writ
3da0: 65 20 2a 2f 0a 20 20 62 66 74 20 62 49 73 52 65  e */.  bft bIsRe
3db0: 61 64 65 72 3a 31 3b 20 20 20 20 20 20 20 20 2f  ader:1;        /
3dc0: 2a 20 54 72 75 65 20 66 6f 72 20 73 74 61 74 65  * True for state
3dd0: 6d 65 6e 74 73 20 74 68 61 74 20 72 65 61 64 20  ments that read 
3de0: 2a 2f 0a 20 20 62 66 74 20 69 73 50 72 65 70 61  */.  bft isPrepa
3df0: 72 65 56 32 3a 31 3b 20 20 20 20 20 20 2f 2a 20  reV2:1;      /* 
3e00: 54 72 75 65 20 69 66 20 70 72 65 70 61 72 65 64  True if prepared
3e10: 20 77 69 74 68 20 70 72 65 70 61 72 65 5f 76 32   with prepare_v2
3e20: 28 29 20 2a 2f 0a 20 20 62 66 74 20 64 6f 69 6e  () */.  bft doin
3e30: 67 52 65 72 75 6e 3a 31 3b 20 20 20 20 20 20 20  gRerun:1;       
3e40: 2f 2a 20 54 72 75 65 20 69 66 20 72 65 72 75 6e  /* True if rerun
3e50: 6e 69 6e 67 20 61 66 74 65 72 20 61 6e 20 61 75  ning after an au
3e60: 74 6f 2d 72 65 70 72 65 70 61 72 65 20 2a 2f 0a  to-reprepare */.
3e70: 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20    int nChange;  
3e80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
3e90: 62 65 72 20 6f 66 20 64 62 20 63 68 61 6e 67 65  ber of db change
3ea0: 73 20 6d 61 64 65 20 73 69 6e 63 65 20 6c 61 73  s made since las
3eb0: 74 20 72 65 73 65 74 20 2a 2f 0a 20 20 79 44 62  t reset */.  yDb
3ec0: 4d 61 73 6b 20 62 74 72 65 65 4d 61 73 6b 3b 20  Mask btreeMask; 
3ed0: 20 20 20 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20       /* Bitmask 
3ee0: 6f 66 20 64 62 2d 3e 61 44 62 5b 5d 20 65 6e 74  of db->aDb[] ent
3ef0: 72 69 65 73 20 72 65 66 65 72 65 6e 63 65 64 20  ries referenced 
3f00: 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 6c 6f 63  */.  yDbMask loc
3f10: 6b 4d 61 73 6b 3b 20 20 20 20 20 20 20 2f 2a 20  kMask;       /* 
3f20: 53 75 62 73 65 74 20 6f 66 20 62 74 72 65 65 4d  Subset of btreeM
3f30: 61 73 6b 20 74 68 61 74 20 72 65 71 75 69 72 65  ask that require
3f40: 73 20 61 20 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  s a lock */.  in
3f50: 74 20 69 53 74 61 74 65 6d 65 6e 74 3b 20 20 20  t iStatement;   
3f60: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 65 6d 65        /* Stateme
3f70: 6e 74 20 6e 75 6d 62 65 72 20 28 6f 72 20 30 20  nt number (or 0 
3f80: 69 66 20 68 61 73 20 6e 6f 74 20 6f 70 65 6e 65  if has not opene
3f90: 64 20 73 74 6d 74 29 20 2a 2f 0a 20 20 69 6e 74  d stmt) */.  int
3fa0: 20 61 43 6f 75 6e 74 65 72 5b 34 5d 3b 20 20 20   aCounter[4];   
3fb0: 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 73       /* Counters
3fc0: 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
3fd0: 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29 20 2a  _stmt_status() *
3fe0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
3ff0: 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20 69 36  _OMIT_TRACE.  i6
4000: 34 20 73 74 61 72 74 54 69 6d 65 3b 20 20 20 20  4 startTime;    
4010: 20 20 20 20 20 20 2f 2a 20 54 69 6d 65 20 77 68        /* Time wh
4020: 65 6e 20 71 75 65 72 79 20 73 74 61 72 74 65 64  en query started
4030: 20 2d 20 75 73 65 64 20 66 6f 72 20 70 72 6f 66   - used for prof
4040: 69 6c 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  iling */.#endif.
4050: 20 20 69 36 34 20 6e 46 6b 43 6f 6e 73 74 72 61    i64 nFkConstra
4060: 69 6e 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  int;      /* Num
4070: 62 65 72 20 6f 66 20 69 6d 6d 2e 20 46 4b 20 63  ber of imm. FK c
4080: 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73 20  onstraints this 
4090: 56 4d 20 2a 2f 0a 20 20 69 36 34 20 6e 53 74 6d  VM */.  i64 nStm
40a0: 74 44 65 66 43 6f 6e 73 3b 20 20 20 20 20 20 20  tDefCons;       
40b0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
40c0: 2e 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 68  . constraints wh
40d0: 65 6e 20 73 74 6d 74 20 73 74 61 72 74 65 64 20  en stmt started 
40e0: 2a 2f 0a 20 20 69 36 34 20 6e 53 74 6d 74 44 65  */.  i64 nStmtDe
40f0: 66 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 2f 2a 20  fImmCons;    /* 
4100: 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 2e 20 69  Number of def. i
4110: 6d 6d 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77  mm constraints w
4120: 68 65 6e 20 73 74 6d 74 20 73 74 61 72 74 65 64  hen stmt started
4130: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c   */.  char *zSql
4140: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4150: 20 54 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c   Text of the SQL
4160: 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
4170: 67 65 6e 65 72 61 74 65 64 20 74 68 69 73 20 2a  generated this *
4180: 2f 0a 20 20 76 6f 69 64 20 2a 70 46 72 65 65 3b  /.  void *pFree;
4190: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
41a0: 72 65 65 20 74 68 69 73 20 77 68 65 6e 20 64 65  ree this when de
41b0: 6c 65 74 69 6e 67 20 74 68 65 20 76 64 62 65 20  leting the vdbe 
41c0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
41d0: 5f 44 45 42 55 47 0a 20 20 46 49 4c 45 20 2a 74  _DEBUG.  FILE *t
41e0: 72 61 63 65 3b 20 20 20 20 20 20 20 20 20 20 20  race;           
41f0: 20 2f 2a 20 57 72 69 74 65 20 61 6e 20 65 78 65   /* Write an exe
4200: 63 75 74 69 6f 6e 20 74 72 61 63 65 20 68 65 72  cution trace her
4210: 65 2c 20 69 66 20 6e 6f 74 20 4e 55 4c 4c 20 2a  e, if not NULL *
4220: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  /.#endif.#ifdef 
4230: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 54 52  SQLITE_ENABLE_TR
4240: 45 45 5f 45 58 50 4c 41 49 4e 0a 20 20 45 78 70  EE_EXPLAIN.  Exp
4250: 6c 61 69 6e 20 2a 70 45 78 70 6c 61 69 6e 3b 20  lain *pExplain; 
4260: 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70 6c       /* The expl
4270: 61 69 6e 65 72 20 2a 2f 0a 20 20 63 68 61 72 20  ainer */.  char 
4280: 2a 7a 45 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  *zExplain;      
4290: 20 20 20 2f 2a 20 45 78 70 6c 61 6e 61 74 69 6f     /* Explanatio
42a0: 6e 20 6f 66 20 64 61 74 61 20 73 74 72 75 63 74  n of data struct
42b0: 75 72 65 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  ures */.#endif. 
42c0: 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
42d0: 6d 65 3b 20 20 20 20 20 20 2f 2a 20 50 61 72 65  me;      /* Pare
42e0: 6e 74 20 66 72 61 6d 65 20 2a 2f 0a 20 20 56 64  nt frame */.  Vd
42f0: 62 65 46 72 61 6d 65 20 2a 70 44 65 6c 46 72 61  beFrame *pDelFra
4300: 6d 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  me;   /* List of
4310: 20 66 72 61 6d 65 20 6f 62 6a 65 63 74 73 20 74   frame objects t
4320: 6f 20 66 72 65 65 20 6f 6e 20 56 4d 20 72 65 73  o free on VM res
4330: 65 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 72 61  et */.  int nFra
4340: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
4350: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 72 61  /* Number of fra
4360: 6d 65 73 20 69 6e 20 70 46 72 61 6d 65 20 6c 69  mes in pFrame li
4370: 73 74 20 2a 2f 0a 20 20 75 33 32 20 65 78 70 6d  st */.  u32 expm
4380: 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ask;            
4390: 2f 2a 20 42 69 6e 64 69 6e 67 20 74 6f 20 74 68  /* Binding to th
43a0: 65 73 65 20 76 61 72 73 20 69 6e 76 61 6c 69 64  ese vars invalid
43b0: 61 74 65 73 20 56 4d 20 2a 2f 0a 20 20 53 75 62  ates VM */.  Sub
43c0: 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
43d0: 6d 3b 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c  m;   /* Linked l
43e0: 69 73 74 20 6f 66 20 61 6c 6c 20 73 75 62 2d 70  ist of all sub-p
43f0: 72 6f 67 72 61 6d 73 20 75 73 65 64 20 62 79 20  rograms used by 
4400: 56 4d 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63  VM */.  int nOnc
4410: 65 46 6c 61 67 3b 20 20 20 20 20 20 20 20 20 20  eFlag;          
4420: 2f 2a 20 53 69 7a 65 20 6f 66 20 61 72 72 61 79  /* Size of array
4430: 20 61 4f 6e 63 65 46 6c 61 67 5b 5d 20 2a 2f 0a   aOnceFlag[] */.
4440: 20 20 75 38 20 2a 61 4f 6e 63 65 46 6c 61 67 3b    u8 *aOnceFlag;
4450: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61            /* Fla
4460: 67 73 20 66 6f 72 20 4f 50 5f 4f 6e 63 65 20 2a  gs for OP_Once *
4470: 2f 0a 20 20 41 75 78 44 61 74 61 20 2a 70 41 75  /.  AuxData *pAu
4480: 78 44 61 74 61 3b 20 20 20 20 20 20 2f 2a 20 4c  xData;      /* L
4490: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 75  inked list of au
44a0: 78 64 61 74 61 20 61 6c 6c 6f 63 61 74 69 6f 6e  xdata allocation
44b0: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  s */.};../*.** T
44c0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
44d0: 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   allowed values 
44e0: 66 6f 72 20 56 64 62 65 2e 6d 61 67 69 63 0a 2a  for Vdbe.magic.*
44f0: 2f 0a 23 64 65 66 69 6e 65 20 56 44 42 45 5f 4d  /.#define VDBE_M
4500: 41 47 49 43 5f 49 4e 49 54 20 20 20 20 20 30 78  AGIC_INIT     0x
4510: 32 36 62 63 65 61 61 35 20 20 20 20 2f 2a 20 42  26bceaa5    /* B
4520: 75 69 6c 64 69 6e 67 20 61 20 56 44 42 45 20 70  uilding a VDBE p
4530: 72 6f 67 72 61 6d 20 2a 2f 0a 23 64 65 66 69 6e  rogram */.#defin
4540: 65 20 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e  e VDBE_MAGIC_RUN
4550: 20 20 20 20 20 20 30 78 62 64 66 32 30 64 61 33        0xbdf20da3
4560: 20 20 20 20 2f 2a 20 56 44 42 45 20 69 73 20 72      /* VDBE is r
4570: 65 61 64 79 20 74 6f 20 65 78 65 63 75 74 65 20  eady to execute 
4580: 2a 2f 0a 23 64 65 66 69 6e 65 20 56 44 42 45 5f  */.#define VDBE_
4590: 4d 41 47 49 43 5f 48 41 4c 54 20 20 20 20 20 30  MAGIC_HALT     0
45a0: 78 35 31 39 63 32 39 37 33 20 20 20 20 2f 2a 20  x519c2973    /* 
45b0: 56 44 42 45 20 68 61 73 20 63 6f 6d 70 6c 65 74  VDBE has complet
45c0: 65 64 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  ed execution */.
45d0: 23 64 65 66 69 6e 65 20 56 44 42 45 5f 4d 41 47  #define VDBE_MAG
45e0: 49 43 5f 44 45 41 44 20 20 20 20 20 30 78 62 36  IC_DEAD     0xb6
45f0: 30 36 63 33 63 38 20 20 20 20 2f 2a 20 54 68 65  06c3c8    /* The
4600: 20 56 44 42 45 20 68 61 73 20 62 65 65 6e 20 64   VDBE has been d
4610: 65 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 0a 2f  eallocated */../
4620: 2a 0a 2a 2a 20 46 75 6e 63 74 69 6f 6e 20 70 72  *.** Function pr
4630: 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 76 6f 69 64  ototypes.*/.void
4640: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
4650: 43 75 72 73 6f 72 28 56 64 62 65 20 2a 2c 20 56  Cursor(Vdbe *, V
4660: 64 62 65 43 75 72 73 6f 72 2a 29 3b 0a 76 6f 69  dbeCursor*);.voi
4670: 64 20 73 71 6c 69 74 65 56 64 62 65 50 6f 70 53  d sqliteVdbePopS
4680: 74 61 63 6b 28 56 64 62 65 2a 2c 69 6e 74 29 3b  tack(Vdbe*,int);
4690: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
46a0: 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 56 64 62  CursorMoveto(Vdb
46b0: 65 43 75 72 73 6f 72 2a 29 3b 0a 23 69 66 20 64  eCursor*);.#if d
46c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
46d0: 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
46e0: 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 76 6f  VDBE_PROFILE).vo
46f0: 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 50 72  id sqlite3VdbePr
4700: 69 6e 74 4f 70 28 46 49 4c 45 2a 2c 20 69 6e 74  intOp(FILE*, int
4710: 2c 20 4f 70 2a 29 3b 0a 23 65 6e 64 69 66 0a 75  , Op*);.#endif.u
4720: 33 32 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  32 sqlite3VdbeSe
4730: 72 69 61 6c 54 79 70 65 4c 65 6e 28 75 33 32 29  rialTypeLen(u32)
4740: 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 56 64 62  ;.u32 sqlite3Vdb
4750: 65 53 65 72 69 61 6c 54 79 70 65 28 4d 65 6d 2a  eSerialType(Mem*
4760: 2c 20 69 6e 74 29 3b 0a 75 33 32 20 73 71 6c 69  , int);.u32 sqli
4770: 74 65 33 56 64 62 65 53 65 72 69 61 6c 50 75 74  te3VdbeSerialPut
4780: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c  (unsigned char*,
4790: 20 69 6e 74 2c 20 4d 65 6d 2a 2c 20 69 6e 74 29   int, Mem*, int)
47a0: 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 56 64 62  ;.u32 sqlite3Vdb
47b0: 65 53 65 72 69 61 6c 47 65 74 28 63 6f 6e 73 74  eSerialGet(const
47c0: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c   unsigned char*,
47d0: 20 75 33 32 2c 20 4d 65 6d 2a 29 3b 0a 76 6f 69   u32, Mem*);.voi
47e0: 64 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c  d sqlite3VdbeDel
47f0: 65 74 65 41 75 78 44 61 74 61 28 56 64 62 65 2a  eteAuxData(Vdbe*
4800: 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 69 6e  , int, int);..in
4810: 74 20 73 71 6c 69 74 65 32 42 74 72 65 65 4b 65  t sqlite2BtreeKe
4820: 79 43 6f 6d 70 61 72 65 28 42 74 43 75 72 73 6f  yCompare(BtCurso
4830: 72 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  r *, const void 
4840: 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
4850: 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
4860: 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72  VdbeIdxKeyCompar
4870: 65 28 56 64 62 65 43 75 72 73 6f 72 2a 2c 55 6e  e(VdbeCursor*,Un
4880: 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2c 69 6e  packedRecord*,in
4890: 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
48a0: 56 64 62 65 49 64 78 52 6f 77 69 64 28 73 71 6c  VdbeIdxRowid(sql
48b0: 69 74 65 33 2a 2c 20 42 74 43 75 72 73 6f 72 20  ite3*, BtCursor 
48c0: 2a 2c 20 69 36 34 20 2a 29 3b 0a 69 6e 74 20 73  *, i64 *);.int s
48d0: 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
48e0: 28 63 6f 6e 73 74 20 4d 65 6d 2a 2c 20 63 6f 6e  (const Mem*, con
48f0: 73 74 20 4d 65 6d 2a 2c 20 63 6f 6e 73 74 20 43  st Mem*, const C
4900: 6f 6c 6c 53 65 71 2a 29 3b 0a 69 6e 74 20 73 71  ollSeq*);.int sq
4910: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 56 64  lite3VdbeExec(Vd
4920: 62 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  be*);.int sqlite
4930: 33 56 64 62 65 4c 69 73 74 28 56 64 62 65 2a 29  3VdbeList(Vdbe*)
4940: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  ;.int sqlite3Vdb
4950: 65 48 61 6c 74 28 56 64 62 65 2a 29 3b 0a 69 6e  eHalt(Vdbe*);.in
4960: 74 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61  t sqlite3VdbeCha
4970: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 4d 65 6d 20  ngeEncoding(Mem 
4980: 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
4990: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
49a0: 67 28 4d 65 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c  g(Mem*);.int sql
49b0: 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28  ite3VdbeMemCopy(
49c0: 4d 65 6d 2a 2c 20 63 6f 6e 73 74 20 4d 65 6d 2a  Mem*, const Mem*
49d0: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
49e0: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
49f0: 79 28 4d 65 6d 2a 2c 20 63 6f 6e 73 74 20 4d 65  y(Mem*, const Me
4a00: 6d 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  m*, int);.void s
4a10: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
4a20: 65 28 4d 65 6d 2a 2c 20 4d 65 6d 2a 29 3b 0a 69  e(Mem*, Mem*);.i
4a30: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  nt sqlite3VdbeMe
4a40: 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 4d 65  mNulTerminate(Me
4a50: 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  m*);.int sqlite3
4a60: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 4d 65  VdbeMemSetStr(Me
4a70: 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  m*, const char*,
4a80: 20 69 6e 74 2c 20 75 38 2c 20 76 6f 69 64 28 2a   int, u8, void(*
4a90: 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20  )(void*));.void 
4aa0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
4ab0: 74 49 6e 74 36 34 28 4d 65 6d 2a 2c 20 69 36 34  tInt64(Mem*, i64
4ac0: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
4ad0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
4ae0: 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 73 71  OINT.# define sq
4af0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 44  lite3VdbeMemSetD
4b00: 6f 75 62 6c 65 20 73 71 6c 69 74 65 33 56 64 62  ouble sqlite3Vdb
4b10: 65 4d 65 6d 53 65 74 49 6e 74 36 34 0a 23 65 6c  eMemSetInt64.#el
4b20: 73 65 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  se.  void sqlite
4b30: 33 56 64 62 65 4d 65 6d 53 65 74 44 6f 75 62 6c  3VdbeMemSetDoubl
4b40: 65 28 4d 65 6d 2a 2c 20 64 6f 75 62 6c 65 29 3b  e(Mem*, double);
4b50: 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
4b60: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
4b70: 6c 6c 28 4d 65 6d 2a 29 3b 0a 76 6f 69 64 20 73  ll(Mem*);.void s
4b80: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
4b90: 5a 65 72 6f 42 6c 6f 62 28 4d 65 6d 2a 2c 69 6e  ZeroBlob(Mem*,in
4ba0: 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
4bb0: 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74  VdbeMemSetRowSet
4bc0: 28 4d 65 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  (Mem*);.int sqli
4bd0: 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72  te3VdbeMemMakeWr
4be0: 69 74 65 61 62 6c 65 28 4d 65 6d 2a 29 3b 0a 69  iteable(Mem*);.i
4bf0: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  nt sqlite3VdbeMe
4c00: 6d 53 74 72 69 6e 67 69 66 79 28 4d 65 6d 2a 2c  mStringify(Mem*,
4c10: 20 69 6e 74 29 3b 0a 69 36 34 20 73 71 6c 69 74   int);.i64 sqlit
4c20: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 4d  e3VdbeIntValue(M
4c30: 65 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  em*);.int sqlite
4c40: 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
4c50: 66 79 28 4d 65 6d 2a 29 3b 0a 64 6f 75 62 6c 65  fy(Mem*);.double
4c60: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
4c70: 56 61 6c 75 65 28 4d 65 6d 2a 29 3b 0a 76 6f 69  Value(Mem*);.voi
4c80: 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  d sqlite3VdbeInt
4c90: 65 67 65 72 41 66 66 69 6e 69 74 79 28 4d 65 6d  egerAffinity(Mem
4ca0: 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
4cb0: 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 4d 65  dbeMemRealify(Me
4cc0: 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  m*);.int sqlite3
4cd0: 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28  VdbeMemNumerify(
4ce0: 4d 65 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Mem*);.int sqlit
4cf0: 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
4d00: 65 65 28 42 74 43 75 72 73 6f 72 2a 2c 69 6e 74  ee(BtCursor*,int
4d10: 2c 69 6e 74 2c 69 6e 74 2c 4d 65 6d 2a 29 3b 0a  ,int,int,Mem*);.
4d20: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
4d30: 4d 65 6d 52 65 6c 65 61 73 65 28 4d 65 6d 20 2a  MemRelease(Mem *
4d40: 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  p);.void sqlite3
4d50: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78  VdbeMemReleaseEx
4d60: 74 65 72 6e 61 6c 28 4d 65 6d 20 2a 70 29 3b 0a  ternal(Mem *p);.
4d70: 23 64 65 66 69 6e 65 20 56 64 62 65 4d 65 6d 52  #define VdbeMemR
4d80: 65 6c 65 61 73 65 28 58 29 20 20 5c 0a 20 20 69  elease(X)  \.  i
4d90: 66 28 28 58 29 2d 3e 66 6c 61 67 73 26 28 4d 45  f((X)->flags&(ME
4da0: 4d 5f 41 67 67 7c 4d 45 4d 5f 44 79 6e 7c 4d 45  M_Agg|MEM_Dyn|ME
4db0: 4d 5f 52 6f 77 53 65 74 7c 4d 45 4d 5f 46 72 61  M_RowSet|MEM_Fra
4dc0: 6d 65 29 29 20 5c 0a 20 20 20 20 73 71 6c 69 74  me)) \.    sqlit
4dd0: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
4de0: 45 78 74 65 72 6e 61 6c 28 58 29 3b 0a 69 6e 74  External(X);.int
4df0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
4e00: 69 6e 61 6c 69 7a 65 28 4d 65 6d 2a 2c 20 46 75  inalize(Mem*, Fu
4e10: 6e 63 44 65 66 2a 29 3b 0a 63 6f 6e 73 74 20 63  ncDef*);.const c
4e20: 68 61 72 20 2a 73 71 6c 69 74 65 33 4f 70 63 6f  har *sqlite3Opco
4e30: 64 65 4e 61 6d 65 28 69 6e 74 29 3b 0a 69 6e 74  deName(int);.int
4e40: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47   sqlite3VdbeMemG
4e50: 72 6f 77 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 69  row(Mem *pMem, i
4e60: 6e 74 20 6e 2c 20 69 6e 74 20 70 72 65 73 65 72  nt n, int preser
4e70: 76 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ve);.int sqlite3
4e80: 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65  VdbeCloseStateme
4e90: 6e 74 28 56 64 62 65 20 2a 2c 20 69 6e 74 29 3b  nt(Vdbe *, int);
4ea0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
4eb0: 65 46 72 61 6d 65 44 65 6c 65 74 65 28 56 64 62  eFrameDelete(Vdb
4ec0: 65 46 72 61 6d 65 2a 29 3b 0a 69 6e 74 20 73 71  eFrame*);.int sq
4ed0: 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 52 65  lite3VdbeFrameRe
4ee0: 73 74 6f 72 65 28 56 64 62 65 46 72 61 6d 65 20  store(VdbeFrame 
4ef0: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
4f00: 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
4f10: 28 4d 65 6d 20 2a 70 4d 65 6d 29 3b 0a 69 6e 74  (Mem *pMem);.int
4f20: 20 73 71 6c 69 74 65 33 56 64 62 65 54 72 61 6e   sqlite3VdbeTran
4f30: 73 66 65 72 45 72 72 6f 72 28 56 64 62 65 20 2a  sferError(Vdbe *
4f40: 70 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  p);..int sqlite3
4f50: 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28 73  VdbeSorterInit(s
4f60: 71 6c 69 74 65 33 20 2a 2c 20 56 64 62 65 43 75  qlite3 *, VdbeCu
4f70: 72 73 6f 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71  rsor *);.void sq
4f80: 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 43  lite3VdbeSorterC
4f90: 6c 6f 73 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  lose(sqlite3 *, 
4fa0: 56 64 62 65 43 75 72 73 6f 72 20 2a 29 3b 0a 69  VdbeCursor *);.i
4fb0: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f  nt sqlite3VdbeSo
4fc0: 72 74 65 72 52 6f 77 6b 65 79 28 63 6f 6e 73 74  rterRowkey(const
4fd0: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 2c 20 4d   VdbeCursor *, M
4fe0: 65 6d 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  em *);.int sqlit
4ff0: 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74  e3VdbeSorterNext
5000: 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
5010: 74 20 56 64 62 65 43 75 72 73 6f 72 20 2a 2c 20  t VdbeCursor *, 
5020: 69 6e 74 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  int *);.int sqli
5030: 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77  te3VdbeSorterRew
5040: 69 6e 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  ind(sqlite3 *, c
5050: 6f 6e 73 74 20 56 64 62 65 43 75 72 73 6f 72 20  onst VdbeCursor 
5060: 2a 2c 20 69 6e 74 20 2a 29 3b 0a 69 6e 74 20 73  *, int *);.int s
5070: 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
5080: 57 72 69 74 65 28 73 71 6c 69 74 65 33 20 2a 2c  Write(sqlite3 *,
5090: 20 63 6f 6e 73 74 20 56 64 62 65 43 75 72 73 6f   const VdbeCurso
50a0: 72 20 2a 2c 20 4d 65 6d 20 2a 29 3b 0a 69 6e 74  r *, Mem *);.int
50b0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
50c0: 65 72 43 6f 6d 70 61 72 65 28 63 6f 6e 73 74 20  erCompare(const 
50d0: 56 64 62 65 43 75 72 73 6f 72 20 2a 2c 20 4d 65  VdbeCursor *, Me
50e0: 6d 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 0a 23 69  m *, int *);..#i
50f0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
5100: 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
5110: 43 48 45 29 20 26 26 20 53 51 4c 49 54 45 5f 54  CHE) && SQLITE_T
5120: 48 52 45 41 44 53 41 46 45 3e 30 0a 20 20 76 6f  HREADSAFE>0.  vo
5130: 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e  id sqlite3VdbeEn
5140: 74 65 72 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f  ter(Vdbe*);.  vo
5150: 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4c 65  id sqlite3VdbeLe
5160: 61 76 65 28 56 64 62 65 2a 29 3b 0a 23 65 6c 73  ave(Vdbe*);.#els
5170: 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
5180: 65 33 56 64 62 65 45 6e 74 65 72 28 58 29 0a 23  e3VdbeEnter(X).#
5190: 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
51a0: 64 62 65 4c 65 61 76 65 28 58 29 0a 23 65 6e 64  dbeLeave(X).#end
51b0: 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
51c0: 45 5f 44 45 42 55 47 0a 76 6f 69 64 20 73 71 6c  E_DEBUG.void sql
51d0: 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f 75 74  ite3VdbeMemAbout
51e0: 54 6f 43 68 61 6e 67 65 28 56 64 62 65 2a 2c 4d  ToChange(Vdbe*,M
51f0: 65 6d 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  em*);.#endif..#i
5200: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
5210: 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 69 6e  T_FOREIGN_KEY.in
5220: 74 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  t sqlite3VdbeChe
5230: 63 6b 46 6b 28 56 64 62 65 20 2a 2c 20 69 6e 74  ckFk(Vdbe *, int
5240: 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
5250: 65 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  e sqlite3VdbeChe
5260: 63 6b 46 6b 28 70 2c 69 29 20 30 0a 23 65 6e 64  ckFk(p,i) 0.#end
5270: 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  if..int sqlite3V
5280: 64 62 65 4d 65 6d 54 72 61 6e 73 6c 61 74 65 28  dbeMemTranslate(
5290: 4d 65 6d 2a 2c 20 75 38 29 3b 0a 23 69 66 64 65  Mem*, u8);.#ifde
52a0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
52b0: 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62   void sqlite3Vdb
52c0: 65 50 72 69 6e 74 53 71 6c 28 56 64 62 65 2a 29  ePrintSql(Vdbe*)
52d0: 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
52e0: 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69  VdbeMemPrettyPri
52f0: 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68  nt(Mem *pMem, ch
5300: 61 72 20 2a 7a 42 75 66 29 3b 0a 23 65 6e 64 69  ar *zBuf);.#endi
5310: 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  f.int sqlite3Vdb
5320: 65 4d 65 6d 48 61 6e 64 6c 65 42 6f 6d 28 4d 65  eMemHandleBom(Me
5330: 6d 20 2a 70 4d 65 6d 29 3b 0a 0a 23 69 66 6e 64  m *pMem);..#ifnd
5340: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  ef SQLITE_OMIT_I
5350: 4e 43 52 42 4c 4f 42 0a 20 20 69 6e 74 20 73 71  NCRBLOB.  int sq
5360: 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
5370: 6e 64 42 6c 6f 62 28 4d 65 6d 20 2a 29 3b 0a 20  ndBlob(Mem *);. 
5380: 20 23 64 65 66 69 6e 65 20 45 78 70 61 6e 64 42   #define ExpandB
5390: 6c 6f 62 28 50 29 20 28 28 28 50 29 2d 3e 66 6c  lob(P) (((P)->fl
53a0: 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 29 3f 73 71  ags&MEM_Zero)?sq
53b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
53c0: 6e 64 42 6c 6f 62 28 50 29 3a 30 29 0a 23 65 6c  ndBlob(P):0).#el
53d0: 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
53e0: 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e  ite3VdbeMemExpan
53f0: 64 42 6c 6f 62 28 78 29 20 53 51 4c 49 54 45 5f  dBlob(x) SQLITE_
5400: 4f 4b 0a 20 20 23 64 65 66 69 6e 65 20 45 78 70  OK.  #define Exp
5410: 61 6e 64 42 6c 6f 62 28 50 29 20 53 51 4c 49 54  andBlob(P) SQLIT
5420: 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e  E_OK.#endif..#en
5430: 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
5440: 5f 56 44 42 45 49 4e 54 5f 48 5f 29 20 2a 2f 0a  _VDBEINT_H_) */.