/ Hex Artifact Content
Login

Artifact cc1974b94efa98ecaec6fa14a2584d7c1e82eadf:


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 69   sequence */.  i
2ee0: 6e 74 20 69 73 45 72 72 6f 72 3b 20 20 20 20 20  nt isError;     
2ef0: 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 63 6f       /* Error co
2f00: 64 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  de returned by t
2f10: 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a  he function. */.
2f20: 20 20 69 6e 74 20 73 6b 69 70 46 6c 61 67 3b 20    int skipFlag; 
2f30: 20 20 20 20 20 20 20 20 2f 2a 20 53 6b 69 70 20          /* Skip 
2f40: 73 6b 69 70 20 61 63 63 75 6d 75 6c 61 74 6f 72  skip accumulator
2f50: 20 6c 6f 61 64 69 6e 67 20 69 66 20 74 72 75 65   loading if true
2f60: 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 70 3b 20 20   */.  int iOp;  
2f70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
2f80: 6e 73 74 72 75 63 74 69 6f 6e 20 6e 75 6d 62 65  nstruction numbe
2f90: 72 20 6f 66 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  r of OP_Function
2fa0: 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62   */.  Vdbe *pVdb
2fb0: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  e;          /* T
2fc0: 68 65 20 56 4d 20 74 68 61 74 20 6f 77 6e 73 20  he VM that owns 
2fd0: 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  this context */.
2fe0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 45 78 70  };../*.** An Exp
2ff0: 6c 61 69 6e 20 6f 62 6a 65 63 74 20 61 63 63 75  lain object accu
3000: 6d 75 6c 61 74 65 73 20 69 6e 64 65 6e 74 65 64  mulates indented
3010: 20 6f 75 74 70 75 74 20 77 68 69 63 68 20 69 73   output which is
3020: 20 68 65 6c 70 66 75 6c 0a 2a 2a 20 69 6e 20 64   helpful.** in d
3030: 65 73 63 72 69 62 69 6e 67 20 72 65 63 75 72 73  escribing recurs
3040: 69 76 65 20 64 61 74 61 20 73 74 72 75 63 74 75  ive data structu
3050: 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  res..*/.struct E
3060: 78 70 6c 61 69 6e 20 7b 0a 20 20 56 64 62 65 20  xplain {.  Vdbe 
3070: 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 2f 2a  *pVdbe;       /*
3080: 20 41 74 74 61 63 68 20 74 68 65 20 65 78 70 6c   Attach the expl
3090: 61 6e 61 74 69 6f 6e 20 74 6f 20 74 68 69 73 20  anation to this 
30a0: 56 64 62 65 20 2a 2f 0a 20 20 53 74 72 41 63 63  Vdbe */.  StrAcc
30b0: 75 6d 20 73 74 72 3b 20 20 20 20 20 20 2f 2a 20  um str;      /* 
30c0: 54 68 65 20 73 74 72 69 6e 67 20 62 65 69 6e 67  The string being
30d0: 20 61 63 63 75 6d 75 6c 61 74 65 64 20 2a 2f 0a   accumulated */.
30e0: 20 20 69 6e 74 20 6e 49 6e 64 65 6e 74 3b 20 20    int nIndent;  
30f0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
3100: 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 49  f elements in aI
3110: 6e 64 65 6e 74 20 2a 2f 0a 20 20 75 31 36 20 61  ndent */.  u16 a
3120: 49 6e 64 65 6e 74 5b 31 30 30 5d 3b 20 20 2f 2a  Indent[100];  /*
3130: 20 4c 65 76 65 6c 73 20 6f 66 20 69 6e 64 65 6e   Levels of inden
3140: 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 63 68 61 72  tation */.  char
3150: 20 7a 42 61 73 65 5b 31 30 30 5d 3b 20 20 20 2f   zBase[100];   /
3160: 2a 20 49 6e 69 74 69 61 6c 20 73 70 61 63 65 20  * Initial space 
3170: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 20 62 69 74 66  */.};../* A bitf
3180: 69 65 6c 64 20 74 79 70 65 20 66 6f 72 20 75 73  ield type for us
3190: 65 20 69 6e 73 69 64 65 20 6f 66 20 73 74 72 75  e inside of stru
31a0: 63 74 75 72 65 73 2e 20 20 41 6c 77 61 79 73 20  ctures.  Always 
31b0: 66 6f 6c 6c 6f 77 20 77 69 74 68 20 3a 4e 20 77  follow with :N w
31c0: 68 65 72 65 0a 2a 2a 20 4e 20 69 73 20 74 68 65  here.** N is the
31d0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 2e   number of bits.
31e0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 6e 73 69  .*/.typedef unsi
31f0: 67 6e 65 64 20 62 66 74 3b 20 20 2f 2a 20 42 69  gned bft;  /* Bi
3200: 74 20 46 69 65 6c 64 20 54 79 70 65 20 2a 2f 0a  t Field Type */.
3210: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
3220: 63 65 20 6f 66 20 74 68 65 20 76 69 72 74 75 61  ce of the virtua
3230: 6c 20 6d 61 63 68 69 6e 65 2e 20 20 54 68 69 73  l machine.  This
3240: 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
3250: 69 6e 73 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  ins the complete
3260: 0a 2a 2a 20 73 74 61 74 65 20 6f 66 20 74 68 65  .** state of the
3270: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
3280: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 73 71 6c  ..**.** The "sql
3290: 69 74 65 33 5f 73 74 6d 74 22 20 73 74 72 75 63  ite3_stmt" struc
32a0: 74 75 72 65 20 70 6f 69 6e 74 65 72 20 74 68 61  ture pointer tha
32b0: 74 20 69 73 20 72 65 74 75 72 6e 65 64 20 62 79  t is returned by
32c0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
32d0: 28 29 0a 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20  ().** is really 
32e0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20  a pointer to an 
32f0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
3300: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
3310: 2a 20 54 68 65 20 56 64 62 65 2e 69 6e 56 74 61  * The Vdbe.inVta
3320: 62 4d 65 74 68 6f 64 20 76 61 72 69 61 62 6c 65  bMethod variable
3330: 20 69 73 20 73 65 74 20 74 6f 20 6e 6f 6e 2d 7a   is set to non-z
3340: 65 72 6f 20 66 6f 72 20 74 68 65 20 64 75 72 61  ero for the dura
3350: 74 69 6f 6e 20 6f 66 0a 2a 2a 20 61 6e 79 20 76  tion of.** any v
3360: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 65 74  irtual table met
3370: 68 6f 64 20 69 6e 76 6f 63 61 74 69 6f 6e 73 20  hod invocations 
3380: 6d 61 64 65 20 62 79 20 74 68 65 20 76 64 62 65  made by the vdbe
3390: 20 70 72 6f 67 72 61 6d 2e 20 49 74 20 69 73 0a   program. It is.
33a0: 2a 2a 20 73 65 74 20 74 6f 20 32 20 66 6f 72 20  ** set to 2 for 
33b0: 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 20  xDestroy method 
33c0: 63 61 6c 6c 73 20 61 6e 64 20 31 20 66 6f 72 20  calls and 1 for 
33d0: 61 6c 6c 20 6f 74 68 65 72 20 6d 65 74 68 6f 64  all other method
33e0: 73 2e 20 54 68 69 73 0a 2a 2a 20 76 61 72 69 61  s. This.** varia
33f0: 62 6c 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ble is used for 
3400: 74 77 6f 20 70 75 72 70 6f 73 65 73 3a 20 74 6f  two purposes: to
3410: 20 61 6c 6c 6f 77 20 78 44 65 73 74 72 6f 79 20   allow xDestroy 
3420: 6d 65 74 68 6f 64 73 20 74 6f 20 65 78 65 63 75  methods to execu
3430: 74 65 0a 2a 2a 20 22 44 52 4f 50 20 54 41 42 4c  te.** "DROP TABL
3440: 45 22 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e  E" statements an
3450: 64 20 74 6f 20 70 72 65 76 65 6e 74 20 73 6f 6d  d to prevent som
3460: 65 20 6e 61 73 74 79 20 73 69 64 65 20 65 66 66  e nasty side eff
3470: 65 63 74 73 20 6f 66 0a 2a 2a 20 6d 61 6c 6c 6f  ects of.** mallo
3480: 63 20 66 61 69 6c 75 72 65 20 77 68 65 6e 20 53  c failure when S
3490: 51 4c 69 74 65 20 69 73 20 69 6e 76 6f 6b 65 64  QLite is invoked
34a0: 20 72 65 63 75 72 73 69 76 65 6c 79 20 62 79 20   recursively by 
34b0: 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
34c0: 0a 2a 2a 20 6d 65 74 68 6f 64 20 66 75 6e 63 74  .** method funct
34d0: 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56  ion..*/.struct V
34e0: 64 62 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  dbe {.  sqlite3 
34f0: 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  *db;            
3500: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
3510: 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20  connection that 
3520: 6f 77 6e 73 20 74 68 69 73 20 73 74 61 74 65 6d  owns this statem
3530: 65 6e 74 20 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70  ent */.  Op *aOp
3540: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
3550: 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c   /* Space to hol
3560: 64 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  d the virtual ma
3570: 63 68 69 6e 65 27 73 20 70 72 6f 67 72 61 6d 20  chine's program 
3580: 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20  */.  Mem *aMem; 
3590: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
35a0: 54 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  The memory locat
35b0: 69 6f 6e 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 2a  ions */.  Mem **
35c0: 61 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  apArg;          
35d0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 74    /* Arguments t
35e0: 6f 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63  o currently exec
35f0: 75 74 69 6e 67 20 75 73 65 72 20 66 75 6e 63 74  uting user funct
3600: 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 43  ion */.  Mem *aC
3610: 6f 6c 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  olName;         
3620: 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73   /* Column names
3630: 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20   to return */.  
3640: 4d 65 6d 20 2a 70 52 65 73 75 6c 74 53 65 74 3b  Mem *pResultSet;
3650: 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
3660: 65 72 20 74 6f 20 61 6e 20 61 72 72 61 79 20 6f  er to an array o
3670: 66 20 72 65 73 75 6c 74 73 20 2a 2f 0a 20 20 69  f results */.  i
3680: 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
3690: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
36a0: 20 6f 66 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74   of memory locat
36b0: 69 6f 6e 73 20 63 75 72 72 65 6e 74 6c 79 20 61  ions currently a
36c0: 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 69 6e  llocated */.  in
36d0: 74 20 6e 4f 70 3b 20 20 20 20 20 20 20 20 20 20  t nOp;          
36e0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
36f0: 6f 66 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  of instructions 
3700: 69 6e 20 74 68 65 20 70 72 6f 67 72 61 6d 20 2a  in the program *
3710: 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63  /.  int nOpAlloc
3720: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
3730: 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61  umber of slots a
3740: 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 4f 70  llocated for aOp
3750: 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62  [] */.  int nLab
3760: 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  el;             
3770: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62  /* Number of lab
3780: 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e  els used */.  in
3790: 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20  t *aLabel;      
37a0: 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74        /* Space t
37b0: 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c  o hold the label
37c0: 73 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 73 43  s */.  u16 nResC
37d0: 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f  olumn;         /
37e0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
37f0: 6d 6e 73 20 69 6e 20 6f 6e 65 20 72 6f 77 20 6f  mns in one row o
3800: 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
3810: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 75 72 73 6f   */.  int nCurso
3820: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
3830: 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73   Number of slots
3840: 20 69 6e 20 61 70 43 73 72 5b 5d 20 2a 2f 0a 20   in apCsr[] */. 
3850: 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20   u32 magic;     
3860: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69           /* Magi
3870: 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 73 61 6e  c number for san
3880: 69 74 79 20 63 68 65 63 6b 69 6e 67 20 2a 2f 0a  ity checking */.
3890: 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b    char *zErrMsg;
38a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72            /* Err
38b0: 6f 72 20 6d 65 73 73 61 67 65 20 77 72 69 74 74  or message writt
38c0: 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 56 64 62  en here */.  Vdb
38d0: 65 20 2a 70 50 72 65 76 2c 2a 70 4e 65 78 74 3b  e *pPrev,*pNext;
38e0: 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c       /* Linked l
38f0: 69 73 74 20 6f 66 20 56 44 42 45 73 20 77 69 74  ist of VDBEs wit
3900: 68 20 74 68 65 20 73 61 6d 65 20 56 64 62 65 2e  h the same Vdbe.
3910: 64 62 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  db */.  VdbeCurs
3920: 6f 72 20 2a 2a 61 70 43 73 72 3b 20 20 20 20 20  or **apCsr;     
3930: 2f 2a 20 4f 6e 65 20 65 6c 65 6d 65 6e 74 20 6f  /* One element o
3940: 66 20 74 68 69 73 20 61 72 72 61 79 20 66 6f 72  f this array for
3950: 20 65 61 63 68 20 6f 70 65 6e 20 63 75 72 73 6f   each open curso
3960: 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 56 61 72  r */.  Mem *aVar
3970: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
3980: 2a 20 56 61 6c 75 65 73 20 66 6f 72 20 74 68 65  * Values for the
3990: 20 4f 50 5f 56 61 72 69 61 62 6c 65 20 6f 70 63   OP_Variable opc
39a0: 6f 64 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ode. */.  char *
39b0: 2a 61 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20  *azVar;         
39c0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 76 61 72    /* Name of var
39d0: 69 61 62 6c 65 73 20 2a 2f 0a 20 20 79 6e 56 61  iables */.  ynVa
39e0: 72 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20  r nVar;         
39f0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
3a00: 20 65 6e 74 72 69 65 73 20 69 6e 20 61 56 61 72   entries in aVar
3a10: 5b 5d 20 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 7a  [] */.  ynVar nz
3a20: 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Var;            
3a30: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
3a40: 72 69 65 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20  ries in azVar[] 
3a50: 2a 2f 0a 20 20 75 33 32 20 63 61 63 68 65 43 74  */.  u32 cacheCt
3a60: 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
3a70: 56 64 62 65 43 75 72 73 6f 72 20 72 6f 77 20 63  VdbeCursor row c
3a80: 61 63 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20  ache generation 
3a90: 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74  counter */.  int
3aa0: 20 70 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   pc;            
3ab0: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
3ac0: 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  ram counter */. 
3ad0: 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
3ae0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
3af0: 65 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20  e to return */. 
3b00: 20 75 38 20 65 72 72 6f 72 41 63 74 69 6f 6e 3b   u8 errorAction;
3b10: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 63 6f           /* Reco
3b20: 76 65 72 79 20 61 63 74 69 6f 6e 20 74 6f 20 64  very action to d
3b30: 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 61 6e 20  o in case of an 
3b40: 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6d 69  error */.  u8 mi
3b50: 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
3b60: 3b 20 20 2f 2a 20 4d 69 6e 69 6d 75 6d 20 66 69  ;  /* Minimum fi
3b70: 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 77 72  le format for wr
3b80: 69 74 61 62 6c 65 20 64 61 74 61 62 61 73 65 20  itable database 
3b90: 66 69 6c 65 73 20 2a 2f 0a 20 20 62 66 74 20 65  files */.  bft e
3ba0: 78 70 6c 61 69 6e 3a 32 3b 20 20 20 20 20 20 20  xplain:2;       
3bb0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 45 58     /* True if EX
3bc0: 50 4c 41 49 4e 20 70 72 65 73 65 6e 74 20 6f 6e  PLAIN present on
3bd0: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a   SQL command */.
3be0: 20 20 62 66 74 20 69 6e 56 74 61 62 4d 65 74 68    bft inVtabMeth
3bf0: 6f 64 3a 32 3b 20 20 20 20 20 2f 2a 20 53 65 65  od:2;     /* See
3c00: 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20   comments above 
3c10: 2a 2f 0a 20 20 62 66 74 20 63 68 61 6e 67 65 43  */.  bft changeC
3c20: 6e 74 4f 6e 3a 31 3b 20 20 20 20 20 20 2f 2a 20  ntOn:1;      /* 
3c30: 54 72 75 65 20 74 6f 20 75 70 64 61 74 65 20 74  True to update t
3c40: 68 65 20 63 68 61 6e 67 65 2d 63 6f 75 6e 74 65  he change-counte
3c50: 72 20 2a 2f 0a 20 20 62 66 74 20 65 78 70 69 72  r */.  bft expir
3c60: 65 64 3a 31 3b 20 20 20 20 20 20 20 20 20 20 2f  ed:1;          /
3c70: 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 56 4d  * True if the VM
3c80: 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 63   needs to be rec
3c90: 6f 6d 70 69 6c 65 64 20 2a 2f 0a 20 20 62 66 74  ompiled */.  bft
3ca0: 20 72 75 6e 4f 6e 6c 79 4f 6e 63 65 3a 31 3b 20   runOnlyOnce:1; 
3cb0: 20 20 20 20 20 2f 2a 20 41 75 74 6f 6d 61 74 69       /* Automati
3cc0: 63 61 6c 6c 79 20 65 78 70 69 72 65 20 6f 6e 20  cally expire on 
3cd0: 72 65 73 65 74 20 2a 2f 0a 20 20 62 66 74 20 75  reset */.  bft u
3ce0: 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 3a 31  sesStmtJournal:1
3cf0: 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 73  ;  /* True if us
3d00: 65 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 6a  es a statement j
3d10: 6f 75 72 6e 61 6c 20 2a 2f 0a 20 20 62 66 74 20  ournal */.  bft 
3d20: 72 65 61 64 4f 6e 6c 79 3a 31 3b 20 20 20 20 20  readOnly:1;     
3d30: 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
3d40: 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20  statements that 
3d50: 64 6f 20 6e 6f 74 20 77 72 69 74 65 20 2a 2f 0a  do not write */.
3d60: 20 20 62 66 74 20 62 49 73 52 65 61 64 65 72 3a    bft bIsReader:
3d70: 31 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75  1;        /* Tru
3d80: 65 20 66 6f 72 20 73 74 61 74 65 6d 65 6e 74 73  e for statements
3d90: 20 74 68 61 74 20 72 65 61 64 20 2a 2f 0a 20 20   that read */.  
3da0: 62 66 74 20 69 73 50 72 65 70 61 72 65 56 32 3a  bft isPrepareV2:
3db0: 31 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20  1;      /* True 
3dc0: 69 66 20 70 72 65 70 61 72 65 64 20 77 69 74 68  if prepared with
3dd0: 20 70 72 65 70 61 72 65 5f 76 32 28 29 20 2a 2f   prepare_v2() */
3de0: 0a 20 20 62 66 74 20 64 6f 69 6e 67 52 65 72 75  .  bft doingReru
3df0: 6e 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 54 72  n:1;       /* Tr
3e00: 75 65 20 69 66 20 72 65 72 75 6e 6e 69 6e 67 20  ue if rerunning 
3e10: 61 66 74 65 72 20 61 6e 20 61 75 74 6f 2d 72 65  after an auto-re
3e20: 70 72 65 70 61 72 65 20 2a 2f 0a 20 20 69 6e 74  prepare */.  int
3e30: 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20   nChange;       
3e40: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
3e50: 66 20 64 62 20 63 68 61 6e 67 65 73 20 6d 61 64  f db changes mad
3e60: 65 20 73 69 6e 63 65 20 6c 61 73 74 20 72 65 73  e since last res
3e70: 65 74 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20  et */.  yDbMask 
3e80: 62 74 72 65 65 4d 61 73 6b 3b 20 20 20 20 20 20  btreeMask;      
3e90: 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 64 62  /* Bitmask of db
3ea0: 2d 3e 61 44 62 5b 5d 20 65 6e 74 72 69 65 73 20  ->aDb[] entries 
3eb0: 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
3ec0: 79 44 62 4d 61 73 6b 20 6c 6f 63 6b 4d 61 73 6b  yDbMask lockMask
3ed0: 3b 20 20 20 20 20 20 20 2f 2a 20 53 75 62 73 65  ;       /* Subse
3ee0: 74 20 6f 66 20 62 74 72 65 65 4d 61 73 6b 20 74  t of btreeMask t
3ef0: 68 61 74 20 72 65 71 75 69 72 65 73 20 61 20 6c  hat requires a l
3f00: 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 53 74  ock */.  int iSt
3f10: 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20  atement;        
3f20: 20 2f 2a 20 53 74 61 74 65 6d 65 6e 74 20 6e 75   /* Statement nu
3f30: 6d 62 65 72 20 28 6f 72 20 30 20 69 66 20 68 61  mber (or 0 if ha
3f40: 73 20 6e 6f 74 20 6f 70 65 6e 65 64 20 73 74 6d  s not opened stm
3f50: 74 29 20 2a 2f 0a 20 20 69 6e 74 20 61 43 6f 75  t) */.  int aCou
3f60: 6e 74 65 72 5b 34 5d 3b 20 20 20 20 20 20 20 20  nter[4];        
3f70: 2f 2a 20 43 6f 75 6e 74 65 72 73 20 75 73 65 64  /* Counters used
3f80: 20 62 79 20 73 71 6c 69 74 65 33 5f 73 74 6d 74   by sqlite3_stmt
3f90: 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 23 69 66  _status() */.#if
3fa0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
3fb0: 5f 54 52 41 43 45 0a 20 20 69 36 34 20 73 74 61  _TRACE.  i64 sta
3fc0: 72 74 54 69 6d 65 3b 20 20 20 20 20 20 20 20 20  rtTime;         
3fd0: 20 2f 2a 20 54 69 6d 65 20 77 68 65 6e 20 71 75   /* Time when qu
3fe0: 65 72 79 20 73 74 61 72 74 65 64 20 2d 20 75 73  ery started - us
3ff0: 65 64 20 66 6f 72 20 70 72 6f 66 69 6c 69 6e 67  ed for profiling
4000: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 36 34   */.#endif.  i64
4010: 20 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3b 20   nFkConstraint; 
4020: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
4030: 66 20 69 6d 6d 2e 20 46 4b 20 63 6f 6e 73 74 72  f imm. FK constr
4040: 61 69 6e 74 73 20 74 68 69 73 20 56 4d 20 2a 2f  aints this VM */
4050: 0a 20 20 69 36 34 20 6e 53 74 6d 74 44 65 66 43  .  i64 nStmtDefC
4060: 6f 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  ons;       /* Nu
4070: 6d 62 65 72 20 6f 66 20 64 65 66 2e 20 63 6f 6e  mber of def. con
4080: 73 74 72 61 69 6e 74 73 20 77 68 65 6e 20 73 74  straints when st
4090: 6d 74 20 73 74 61 72 74 65 64 20 2a 2f 0a 20 20  mt started */.  
40a0: 69 36 34 20 6e 53 74 6d 74 44 65 66 49 6d 6d 43  i64 nStmtDefImmC
40b0: 6f 6e 73 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ons;    /* Numbe
40c0: 72 20 6f 66 20 64 65 66 2e 20 69 6d 6d 20 63 6f  r of def. imm co
40d0: 6e 73 74 72 61 69 6e 74 73 20 77 68 65 6e 20 73  nstraints when s
40e0: 74 6d 74 20 73 74 61 72 74 65 64 20 2a 2f 0a 20  tmt started */. 
40f0: 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20 20 20 20   char *zSql;    
4100: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
4110: 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74   of the SQL stat
4120: 65 6d 65 6e 74 20 74 68 61 74 20 67 65 6e 65 72  ement that gener
4130: 61 74 65 64 20 74 68 69 73 20 2a 2f 0a 20 20 76  ated this */.  v
4140: 6f 69 64 20 2a 70 46 72 65 65 3b 20 20 20 20 20  oid *pFree;     
4150: 20 20 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74         /* Free t
4160: 68 69 73 20 77 68 65 6e 20 64 65 6c 65 74 69 6e  his when deletin
4170: 67 20 74 68 65 20 76 64 62 65 20 2a 2f 0a 23 69  g the vdbe */.#i
4180: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
4190: 47 0a 20 20 46 49 4c 45 20 2a 74 72 61 63 65 3b  G.  FILE *trace;
41a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
41b0: 72 69 74 65 20 61 6e 20 65 78 65 63 75 74 69 6f  rite an executio
41c0: 6e 20 74 72 61 63 65 20 68 65 72 65 2c 20 69 66  n trace here, if
41d0: 20 6e 6f 74 20 4e 55 4c 4c 20 2a 2f 0a 23 65 6e   not NULL */.#en
41e0: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
41f0: 45 5f 45 4e 41 42 4c 45 5f 54 52 45 45 5f 45 58  E_ENABLE_TREE_EX
4200: 50 4c 41 49 4e 0a 20 20 45 78 70 6c 61 69 6e 20  PLAIN.  Explain 
4210: 2a 70 45 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  *pExplain;      
4220: 2f 2a 20 54 68 65 20 65 78 70 6c 61 69 6e 65 72  /* The explainer
4230: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 78 70   */.  char *zExp
4240: 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  lain;         /*
4250: 20 45 78 70 6c 61 6e 61 74 69 6f 6e 20 6f 66 20   Explanation of 
4260: 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
4270: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 56 64 62 65  */.#endif.  Vdbe
4280: 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20  Frame *pFrame;  
4290: 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 66 72      /* Parent fr
42a0: 61 6d 65 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  ame */.  VdbeFra
42b0: 6d 65 20 2a 70 44 65 6c 46 72 61 6d 65 3b 20 20  me *pDelFrame;  
42c0: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 66 72 61 6d   /* List of fram
42d0: 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 66 72 65  e objects to fre
42e0: 65 20 6f 6e 20 56 4d 20 72 65 73 65 74 20 2a 2f  e on VM reset */
42f0: 0a 20 20 69 6e 74 20 6e 46 72 61 6d 65 3b 20 20  .  int nFrame;  
4300: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
4310: 6d 62 65 72 20 6f 66 20 66 72 61 6d 65 73 20 69  mber of frames i
4320: 6e 20 70 46 72 61 6d 65 20 6c 69 73 74 20 2a 2f  n pFrame list */
4330: 0a 20 20 75 33 32 20 65 78 70 6d 61 73 6b 3b 20  .  u32 expmask; 
4340: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 69             /* Bi
4350: 6e 64 69 6e 67 20 74 6f 20 74 68 65 73 65 20 76  nding to these v
4360: 61 72 73 20 69 6e 76 61 6c 69 64 61 74 65 73 20  ars invalidates 
4370: 56 4d 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  VM */.  SubProgr
4380: 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
4390: 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
43a0: 66 20 61 6c 6c 20 73 75 62 2d 70 72 6f 67 72 61  f all sub-progra
43b0: 6d 73 20 75 73 65 64 20 62 79 20 56 4d 20 2a 2f  ms used by VM */
43c0: 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 46 6c 61 67  .  int nOnceFlag
43d0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69  ;          /* Si
43e0: 7a 65 20 6f 66 20 61 72 72 61 79 20 61 4f 6e 63  ze of array aOnc
43f0: 65 46 6c 61 67 5b 5d 20 2a 2f 0a 20 20 75 38 20  eFlag[] */.  u8 
4400: 2a 61 4f 6e 63 65 46 6c 61 67 3b 20 20 20 20 20  *aOnceFlag;     
4410: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 66 6f       /* Flags fo
4420: 72 20 4f 50 5f 4f 6e 63 65 20 2a 2f 0a 20 20 41  r OP_Once */.  A
4430: 75 78 44 61 74 61 20 2a 70 41 75 78 44 61 74 61  uxData *pAuxData
4440: 3b 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64  ;      /* Linked
4450: 20 6c 69 73 74 20 6f 66 20 61 75 78 64 61 74 61   list of auxdata
4460: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
4470: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
4480: 6c 6c 6f 77 69 6e 67 20 61 72 65 20 61 6c 6c 6f  llowing are allo
4490: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 56  wed values for V
44a0: 64 62 65 2e 6d 61 67 69 63 0a 2a 2f 0a 23 64 65  dbe.magic.*/.#de
44b0: 66 69 6e 65 20 56 44 42 45 5f 4d 41 47 49 43 5f  fine VDBE_MAGIC_
44c0: 49 4e 49 54 20 20 20 20 20 30 78 32 36 62 63 65  INIT     0x26bce
44d0: 61 61 35 20 20 20 20 2f 2a 20 42 75 69 6c 64 69  aa5    /* Buildi
44e0: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
44f0: 6d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 56 44 42  m */.#define VDB
4500: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 20 20 20 20  E_MAGIC_RUN     
4510: 20 30 78 62 64 66 32 30 64 61 33 20 20 20 20 2f   0xbdf20da3    /
4520: 2a 20 56 44 42 45 20 69 73 20 72 65 61 64 79 20  * VDBE is ready 
4530: 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 23 64  to execute */.#d
4540: 65 66 69 6e 65 20 56 44 42 45 5f 4d 41 47 49 43  efine VDBE_MAGIC
4550: 5f 48 41 4c 54 20 20 20 20 20 30 78 35 31 39 63  _HALT     0x519c
4560: 32 39 37 33 20 20 20 20 2f 2a 20 56 44 42 45 20  2973    /* VDBE 
4570: 68 61 73 20 63 6f 6d 70 6c 65 74 65 64 20 65 78  has completed ex
4580: 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ecution */.#defi
4590: 6e 65 20 56 44 42 45 5f 4d 41 47 49 43 5f 44 45  ne VDBE_MAGIC_DE
45a0: 41 44 20 20 20 20 20 30 78 62 36 30 36 63 33 63  AD     0xb606c3c
45b0: 38 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45  8    /* The VDBE
45c0: 20 68 61 73 20 62 65 65 6e 20 64 65 61 6c 6c 6f   has been deallo
45d0: 63 61 74 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  cated */../*.** 
45e0: 53 74 72 75 63 74 75 72 65 20 75 73 65 64 20 74  Structure used t
45f0: 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74  o store the cont
4600: 65 78 74 20 72 65 71 75 69 72 65 64 20 62 79 20  ext required by 
4610: 74 68 65 20 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  the .** sqlite3_
4620: 70 72 65 75 70 64 61 74 65 5f 2a 28 29 20 41 50  preupdate_*() AP
4630: 49 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a  I functions..*/.
4640: 73 74 72 75 63 74 20 50 72 65 55 70 64 61 74 65  struct PreUpdate
4650: 20 7b 0a 20 20 56 64 62 65 20 2a 76 3b 0a 20 20   {.  Vdbe *v;.  
4660: 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 73 72  VdbeCursor *pCsr
4670: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4680: 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 72 65 61  /* Cursor to rea
4690: 64 20 6f 6c 64 20 76 61 6c 75 65 73 20 66 72 6f  d old values fro
46a0: 6d 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20  m */.  int op;  
46b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46c0: 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
46d0: 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 20   SQLITE_INSERT, 
46e0: 55 50 44 41 54 45 2c 20 44 45 4c 45 54 45 20 2a  UPDATE, DELETE *
46f0: 2f 0a 20 20 75 38 20 2a 61 52 65 63 6f 72 64 3b  /.  u8 *aRecord;
4700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4710: 20 20 20 20 2f 2a 20 6f 6c 64 2e 2a 20 64 61 74      /* old.* dat
4720: 61 62 61 73 65 20 72 65 63 6f 72 64 20 2a 2f 0a  abase record */.
4730: 20 20 4b 65 79 49 6e 66 6f 20 6b 65 79 69 6e 66    KeyInfo keyinf
4740: 6f 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  o;.  UnpackedRec
4750: 6f 72 64 20 2a 70 55 6e 70 61 63 6b 65 64 3b 20  ord *pUnpacked; 
4760: 20 20 20 20 20 2f 2a 20 55 6e 70 61 63 6b 65 64       /* Unpacked
4770: 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 52 65 63   version of aRec
4780: 6f 72 64 5b 5d 20 2a 2f 0a 20 20 55 6e 70 61 63  ord[] */.  Unpac
4790: 6b 65 64 52 65 63 6f 72 64 20 2a 70 4e 65 77 55  kedRecord *pNewU
47a0: 6e 70 61 63 6b 65 64 3b 20 20 20 2f 2a 20 55 6e  npacked;   /* Un
47b0: 70 61 63 6b 65 64 20 76 65 72 73 69 6f 6e 20 6f  packed version o
47c0: 66 20 6e 65 77 2e 2a 20 72 65 63 6f 72 64 20 2a  f new.* record *
47d0: 2f 0a 20 20 69 6e 74 20 69 4e 65 77 52 65 67 3b  /.  int iNewReg;
47e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47f0: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
4800: 66 6f 72 20 6e 65 77 2e 2a 20 76 61 6c 75 65 73  for new.* values
4810: 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 31 3b   */.  i64 iKey1;
4820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4830: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 6b        /* First k
4840: 65 79 20 76 61 6c 75 65 20 70 61 73 73 65 64 20  ey value passed 
4850: 74 6f 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 36 34  to hook */.  i64
4860: 20 69 4b 65 79 32 3b 20 20 20 20 20 20 20 20 20   iKey2;         
4870: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4880: 53 65 63 6f 6e 64 20 6b 65 79 20 76 61 6c 75 65  Second key value
4890: 20 70 61 73 73 65 64 20 74 6f 20 68 6f 6f 6b 20   passed to hook 
48a0: 2a 2f 0a 20 20 69 6e 74 20 69 50 4b 65 79 3b 20  */.  int iPKey; 
48b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48c0: 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e       /* If not n
48d0: 65 67 61 74 69 76 65 20 69 6e 64 65 78 20 6f 66  egative index of
48e0: 20 49 50 4b 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20   IPK column */. 
48f0: 20 4d 65 6d 20 2a 61 4e 65 77 3b 20 20 20 20 20   Mem *aNew;     
4900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4910: 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 6e 65 77   /* Array of new
4920: 2e 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a  .* values */.};.
4930: 0a 2f 2a 0a 2a 2a 20 46 75 6e 63 74 69 6f 6e 20  ./*.** Function 
4940: 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 76 6f  prototypes.*/.vo
4950: 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 46 72  id sqlite3VdbeFr
4960: 65 65 43 75 72 73 6f 72 28 56 64 62 65 20 2a 2c  eeCursor(Vdbe *,
4970: 20 56 64 62 65 43 75 72 73 6f 72 2a 29 3b 0a 76   VdbeCursor*);.v
4980: 6f 69 64 20 73 71 6c 69 74 65 56 64 62 65 50 6f  oid sqliteVdbePo
4990: 70 53 74 61 63 6b 28 56 64 62 65 2a 2c 69 6e 74  pStack(Vdbe*,int
49a0: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
49b0: 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 56  beCursorMoveto(V
49c0: 64 62 65 43 75 72 73 6f 72 2a 29 3b 0a 23 69 66  dbeCursor*);.#if
49d0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
49e0: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
49f0: 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a  d(VDBE_PROFILE).
4a00: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
4a10: 50 72 69 6e 74 4f 70 28 46 49 4c 45 2a 2c 20 69  PrintOp(FILE*, i
4a20: 6e 74 2c 20 4f 70 2a 29 3b 0a 23 65 6e 64 69 66  nt, Op*);.#endif
4a30: 0a 75 33 32 20 73 71 6c 69 74 65 33 56 64 62 65  .u32 sqlite3Vdbe
4a40: 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 75 33  SerialTypeLen(u3
4a50: 32 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 56  2);.u32 sqlite3V
4a60: 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 4d 65  dbeSerialType(Me
4a70: 6d 2a 2c 20 69 6e 74 29 3b 0a 75 33 32 20 73 71  m*, int);.u32 sq
4a80: 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 50  lite3VdbeSerialP
4a90: 75 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  ut(unsigned char
4aa0: 2a 2c 20 69 6e 74 2c 20 4d 65 6d 2a 2c 20 69 6e  *, int, Mem*, in
4ab0: 74 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 56  t);.u32 sqlite3V
4ac0: 64 62 65 53 65 72 69 61 6c 47 65 74 28 63 6f 6e  dbeSerialGet(con
4ad0: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
4ae0: 2a 2c 20 75 33 32 2c 20 4d 65 6d 2a 29 3b 0a 76  *, u32, Mem*);.v
4af0: 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 44  oid sqlite3VdbeD
4b00: 65 6c 65 74 65 41 75 78 44 61 74 61 28 56 64 62  eleteAuxData(Vdb
4b10: 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a  e*, int, int);..
4b20: 69 6e 74 20 73 71 6c 69 74 65 32 42 74 72 65 65  int sqlite2Btree
4b30: 4b 65 79 43 6f 6d 70 61 72 65 28 42 74 43 75 72  KeyCompare(BtCur
4b40: 73 6f 72 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69  sor *, const voi
4b50: 64 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  d *, int, int, i
4b60: 6e 74 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nt *);.int sqlit
4b70: 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70  e3VdbeIdxKeyComp
4b80: 61 72 65 28 56 64 62 65 43 75 72 73 6f 72 2a 2c  are(VdbeCursor*,
4b90: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2c  UnpackedRecord*,
4ba0: 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
4bb0: 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 73  e3VdbeIdxRowid(s
4bc0: 71 6c 69 74 65 33 2a 2c 20 42 74 43 75 72 73 6f  qlite3*, BtCurso
4bd0: 72 20 2a 2c 20 69 36 34 20 2a 29 3b 0a 69 6e 74  r *, i64 *);.int
4be0: 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61   sqlite3MemCompa
4bf0: 72 65 28 63 6f 6e 73 74 20 4d 65 6d 2a 2c 20 63  re(const Mem*, c
4c00: 6f 6e 73 74 20 4d 65 6d 2a 2c 20 63 6f 6e 73 74  onst Mem*, const
4c10: 20 43 6f 6c 6c 53 65 71 2a 29 3b 0a 69 6e 74 20   CollSeq*);.int 
4c20: 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28  sqlite3VdbeExec(
4c30: 56 64 62 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Vdbe*);.int sqli
4c40: 74 65 33 56 64 62 65 4c 69 73 74 28 56 64 62 65  te3VdbeList(Vdbe
4c50: 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
4c60: 64 62 65 48 61 6c 74 28 56 64 62 65 2a 29 3b 0a  dbeHalt(Vdbe*);.
4c70: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 43  int sqlite3VdbeC
4c80: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 4d 65  hangeEncoding(Me
4c90: 6d 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  m *, int);.int s
4ca0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
4cb0: 42 69 67 28 4d 65 6d 2a 29 3b 0a 69 6e 74 20 73  Big(Mem*);.int s
4cc0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70  qlite3VdbeMemCop
4cd0: 79 28 4d 65 6d 2a 2c 20 63 6f 6e 73 74 20 4d 65  y(Mem*, const Me
4ce0: 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
4cf0: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
4d00: 6f 70 79 28 4d 65 6d 2a 2c 20 63 6f 6e 73 74 20  opy(Mem*, const 
4d10: 4d 65 6d 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  Mem*, int);.void
4d20: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
4d30: 6f 76 65 28 4d 65 6d 2a 2c 20 4d 65 6d 2a 29 3b  ove(Mem*, Mem*);
4d40: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
4d50: 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28  MemNulTerminate(
4d60: 4d 65 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Mem*);.int sqlit
4d70: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
4d80: 4d 65 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  Mem*, const char
4d90: 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 76 6f 69 64  *, int, u8, void
4da0: 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
4db0: 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  d sqlite3VdbeMem
4dc0: 53 65 74 49 6e 74 36 34 28 4d 65 6d 2a 2c 20 69  SetInt64(Mem*, i
4dd0: 36 34 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  64);.#ifdef SQLI
4de0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
4df0: 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20  _POINT.# define 
4e00: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
4e10: 74 44 6f 75 62 6c 65 20 73 71 6c 69 74 65 33 56  tDouble sqlite3V
4e20: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 0a 23  dbeMemSetInt64.#
4e30: 65 6c 73 65 0a 20 20 76 6f 69 64 20 73 71 6c 69  else.  void sqli
4e40: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 44 6f 75  te3VdbeMemSetDou
4e50: 62 6c 65 28 4d 65 6d 2a 2c 20 64 6f 75 62 6c 65  ble(Mem*, double
4e60: 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
4e70: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
4e80: 4e 75 6c 6c 28 4d 65 6d 2a 29 3b 0a 76 6f 69 64  Null(Mem*);.void
4e90: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
4ea0: 65 74 5a 65 72 6f 42 6c 6f 62 28 4d 65 6d 2a 2c  etZeroBlob(Mem*,
4eb0: 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
4ec0: 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53  e3VdbeMemSetRowS
4ed0: 65 74 28 4d 65 6d 2a 29 3b 0a 69 6e 74 20 73 71  et(Mem*);.int sq
4ee0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65  lite3VdbeMemMake
4ef0: 57 72 69 74 65 61 62 6c 65 28 4d 65 6d 2a 29 3b  Writeable(Mem*);
4f00: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
4f10: 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 4d 65 6d  MemStringify(Mem
4f20: 2a 2c 20 69 6e 74 29 3b 0a 69 36 34 20 73 71 6c  *, int);.i64 sql
4f30: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
4f40: 28 4d 65 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  (Mem*);.int sqli
4f50: 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
4f60: 72 69 66 79 28 4d 65 6d 2a 29 3b 0a 64 6f 75 62  rify(Mem*);.doub
4f70: 6c 65 20 73 71 6c 69 74 65 33 56 64 62 65 52 65  le sqlite3VdbeRe
4f80: 61 6c 56 61 6c 75 65 28 4d 65 6d 2a 29 3b 0a 76  alValue(Mem*);.v
4f90: 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49  oid sqlite3VdbeI
4fa0: 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 4d  ntegerAffinity(M
4fb0: 65 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  em*);.int sqlite
4fc0: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
4fd0: 4d 65 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Mem*);.int sqlit
4fe0: 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66  e3VdbeMemNumerif
4ff0: 79 28 4d 65 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c  y(Mem*);.int sql
5000: 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
5010: 74 72 65 65 28 42 74 43 75 72 73 6f 72 2a 2c 69  tree(BtCursor*,i
5020: 6e 74 2c 69 6e 74 2c 69 6e 74 2c 4d 65 6d 2a 29  nt,int,int,Mem*)
5030: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
5040: 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 4d 65 6d  beMemRelease(Mem
5050: 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   *p);.void sqlit
5060: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
5070: 45 78 74 65 72 6e 61 6c 28 4d 65 6d 20 2a 70 29  External(Mem *p)
5080: 3b 0a 23 64 65 66 69 6e 65 20 56 64 62 65 4d 65  ;.#define VdbeMe
5090: 6d 52 65 6c 65 61 73 65 28 58 29 20 20 5c 0a 20  mRelease(X)  \. 
50a0: 20 69 66 28 28 58 29 2d 3e 66 6c 61 67 73 26 28   if((X)->flags&(
50b0: 4d 45 4d 5f 41 67 67 7c 4d 45 4d 5f 44 79 6e 7c  MEM_Agg|MEM_Dyn|
50c0: 4d 45 4d 5f 52 6f 77 53 65 74 7c 4d 45 4d 5f 46  MEM_RowSet|MEM_F
50d0: 72 61 6d 65 29 29 20 5c 0a 20 20 20 20 73 71 6c  rame)) \.    sql
50e0: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
50f0: 73 65 45 78 74 65 72 6e 61 6c 28 58 29 3b 0a 69  seExternal(X);.i
5100: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  nt sqlite3VdbeMe
5110: 6d 46 69 6e 61 6c 69 7a 65 28 4d 65 6d 2a 2c 20  mFinalize(Mem*, 
5120: 46 75 6e 63 44 65 66 2a 29 3b 0a 63 6f 6e 73 74  FuncDef*);.const
5130: 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4f 70   char *sqlite3Op
5140: 63 6f 64 65 4e 61 6d 65 28 69 6e 74 29 3b 0a 69  codeName(int);.i
5150: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  nt sqlite3VdbeMe
5160: 6d 47 72 6f 77 28 4d 65 6d 20 2a 70 4d 65 6d 2c  mGrow(Mem *pMem,
5170: 20 69 6e 74 20 6e 2c 20 69 6e 74 20 70 72 65 73   int n, int pres
5180: 65 72 76 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74  erve);.int sqlit
5190: 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65  e3VdbeCloseState
51a0: 6d 65 6e 74 28 56 64 62 65 20 2a 2c 20 69 6e 74  ment(Vdbe *, int
51b0: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
51c0: 64 62 65 46 72 61 6d 65 44 65 6c 65 74 65 28 56  dbeFrameDelete(V
51d0: 64 62 65 46 72 61 6d 65 2a 29 3b 0a 69 6e 74 20  dbeFrame*);.int 
51e0: 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65  sqlite3VdbeFrame
51f0: 52 65 73 74 6f 72 65 28 56 64 62 65 46 72 61 6d  Restore(VdbeFram
5200: 65 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e *);.void sqlit
5210: 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79  e3VdbeMemStoreTy
5220: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 3b 0a 76  pe(Mem *pMem);.v
5230: 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 50  oid sqlite3VdbeP
5240: 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 0a 20 20  reUpdateHook(.  
5250: 20 20 56 64 62 65 20 2a 2c 20 56 64 62 65 43 75    Vdbe *, VdbeCu
5260: 72 73 6f 72 20 2a 2c 20 69 6e 74 2c 20 63 6f 6e  rsor *, int, con
5270: 73 74 20 63 68 61 72 2a 2c 20 54 61 62 6c 65 20  st char*, Table 
5280: 2a 2c 20 69 36 34 2c 20 69 6e 74 29 3b 0a 69 6e  *, i64, int);.in
5290: 74 20 73 71 6c 69 74 65 33 56 64 62 65 54 72 61  t sqlite3VdbeTra
52a0: 6e 73 66 65 72 45 72 72 6f 72 28 56 64 62 65 20  nsferError(Vdbe 
52b0: 2a 70 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65  *p);..int sqlite
52c0: 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28  3VdbeSorterInit(
52d0: 73 71 6c 69 74 65 33 20 2a 2c 20 56 64 62 65 43  sqlite3 *, VdbeC
52e0: 75 72 73 6f 72 20 2a 29 3b 0a 76 6f 69 64 20 73  ursor *);.void s
52f0: 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
5300: 43 6c 6f 73 65 28 73 71 6c 69 74 65 33 20 2a 2c  Close(sqlite3 *,
5310: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 29 3b 0a   VdbeCursor *);.
5320: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 53  int sqlite3VdbeS
5330: 6f 72 74 65 72 52 6f 77 6b 65 79 28 63 6f 6e 73  orterRowkey(cons
5340: 74 20 56 64 62 65 43 75 72 73 6f 72 20 2a 2c 20  t VdbeCursor *, 
5350: 4d 65 6d 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Mem *);.int sqli
5360: 74 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78  te3VdbeSorterNex
5370: 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  t(sqlite3 *, con
5380: 73 74 20 56 64 62 65 43 75 72 73 6f 72 20 2a 2c  st VdbeCursor *,
5390: 20 69 6e 74 20 2a 29 3b 0a 69 6e 74 20 73 71 6c   int *);.int sql
53a0: 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65  ite3VdbeSorterRe
53b0: 77 69 6e 64 28 73 71 6c 69 74 65 33 20 2a 2c 20  wind(sqlite3 *, 
53c0: 63 6f 6e 73 74 20 56 64 62 65 43 75 72 73 6f 72  const VdbeCursor
53d0: 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 69 6e 74 20   *, int *);.int 
53e0: 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
53f0: 72 57 72 69 74 65 28 73 71 6c 69 74 65 33 20 2a  rWrite(sqlite3 *
5400: 2c 20 63 6f 6e 73 74 20 56 64 62 65 43 75 72 73  , const VdbeCurs
5410: 6f 72 20 2a 2c 20 4d 65 6d 20 2a 29 3b 0a 69 6e  or *, Mem *);.in
5420: 74 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  t sqlite3VdbeSor
5430: 74 65 72 43 6f 6d 70 61 72 65 28 63 6f 6e 73 74  terCompare(const
5440: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 2c 20 4d   VdbeCursor *, M
5450: 65 6d 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 0a 23  em *, int *);..#
5460: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
5470: 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
5480: 41 43 48 45 29 20 26 26 20 53 51 4c 49 54 45 5f  ACHE) && SQLITE_
5490: 54 48 52 45 41 44 53 41 46 45 3e 30 0a 20 20 76  THREADSAFE>0.  v
54a0: 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 45  oid sqlite3VdbeE
54b0: 6e 74 65 72 28 56 64 62 65 2a 29 3b 0a 20 20 76  nter(Vdbe*);.  v
54c0: 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4c  oid sqlite3VdbeL
54d0: 65 61 76 65 28 56 64 62 65 2a 29 3b 0a 23 65 6c  eave(Vdbe*);.#el
54e0: 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
54f0: 74 65 33 56 64 62 65 45 6e 74 65 72 28 58 29 0a  te3VdbeEnter(X).
5500: 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
5510: 56 64 62 65 4c 65 61 76 65 28 58 29 0a 23 65 6e  VdbeLeave(X).#en
5520: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
5530: 54 45 5f 44 45 42 55 47 0a 76 6f 69 64 20 73 71  TE_DEBUG.void sq
5540: 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f 75  lite3VdbeMemAbou
5550: 74 54 6f 43 68 61 6e 67 65 28 56 64 62 65 2a 2c  tToChange(Vdbe*,
5560: 4d 65 6d 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  Mem*);.#endif..#
5570: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
5580: 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 69  IT_FOREIGN_KEY.i
5590: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  nt sqlite3VdbeCh
55a0: 65 63 6b 46 6b 28 56 64 62 65 20 2a 2c 20 69 6e  eckFk(Vdbe *, in
55b0: 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  t);.#else.# defi
55c0: 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  ne sqlite3VdbeCh
55d0: 65 63 6b 46 6b 28 70 2c 69 29 20 30 0a 23 65 6e  eckFk(p,i) 0.#en
55e0: 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
55f0: 56 64 62 65 4d 65 6d 54 72 61 6e 73 6c 61 74 65  VdbeMemTranslate
5600: 28 4d 65 6d 2a 2c 20 75 38 29 3b 0a 23 69 66 64  (Mem*, u8);.#ifd
5610: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
5620: 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
5630: 62 65 50 72 69 6e 74 53 71 6c 28 56 64 62 65 2a  bePrintSql(Vdbe*
5640: 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
5650: 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72  3VdbeMemPrettyPr
5660: 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63  int(Mem *pMem, c
5670: 68 61 72 20 2a 7a 42 75 66 29 3b 0a 23 65 6e 64  har *zBuf);.#end
5680: 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  if.int sqlite3Vd
5690: 62 65 4d 65 6d 48 61 6e 64 6c 65 42 6f 6d 28 4d  beMemHandleBom(M
56a0: 65 6d 20 2a 70 4d 65 6d 29 3b 0a 0a 23 69 66 6e  em *pMem);..#ifn
56b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
56c0: 49 4e 43 52 42 4c 4f 42 0a 20 20 69 6e 74 20 73  INCRBLOB.  int s
56d0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
56e0: 61 6e 64 42 6c 6f 62 28 4d 65 6d 20 2a 29 3b 0a  andBlob(Mem *);.
56f0: 20 20 23 64 65 66 69 6e 65 20 45 78 70 61 6e 64    #define Expand
5700: 42 6c 6f 62 28 50 29 20 28 28 28 50 29 2d 3e 66  Blob(P) (((P)->f
5710: 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 29 3f 73  lags&MEM_Zero)?s
5720: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
5730: 61 6e 64 42 6c 6f 62 28 50 29 3a 30 29 0a 23 65  andBlob(P):0).#e
5740: 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
5750: 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
5760: 6e 64 42 6c 6f 62 28 78 29 20 53 51 4c 49 54 45  ndBlob(x) SQLITE
5770: 5f 4f 4b 0a 20 20 23 64 65 66 69 6e 65 20 45 78  _OK.  #define Ex
5780: 70 61 6e 64 42 6c 6f 62 28 50 29 20 53 51 4c 49  pandBlob(P) SQLI
5790: 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 65  TE_OK.#endif..#e
57a0: 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
57b0: 28 5f 56 44 42 45 49 4e 54 5f 48 5f 29 20 2a 2f  (_VDBEINT_H_) */
57c0: 0a                                               .