/ Hex Artifact Content
Login

Artifact 40c728712a2975855a2ac6aac44bf02dfd4a4c30:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 53 65 70 74 65  /*.** 2003 Septe
0010: 6d 62 65 72 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65  mber 6.**.** The
0020: 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69 6d   author disclaim
0030: 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20 74  s copyright to t
0040: 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65 2e  his source code.
0050: 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a 2a    In place of.**
0060: 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65 2c   a legal notice,
0070: 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73 73   here is a bless
0080: 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61  ing:.**.**    Ma
0090: 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61 6e  y you do good an
00a0: 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20 20  d not evil..**  
00b0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00c0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00d0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00e0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20 20  ive others..**  
00f0: 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20    May you share 
0100: 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61  freely, never ta
0110: 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79  king more than y
0120: 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a  ou give..**.****
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73  *****.** This is
0180: 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65   the header file
0190: 20 66 6f 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   for information
01a0: 20 74 68 61 74 20 69 73 20 70 72 69 76 61 74 65   that is private
01b0: 20 74 6f 20 74 68 65 0a 2a 2a 20 56 44 42 45 2e   to the.** VDBE.
01c0: 20 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69    This informati
01d0: 6f 6e 20 75 73 65 64 20 74 6f 20 61 6c 6c 20 62  on used to all b
01e0: 65 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20  e at the top of 
01f0: 74 68 65 20 73 69 6e 67 6c 65 0a 2a 2a 20 73 6f  the single.** so
0200: 75 72 63 65 20 63 6f 64 65 20 66 69 6c 65 20 22  urce code file "
0210: 76 64 62 65 2e 63 22 2e 20 20 57 68 65 6e 20 74  vdbe.c".  When t
0220: 68 61 74 20 66 69 6c 65 20 62 65 63 61 6d 65 20  hat file became 
0230: 74 6f 6f 20 62 69 67 20 28 6f 76 65 72 0a 2a 2a  too big (over.**
0240: 20 36 30 30 30 20 6c 69 6e 65 73 20 6c 6f 6e 67   6000 lines long
0250: 29 20 69 74 20 77 61 73 20 73 70 6c 69 74 20 75  ) it was split u
0260: 70 20 69 6e 74 6f 20 73 65 76 65 72 61 6c 20 73  p into several s
0270: 6d 61 6c 6c 65 72 20 66 69 6c 65 73 20 61 6e 64  maller files and
0280: 0a 2a 2a 20 74 68 69 73 20 68 65 61 64 65 72 20  .** this header 
0290: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 77 61 73 20  information was 
02a0: 66 61 63 74 6f 72 65 64 20 6f 75 74 2e 0a 2a 2f  factored out..*/
02b0: 0a 23 69 66 6e 64 65 66 20 5f 56 44 42 45 49 4e  .#ifndef _VDBEIN
02c0: 54 5f 48 5f 0a 23 64 65 66 69 6e 65 20 5f 56 44  T_H_.#define _VD
02d0: 42 45 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20  BEINT_H_../*.** 
02e0: 54 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  The maximum numb
02f0: 65 72 20 6f 66 20 74 69 6d 65 73 20 74 68 61 74  er of times that
0300: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c   a statement wil
0310: 6c 20 74 72 79 20 74 6f 20 72 65 70 61 72 73 65  l try to reparse
0320: 0a 2a 2a 20 69 74 73 65 6c 66 20 62 65 66 6f 72  .** itself befor
0330: 65 20 67 69 76 69 6e 67 20 75 70 20 61 6e 64 20  e giving up and 
0340: 72 65 74 75 72 6e 69 6e 67 20 53 51 4c 49 54 45  returning SQLITE
0350: 5f 53 43 48 45 4d 41 2e 0a 2a 2f 0a 23 69 66 6e  _SCHEMA..*/.#ifn
0360: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 53  def SQLITE_MAX_S
0370: 43 48 45 4d 41 5f 52 45 54 52 59 0a 23 20 64 65  CHEMA_RETRY.# de
0380: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
0390: 53 43 48 45 4d 41 5f 52 45 54 52 59 20 35 30 0a  SCHEMA_RETRY 50.
03a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 56 44  #endif../*.** VD
03b0: 42 45 5f 44 49 53 50 4c 41 59 5f 50 34 20 69 73  BE_DISPLAY_P4 is
03c0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 64   true or false d
03d0: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
03e0: 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 0a 2a  her or not the.*
03f0: 2a 20 22 65 78 70 6c 61 69 6e 22 20 50 34 20 64  * "explain" P4 d
0400: 69 73 70 6c 61 79 20 6c 6f 67 69 63 20 69 73 20  isplay logic is 
0410: 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20  enabled..*/.#if 
0420: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0430: 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 29 20 7c 7c  OMIT_EXPLAIN) ||
0440: 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47   !defined(NDEBUG
0450: 29 20 5c 0a 20 20 20 20 20 7c 7c 20 64 65 66 69  ) \.     || defi
0460: 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45  ned(VDBE_PROFILE
0470: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
0480: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66  ITE_DEBUG).# def
0490: 69 6e 65 20 56 44 42 45 5f 44 49 53 50 4c 41 59  ine VDBE_DISPLAY
04a0: 5f 50 34 20 31 0a 23 65 6c 73 65 0a 23 20 64 65  _P4 1.#else.# de
04b0: 66 69 6e 65 20 56 44 42 45 5f 44 49 53 50 4c 41  fine VDBE_DISPLA
04c0: 59 5f 50 34 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  Y_P4 0.#endif../
04d0: 2a 0a 2a 2a 20 53 51 4c 20 69 73 20 74 72 61 6e  *.** SQL is tran
04e0: 73 6c 61 74 65 64 20 69 6e 74 6f 20 61 20 73 65  slated into a se
04f0: 71 75 65 6e 63 65 20 6f 66 20 69 6e 73 74 72 75  quence of instru
0500: 63 74 69 6f 6e 73 20 74 6f 20 62 65 0a 2a 2a 20  ctions to be.** 
0510: 65 78 65 63 75 74 65 64 20 62 79 20 61 20 76 69  executed by a vi
0520: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20  rtual machine.  
0530: 45 61 63 68 20 69 6e 73 74 72 75 63 74 69 6f 6e  Each instruction
0540: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   is an instance.
0550: 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ** of the follow
0560: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
0570: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
0580: 20 56 64 62 65 4f 70 20 4f 70 3b 0a 0a 2f 2a 0a   VdbeOp Op;../*.
0590: 2a 2a 20 42 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  ** Boolean value
05a0: 73 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 6e 73  s.*/.typedef uns
05b0: 69 67 6e 65 64 20 42 6f 6f 6c 3b 0a 0a 2f 2a 20  igned Bool;../* 
05c0: 4f 70 61 71 75 65 20 74 79 70 65 20 75 73 65 64  Opaque type used
05d0: 20 62 79 20 63 6f 64 65 20 69 6e 20 76 64 62 65   by code in vdbe
05e0: 73 6f 72 74 2e 63 20 2a 2f 0a 74 79 70 65 64 65  sort.c */.typede
05f0: 66 20 73 74 72 75 63 74 20 56 64 62 65 53 6f 72  f struct VdbeSor
0600: 74 65 72 20 56 64 62 65 53 6f 72 74 65 72 3b 0a  ter VdbeSorter;.
0610: 0a 2f 2a 20 4f 70 61 71 75 65 20 74 79 70 65 20  ./* Opaque type 
0620: 75 73 65 64 20 62 79 20 74 68 65 20 65 78 70 6c  used by the expl
0630: 61 69 6e 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  ainer */.typedef
0640: 20 73 74 72 75 63 74 20 45 78 70 6c 61 69 6e 20   struct Explain 
0650: 45 78 70 6c 61 69 6e 3b 0a 0a 2f 2a 20 45 6c 65  Explain;../* Ele
0660: 6d 65 6e 74 73 20 6f 66 20 74 68 65 20 6c 69 6e  ments of the lin
0670: 6b 65 64 20 6c 69 73 74 20 61 74 20 56 64 62 65  ked list at Vdbe
0680: 2e 70 41 75 78 44 61 74 61 20 2a 2f 0a 74 79 70  .pAuxData */.typ
0690: 65 64 65 66 20 73 74 72 75 63 74 20 41 75 78 44  edef struct AuxD
06a0: 61 74 61 20 41 75 78 44 61 74 61 3b 0a 0a 2f 2a  ata AuxData;../*
06b0: 20 54 79 70 65 73 20 6f 66 20 56 44 42 45 20 63   Types of VDBE c
06c0: 75 72 73 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e  ursors */.#defin
06d0: 65 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  e CURTYPE_BTREE 
06e0: 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20        0.#define 
06f0: 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52 20 20  CURTYPE_SORTER  
0700: 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 43 55      1.#define CU
0710: 52 54 59 50 45 5f 56 54 41 42 20 20 20 20 20 20  RTYPE_VTAB      
0720: 20 20 32 0a 23 64 65 66 69 6e 65 20 43 55 52 54    2.#define CURT
0730: 59 50 45 5f 50 53 45 55 44 4f 20 20 20 20 20 20  YPE_PSEUDO      
0740: 33 0a 0a 2f 2a 0a 2a 2a 20 41 20 56 64 62 65 43  3../*.** A VdbeC
0750: 75 72 73 6f 72 20 69 73 20 61 6e 20 73 75 70 65  ursor is an supe
0760: 72 63 6c 61 73 73 20 28 61 20 77 72 61 70 70 65  rclass (a wrappe
0770: 72 29 20 66 6f 72 20 76 61 72 69 6f 75 73 20 63  r) for various c
0780: 75 72 73 6f 72 20 6f 62 6a 65 63 74 73 3a 0a 2a  ursor objects:.*
0790: 2a 0a 2a 2a 20 20 20 20 20 20 2a 20 41 20 62 2d  *.**      * A b-
07a0: 74 72 65 65 20 63 75 72 73 6f 72 0a 2a 2a 20 20  tree cursor.**  
07b0: 20 20 20 20 20 20 20 20 2d 20 20 49 6e 20 74 68          -  In th
07c0: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
07d0: 6f 72 20 69 6e 20 61 6e 20 65 70 68 65 6d 65 72  or in an ephemer
07e0: 61 6c 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 20  al database.**  
07f0: 20 20 20 20 20 20 20 20 2d 20 20 4f 6e 20 65 69          -  On ei
0800: 74 68 65 72 20 61 6e 20 69 6e 64 65 78 20 6f 72  ther an index or
0810: 20 61 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20   a table.**     
0820: 20 2a 20 41 20 73 6f 72 74 65 72 0a 2a 2a 20 20   * A sorter.**  
0830: 20 20 20 20 2a 20 41 20 76 69 72 74 75 61 6c 20      * A virtual 
0840: 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 2a 20  table.**      * 
0850: 41 20 6f 6e 65 2d 72 6f 77 20 22 70 73 65 75 64  A one-row "pseud
0860: 6f 74 61 62 6c 65 22 20 73 74 6f 72 65 64 20 69  otable" stored i
0870: 6e 20 61 20 73 69 6e 67 6c 65 20 72 65 67 69 73  n a single regis
0880: 74 65 72 0a 2a 2f 0a 73 74 72 75 63 74 20 56 64  ter.*/.struct Vd
0890: 62 65 43 75 72 73 6f 72 20 7b 0a 20 20 75 38 20  beCursor {.  u8 
08a0: 65 43 75 72 54 79 70 65 3b 20 20 20 20 20 20 20  eCurType;       
08b0: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65     /* One of the
08c0: 20 43 55 52 54 59 50 45 5f 2a 20 76 61 6c 75 65   CURTYPE_* value
08d0: 73 20 61 62 6f 76 65 20 2a 2f 0a 20 20 69 38 20  s above */.  i8 
08e0: 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
08f0: 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63     /* Index of c
0900: 75 72 73 6f 72 20 64 61 74 61 62 61 73 65 20 69  ursor database i
0910: 6e 20 64 62 2d 3e 61 44 62 5b 5d 20 28 6f 72 20  n db->aDb[] (or 
0920: 2d 31 29 20 2a 2f 0a 20 20 75 38 20 6e 75 6c 6c  -1) */.  u8 null
0930: 52 6f 77 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Row;           /
0940: 2a 20 54 72 75 65 20 69 66 20 70 6f 69 6e 74 69  * True if pointi
0950: 6e 67 20 74 6f 20 61 20 72 6f 77 20 77 69 74 68  ng to a row with
0960: 20 6e 6f 20 64 61 74 61 20 2a 2f 0a 20 20 75 38   no data */.  u8
0970: 20 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3b   deferredMoveto;
0980: 20 20 20 20 2f 2a 20 41 20 63 61 6c 6c 20 74 6f      /* A call to
0990: 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
09a0: 65 74 6f 28 29 20 69 73 20 6e 65 65 64 65 64 20  eto() is needed 
09b0: 2a 2f 0a 20 20 75 38 20 69 73 54 61 62 6c 65 3b  */.  u8 isTable;
09c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
09d0: 75 65 20 66 6f 72 20 72 6f 77 69 64 20 74 61 62  ue for rowid tab
09e0: 6c 65 73 2e 20 20 46 61 6c 73 65 20 66 6f 72 20  les.  False for 
09f0: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 69 66 64 65  indexes */.#ifde
0a00: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
0a10: 20 75 38 20 73 65 65 6b 4f 70 3b 20 20 20 20 20   u8 seekOp;     
0a20: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
0a30: 65 63 65 6e 74 20 73 65 65 6b 20 6f 70 65 72 61  ecent seek opera
0a40: 74 69 6f 6e 20 6f 6e 20 74 68 69 73 20 63 75 72  tion on this cur
0a50: 73 6f 72 20 2a 2f 0a 20 20 75 38 20 77 72 46 6c  sor */.  u8 wrFl
0a60: 61 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ag;            /
0a70: 2a 20 54 68 65 20 77 72 46 6c 61 67 20 61 72 67  * The wrFlag arg
0a80: 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33  ument to sqlite3
0a90: 42 74 72 65 65 43 75 72 73 6f 72 28 29 20 2a 2f  BtreeCursor() */
0aa0: 0a 23 65 6e 64 69 66 0a 20 20 42 6f 6f 6c 20 69  .#endif.  Bool i
0ab0: 73 45 70 68 65 6d 65 72 61 6c 3a 31 3b 20 20 20  sEphemeral:1;   
0ac0: 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 65  /* True for an e
0ad0: 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a  phemeral table *
0ae0: 2f 0a 20 20 42 6f 6f 6c 20 75 73 65 52 61 6e 64  /.  Bool useRand
0af0: 6f 6d 52 6f 77 69 64 3a 31 3b 2f 2a 20 47 65 6e  omRowid:1;/* Gen
0b00: 65 72 61 74 65 20 6e 65 77 20 72 65 63 6f 72 64  erate new record
0b10: 20 6e 75 6d 62 65 72 73 20 73 65 6d 69 2d 72 61   numbers semi-ra
0b20: 6e 64 6f 6d 6c 79 20 2a 2f 0a 20 20 42 6f 6f 6c  ndomly */.  Bool
0b30: 20 69 73 4f 72 64 65 72 65 64 3a 31 3b 20 20 20   isOrdered:1;   
0b40: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
0b50: 20 75 6e 64 65 72 6c 79 69 6e 67 20 74 61 62 6c   underlying tabl
0b60: 65 20 69 73 20 42 54 52 45 45 5f 55 4e 4f 52 44  e is BTREE_UNORD
0b70: 45 52 45 44 20 2a 2f 0a 20 20 50 67 6e 6f 20 70  ERED */.  Pgno p
0b80: 67 6e 6f 52 6f 6f 74 3b 20 20 20 20 20 20 20 20  gnoRoot;        
0b90: 2f 2a 20 52 6f 6f 74 20 70 61 67 65 20 6f 66 20  /* Root page of 
0ba0: 74 68 65 20 6f 70 65 6e 20 62 74 72 65 65 20 63  the open btree c
0bb0: 75 72 73 6f 72 20 2a 2f 0a 20 20 69 31 36 20 6e  ursor */.  i16 n
0bc0: 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20  Field;          
0bd0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69   /* Number of fi
0be0: 65 6c 64 73 20 69 6e 20 74 68 65 20 68 65 61 64  elds in the head
0bf0: 65 72 20 2a 2f 0a 20 20 75 31 36 20 6e 48 64 72  er */.  u16 nHdr
0c00: 50 61 72 73 65 64 3b 20 20 20 20 20 20 20 2f 2a  Parsed;       /*
0c10: 20 4e 75 6d 62 65 72 20 6f 66 20 68 65 61 64 65   Number of heade
0c20: 72 20 66 69 65 6c 64 73 20 70 61 72 73 65 64 20  r fields parsed 
0c30: 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 6e 69 6f  so far */.  unio
0c40: 6e 20 7b 0a 20 20 20 20 42 74 43 75 72 73 6f 72  n {.    BtCursor
0c50: 20 2a 70 43 75 72 73 6f 72 3b 20 20 20 20 20 20   *pCursor;      
0c60: 20 20 20 20 2f 2a 20 43 55 52 54 59 50 45 5f 42      /* CURTYPE_B
0c70: 54 52 45 45 2e 20 20 42 74 72 65 65 20 63 75 72  TREE.  Btree cur
0c80: 73 6f 72 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  sor */.    sqlit
0c90: 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a  e3_vtab_cursor *
0ca0: 70 56 43 75 72 3b 20 2f 2a 20 43 55 52 54 59 50  pVCur; /* CURTYP
0cb0: 45 5f 56 54 41 42 2e 20 20 20 56 74 61 62 20 63  E_VTAB.   Vtab c
0cc0: 75 72 73 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74  ursor */.    int
0cd0: 20 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3b   pseudoTableReg;
0ce0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 55 52 54           /* CURT
0cf0: 59 50 45 5f 50 53 45 55 44 4f 2e 20 52 65 67 20  YPE_PSEUDO. Reg 
0d00: 68 6f 6c 64 69 6e 67 20 63 6f 6e 74 65 6e 74 2e  holding content.
0d10: 20 2a 2f 0a 20 20 20 20 56 64 62 65 53 6f 72 74   */.    VdbeSort
0d20: 65 72 20 2a 70 53 6f 72 74 65 72 3b 20 20 20 20  er *pSorter;    
0d30: 20 20 20 20 2f 2a 20 43 55 52 54 59 50 45 5f 53      /* CURTYPE_S
0d40: 4f 52 54 45 52 2e 20 53 6f 72 74 65 72 20 6f 62  ORTER. Sorter ob
0d50: 6a 65 63 74 20 2a 2f 0a 20 20 7d 20 75 63 3b 0a  ject */.  } uc;.
0d60: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
0d70: 20 20 20 20 20 20 20 20 2f 2a 20 53 65 70 61 72          /* Separ
0d80: 61 74 65 20 66 69 6c 65 20 68 6f 6c 64 69 6e 67  ate file holding
0d90: 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
0da0: 20 2a 2f 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70   */.  KeyInfo *p
0db0: 4b 65 79 49 6e 66 6f 3b 20 20 20 20 2f 2a 20 49  KeyInfo;    /* I
0dc0: 6e 66 6f 20 61 62 6f 75 74 20 69 6e 64 65 78 20  nfo about index 
0dd0: 6b 65 79 73 20 6e 65 65 64 65 64 20 62 79 20 69  keys needed by i
0de0: 6e 64 65 78 20 63 75 72 73 6f 72 73 20 2a 2f 0a  ndex cursors */.
0df0: 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74    int seekResult
0e00: 3b 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c  ;       /* Resul
0e10: 74 20 6f 66 20 70 72 65 76 69 6f 75 73 20 73 71  t of previous sq
0e20: 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
0e30: 28 29 20 2a 2f 0a 20 20 69 36 34 20 73 65 71 43  () */.  i64 seqC
0e40: 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  ount;         /*
0e50: 20 53 65 71 75 65 6e 63 65 20 63 6f 75 6e 74 65   Sequence counte
0e60: 72 20 2a 2f 0a 20 20 69 36 34 20 6d 6f 76 65 74  r */.  i64 movet
0e70: 6f 54 61 72 67 65 74 3b 20 20 20 20 20 2f 2a 20  oTarget;     /* 
0e80: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
0e90: 64 65 66 65 72 72 65 64 20 73 71 6c 69 74 65 33  deferred sqlite3
0ea0: 42 74 72 65 65 4d 6f 76 65 74 6f 28 29 20 2a 2f  BtreeMoveto() */
0eb0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
0ec0: 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45  NABLE_COLUMN_USE
0ed0: 44 5f 4d 41 53 4b 0a 20 20 75 36 34 20 6d 61 73  D_MASK.  u64 mas
0ee0: 6b 55 73 65 64 3b 20 20 20 20 20 20 20 20 20 2f  kUsed;         /
0ef0: 2a 20 4d 61 73 6b 20 6f 66 20 63 6f 6c 75 6d 6e  * Mask of column
0f00: 73 20 75 73 65 64 20 62 79 20 74 68 69 73 20 63  s used by this c
0f10: 75 72 73 6f 72 20 2a 2f 0a 23 65 6e 64 69 66 0a  ursor */.#endif.
0f20: 0a 20 20 2f 2a 20 43 61 63 68 65 64 20 69 6e 66  .  /* Cached inf
0f30: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
0f40: 68 65 20 68 65 61 64 65 72 20 66 6f 72 20 74 68  he header for th
0f50: 65 20 64 61 74 61 20 72 65 63 6f 72 64 20 74 68  e data record th
0f60: 61 74 20 74 68 65 0a 20 20 2a 2a 20 63 75 72 73  at the.  ** curs
0f70: 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  or is currently 
0f80: 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 4f 6e  pointing to.  On
0f90: 6c 79 20 76 61 6c 69 64 20 69 66 20 63 61 63 68  ly valid if cach
0fa0: 65 53 74 61 74 75 73 20 6d 61 74 63 68 65 73 0a  eStatus matches.
0fb0: 20 20 2a 2a 20 56 64 62 65 2e 63 61 63 68 65 43    ** Vdbe.cacheC
0fc0: 74 72 2e 20 20 56 64 62 65 2e 63 61 63 68 65 43  tr.  Vdbe.cacheC
0fd0: 74 72 20 77 69 6c 6c 20 6e 65 76 65 72 20 74 61  tr will never ta
0fe0: 6b 65 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20  ke on the value 
0ff0: 6f 66 0a 20 20 2a 2a 20 43 41 43 48 45 5f 53 54  of.  ** CACHE_ST
1000: 41 4c 45 20 61 6e 64 20 73 6f 20 73 65 74 74 69  ALE and so setti
1010: 6e 67 20 63 61 63 68 65 53 74 61 74 75 73 3d 43  ng cacheStatus=C
1020: 41 43 48 45 5f 53 54 41 4c 45 20 67 75 61 72 61  ACHE_STALE guara
1030: 6e 74 65 65 73 20 74 68 61 74 0a 20 20 2a 2a 20  ntees that.  ** 
1040: 74 68 65 20 63 61 63 68 65 20 69 73 20 6f 75 74  the cache is out
1050: 20 6f 66 20 64 61 74 65 2e 0a 20 20 2a 2a 0a 20   of date..  **. 
1060: 20 2a 2a 20 61 52 6f 77 20 6d 69 67 68 74 20 70   ** aRow might p
1070: 6f 69 6e 74 20 74 6f 20 28 65 70 68 65 6d 65 72  oint to (ephemer
1080: 61 6c 29 20 64 61 74 61 20 66 6f 72 20 74 68 65  al) data for the
1090: 20 63 75 72 72 65 6e 74 20 72 6f 77 2c 20 6f 72   current row, or
10a0: 20 69 74 20 6d 69 67 68 74 0a 20 20 2a 2a 20 62   it might.  ** b
10b0: 65 20 4e 55 4c 4c 2e 0a 20 20 2a 2f 0a 20 20 75  e NULL..  */.  u
10c0: 33 32 20 63 61 63 68 65 53 74 61 74 75 73 3b 20  32 cacheStatus; 
10d0: 20 20 20 20 20 2f 2a 20 43 61 63 68 65 20 69 73       /* Cache is
10e0: 20 76 61 6c 69 64 20 69 66 20 74 68 69 73 20 6d   valid if this m
10f0: 61 74 63 68 65 73 20 56 64 62 65 2e 63 61 63 68  atches Vdbe.cach
1100: 65 43 74 72 20 2a 2f 0a 20 20 75 33 32 20 70 61  eCtr */.  u32 pa
1110: 79 6c 6f 61 64 53 69 7a 65 3b 20 20 20 20 20 20  yloadSize;      
1120: 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20  /* Total number 
1130: 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
1140: 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 33 32 20  record */.  u32 
1150: 73 7a 52 6f 77 3b 20 20 20 20 20 20 20 20 20 20  szRow;          
1160: 20 20 2f 2a 20 42 79 74 65 20 61 76 61 69 6c 61    /* Byte availa
1170: 62 6c 65 20 69 6e 20 61 52 6f 77 20 2a 2f 0a 20  ble in aRow */. 
1180: 20 75 33 32 20 69 48 64 72 4f 66 66 73 65 74 3b   u32 iHdrOffset;
1190: 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74         /* Offset
11a0: 20 74 6f 20 6e 65 78 74 20 75 6e 70 61 72 73 65   to next unparse
11b0: 64 20 62 79 74 65 20 6f 66 20 74 68 65 20 68 65  d byte of the he
11c0: 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ader */.  const 
11d0: 75 38 20 2a 61 52 6f 77 3b 20 20 20 20 20 20 20  u8 *aRow;       
11e0: 2f 2a 20 44 61 74 61 20 66 6f 72 20 74 68 65 20  /* Data for the 
11f0: 63 75 72 72 65 6e 74 20 72 6f 77 2c 20 69 66 20  current row, if 
1200: 61 6c 6c 20 6f 6e 20 6f 6e 65 20 70 61 67 65 20  all on one page 
1210: 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65  */.  u32 *aOffse
1220: 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  t;         /* Po
1230: 69 6e 74 65 72 20 74 6f 20 61 54 79 70 65 5b 6e  inter to aType[n
1240: 46 69 65 6c 64 5d 20 2a 2f 0a 20 20 75 33 32 20  Field] */.  u32 
1250: 61 54 79 70 65 5b 31 5d 3b 20 20 20 20 20 20 20  aType[1];       
1260: 20 20 2f 2a 20 54 79 70 65 20 76 61 6c 75 65 73    /* Type values
1270: 20 66 6f 72 20 61 6c 6c 20 65 6e 74 72 69 65 73   for all entries
1280: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
1290: 2f 0a 20 20 2f 2a 20 32 2a 6e 46 69 65 6c 64 20  /.  /* 2*nField 
12a0: 65 78 74 72 61 20 61 72 72 61 79 20 65 6c 65 6d  extra array elem
12b0: 65 6e 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  ents allocated f
12c0: 6f 72 20 61 54 79 70 65 5b 5d 2c 20 62 65 79 6f  or aType[], beyo
12d0: 6e 64 20 74 68 65 20 6f 6e 65 0a 20 20 2a 2a 20  nd the one.  ** 
12e0: 73 74 61 74 69 63 20 65 6c 65 6d 65 6e 74 20 64  static element d
12f0: 65 63 6c 61 72 65 64 20 69 6e 20 74 68 65 20 73  eclared in the s
1300: 74 72 75 63 74 75 72 65 2e 20 20 6e 46 69 65 6c  tructure.  nFiel
1310: 64 20 74 6f 74 61 6c 20 61 72 72 61 79 20 73 6c  d total array sl
1320: 6f 74 73 20 66 6f 72 0a 20 20 2a 2a 20 61 54 79  ots for.  ** aTy
1330: 70 65 5b 5d 20 61 6e 64 20 6e 46 69 65 6c 64 2b  pe[] and nField+
1340: 31 20 61 72 72 61 79 20 73 6c 6f 74 73 20 66 6f  1 array slots fo
1350: 72 20 61 4f 66 66 73 65 74 5b 5d 20 2a 2f 0a 7d  r aOffset[] */.}
1360: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
1370: 20 56 64 62 65 43 75 72 73 6f 72 20 56 64 62 65   VdbeCursor Vdbe
1380: 43 75 72 73 6f 72 3b 0a 0a 2f 2a 0a 2a 2a 20 57  Cursor;../*.** W
1390: 68 65 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61  hen a sub-progra
13a0: 6d 20 69 73 20 65 78 65 63 75 74 65 64 20 28 4f  m is executed (O
13b0: 50 5f 50 72 6f 67 72 61 6d 29 2c 20 61 20 73 74  P_Program), a st
13c0: 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20  ructure of this 
13d0: 74 79 70 65 0a 2a 2a 20 69 73 20 61 6c 6c 6f 63  type.** is alloc
13e0: 61 74 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  ated to store th
13f0: 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  e current value 
1400: 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63  of the program c
1410: 6f 75 6e 74 65 72 2c 20 61 73 0a 2a 2a 20 77 65  ounter, as.** we
1420: 6c 6c 20 61 73 20 74 68 65 20 63 75 72 72 65 6e  ll as the curren
1430: 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 61 72  t memory cell ar
1440: 72 61 79 20 61 6e 64 20 76 61 72 69 6f 75 73 20  ray and various 
1450: 6f 74 68 65 72 20 66 72 61 6d 65 20 73 70 65 63  other frame spec
1460: 69 66 69 63 0a 2a 2a 20 76 61 6c 75 65 73 20 73  ific.** values s
1470: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 56 64 62  tored in the Vdb
1480: 65 20 73 74 72 75 63 74 2e 20 57 68 65 6e 20 74  e struct. When t
1490: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69  he sub-program i
14a0: 73 20 66 69 6e 69 73 68 65 64 2c 20 0a 2a 2a 20  s finished, .** 
14b0: 74 68 65 73 65 20 76 61 6c 75 65 73 20 61 72 65  these values are
14c0: 20 63 6f 70 69 65 64 20 62 61 63 6b 20 74 6f 20   copied back to 
14d0: 74 68 65 20 56 64 62 65 20 66 72 6f 6d 20 74 68  the Vdbe from th
14e0: 65 20 56 64 62 65 46 72 61 6d 65 20 73 74 72 75  e VdbeFrame stru
14f0: 63 74 75 72 65 2c 0a 2a 2a 20 72 65 73 74 6f 72  cture,.** restor
1500: 69 6e 67 20 74 68 65 20 73 74 61 74 65 20 6f 66  ing the state of
1510: 20 74 68 65 20 56 4d 20 74 6f 20 61 73 20 69 74   the VM to as it
1520: 20 77 61 73 20 62 65 66 6f 72 65 20 74 68 65 20   was before the 
1530: 73 75 62 2d 70 72 6f 67 72 61 6d 0a 2a 2a 20 62  sub-program.** b
1540: 65 67 61 6e 20 65 78 65 63 75 74 69 6e 67 2e 0a  egan executing..
1550: 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79  **.** The memory
1560: 20 66 6f 72 20 61 20 56 64 62 65 46 72 61 6d 65   for a VdbeFrame
1570: 20 6f 62 6a 65 63 74 20 69 73 20 61 6c 6c 6f 63   object is alloc
1580: 61 74 65 64 20 61 6e 64 20 6d 61 6e 61 67 65 64  ated and managed
1590: 20 62 79 20 61 20 6d 65 6d 6f 72 79 0a 2a 2a 20   by a memory.** 
15a0: 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65  cell in the pare
15b0: 6e 74 20 28 63 61 6c 6c 69 6e 67 29 20 66 72 61  nt (calling) fra
15c0: 6d 65 2e 20 57 68 65 6e 20 74 68 65 20 6d 65 6d  me. When the mem
15d0: 6f 72 79 20 63 65 6c 6c 20 69 73 20 64 65 6c 65  ory cell is dele
15e0: 74 65 64 20 6f 72 0a 2a 2a 20 6f 76 65 72 77 72  ted or.** overwr
15f0: 69 74 74 65 6e 2c 20 74 68 65 20 56 64 62 65 46  itten, the VdbeF
1600: 72 61 6d 65 20 6f 62 6a 65 63 74 20 69 73 20 6e  rame object is n
1610: 6f 74 20 66 72 65 65 64 20 69 6d 6d 65 64 69 61  ot freed immedia
1620: 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 69  tely. Instead, i
1630: 74 0a 2a 2a 20 69 73 20 6c 69 6e 6b 65 64 20 69  t.** is linked i
1640: 6e 74 6f 20 74 68 65 20 56 64 62 65 2e 70 44 65  nto the Vdbe.pDe
1650: 6c 46 72 61 6d 65 20 6c 69 73 74 2e 20 54 68 65  lFrame list. The
1660: 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65   contents of the
1670: 20 56 64 62 65 2e 70 44 65 6c 46 72 61 6d 65 0a   Vdbe.pDelFrame.
1680: 2a 2a 20 6c 69 73 74 20 69 73 20 64 65 6c 65 74  ** list is delet
1690: 65 64 20 77 68 65 6e 20 74 68 65 20 56 4d 20 69  ed when the VM i
16a0: 73 20 72 65 73 65 74 20 69 6e 20 56 64 62 65 48  s reset in VdbeH
16b0: 61 6c 74 28 29 2e 20 54 68 65 20 72 65 61 73 6f  alt(). The reaso
16c0: 6e 20 66 6f 72 20 64 6f 69 6e 67 0a 2a 2a 20 74  n for doing.** t
16d0: 68 69 73 20 69 6e 73 74 65 61 64 20 6f 66 20 64  his instead of d
16e0: 65 6c 65 74 69 6e 67 20 74 68 65 20 56 64 62 65  eleting the Vdbe
16f0: 46 72 61 6d 65 20 69 6d 6d 65 64 69 61 74 65 6c  Frame immediatel
1700: 79 20 69 73 20 74 6f 20 61 76 6f 69 64 20 72 65  y is to avoid re
1710: 63 75 72 73 69 76 65 0a 2a 2a 20 63 61 6c 6c 73  cursive.** calls
1720: 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4d   to sqlite3VdbeM
1730: 65 6d 52 65 6c 65 61 73 65 28 29 20 77 68 65 6e  emRelease() when
1740: 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
1750: 73 20 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74  s belonging to t
1760: 68 65 0a 2a 2a 20 63 68 69 6c 64 20 66 72 61 6d  he.** child fram
1770: 65 20 61 72 65 20 72 65 6c 65 61 73 65 64 2e 0a  e are released..
1780: 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 72 65 6e  **.** The curren
1790: 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 66 72  tly executing fr
17a0: 61 6d 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ame is stored in
17b0: 20 56 64 62 65 2e 70 46 72 61 6d 65 2e 20 56 64   Vdbe.pFrame. Vd
17c0: 62 65 2e 70 46 72 61 6d 65 20 69 73 0a 2a 2a 20  be.pFrame is.** 
17d0: 73 65 74 20 74 6f 20 4e 55 4c 4c 20 69 66 20 74  set to NULL if t
17e0: 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65  he currently exe
17f0: 63 75 74 69 6e 67 20 66 72 61 6d 65 20 69 73 20  cuting frame is 
1800: 74 68 65 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d  the main program
1810: 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
1820: 75 63 74 20 56 64 62 65 46 72 61 6d 65 20 56 64  uct VdbeFrame Vd
1830: 62 65 46 72 61 6d 65 3b 0a 73 74 72 75 63 74 20  beFrame;.struct 
1840: 56 64 62 65 46 72 61 6d 65 20 7b 0a 20 20 56 64  VdbeFrame {.  Vd
1850: 62 65 20 2a 76 3b 20 20 20 20 20 20 20 20 20 20  be *v;          
1860: 20 20 20 20 20 20 2f 2a 20 56 4d 20 74 68 69 73        /* VM this
1870: 20 66 72 61 6d 65 20 62 65 6c 6f 6e 67 73 20 74   frame belongs t
1880: 6f 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  o */.  VdbeFrame
1890: 20 2a 70 50 61 72 65 6e 74 3b 20 20 20 20 20 2f   *pParent;     /
18a0: 2a 20 50 61 72 65 6e 74 20 6f 66 20 74 68 69 73  * Parent of this
18b0: 20 66 72 61 6d 65 2c 20 6f 72 20 4e 55 4c 4c 20   frame, or NULL 
18c0: 69 66 20 70 61 72 65 6e 74 20 69 73 20 6d 61 69  if parent is mai
18d0: 6e 20 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70 3b 20  n */.  Op *aOp; 
18e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18f0: 2a 20 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75  * Program instru
1900: 63 74 69 6f 6e 73 20 66 6f 72 20 70 61 72 65 6e  ctions for paren
1910: 74 20 66 72 61 6d 65 20 2a 2f 0a 20 20 69 36 34  t frame */.  i64
1920: 20 2a 61 6e 45 78 65 63 3b 20 20 20 20 20 20 20   *anExec;       
1930: 20 20 20 20 20 2f 2a 20 45 76 65 6e 74 20 63 6f       /* Event co
1940: 75 6e 74 65 72 73 20 66 72 6f 6d 20 70 61 72 65  unters from pare
1950: 6e 74 20 66 72 61 6d 65 20 2a 2f 0a 20 20 4d 65  nt frame */.  Me
1960: 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *aMem;        
1970: 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
1980: 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66  f memory cells f
1990: 6f 72 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20  or parent frame 
19a0: 2a 2f 0a 20 20 75 38 20 2a 61 4f 6e 63 65 46 6c  */.  u8 *aOnceFl
19b0: 61 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ag;          /* 
19c0: 41 72 72 61 79 20 6f 66 20 4f 50 5f 4f 6e 63 65  Array of OP_Once
19d0: 20 66 6c 61 67 73 20 66 6f 72 20 70 61 72 65 6e   flags for paren
19e0: 74 20 66 72 61 6d 65 20 2a 2f 0a 20 20 56 64 62  t frame */.  Vdb
19f0: 65 43 75 72 73 6f 72 20 2a 2a 61 70 43 73 72 3b  eCursor **apCsr;
1a00: 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
1a10: 20 56 64 62 65 20 63 75 72 73 6f 72 73 20 66 6f   Vdbe cursors fo
1a20: 72 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20 2a  r parent frame *
1a30: 2f 0a 20 20 76 6f 69 64 20 2a 74 6f 6b 65 6e 3b  /.  void *token;
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1a50: 6f 70 79 20 6f 66 20 53 75 62 50 72 6f 67 72 61  opy of SubProgra
1a60: 6d 2e 74 6f 6b 65 6e 20 2a 2f 0a 20 20 69 36 34  m.token */.  i64
1a70: 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20   lastRowid;     
1a80: 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 69 6e 73       /* Last ins
1a90: 65 72 74 20 72 6f 77 69 64 20 28 73 71 6c 69 74  ert rowid (sqlit
1aa0: 65 33 2e 6c 61 73 74 52 6f 77 69 64 29 20 2a 2f  e3.lastRowid) */
1ab0: 0a 20 20 69 6e 74 20 6e 43 75 72 73 6f 72 3b 20  .  int nCursor; 
1ac0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ad0: 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
1ae0: 69 6e 20 61 70 43 73 72 20 2a 2f 0a 20 20 69 6e  in apCsr */.  in
1af0: 74 20 70 63 3b 20 20 20 20 20 20 20 20 20 20 20  t pc;           
1b00: 20 20 20 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d        /* Program
1b10: 20 43 6f 75 6e 74 65 72 20 69 6e 20 70 61 72 65   Counter in pare
1b20: 6e 74 20 28 63 61 6c 6c 69 6e 67 29 20 66 72 61  nt (calling) fra
1b30: 6d 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 3b  me */.  int nOp;
1b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b50: 2f 2a 20 53 69 7a 65 20 6f 66 20 61 4f 70 20 61  /* Size of aOp a
1b60: 72 72 61 79 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  rray */.  int nM
1b70: 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
1b80: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
1b90: 6e 74 72 69 65 73 20 69 6e 20 61 4d 65 6d 20 2a  ntries in aMem *
1ba0: 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 46 6c 61  /.  int nOnceFla
1bb0: 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  g;          /* N
1bc0: 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
1bd0: 20 69 6e 20 61 4f 6e 63 65 46 6c 61 67 20 2a 2f   in aOnceFlag */
1be0: 0a 20 20 69 6e 74 20 6e 43 68 69 6c 64 4d 65 6d  .  int nChildMem
1bf0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ;          /* Nu
1c00: 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
1c10: 65 6c 6c 73 20 66 6f 72 20 63 68 69 6c 64 20 66  ells for child f
1c20: 72 61 6d 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43  rame */.  int nC
1c30: 68 69 6c 64 43 73 72 3b 20 20 20 20 20 20 20 20  hildCsr;        
1c40: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
1c50: 75 72 73 6f 72 73 20 66 6f 72 20 63 68 69 6c 64  ursors for child
1c60: 20 66 72 61 6d 65 20 2a 2f 0a 20 20 69 6e 74 20   frame */.  int 
1c70: 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  nChange;        
1c80: 20 20 20 20 2f 2a 20 53 74 61 74 65 6d 65 6e 74      /* Statement
1c90: 20 63 68 61 6e 67 65 73 20 28 56 64 62 65 2e 6e   changes (Vdbe.n
1ca0: 43 68 61 6e 67 65 29 20 20 20 20 20 2a 2f 0a 20  Change)     */. 
1cb0: 20 69 6e 74 20 6e 44 62 43 68 61 6e 67 65 3b 20   int nDbChange; 
1cc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
1cd0: 65 20 6f 66 20 64 62 2d 3e 6e 43 68 61 6e 67 65  e of db->nChange
1ce0: 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20   */.};..#define 
1cf0: 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 29 20  VdbeFrameMem(p) 
1d00: 28 28 4d 65 6d 20 2a 29 26 28 28 75 38 20 2a 29  ((Mem *)&((u8 *)
1d10: 70 29 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  p)[ROUND8(sizeof
1d20: 28 56 64 62 65 46 72 61 6d 65 29 29 5d 29 0a 0a  (VdbeFrame))])..
1d30: 2f 2a 0a 2a 2a 20 41 20 76 61 6c 75 65 20 66 6f  /*.** A value fo
1d40: 72 20 56 64 62 65 43 75 72 73 6f 72 2e 63 61 63  r VdbeCursor.cac
1d50: 68 65 56 61 6c 69 64 20 74 68 61 74 20 6d 65 61  heValid that mea
1d60: 6e 73 20 74 68 65 20 63 61 63 68 65 20 69 73 20  ns the cache is 
1d70: 61 6c 77 61 79 73 20 69 6e 76 61 6c 69 64 2e 0a  always invalid..
1d80: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 41 43 48 45  */.#define CACHE
1d90: 5f 53 54 41 4c 45 20 30 0a 0a 2f 2a 0a 2a 2a 20  _STALE 0../*.** 
1da0: 49 6e 74 65 72 6e 61 6c 6c 79 2c 20 74 68 65 20  Internally, the 
1db0: 76 64 62 65 20 6d 61 6e 69 70 75 6c 61 74 65 73  vdbe manipulates
1dc0: 20 6e 65 61 72 6c 79 20 61 6c 6c 20 53 51 4c 20   nearly all SQL 
1dd0: 76 61 6c 75 65 73 20 61 73 20 4d 65 6d 0a 2a 2a  values as Mem.**
1de0: 20 73 74 72 75 63 74 75 72 65 73 2e 20 45 61 63   structures. Eac
1df0: 68 20 4d 65 6d 20 73 74 72 75 63 74 20 6d 61 79  h Mem struct may
1e00: 20 63 61 63 68 65 20 6d 75 6c 74 69 70 6c 65 20   cache multiple 
1e10: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 73 20  representations 
1e20: 28 73 74 72 69 6e 67 2c 0a 2a 2a 20 69 6e 74 65  (string,.** inte
1e30: 67 65 72 20 65 74 63 2e 29 20 6f 66 20 74 68 65  ger etc.) of the
1e40: 20 73 61 6d 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a   same value..*/.
1e50: 73 74 72 75 63 74 20 4d 65 6d 20 7b 0a 20 20 75  struct Mem {.  u
1e60: 6e 69 6f 6e 20 4d 65 6d 56 61 6c 75 65 20 7b 0a  nion MemValue {.
1e70: 20 20 20 20 64 6f 75 62 6c 65 20 72 3b 20 20 20      double r;   
1e80: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20          /* Real 
1e90: 76 61 6c 75 65 20 75 73 65 64 20 77 68 65 6e 20  value used when 
1ea0: 4d 45 4d 5f 52 65 61 6c 20 69 73 20 73 65 74 20  MEM_Real is set 
1eb0: 69 6e 20 66 6c 61 67 73 20 2a 2f 0a 20 20 20 20  in flags */.    
1ec0: 69 36 34 20 69 3b 20 20 20 20 20 20 20 20 20 20  i64 i;          
1ed0: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
1ee0: 61 6c 75 65 20 75 73 65 64 20 77 68 65 6e 20 4d  alue used when M
1ef0: 45 4d 5f 49 6e 74 20 69 73 20 73 65 74 20 69 6e  EM_Int is set in
1f00: 20 66 6c 61 67 73 20 2a 2f 0a 20 20 20 20 69 6e   flags */.    in
1f10: 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20  t nZero;        
1f20: 20 20 2f 2a 20 55 73 65 64 20 77 68 65 6e 20 62    /* Used when b
1f30: 69 74 20 4d 45 4d 5f 5a 65 72 6f 20 69 73 20 73  it MEM_Zero is s
1f40: 65 74 20 69 6e 20 66 6c 61 67 73 20 2a 2f 0a 20  et in flags */. 
1f50: 20 20 20 46 75 6e 63 44 65 66 20 2a 70 44 65 66     FuncDef *pDef
1f60: 3b 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 6f  ;      /* Used o
1f70: 6e 6c 79 20 77 68 65 6e 20 66 6c 61 67 73 3d 3d  nly when flags==
1f80: 4d 45 4d 5f 41 67 67 20 2a 2f 0a 20 20 20 20 52  MEM_Agg */.    R
1f90: 6f 77 53 65 74 20 2a 70 52 6f 77 53 65 74 3b 20  owSet *pRowSet; 
1fa0: 20 20 20 2f 2a 20 55 73 65 64 20 6f 6e 6c 79 20     /* Used only 
1fb0: 77 68 65 6e 20 66 6c 61 67 73 3d 3d 4d 45 4d 5f  when flags==MEM_
1fc0: 52 6f 77 53 65 74 20 2a 2f 0a 20 20 20 20 56 64  RowSet */.    Vd
1fd0: 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
1fe0: 20 20 2f 2a 20 55 73 65 64 20 77 68 65 6e 20 66    /* Used when f
1ff0: 6c 61 67 73 3d 3d 4d 45 4d 5f 46 72 61 6d 65 20  lags==MEM_Frame 
2000: 2a 2f 0a 20 20 7d 20 75 3b 0a 20 20 75 31 36 20  */.  } u;.  u16 
2010: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
2020: 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74  /* Some combinat
2030: 69 6f 6e 20 6f 66 20 4d 45 4d 5f 4e 75 6c 6c 2c  ion of MEM_Null,
2040: 20 4d 45 4d 5f 53 74 72 2c 20 4d 45 4d 5f 44 79   MEM_Str, MEM_Dy
2050: 6e 2c 20 65 74 63 2e 20 2a 2f 0a 20 20 75 38 20  n, etc. */.  u8 
2060: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
2070: 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c   /* SQLITE_UTF8,
2080: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2c   SQLITE_UTF16BE,
2090: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20   SQLITE_UTF16LE 
20a0: 2a 2f 0a 20 20 75 38 20 20 65 53 75 62 74 79 70  */.  u8  eSubtyp
20b0: 65 3b 20 20 20 20 20 20 20 2f 2a 20 53 75 62 74  e;       /* Subt
20c0: 79 70 65 20 66 6f 72 20 74 68 69 73 20 76 61 6c  ype for this val
20d0: 75 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20  ue */.  int n;  
20e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
20f0: 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
2100: 65 72 73 20 69 6e 20 73 74 72 69 6e 67 20 76 61  ers in string va
2110: 6c 75 65 2c 20 65 78 63 6c 75 64 69 6e 67 20 27  lue, excluding '
2120: 5c 30 27 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  \0' */.  char *z
2130: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
2140: 53 74 72 69 6e 67 20 6f 72 20 42 4c 4f 42 20 76  String or BLOB v
2150: 61 6c 75 65 20 2a 2f 0a 20 20 2f 2a 20 53 68 61  alue */.  /* Sha
2160: 6c 6c 6f 77 43 6f 70 79 20 6f 6e 6c 79 20 6e 65  llowCopy only ne
2170: 65 64 73 20 74 6f 20 63 6f 70 79 20 74 68 65 20  eds to copy the 
2180: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 76  information abov
2190: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4d 61  e */.  char *zMa
21a0: 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 53 70  lloc;      /* Sp
21b0: 61 63 65 20 74 6f 20 68 6f 6c 64 20 4d 45 4d 5f  ace to hold MEM_
21c0: 53 74 72 20 6f 72 20 4d 45 4d 5f 42 6c 6f 62 20  Str or MEM_Blob 
21d0: 69 66 20 73 7a 4d 61 6c 6c 6f 63 3e 30 20 2a 2f  if szMalloc>0 */
21e0: 0a 20 20 69 6e 74 20 73 7a 4d 61 6c 6c 6f 63 3b  .  int szMalloc;
21f0: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
2200: 66 20 74 68 65 20 7a 4d 61 6c 6c 6f 63 20 61 6c  f the zMalloc al
2210: 6c 6f 63 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 33  location */.  u3
2220: 32 20 75 54 65 6d 70 3b 20 20 20 20 20 20 20 20  2 uTemp;        
2230: 20 20 2f 2a 20 54 72 61 6e 73 69 65 6e 74 20 73    /* Transient s
2240: 74 6f 72 61 67 65 20 66 6f 72 20 73 65 72 69 61  torage for seria
2250: 6c 5f 74 79 70 65 20 69 6e 20 4f 50 5f 4d 61 6b  l_type in OP_Mak
2260: 65 52 65 63 6f 72 64 20 2a 2f 0a 20 20 73 71 6c  eRecord */.  sql
2270: 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
2280: 20 2f 2a 20 54 68 65 20 61 73 73 6f 63 69 61 74   /* The associat
2290: 65 64 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ed database conn
22a0: 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  ection */.  void
22b0: 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b   (*xDel)(void*);
22c0: 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f  /* Destructor fo
22d0: 72 20 4d 65 6d 2e 7a 20 2d 20 6f 6e 6c 79 20 76  r Mem.z - only v
22e0: 61 6c 69 64 20 69 66 20 4d 45 4d 5f 44 79 6e 20  alid if MEM_Dyn 
22f0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2300: 5f 44 45 42 55 47 0a 20 20 4d 65 6d 20 2a 70 53  _DEBUG.  Mem *pS
2310: 63 6f 70 79 46 72 6f 6d 3b 20 20 20 20 2f 2a 20  copyFrom;    /* 
2320: 54 68 69 73 20 4d 65 6d 20 69 73 20 61 20 73 68  This Mem is a sh
2330: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 70 53  allow copy of pS
2340: 63 6f 70 79 46 72 6f 6d 20 2a 2f 0a 20 20 76 6f  copyFrom */.  vo
2350: 69 64 20 2a 70 46 69 6c 6c 65 72 3b 20 20 20 20  id *pFiller;    
2360: 20 20 2f 2a 20 53 6f 20 74 68 61 74 20 73 69 7a    /* So that siz
2370: 65 6f 66 28 4d 65 6d 29 20 69 73 20 61 20 6d 75  eof(Mem) is a mu
2380: 6c 74 69 70 6c 65 20 6f 66 20 38 20 2a 2f 0a 23  ltiple of 8 */.#
2390: 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
23a0: 53 69 7a 65 20 6f 66 20 73 74 72 75 63 74 20 4d  Size of struct M
23b0: 65 6d 20 6e 6f 74 20 69 6e 63 6c 75 64 69 6e 67  em not including
23c0: 20 74 68 65 20 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63   the Mem.zMalloc
23d0: 20 6d 65 6d 62 65 72 20 6f 72 20 61 6e 79 74 68   member or anyth
23e0: 69 6e 67 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c  ing that.** foll
23f0: 6f 77 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ows..*/.#define 
2400: 4d 45 4d 43 45 4c 4c 53 49 5a 45 20 6f 66 66 73  MEMCELLSIZE offs
2410: 65 74 6f 66 28 4d 65 6d 2c 7a 4d 61 6c 6c 6f 63  etof(Mem,zMalloc
2420: 29 0a 0a 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72  )../* One or mor
2430: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
2440: 6e 67 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  ng flags are set
2450: 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 65   to indicate the
2460: 20 76 61 6c 69 64 4f 4b 0a 2a 2a 20 72 65 70 72   validOK.** repr
2470: 65 73 65 6e 74 61 74 69 6f 6e 73 20 6f 66 20 74  esentations of t
2480: 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
2490: 69 6e 20 74 68 65 20 4d 65 6d 20 73 74 72 75 63  in the Mem struc
24a0: 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
24b0: 4d 45 4d 5f 4e 75 6c 6c 20 66 6c 61 67 20 69 73  MEM_Null flag is
24c0: 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 76   set, then the v
24d0: 61 6c 75 65 20 69 73 20 61 6e 20 53 51 4c 20 4e  alue is an SQL N
24e0: 55 4c 4c 20 76 61 6c 75 65 2e 0a 2a 2a 20 4e 6f  ULL value..** No
24f0: 20 6f 74 68 65 72 20 66 6c 61 67 73 20 6d 61 79   other flags may
2500: 20 62 65 20 73 65 74 20 69 6e 20 74 68 69 73 20   be set in this 
2510: 63 61 73 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  case..**.** If t
2520: 68 65 20 4d 45 4d 5f 53 74 72 20 66 6c 61 67 20  he MEM_Str flag 
2530: 69 73 20 73 65 74 20 74 68 65 6e 20 4d 65 6d 2e  is set then Mem.
2540: 7a 20 70 6f 69 6e 74 73 20 61 74 20 61 20 73 74  z points at a st
2550: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
2560: 69 6f 6e 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20  ion..** Usually 
2570: 74 68 69 73 20 69 73 20 65 6e 63 6f 64 65 64 20  this is encoded 
2580: 69 6e 20 74 68 65 20 73 61 6d 65 20 75 6e 69 63  in the same unic
2590: 6f 64 65 20 65 6e 63 6f 64 69 6e 67 20 61 73 20  ode encoding as 
25a0: 74 68 65 20 6d 61 69 6e 0a 2a 2a 20 64 61 74 61  the main.** data
25b0: 62 61 73 65 20 28 73 65 65 20 62 65 6c 6f 77 20  base (see below 
25c0: 66 6f 72 20 65 78 63 65 70 74 69 6f 6e 73 29 2e  for exceptions).
25d0: 20 49 66 20 74 68 65 20 4d 45 4d 5f 54 65 72 6d   If the MEM_Term
25e0: 20 66 6c 61 67 20 69 73 20 61 6c 73 6f 0a 2a 2a   flag is also.**
25f0: 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 73   set, then the s
2600: 74 72 69 6e 67 20 69 73 20 6e 75 6c 20 74 65 72  tring is nul ter
2610: 6d 69 6e 61 74 65 64 2e 20 54 68 65 20 4d 45 4d  minated. The MEM
2620: 5f 49 6e 74 20 61 6e 64 20 4d 45 4d 5f 52 65 61  _Int and MEM_Rea
2630: 6c 20 0a 2a 2a 20 66 6c 61 67 73 20 6d 61 79 20  l .** flags may 
2640: 63 6f 65 78 69 73 74 20 77 69 74 68 20 74 68 65  coexist with the
2650: 20 4d 45 4d 5f 53 74 72 20 66 6c 61 67 2e 0a 2a   MEM_Str flag..*
2660: 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f 4e 75  /.#define MEM_Nu
2670: 6c 6c 20 20 20 20 20 20 30 78 30 30 30 31 20 20  ll      0x0001  
2680: 20 2f 2a 20 56 61 6c 75 65 20 69 73 20 4e 55 4c   /* Value is NUL
2690: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  L */.#define MEM
26a0: 5f 53 74 72 20 20 20 20 20 20 20 30 78 30 30 30  _Str       0x000
26b0: 32 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 73 20  2   /* Value is 
26c0: 61 20 73 74 72 69 6e 67 20 2a 2f 0a 23 64 65 66  a string */.#def
26d0: 69 6e 65 20 4d 45 4d 5f 49 6e 74 20 20 20 20 20  ine MEM_Int     
26e0: 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 56 61    0x0004   /* Va
26f0: 6c 75 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65  lue is an intege
2700: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  r */.#define MEM
2710: 5f 52 65 61 6c 20 20 20 20 20 20 30 78 30 30 30  _Real      0x000
2720: 38 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 73 20  8   /* Value is 
2730: 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 20 2a 2f  a real number */
2740: 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f 42 6c 6f  .#define MEM_Blo
2750: 62 20 20 20 20 20 20 30 78 30 30 31 30 20 20 20  b      0x0010   
2760: 2f 2a 20 56 61 6c 75 65 20 69 73 20 61 20 42 4c  /* Value is a BL
2770: 4f 42 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  OB */.#define ME
2780: 4d 5f 41 66 66 4d 61 73 6b 20 20 20 30 78 30 30  M_AffMask   0x00
2790: 31 66 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20  1f   /* Mask of 
27a0: 61 66 66 69 6e 69 74 79 20 62 69 74 73 20 2a 2f  affinity bits */
27b0: 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f 52 6f 77  .#define MEM_Row
27c0: 53 65 74 20 20 20 20 30 78 30 30 32 30 20 20 20  Set    0x0020   
27d0: 2f 2a 20 56 61 6c 75 65 20 69 73 20 61 20 52 6f  /* Value is a Ro
27e0: 77 53 65 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 23  wSet object */.#
27f0: 64 65 66 69 6e 65 20 4d 45 4d 5f 46 72 61 6d 65  define MEM_Frame
2800: 20 20 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a       0x0040   /*
2810: 20 56 61 6c 75 65 20 69 73 20 61 20 56 64 62 65   Value is a Vdbe
2820: 46 72 61 6d 65 20 6f 62 6a 65 63 74 20 2a 2f 0a  Frame object */.
2830: 23 64 65 66 69 6e 65 20 4d 45 4d 5f 55 6e 64 65  #define MEM_Unde
2840: 66 69 6e 65 64 20 30 78 30 30 38 30 20 20 20 2f  fined 0x0080   /
2850: 2a 20 56 61 6c 75 65 20 69 73 20 75 6e 64 65 66  * Value is undef
2860: 69 6e 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ined */.#define 
2870: 4d 45 4d 5f 43 6c 65 61 72 65 64 20 20 20 30 78  MEM_Cleared   0x
2880: 30 31 30 30 20 20 20 2f 2a 20 4e 55 4c 4c 20 73  0100   /* NULL s
2890: 65 74 20 62 79 20 4f 50 5f 4e 75 6c 6c 2c 20 6e  et by OP_Null, n
28a0: 6f 74 20 66 72 6f 6d 20 64 61 74 61 20 2a 2f 0a  ot from data */.
28b0: 23 64 65 66 69 6e 65 20 4d 45 4d 5f 54 79 70 65  #define MEM_Type
28c0: 4d 61 73 6b 20 20 30 78 30 31 66 66 20 20 20 2f  Mask  0x01ff   /
28d0: 2a 20 4d 61 73 6b 20 6f 66 20 74 79 70 65 20 62  * Mask of type b
28e0: 69 74 73 20 2a 2f 0a 0a 0a 2f 2a 20 57 68 65 6e  its */.../* When
28f0: 65 76 65 72 20 4d 65 6d 20 63 6f 6e 74 61 69 6e  ever Mem contain
2900: 73 20 61 20 76 61 6c 69 64 20 73 74 72 69 6e 67  s a valid string
2910: 20 6f 72 20 62 6c 6f 62 20 72 65 70 72 65 73 65   or blob represe
2920: 6e 74 61 74 69 6f 6e 2c 20 6f 6e 65 20 6f 66 0a  ntation, one of.
2930: 2a 2a 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** the following
2940: 20 66 6c 61 67 73 20 6d 75 73 74 20 62 65 20 73   flags must be s
2950: 65 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  et to determine 
2960: 74 68 65 20 6d 65 6d 6f 72 79 20 6d 61 6e 61 67  the memory manag
2970: 65 6d 65 6e 74 0a 2a 2a 20 70 6f 6c 69 63 79 20  ement.** policy 
2980: 66 6f 72 20 4d 65 6d 2e 7a 2e 20 20 54 68 65 20  for Mem.z.  The 
2990: 4d 45 4d 5f 54 65 72 6d 20 66 6c 61 67 20 74 65  MEM_Term flag te
29a0: 6c 6c 73 20 75 73 20 77 68 65 74 68 65 72 20 6f  lls us whether o
29b0: 72 20 6e 6f 74 20 74 68 65 0a 2a 2a 20 73 74 72  r not the.** str
29c0: 69 6e 67 20 69 73 20 5c 30 30 30 20 6f 72 20 5c  ing is \000 or \
29d0: 75 30 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64  u0000 terminated
29e0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f  .*/.#define MEM_
29f0: 54 65 72 6d 20 20 20 20 20 20 30 78 30 32 30 30  Term      0x0200
2a00: 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 72 65 70     /* String rep
2a10: 20 69 73 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74   is nul terminat
2a20: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ed */.#define ME
2a30: 4d 5f 44 79 6e 20 20 20 20 20 20 20 30 78 30 34  M_Dyn       0x04
2a40: 30 30 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20  00   /* Need to 
2a50: 63 61 6c 6c 20 4d 65 6d 2e 78 44 65 6c 28 29 20  call Mem.xDel() 
2a60: 6f 6e 20 4d 65 6d 2e 7a 20 2a 2f 0a 23 64 65 66  on Mem.z */.#def
2a70: 69 6e 65 20 4d 45 4d 5f 53 74 61 74 69 63 20 20  ine MEM_Static  
2a80: 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20 4d 65    0x0800   /* Me
2a90: 6d 2e 7a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  m.z points to a 
2aa0: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 2a 2f  static string */
2ab0: 0a 23 64 65 66 69 6e 65 20 4d 45 4d 5f 45 70 68  .#define MEM_Eph
2ac0: 65 6d 20 20 20 20 20 30 78 31 30 30 30 20 20 20  em     0x1000   
2ad0: 2f 2a 20 4d 65 6d 2e 7a 20 70 6f 69 6e 74 73 20  /* Mem.z points 
2ae0: 74 6f 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20  to an ephemeral 
2af0: 73 74 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  string */.#defin
2b00: 65 20 4d 45 4d 5f 41 67 67 20 20 20 20 20 20 20  e MEM_Agg       
2b10: 30 78 32 30 30 30 20 20 20 2f 2a 20 4d 65 6d 2e  0x2000   /* Mem.
2b20: 7a 20 70 6f 69 6e 74 73 20 74 6f 20 61 6e 20 61  z points to an a
2b30: 67 67 20 66 75 6e 63 74 69 6f 6e 20 63 6f 6e 74  gg function cont
2b40: 65 78 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ext */.#define M
2b50: 45 4d 5f 5a 65 72 6f 20 20 20 20 20 20 30 78 34  EM_Zero      0x4
2b60: 30 30 30 20 20 20 2f 2a 20 4d 65 6d 2e 69 20 63  000   /* Mem.i c
2b70: 6f 6e 74 61 69 6e 73 20 63 6f 75 6e 74 20 6f 66  ontains count of
2b80: 20 30 73 20 61 70 70 65 6e 64 65 64 20 74 6f 20   0s appended to 
2b90: 62 6c 6f 62 20 2a 2f 0a 23 69 66 64 65 66 20 53  blob */.#ifdef S
2ba0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 43 52 42  QLITE_OMIT_INCRB
2bb0: 4c 4f 42 0a 20 20 23 75 6e 64 65 66 20 4d 45 4d  LOB.  #undef MEM
2bc0: 5f 5a 65 72 6f 0a 20 20 23 64 65 66 69 6e 65 20  _Zero.  #define 
2bd0: 4d 45 4d 5f 5a 65 72 6f 20 30 78 30 30 30 30 0a  MEM_Zero 0x0000.
2be0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6c  #endif../*.** Cl
2bf0: 65 61 72 20 61 6e 79 20 65 78 69 73 74 69 6e 67  ear any existing
2c00: 20 74 79 70 65 20 66 6c 61 67 73 20 66 72 6f 6d   type flags from
2c10: 20 61 20 4d 65 6d 20 61 6e 64 20 72 65 70 6c 61   a Mem and repla
2c20: 63 65 20 74 68 65 6d 20 77 69 74 68 20 66 0a 2a  ce them with f.*
2c30: 2f 0a 23 64 65 66 69 6e 65 20 4d 65 6d 53 65 74  /.#define MemSet
2c40: 54 79 70 65 46 6c 61 67 28 70 2c 20 66 29 20 5c  TypeFlag(p, f) \
2c50: 0a 20 20 20 28 28 70 29 2d 3e 66 6c 61 67 73 20  .   ((p)->flags 
2c60: 3d 20 28 28 70 29 2d 3e 66 6c 61 67 73 26 7e 28  = ((p)->flags&~(
2c70: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 7c 4d 45 4d  MEM_TypeMask|MEM
2c80: 5f 5a 65 72 6f 29 29 7c 66 29 0a 0a 2f 2a 0a 2a  _Zero))|f)../*.*
2c90: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
2ca0: 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69   a memory cell i
2cb0: 73 20 6e 6f 74 20 6d 61 72 6b 65 64 20 61 73 20  s not marked as 
2cc0: 69 6e 76 61 6c 69 64 2e 20 20 54 68 69 73 20 6d  invalid.  This m
2cd0: 61 63 72 6f 0a 2a 2a 20 69 73 20 66 6f 72 20 75  acro.** is for u
2ce0: 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74  se inside assert
2cf0: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e  () statements on
2d00: 6c 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ly..*/.#ifdef SQ
2d10: 4c 49 54 45 5f 44 45 42 55 47 0a 23 64 65 66 69  LITE_DEBUG.#defi
2d20: 6e 65 20 6d 65 6d 49 73 56 61 6c 69 64 28 4d 29  ne memIsValid(M)
2d30: 20 20 28 28 4d 29 2d 3e 66 6c 61 67 73 20 26 20    ((M)->flags & 
2d40: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 29 3d 3d  MEM_Undefined)==
2d50: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
2d60: 45 61 63 68 20 61 75 78 69 6c 69 61 72 79 20 64  Each auxiliary d
2d70: 61 74 61 20 70 6f 69 6e 74 65 72 20 73 74 6f 72  ata pointer stor
2d80: 65 64 20 62 79 20 61 20 75 73 65 72 20 64 65 66  ed by a user def
2d90: 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 0a 2a  ined function .*
2da0: 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * implementation
2db0: 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33   calling sqlite3
2dc0: 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 69  _set_auxdata() i
2dd0: 73 20 73 74 6f 72 65 64 20 69 6e 20 61 6e 20 69  s stored in an i
2de0: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
2df0: 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 41 6c  is structure. Al
2e00: 6c 20 73 75 63 68 20 73 74 72 75 63 74 75 72 65  l such structure
2e10: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
2e20: 68 20 61 20 73 69 6e 67 6c 65 20 56 4d 0a 2a 2a  h a single VM.**
2e30: 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
2e40: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
2e50: 64 65 64 20 61 74 20 56 64 62 65 2e 70 41 75 78  ded at Vdbe.pAux
2e60: 44 61 74 61 2e 20 41 6c 6c 20 61 72 65 20 64 65  Data. All are de
2e70: 73 74 72 6f 79 65 64 0a 2a 2a 20 77 68 65 6e 20  stroyed.** when 
2e80: 74 68 65 20 56 4d 20 69 73 20 68 61 6c 74 65 64  the VM is halted
2e90: 20 28 69 66 20 6e 6f 74 20 62 65 66 6f 72 65 29   (if not before)
2ea0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 78 44  ..*/.struct AuxD
2eb0: 61 74 61 20 7b 0a 20 20 69 6e 74 20 69 4f 70 3b  ata {.  int iOp;
2ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed0: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72          /* Instr
2ee0: 75 63 74 69 6f 6e 20 6e 75 6d 62 65 72 20 6f 66  uction number of
2ef0: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 6f 70 63   OP_Function opc
2f00: 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 69 41 72  ode */.  int iAr
2f10: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
2f20: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
2f30: 78 20 6f 66 20 66 75 6e 63 74 69 6f 6e 20 61 72  x of function ar
2f40: 67 75 6d 65 6e 74 2e 20 2a 2f 0a 20 20 76 6f 69  gument. */.  voi
2f50: 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20  d *pAux;        
2f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2f70: 41 75 78 20 64 61 74 61 20 70 6f 69 6e 74 65 72  Aux data pointer
2f80: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65   */.  void (*xDe
2f90: 6c 65 74 65 29 28 76 6f 69 64 20 2a 29 3b 20 20  lete)(void *);  
2fa0: 20 20 20 20 20 20 2f 2a 20 44 65 73 74 72 75 63        /* Destruc
2fb0: 74 6f 72 20 66 6f 72 20 74 68 65 20 61 75 78 20  tor for the aux 
2fc0: 64 61 74 61 20 2a 2f 0a 20 20 41 75 78 44 61 74  data */.  AuxDat
2fd0: 61 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  a *pNext;       
2fe0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78            /* Nex
2ff0: 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 73  t element in lis
3000: 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  t */.};../*.** T
3010: 68 65 20 22 63 6f 6e 74 65 78 74 22 20 61 72 67  he "context" arg
3020: 75 6d 65 6e 74 20 66 6f 72 20 61 6e 20 69 6e 73  ument for an ins
3030: 74 61 6c 6c 61 62 6c 65 20 66 75 6e 63 74 69 6f  tallable functio
3040: 6e 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  n.  A pointer to
3050: 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
3060: 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
3070: 65 20 69 73 20 74 68 65 20 66 69 72 73 74 20 61  e is the first a
3080: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 72  rgument to the r
3090: 6f 75 74 69 6e 65 73 20 75 73 65 64 0a 2a 2a 20  outines used.** 
30a0: 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 53 51  implement the SQ
30b0: 4c 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  L functions..**.
30c0: 2a 2a 20 54 68 65 72 65 20 69 73 20 61 20 74 79  ** There is a ty
30d0: 70 65 64 65 66 20 66 6f 72 20 74 68 69 73 20 73  pedef for this s
30e0: 74 72 75 63 74 75 72 65 20 69 6e 20 73 71 6c 69  tructure in sqli
30f0: 74 65 2e 68 2e 20 20 53 6f 20 61 6c 6c 20 72 6f  te.h.  So all ro
3100: 75 74 69 6e 65 73 2c 0a 2a 2a 20 65 76 65 6e 20  utines,.** even 
3110: 74 68 65 20 70 75 62 6c 69 63 20 69 6e 74 65 72  the public inter
3120: 66 61 63 65 20 74 6f 20 53 51 4c 69 74 65 2c 20  face to SQLite, 
3130: 63 61 6e 20 75 73 65 20 61 20 70 6f 69 6e 74 65  can use a pointe
3140: 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
3150: 75 72 65 2e 0a 2a 2a 20 42 75 74 20 74 68 69 73  ure..** But this
3160: 20 66 69 6c 65 20 69 73 20 74 68 65 20 6f 6e 6c   file is the onl
3170: 79 20 70 6c 61 63 65 20 77 68 65 72 65 20 74 68  y place where th
3180: 65 20 69 6e 74 65 72 6e 61 6c 20 64 65 74 61 69  e internal detai
3190: 6c 73 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74  ls of this.** st
31a0: 72 75 63 74 75 72 65 20 61 72 65 20 6b 6e 6f 77  ructure are know
31b0: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74  n..**.** This st
31c0: 72 75 63 74 75 72 65 20 69 73 20 64 65 66 69 6e  ructure is defin
31d0: 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 64 62  ed inside of vdb
31e0: 65 49 6e 74 2e 68 20 62 65 63 61 75 73 65 20 69  eInt.h because i
31f0: 74 20 75 73 65 73 20 73 75 62 73 74 72 75 63 74  t uses substruct
3200: 75 72 65 73 0a 2a 2a 20 28 4d 65 6d 29 20 77 68  ures.** (Mem) wh
3210: 69 63 68 20 61 72 65 20 6f 6e 6c 79 20 64 65 66  ich are only def
3220: 69 6e 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 73  ined there..*/.s
3230: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 63 6f  truct sqlite3_co
3240: 6e 74 65 78 74 20 7b 0a 20 20 4d 65 6d 20 2a 70  ntext {.  Mem *p
3250: 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Out;            
3260: 20 20 2f 2a 20 54 68 65 20 72 65 74 75 72 6e 20    /* The return 
3270: 76 61 6c 75 65 20 69 73 20 73 74 6f 72 65 64 20  value is stored 
3280: 68 65 72 65 20 2a 2f 0a 20 20 46 75 6e 63 44 65  here */.  FuncDe
3290: 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20  f *pFunc;       
32a0: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
32b0: 66 75 6e 63 74 69 6f 6e 20 69 6e 66 6f 72 6d 61  function informa
32c0: 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  tion */.  Mem *p
32d0: 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
32e0: 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c    /* Memory cell
32f0: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61   used to store a
3300: 67 67 72 65 67 61 74 65 20 63 6f 6e 74 65 78 74  ggregate context
3310: 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62   */.  Vdbe *pVdb
3320: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
3330: 20 54 68 65 20 56 4d 20 74 68 61 74 20 6f 77 6e   The VM that own
3340: 73 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a  s this context *
3350: 2f 0a 20 20 69 6e 74 20 69 4f 70 3b 20 20 20 20  /.  int iOp;    
3360: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
3370: 6e 73 74 72 75 63 74 69 6f 6e 20 6e 75 6d 62 65  nstruction numbe
3380: 72 20 6f 66 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  r of OP_Function
3390: 20 2a 2f 0a 20 20 69 6e 74 20 69 73 45 72 72 6f   */.  int isErro
33a0: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
33b0: 20 45 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75   Error code retu
33c0: 72 6e 65 64 20 62 79 20 74 68 65 20 66 75 6e 63  rned by the func
33d0: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 38 20 73 6b  tion. */.  u8 sk
33e0: 69 70 46 6c 61 67 3b 20 20 20 20 20 20 20 20 20  ipFlag;         
33f0: 20 20 20 2f 2a 20 53 6b 69 70 20 61 63 63 75 6d     /* Skip accum
3400: 75 6c 61 74 6f 72 20 6c 6f 61 64 69 6e 67 20 69  ulator loading i
3410: 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 66  f true */.  u8 f
3420: 45 72 72 6f 72 4f 72 41 75 78 3b 20 20 20 20 20  ErrorOrAux;     
3430: 20 20 20 20 2f 2a 20 69 73 45 72 72 6f 72 21 3d      /* isError!=
3440: 30 20 6f 72 20 70 56 64 62 65 2d 3e 70 41 75 78  0 or pVdbe->pAux
3450: 44 61 74 61 20 6d 6f 64 69 66 69 65 64 20 2a 2f  Data modified */
3460: 0a 20 20 75 38 20 61 72 67 63 3b 20 20 20 20 20  .  u8 argc;     
3470: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
3480: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
3490: 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  s */.  sqlite3_v
34a0: 61 6c 75 65 20 2a 61 72 67 76 5b 31 5d 3b 20 2f  alue *argv[1]; /
34b0: 2a 20 41 72 67 75 6d 65 6e 74 20 73 65 74 20 2a  * Argument set *
34c0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 45  /.};../*.** An E
34d0: 78 70 6c 61 69 6e 20 6f 62 6a 65 63 74 20 61 63  xplain object ac
34e0: 63 75 6d 75 6c 61 74 65 73 20 69 6e 64 65 6e 74  cumulates indent
34f0: 65 64 20 6f 75 74 70 75 74 20 77 68 69 63 68 20  ed output which 
3500: 69 73 20 68 65 6c 70 66 75 6c 0a 2a 2a 20 69 6e  is helpful.** in
3510: 20 64 65 73 63 72 69 62 69 6e 67 20 72 65 63 75   describing recu
3520: 72 73 69 76 65 20 64 61 74 61 20 73 74 72 75 63  rsive data struc
3530: 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  tures..*/.struct
3540: 20 45 78 70 6c 61 69 6e 20 7b 0a 20 20 56 64 62   Explain {.  Vdb
3550: 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
3560: 2f 2a 20 41 74 74 61 63 68 20 74 68 65 20 65 78  /* Attach the ex
3570: 70 6c 61 6e 61 74 69 6f 6e 20 74 6f 20 74 68 69  planation to thi
3580: 73 20 56 64 62 65 20 2a 2f 0a 20 20 53 74 72 41  s Vdbe */.  StrA
3590: 63 63 75 6d 20 73 74 72 3b 20 20 20 20 20 20 2f  ccum str;      /
35a0: 2a 20 54 68 65 20 73 74 72 69 6e 67 20 62 65 69  * The string bei
35b0: 6e 67 20 61 63 63 75 6d 75 6c 61 74 65 64 20 2a  ng accumulated *
35c0: 2f 0a 20 20 69 6e 74 20 6e 49 6e 64 65 6e 74 3b  /.  int nIndent;
35d0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
35e0: 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20   of elements in 
35f0: 61 49 6e 64 65 6e 74 20 2a 2f 0a 20 20 75 31 36  aIndent */.  u16
3600: 20 61 49 6e 64 65 6e 74 5b 31 30 30 5d 3b 20 20   aIndent[100];  
3610: 2f 2a 20 4c 65 76 65 6c 73 20 6f 66 20 69 6e 64  /* Levels of ind
3620: 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 63 68  entation */.  ch
3630: 61 72 20 7a 42 61 73 65 5b 31 30 30 5d 3b 20 20  ar zBase[100];  
3640: 20 2f 2a 20 49 6e 69 74 69 61 6c 20 73 70 61 63   /* Initial spac
3650: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 20 62 69  e */.};../* A bi
3660: 74 66 69 65 6c 64 20 74 79 70 65 20 66 6f 72 20  tfield type for 
3670: 75 73 65 20 69 6e 73 69 64 65 20 6f 66 20 73 74  use inside of st
3680: 72 75 63 74 75 72 65 73 2e 20 20 41 6c 77 61 79  ructures.  Alway
3690: 73 20 66 6f 6c 6c 6f 77 20 77 69 74 68 20 3a 4e  s follow with :N
36a0: 20 77 68 65 72 65 0a 2a 2a 20 4e 20 69 73 20 74   where.** N is t
36b0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  he number of bit
36c0: 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 6e  s..*/.typedef un
36d0: 73 69 67 6e 65 64 20 62 66 74 3b 20 20 2f 2a 20  signed bft;  /* 
36e0: 42 69 74 20 46 69 65 6c 64 20 54 79 70 65 20 2a  Bit Field Type *
36f0: 2f 0a 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  /..typedef struc
3700: 74 20 53 63 61 6e 53 74 61 74 75 73 20 53 63 61  t ScanStatus Sca
3710: 6e 53 74 61 74 75 73 3b 0a 73 74 72 75 63 74 20  nStatus;.struct 
3720: 53 63 61 6e 53 74 61 74 75 73 20 7b 0a 20 20 69  ScanStatus {.  i
3730: 6e 74 20 61 64 64 72 45 78 70 6c 61 69 6e 3b 20  nt addrExplain; 
3740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3750: 2a 20 4f 50 5f 45 78 70 6c 61 69 6e 20 66 6f 72  * OP_Explain for
3760: 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 61   loop */.  int a
3770: 64 64 72 4c 6f 6f 70 3b 20 20 20 20 20 20 20 20  ddrLoop;        
3780: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 64             /* Ad
3790: 64 72 65 73 73 20 6f 66 20 22 6c 6f 6f 70 73 22  dress of "loops"
37a0: 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e   counter */.  in
37b0: 74 20 61 64 64 72 56 69 73 69 74 3b 20 20 20 20  t addrVisit;    
37c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
37d0: 20 41 64 64 72 65 73 73 20 6f 66 20 22 72 6f 77   Address of "row
37e0: 73 20 76 69 73 69 74 65 64 22 20 63 6f 75 6e 74  s visited" count
37f0: 65 72 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c  er */.  int iSel
3800: 65 63 74 49 44 3b 20 20 20 20 20 20 20 20 20 20  ectID;          
3810: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 22          /* The "
3820: 53 65 6c 65 63 74 2d 49 44 22 20 66 6f 72 20 74  Select-ID" for t
3830: 68 69 73 20 6c 6f 6f 70 20 2a 2f 0a 20 20 4c 6f  his loop */.  Lo
3840: 67 45 73 74 20 6e 45 73 74 3b 20 20 20 20 20 20  gEst nEst;      
3850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3860: 20 45 73 74 69 6d 61 74 65 64 20 6f 75 74 70 75   Estimated outpu
3870: 74 20 72 6f 77 73 20 70 65 72 20 6c 6f 6f 70 20  t rows per loop 
3880: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  */.  char *zName
3890: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
38a0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
38b0: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 2a  table or index *
38c0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
38d0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 76  nstance of the v
38e0: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20  irtual machine. 
38f0: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
3900: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 63 6f 6d  contains the com
3910: 70 6c 65 74 65 0a 2a 2a 20 73 74 61 74 65 20 6f  plete.** state o
3920: 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  f the virtual ma
3930: 63 68 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  chine..**.** The
3940: 20 22 73 71 6c 69 74 65 33 5f 73 74 6d 74 22 20   "sqlite3_stmt" 
3950: 73 74 72 75 63 74 75 72 65 20 70 6f 69 6e 74 65  structure pointe
3960: 72 20 74 68 61 74 20 69 73 20 72 65 74 75 72 6e  r that is return
3970: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 70 72  ed by sqlite3_pr
3980: 65 70 61 72 65 28 29 0a 2a 2a 20 69 73 20 72 65  epare().** is re
3990: 61 6c 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74  ally a pointer t
39a0: 6f 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  o an instance of
39b0: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
39c0: 0a 2a 2f 0a 73 74 72 75 63 74 20 56 64 62 65 20  .*/.struct Vdbe 
39d0: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
39e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
39f0: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
3a00: 65 63 74 69 6f 6e 20 74 68 61 74 20 6f 77 6e 73  ection that owns
3a10: 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20   this statement 
3a20: 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70 3b 20 20 20  */.  Op *aOp;   
3a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3a40: 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68  Space to hold th
3a50: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
3a60: 65 27 73 20 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  e's program */. 
3a70: 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20   Mem *aMem;     
3a80: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
3a90: 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73  memory locations
3aa0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72   */.  Mem **apAr
3ab0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  g;            /*
3ac0: 20 41 72 67 75 6d 65 6e 74 73 20 74 6f 20 63 75   Arguments to cu
3ad0: 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e  rrently executin
3ae0: 67 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  g user function 
3af0: 2a 2f 0a 20 20 4d 65 6d 20 2a 61 43 6f 6c 4e 61  */.  Mem *aColNa
3b00: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
3b10: 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 6f 20  Column names to 
3b20: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 4d 65 6d 20  return */.  Mem 
3b30: 2a 70 52 65 73 75 6c 74 53 65 74 3b 20 20 20 20  *pResultSet;    
3b40: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
3b50: 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20 72 65  o an array of re
3b60: 73 75 6c 74 73 20 2a 2f 0a 20 20 50 61 72 73 65  sults */.  Parse
3b70: 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
3b80: 20 20 20 2f 2a 20 50 61 72 73 69 6e 67 20 63 6f     /* Parsing co
3b90: 6e 74 65 78 74 20 75 73 65 64 20 74 6f 20 63 72  ntext used to cr
3ba0: 65 61 74 65 20 74 68 69 73 20 56 64 62 65 20 2a  eate this Vdbe *
3bb0: 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
3bd0: 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
3be0: 6c 6f 63 61 74 69 6f 6e 73 20 63 75 72 72 65 6e  locations curren
3bf0: 74 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  tly allocated */
3c00: 0a 20 20 69 6e 74 20 6e 4f 70 3b 20 20 20 20 20  .  int nOp;     
3c10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
3c20: 6d 62 65 72 20 6f 66 20 69 6e 73 74 72 75 63 74  mber of instruct
3c30: 69 6f 6e 73 20 69 6e 20 74 68 65 20 70 72 6f 67  ions in the prog
3c40: 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 75  ram */.  int nCu
3c50: 72 73 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20  rsor;           
3c60: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c   /* Number of sl
3c70: 6f 74 73 20 69 6e 20 61 70 43 73 72 5b 5d 20 2a  ots in apCsr[] *
3c80: 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20  /.  u32 magic;  
3c90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
3ca0: 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20  agic number for 
3cb0: 73 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20  sanity checking 
3cc0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
3cd0: 73 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  sg;          /* 
3ce0: 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 77 72  Error message wr
3cf0: 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20  itten here */.  
3d00: 56 64 62 65 20 2a 70 50 72 65 76 2c 2a 70 4e 65  Vdbe *pPrev,*pNe
3d10: 78 74 3b 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65  xt;     /* Linke
3d20: 64 20 6c 69 73 74 20 6f 66 20 56 44 42 45 73 20  d list of VDBEs 
3d30: 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 56 64  with the same Vd
3d40: 62 65 2e 64 62 20 2a 2f 0a 20 20 56 64 62 65 43  be.db */.  VdbeC
3d50: 75 72 73 6f 72 20 2a 2a 61 70 43 73 72 3b 20 20  ursor **apCsr;  
3d60: 20 20 20 2f 2a 20 4f 6e 65 20 65 6c 65 6d 65 6e     /* One elemen
3d70: 74 20 6f 66 20 74 68 69 73 20 61 72 72 61 79 20  t of this array 
3d80: 66 6f 72 20 65 61 63 68 20 6f 70 65 6e 20 63 75  for each open cu
3d90: 72 73 6f 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61  rsor */.  Mem *a
3da0: 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Var;            
3db0: 20 20 2f 2a 20 56 61 6c 75 65 73 20 66 6f 72 20    /* Values for 
3dc0: 74 68 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 20  the OP_Variable 
3dd0: 6f 70 63 6f 64 65 2e 20 2a 2f 0a 20 20 63 68 61  opcode. */.  cha
3de0: 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20  r **azVar;      
3df0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
3e00: 76 61 72 69 61 62 6c 65 73 20 2a 2f 0a 20 20 79  variables */.  y
3e10: 6e 56 61 72 20 6e 56 61 72 3b 20 20 20 20 20 20  nVar nVar;      
3e20: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
3e30: 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
3e40: 56 61 72 5b 5d 20 2a 2f 0a 20 20 79 6e 56 61 72  Var[] */.  ynVar
3e50: 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20   nzVar;         
3e60: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
3e70: 65 6e 74 72 69 65 73 20 69 6e 20 61 7a 56 61 72  entries in azVar
3e80: 5b 5d 20 2a 2f 0a 20 20 75 33 32 20 63 61 63 68  [] */.  u32 cach
3e90: 65 43 74 72 3b 20 20 20 20 20 20 20 20 20 20 20  eCtr;           
3ea0: 2f 2a 20 56 64 62 65 43 75 72 73 6f 72 20 72 6f  /* VdbeCursor ro
3eb0: 77 20 63 61 63 68 65 20 67 65 6e 65 72 61 74 69  w cache generati
3ec0: 6f 6e 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  on counter */.  
3ed0: 69 6e 74 20 70 63 3b 20 20 20 20 20 20 20 20 20  int pc;         
3ee0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70          /* The p
3ef0: 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a  rogram counter *
3f00: 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
3f10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
3f20: 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 2a  alue to return *
3f30: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
3f40: 44 45 42 55 47 0a 20 20 69 6e 74 20 72 63 41 70  DEBUG.  int rcAp
3f50: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
3f60: 2f 2a 20 65 72 72 63 6f 64 65 20 73 65 74 20 62  /* errcode set b
3f70: 79 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  y sqlite3_result
3f80: 5f 65 72 72 6f 72 5f 63 6f 64 65 28 29 20 2a 2f  _error_code() */
3f90: 0a 23 65 6e 64 69 66 0a 20 20 75 31 36 20 6e 52  .#endif.  u16 nR
3fa0: 65 73 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20  esColumn;       
3fb0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
3fc0: 6f 6c 75 6d 6e 73 20 69 6e 20 6f 6e 65 20 72 6f  olumns in one ro
3fd0: 77 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  w of the result 
3fe0: 73 65 74 20 2a 2f 0a 20 20 75 38 20 65 72 72 6f  set */.  u8 erro
3ff0: 72 41 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20  rAction;        
4000: 20 2f 2a 20 52 65 63 6f 76 65 72 79 20 61 63 74   /* Recovery act
4010: 69 6f 6e 20 74 6f 20 64 6f 20 69 6e 20 63 61 73  ion to do in cas
4020: 65 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 2a 2f  e of an error */
4030: 0a 20 20 75 38 20 6d 69 6e 57 72 69 74 65 46 69  .  u8 minWriteFi
4040: 6c 65 46 6f 72 6d 61 74 3b 20 20 2f 2a 20 4d 69  leFormat;  /* Mi
4050: 6e 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61  nimum file forma
4060: 74 20 66 6f 72 20 77 72 69 74 61 62 6c 65 20 64  t for writable d
4070: 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 2a 2f  atabase files */
4080: 0a 20 20 62 66 74 20 65 78 70 6c 61 69 6e 3a 32  .  bft explain:2
4090: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
40a0: 75 65 20 69 66 20 45 58 50 4c 41 49 4e 20 70 72  ue if EXPLAIN pr
40b0: 65 73 65 6e 74 20 6f 6e 20 53 51 4c 20 63 6f 6d  esent on SQL com
40c0: 6d 61 6e 64 20 2a 2f 0a 20 20 62 66 74 20 63 68  mand */.  bft ch
40d0: 61 6e 67 65 43 6e 74 4f 6e 3a 31 3b 20 20 20 20  angeCntOn:1;    
40e0: 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 75 70 64    /* True to upd
40f0: 61 74 65 20 74 68 65 20 63 68 61 6e 67 65 2d 63  ate the change-c
4100: 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 62 66 74 20  ounter */.  bft 
4110: 65 78 70 69 72 65 64 3a 31 3b 20 20 20 20 20 20  expired:1;      
4120: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
4130: 68 65 20 56 4d 20 6e 65 65 64 73 20 74 6f 20 62  he VM needs to b
4140: 65 20 72 65 63 6f 6d 70 69 6c 65 64 20 2a 2f 0a  e recompiled */.
4150: 20 20 62 66 74 20 72 75 6e 4f 6e 6c 79 4f 6e 63    bft runOnlyOnc
4160: 65 3a 31 3b 20 20 20 20 20 20 2f 2a 20 41 75 74  e:1;      /* Aut
4170: 6f 6d 61 74 69 63 61 6c 6c 79 20 65 78 70 69 72  omatically expir
4180: 65 20 6f 6e 20 72 65 73 65 74 20 2a 2f 0a 20 20  e on reset */.  
4190: 62 66 74 20 75 73 65 73 53 74 6d 74 4a 6f 75 72  bft usesStmtJour
41a0: 6e 61 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  nal:1;  /* True 
41b0: 69 66 20 75 73 65 73 20 61 20 73 74 61 74 65 6d  if uses a statem
41c0: 65 6e 74 20 6a 6f 75 72 6e 61 6c 20 2a 2f 0a 20  ent journal */. 
41d0: 20 62 66 74 20 72 65 61 64 4f 6e 6c 79 3a 31 3b   bft readOnly:1;
41e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
41f0: 20 66 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20   for statements 
4200: 74 68 61 74 20 64 6f 20 6e 6f 74 20 77 72 69 74  that do not writ
4210: 65 20 2a 2f 0a 20 20 62 66 74 20 62 49 73 52 65  e */.  bft bIsRe
4220: 61 64 65 72 3a 31 3b 20 20 20 20 20 20 20 20 2f  ader:1;        /
4230: 2a 20 54 72 75 65 20 66 6f 72 20 73 74 61 74 65  * True for state
4240: 6d 65 6e 74 73 20 74 68 61 74 20 72 65 61 64 20  ments that read 
4250: 2a 2f 0a 20 20 62 66 74 20 69 73 50 72 65 70 61  */.  bft isPrepa
4260: 72 65 56 32 3a 31 3b 20 20 20 20 20 20 2f 2a 20  reV2:1;      /* 
4270: 54 72 75 65 20 69 66 20 70 72 65 70 61 72 65 64  True if prepared
4280: 20 77 69 74 68 20 70 72 65 70 61 72 65 5f 76 32   with prepare_v2
4290: 28 29 20 2a 2f 0a 20 20 62 66 74 20 64 6f 69 6e  () */.  bft doin
42a0: 67 52 65 72 75 6e 3a 31 3b 20 20 20 20 20 20 20  gRerun:1;       
42b0: 2f 2a 20 54 72 75 65 20 69 66 20 72 65 72 75 6e  /* True if rerun
42c0: 6e 69 6e 67 20 61 66 74 65 72 20 61 6e 20 61 75  ning after an au
42d0: 74 6f 2d 72 65 70 72 65 70 61 72 65 20 2a 2f 0a  to-reprepare */.
42e0: 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20    int nChange;  
42f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
4300: 62 65 72 20 6f 66 20 64 62 20 63 68 61 6e 67 65  ber of db change
4310: 73 20 6d 61 64 65 20 73 69 6e 63 65 20 6c 61 73  s made since las
4320: 74 20 72 65 73 65 74 20 2a 2f 0a 20 20 79 44 62  t reset */.  yDb
4330: 4d 61 73 6b 20 62 74 72 65 65 4d 61 73 6b 3b 20  Mask btreeMask; 
4340: 20 20 20 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20       /* Bitmask 
4350: 6f 66 20 64 62 2d 3e 61 44 62 5b 5d 20 65 6e 74  of db->aDb[] ent
4360: 72 69 65 73 20 72 65 66 65 72 65 6e 63 65 64 20  ries referenced 
4370: 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 6c 6f 63  */.  yDbMask loc
4380: 6b 4d 61 73 6b 3b 20 20 20 20 20 20 20 2f 2a 20  kMask;       /* 
4390: 53 75 62 73 65 74 20 6f 66 20 62 74 72 65 65 4d  Subset of btreeM
43a0: 61 73 6b 20 74 68 61 74 20 72 65 71 75 69 72 65  ask that require
43b0: 73 20 61 20 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  s a lock */.  in
43c0: 74 20 69 53 74 61 74 65 6d 65 6e 74 3b 20 20 20  t iStatement;   
43d0: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 65 6d 65        /* Stateme
43e0: 6e 74 20 6e 75 6d 62 65 72 20 28 6f 72 20 30 20  nt number (or 0 
43f0: 69 66 20 68 61 73 20 6e 6f 74 20 6f 70 65 6e 65  if has not opene
4400: 64 20 73 74 6d 74 29 20 2a 2f 0a 20 20 75 33 32  d stmt) */.  u32
4410: 20 61 43 6f 75 6e 74 65 72 5b 35 5d 3b 20 20 20   aCounter[5];   
4420: 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 73       /* Counters
4430: 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
4440: 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29 20 2a  _stmt_status() *
4450: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
4460: 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20 69 36  _OMIT_TRACE.  i6
4470: 34 20 73 74 61 72 74 54 69 6d 65 3b 20 20 20 20  4 startTime;    
4480: 20 20 20 20 20 20 2f 2a 20 54 69 6d 65 20 77 68        /* Time wh
4490: 65 6e 20 71 75 65 72 79 20 73 74 61 72 74 65 64  en query started
44a0: 20 2d 20 75 73 65 64 20 66 6f 72 20 70 72 6f 66   - used for prof
44b0: 69 6c 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  iling */.#endif.
44c0: 20 20 69 36 34 20 69 43 75 72 72 65 6e 74 54 69    i64 iCurrentTi
44d0: 6d 65 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c  me;       /* Val
44e0: 75 65 20 6f 66 20 6a 75 6c 69 61 6e 64 61 79 28  ue of julianday(
44f0: 27 6e 6f 77 27 29 20 66 6f 72 20 74 68 69 73 20  'now') for this 
4500: 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 69  statement */.  i
4510: 36 34 20 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  64 nFkConstraint
4520: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
4530: 20 6f 66 20 69 6d 6d 2e 20 46 4b 20 63 6f 6e 73   of imm. FK cons
4540: 74 72 61 69 6e 74 73 20 74 68 69 73 20 56 4d 20  traints this VM 
4550: 2a 2f 0a 20 20 69 36 34 20 6e 53 74 6d 74 44 65  */.  i64 nStmtDe
4560: 66 43 6f 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20  fCons;       /* 
4570: 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 2e 20 63  Number of def. c
4580: 6f 6e 73 74 72 61 69 6e 74 73 20 77 68 65 6e 20  onstraints when 
4590: 73 74 6d 74 20 73 74 61 72 74 65 64 20 2a 2f 0a  stmt started */.
45a0: 20 20 69 36 34 20 6e 53 74 6d 74 44 65 66 49 6d    i64 nStmtDefIm
45b0: 6d 43 6f 6e 73 3b 20 20 20 20 2f 2a 20 4e 75 6d  mCons;    /* Num
45c0: 62 65 72 20 6f 66 20 64 65 66 2e 20 69 6d 6d 20  ber of def. imm 
45d0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 68 65 6e  constraints when
45e0: 20 73 74 6d 74 20 73 74 61 72 74 65 64 20 2a 2f   stmt started */
45f0: 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20 20  .  char *zSql;  
4600: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
4610: 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74  xt of the SQL st
4620: 61 74 65 6d 65 6e 74 20 74 68 61 74 20 67 65 6e  atement that gen
4630: 65 72 61 74 65 64 20 74 68 69 73 20 2a 2f 0a 20  erated this */. 
4640: 20 76 6f 69 64 20 2a 70 46 72 65 65 3b 20 20 20   void *pFree;   
4650: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 72 65 65           /* Free
4660: 20 74 68 69 73 20 77 68 65 6e 20 64 65 6c 65 74   this when delet
4670: 69 6e 67 20 74 68 65 20 76 64 62 65 20 2a 2f 0a  ing the vdbe */.
4680: 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
4690: 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 50 61 72  ame;      /* Par
46a0: 65 6e 74 20 66 72 61 6d 65 20 2a 2f 0a 20 20 56  ent frame */.  V
46b0: 64 62 65 46 72 61 6d 65 20 2a 70 44 65 6c 46 72  dbeFrame *pDelFr
46c0: 61 6d 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  ame;   /* List o
46d0: 66 20 66 72 61 6d 65 20 6f 62 6a 65 63 74 73 20  f frame objects 
46e0: 74 6f 20 66 72 65 65 20 6f 6e 20 56 4d 20 72 65  to free on VM re
46f0: 73 65 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 72  set */.  int nFr
4700: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
4710: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 72   /* Number of fr
4720: 61 6d 65 73 20 69 6e 20 70 46 72 61 6d 65 20 6c  ames in pFrame l
4730: 69 73 74 20 2a 2f 0a 20 20 75 33 32 20 65 78 70  ist */.  u32 exp
4740: 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20  mask;           
4750: 20 2f 2a 20 42 69 6e 64 69 6e 67 20 74 6f 20 74   /* Binding to t
4760: 68 65 73 65 20 76 61 72 73 20 69 6e 76 61 6c 69  hese vars invali
4770: 64 61 74 65 73 20 56 4d 20 2a 2f 0a 20 20 53 75  dates VM */.  Su
4780: 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72  bProgram *pProgr
4790: 61 6d 3b 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20  am;   /* Linked 
47a0: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 73 75 62 2d  list of all sub-
47b0: 70 72 6f 67 72 61 6d 73 20 75 73 65 64 20 62 79  programs used by
47c0: 20 56 4d 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e   VM */.  int nOn
47d0: 63 65 46 6c 61 67 3b 20 20 20 20 20 20 20 20 20  ceFlag;         
47e0: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 61 72 72 61   /* Size of arra
47f0: 79 20 61 4f 6e 63 65 46 6c 61 67 5b 5d 20 2a 2f  y aOnceFlag[] */
4800: 0a 20 20 75 38 20 2a 61 4f 6e 63 65 46 6c 61 67  .  u8 *aOnceFlag
4810: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c  ;          /* Fl
4820: 61 67 73 20 66 6f 72 20 4f 50 5f 4f 6e 63 65 20  ags for OP_Once 
4830: 2a 2f 0a 20 20 41 75 78 44 61 74 61 20 2a 70 41  */.  AuxData *pA
4840: 75 78 44 61 74 61 3b 20 20 20 20 20 20 2f 2a 20  uxData;      /* 
4850: 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61  Linked list of a
4860: 75 78 64 61 74 61 20 61 6c 6c 6f 63 61 74 69 6f  uxdata allocatio
4870: 6e 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ns */.#ifdef SQL
4880: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
4890: 53 43 41 4e 53 54 41 54 55 53 0a 20 20 69 36 34  SCANSTATUS.  i64
48a0: 20 2a 61 6e 45 78 65 63 3b 20 20 20 20 20 20 20   *anExec;       
48b0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
48c0: 66 20 74 69 6d 65 73 20 65 61 63 68 20 6f 70 20  f times each op 
48d0: 68 61 73 20 62 65 65 6e 20 65 78 65 63 75 74 65  has been execute
48e0: 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 61 6e  d */.  int nScan
48f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
4900: 2a 20 45 6e 74 72 69 65 73 20 69 6e 20 61 53 63  * Entries in aSc
4910: 61 6e 5b 5d 20 2a 2f 0a 20 20 53 63 61 6e 53 74  an[] */.  ScanSt
4920: 61 74 75 73 20 2a 61 53 63 61 6e 3b 20 20 20 20  atus *aScan;    
4930: 20 20 2f 2a 20 53 63 61 6e 20 64 65 66 69 6e 69    /* Scan defini
4940: 74 69 6f 6e 73 20 66 6f 72 20 73 71 6c 69 74 65  tions for sqlite
4950: 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61 74 75  3_stmt_scanstatu
4960: 73 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  s() */.#endif.};
4970: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
4980: 6f 77 69 6e 67 20 61 72 65 20 61 6c 6c 6f 77 65  owing are allowe
4990: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 56 64 62  d values for Vdb
49a0: 65 2e 6d 61 67 69 63 0a 2a 2f 0a 23 64 65 66 69  e.magic.*/.#defi
49b0: 6e 65 20 56 44 42 45 5f 4d 41 47 49 43 5f 49 4e  ne VDBE_MAGIC_IN
49c0: 49 54 20 20 20 20 20 30 78 32 36 62 63 65 61 61  IT     0x26bceaa
49d0: 35 20 20 20 20 2f 2a 20 42 75 69 6c 64 69 6e 67  5    /* Building
49e0: 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20   a VDBE program 
49f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 56 44 42 45 5f  */.#define VDBE_
4a00: 4d 41 47 49 43 5f 52 55 4e 20 20 20 20 20 20 30  MAGIC_RUN      0
4a10: 78 62 64 66 32 30 64 61 33 20 20 20 20 2f 2a 20  xbdf20da3    /* 
4a20: 56 44 42 45 20 69 73 20 72 65 61 64 79 20 74 6f  VDBE is ready to
4a30: 20 65 78 65 63 75 74 65 20 2a 2f 0a 23 64 65 66   execute */.#def
4a40: 69 6e 65 20 56 44 42 45 5f 4d 41 47 49 43 5f 48  ine VDBE_MAGIC_H
4a50: 41 4c 54 20 20 20 20 20 30 78 35 31 39 63 32 39  ALT     0x519c29
4a60: 37 33 20 20 20 20 2f 2a 20 56 44 42 45 20 68 61  73    /* VDBE ha
4a70: 73 20 63 6f 6d 70 6c 65 74 65 64 20 65 78 65 63  s completed exec
4a80: 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ution */.#define
4a90: 20 56 44 42 45 5f 4d 41 47 49 43 5f 44 45 41 44   VDBE_MAGIC_DEAD
4aa0: 20 20 20 20 20 30 78 62 36 30 36 63 33 63 38 20       0xb606c3c8 
4ab0: 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 68     /* The VDBE h
4ac0: 61 73 20 62 65 65 6e 20 64 65 61 6c 6c 6f 63 61  as been dealloca
4ad0: 74 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 75  ted */../*.** Fu
4ae0: 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65  nction prototype
4af0: 73 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  s.*/.void sqlite
4b00: 33 56 64 62 65 45 72 72 6f 72 28 56 64 62 65 2a  3VdbeError(Vdbe*
4b10: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
4b20: 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
4b30: 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72  e3VdbeFreeCursor
4b40: 28 56 64 62 65 20 2a 2c 20 56 64 62 65 43 75 72  (Vdbe *, VdbeCur
4b50: 73 6f 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  sor*);.void sqli
4b60: 74 65 56 64 62 65 50 6f 70 53 74 61 63 6b 28 56  teVdbePopStack(V
4b70: 64 62 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  dbe*,int);.int s
4b80: 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
4b90: 4d 6f 76 65 74 6f 28 56 64 62 65 43 75 72 73 6f  Moveto(VdbeCurso
4ba0: 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
4bb0: 56 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72  VdbeCursorRestor
4bc0: 65 28 56 64 62 65 43 75 72 73 6f 72 2a 29 3b 0a  e(VdbeCursor*);.
4bd0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
4be0: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
4bf0: 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c  ined(VDBE_PROFIL
4c00: 45 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  E).void sqlite3V
4c10: 64 62 65 50 72 69 6e 74 4f 70 28 46 49 4c 45 2a  dbePrintOp(FILE*
4c20: 2c 20 69 6e 74 2c 20 4f 70 2a 29 3b 0a 23 65 6e  , int, Op*);.#en
4c30: 64 69 66 0a 75 33 32 20 73 71 6c 69 74 65 33 56  dif.u32 sqlite3V
4c40: 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
4c50: 28 75 33 32 29 3b 0a 75 38 20 73 71 6c 69 74 65  (u32);.u8 sqlite
4c60: 33 56 64 62 65 4f 6e 65 42 79 74 65 53 65 72 69  3VdbeOneByteSeri
4c70: 61 6c 54 79 70 65 4c 65 6e 28 75 38 29 3b 0a 75  alTypeLen(u8);.u
4c80: 33 32 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  32 sqlite3VdbeSe
4c90: 72 69 61 6c 54 79 70 65 28 4d 65 6d 2a 2c 20 69  rialType(Mem*, i
4ca0: 6e 74 2c 20 75 33 32 2a 29 3b 0a 75 33 32 20 73  nt, u32*);.u32 s
4cb0: 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
4cc0: 50 75 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61  Put(unsigned cha
4cd0: 72 2a 2c 20 4d 65 6d 2a 2c 20 75 33 32 29 3b 0a  r*, Mem*, u32);.
4ce0: 75 33 32 20 73 71 6c 69 74 65 33 56 64 62 65 53  u32 sqlite3VdbeS
4cf0: 65 72 69 61 6c 47 65 74 28 63 6f 6e 73 74 20 75  erialGet(const u
4d00: 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75  nsigned char*, u
4d10: 33 32 2c 20 4d 65 6d 2a 29 3b 0a 76 6f 69 64 20  32, Mem*);.void 
4d20: 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74  sqlite3VdbeDelet
4d30: 65 41 75 78 44 61 74 61 28 56 64 62 65 2a 2c 20  eAuxData(Vdbe*, 
4d40: 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 69 6e 74 20  int, int);..int 
4d50: 73 71 6c 69 74 65 32 42 74 72 65 65 4b 65 79 43  sqlite2BtreeKeyC
4d60: 6f 6d 70 61 72 65 28 42 74 43 75 72 73 6f 72 20  ompare(BtCursor 
4d70: 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c  *, const void *,
4d80: 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 20 2a   int, int, int *
4d90: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
4da0: 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28  beIdxKeyCompare(
4db0: 73 71 6c 69 74 65 33 2a 2c 56 64 62 65 43 75 72  sqlite3*,VdbeCur
4dc0: 73 6f 72 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63  sor*,UnpackedRec
4dd0: 6f 72 64 2a 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20  ord*,int*);.int 
4de0: 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f  sqlite3VdbeIdxRo
4df0: 77 69 64 28 73 71 6c 69 74 65 33 2a 2c 20 42 74  wid(sqlite3*, Bt
4e00: 43 75 72 73 6f 72 2a 2c 20 69 36 34 2a 29 3b 0a  Cursor*, i64*);.
4e10: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45  int sqlite3VdbeE
4e20: 78 65 63 28 56 64 62 65 2a 29 3b 0a 69 6e 74 20  xec(Vdbe*);.int 
4e30: 73 71 6c 69 74 65 33 56 64 62 65 4c 69 73 74 28  sqlite3VdbeList(
4e40: 56 64 62 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Vdbe*);.int sqli
4e50: 74 65 33 56 64 62 65 48 61 6c 74 28 56 64 62 65  te3VdbeHalt(Vdbe
4e60: 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
4e70: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
4e80: 67 28 4d 65 6d 20 2a 2c 20 69 6e 74 29 3b 0a 69  g(Mem *, int);.i
4e90: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  nt sqlite3VdbeMe
4ea0: 6d 54 6f 6f 42 69 67 28 4d 65 6d 2a 29 3b 0a 69  mTooBig(Mem*);.i
4eb0: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  nt sqlite3VdbeMe
4ec0: 6d 43 6f 70 79 28 4d 65 6d 2a 2c 20 63 6f 6e 73  mCopy(Mem*, cons
4ed0: 74 20 4d 65 6d 2a 29 3b 0a 76 6f 69 64 20 73 71  t Mem*);.void sq
4ee0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
4ef0: 6c 6f 77 43 6f 70 79 28 4d 65 6d 2a 2c 20 63 6f  lowCopy(Mem*, co
4f00: 6e 73 74 20 4d 65 6d 2a 2c 20 69 6e 74 29 3b 0a  nst Mem*, int);.
4f10: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
4f20: 4d 65 6d 4d 6f 76 65 28 4d 65 6d 2a 2c 20 4d 65  MemMove(Mem*, Me
4f30: 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  m*);.int sqlite3
4f40: 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e  VdbeMemNulTermin
4f50: 61 74 65 28 4d 65 6d 2a 29 3b 0a 69 6e 74 20 73  ate(Mem*);.int s
4f60: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
4f70: 53 74 72 28 4d 65 6d 2a 2c 20 63 6f 6e 73 74 20  Str(Mem*, const 
4f80: 63 68 61 72 2a 2c 20 69 6e 74 2c 20 75 38 2c 20  char*, int, u8, 
4f90: 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b  void(*)(void*));
4fa0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
4fb0: 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 4d 65 6d  eMemSetInt64(Mem
4fc0: 2a 2c 20 69 36 34 29 3b 0a 23 69 66 64 65 66 20  *, i64);.#ifdef 
4fd0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
4fe0: 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66  TING_POINT.# def
4ff0: 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ine sqlite3VdbeM
5000: 65 6d 53 65 74 44 6f 75 62 6c 65 20 73 71 6c 69  emSetDouble sqli
5010: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
5020: 36 34 0a 23 65 6c 73 65 0a 20 20 76 6f 69 64 20  64.#else.  void 
5030: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
5040: 74 44 6f 75 62 6c 65 28 4d 65 6d 2a 2c 20 64 6f  tDouble(Mem*, do
5050: 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  uble);.#endif.vo
5060: 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  id sqlite3VdbeMe
5070: 6d 49 6e 69 74 28 4d 65 6d 2a 2c 73 71 6c 69 74  mInit(Mem*,sqlit
5080: 65 33 2a 2c 75 31 36 29 3b 0a 76 6f 69 64 20 73  e3*,u16);.void s
5090: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
50a0: 4e 75 6c 6c 28 4d 65 6d 2a 29 3b 0a 76 6f 69 64  Null(Mem*);.void
50b0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
50c0: 65 74 5a 65 72 6f 42 6c 6f 62 28 4d 65 6d 2a 2c  etZeroBlob(Mem*,
50d0: 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
50e0: 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53  e3VdbeMemSetRowS
50f0: 65 74 28 4d 65 6d 2a 29 3b 0a 69 6e 74 20 73 71  et(Mem*);.int sq
5100: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65  lite3VdbeMemMake
5110: 57 72 69 74 65 61 62 6c 65 28 4d 65 6d 2a 29 3b  Writeable(Mem*);
5120: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
5130: 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 4d 65 6d  MemStringify(Mem
5140: 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 69 36 34 20  *, u8, u8);.i64 
5150: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
5160: 6c 75 65 28 4d 65 6d 2a 29 3b 0a 69 6e 74 20 73  lue(Mem*);.int s
5170: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
5180: 65 67 65 72 69 66 79 28 4d 65 6d 2a 29 3b 0a 64  egerify(Mem*);.d
5190: 6f 75 62 6c 65 20 73 71 6c 69 74 65 33 56 64 62  ouble sqlite3Vdb
51a0: 65 52 65 61 6c 56 61 6c 75 65 28 4d 65 6d 2a 29  eRealValue(Mem*)
51b0: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
51c0: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
51d0: 79 28 4d 65 6d 2a 29 3b 0a 69 6e 74 20 73 71 6c  y(Mem*);.int sql
51e0: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
51f0: 66 79 28 4d 65 6d 2a 29 3b 0a 69 6e 74 20 73 71  fy(Mem*);.int sq
5200: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65  lite3VdbeMemNume
5210: 72 69 66 79 28 4d 65 6d 2a 29 3b 0a 76 6f 69 64  rify(Mem*);.void
5220: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
5230: 61 73 74 28 4d 65 6d 2a 2c 75 38 2c 75 38 29 3b  ast(Mem*,u8,u8);
5240: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
5250: 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 42 74 43  MemFromBtree(BtC
5260: 75 72 73 6f 72 2a 2c 75 33 32 2c 75 33 32 2c 69  ursor*,u32,u32,i
5270: 6e 74 2c 4d 65 6d 2a 29 3b 0a 76 6f 69 64 20 73  nt,Mem*);.void s
5280: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
5290: 65 61 73 65 28 4d 65 6d 20 2a 70 29 3b 0a 23 64  ease(Mem *p);.#d
52a0: 65 66 69 6e 65 20 56 64 62 65 4d 65 6d 44 79 6e  efine VdbeMemDyn
52b0: 61 6d 69 63 28 58 29 20 20 5c 0a 20 20 28 28 28  amic(X)  \.  (((
52c0: 58 29 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 41  X)->flags&(MEM_A
52d0: 67 67 7c 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 52  gg|MEM_Dyn|MEM_R
52e0: 6f 77 53 65 74 7c 4d 45 4d 5f 46 72 61 6d 65 29  owSet|MEM_Frame)
52f0: 29 21 3d 30 29 0a 69 6e 74 20 73 71 6c 69 74 65  )!=0).int sqlite
5300: 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65  3VdbeMemFinalize
5310: 28 4d 65 6d 2a 2c 20 46 75 6e 63 44 65 66 2a 29  (Mem*, FuncDef*)
5320: 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ;.const char *sq
5330: 6c 69 74 65 33 4f 70 63 6f 64 65 4e 61 6d 65 28  lite3OpcodeName(
5340: 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
5350: 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 4d 65 6d  3VdbeMemGrow(Mem
5360: 20 2a 70 4d 65 6d 2c 20 69 6e 74 20 6e 2c 20 69   *pMem, int n, i
5370: 6e 74 20 70 72 65 73 65 72 76 65 29 3b 0a 69 6e  nt preserve);.in
5380: 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  t sqlite3VdbeMem
5390: 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 4d  ClearAndResize(M
53a0: 65 6d 20 2a 70 4d 65 6d 2c 20 69 6e 74 20 6e 29  em *pMem, int n)
53b0: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  ;.int sqlite3Vdb
53c0: 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28  eCloseStatement(
53d0: 56 64 62 65 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Vdbe *, int);.vo
53e0: 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 46 72  id sqlite3VdbeFr
53f0: 61 6d 65 44 65 6c 65 74 65 28 56 64 62 65 46 72  ameDelete(VdbeFr
5400: 61 6d 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ame*);.int sqlit
5410: 65 33 56 64 62 65 46 72 61 6d 65 52 65 73 74 6f  e3VdbeFrameResto
5420: 72 65 28 56 64 62 65 46 72 61 6d 65 20 2a 29 3b  re(VdbeFrame *);
5430: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
5440: 54 72 61 6e 73 66 65 72 45 72 72 6f 72 28 56 64  TransferError(Vd
5450: 62 65 20 2a 70 29 3b 0a 0a 69 6e 74 20 73 71 6c  be *p);..int sql
5460: 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e  ite3VdbeSorterIn
5470: 69 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  it(sqlite3 *, in
5480: 74 2c 20 56 64 62 65 43 75 72 73 6f 72 20 2a 29  t, VdbeCursor *)
5490: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
54a0: 62 65 53 6f 72 74 65 72 52 65 73 65 74 28 73 71  beSorterReset(sq
54b0: 6c 69 74 65 33 20 2a 2c 20 56 64 62 65 53 6f 72  lite3 *, VdbeSor
54c0: 74 65 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ter *);.void sql
54d0: 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 43 6c  ite3VdbeSorterCl
54e0: 6f 73 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 56  ose(sqlite3 *, V
54f0: 64 62 65 43 75 72 73 6f 72 20 2a 29 3b 0a 69 6e  dbeCursor *);.in
5500: 74 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  t sqlite3VdbeSor
5510: 74 65 72 52 6f 77 6b 65 79 28 63 6f 6e 73 74 20  terRowkey(const 
5520: 56 64 62 65 43 75 72 73 6f 72 20 2a 2c 20 4d 65  VdbeCursor *, Me
5530: 6d 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  m *);.int sqlite
5540: 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28  3VdbeSorterNext(
5550: 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
5560: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 2c 20 69   VdbeCursor *, i
5570: 6e 74 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nt *);.int sqlit
5580: 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69  e3VdbeSorterRewi
5590: 6e 64 28 63 6f 6e 73 74 20 56 64 62 65 43 75 72  nd(const VdbeCur
55a0: 73 6f 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 69  sor *, int *);.i
55b0: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f  nt sqlite3VdbeSo
55c0: 72 74 65 72 57 72 69 74 65 28 63 6f 6e 73 74 20  rterWrite(const 
55d0: 56 64 62 65 43 75 72 73 6f 72 20 2a 2c 20 4d 65  VdbeCursor *, Me
55e0: 6d 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  m *);.int sqlite
55f0: 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61  3VdbeSorterCompa
5600: 72 65 28 63 6f 6e 73 74 20 56 64 62 65 43 75 72  re(const VdbeCur
5610: 73 6f 72 20 2a 2c 20 4d 65 6d 20 2a 2c 20 69 6e  sor *, Mem *, in
5620: 74 2c 20 69 6e 74 20 2a 29 3b 0a 0a 23 69 66 20  t, int *);..#if 
5630: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
5640: 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
5650: 45 29 20 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  E) .  void sqlit
5660: 65 33 56 64 62 65 45 6e 74 65 72 28 56 64 62 65  e3VdbeEnter(Vdbe
5670: 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
5680: 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e  ne sqlite3VdbeEn
5690: 74 65 72 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23  ter(X).#endif..#
56a0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
56b0: 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
56c0: 41 43 48 45 29 20 26 26 20 53 51 4c 49 54 45 5f  ACHE) && SQLITE_
56d0: 54 48 52 45 41 44 53 41 46 45 3e 30 0a 20 20 76  THREADSAFE>0.  v
56e0: 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4c  oid sqlite3VdbeL
56f0: 65 61 76 65 28 56 64 62 65 2a 29 3b 0a 23 65 6c  eave(Vdbe*);.#el
5700: 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
5710: 74 65 33 56 64 62 65 4c 65 61 76 65 28 58 29 0a  te3VdbeLeave(X).
5720: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
5730: 51 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f 69 64  QLITE_DEBUG.void
5740: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41   sqlite3VdbeMemA
5750: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 56 64 62  boutToChange(Vdb
5760: 65 2a 2c 4d 65 6d 2a 29 3b 0a 69 6e 74 20 73 71  e*,Mem*);.int sq
5770: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
5780: 6d 49 6e 76 61 72 69 61 6e 74 73 28 4d 65 6d 2a  mInvariants(Mem*
5790: 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  );.#endif..#ifnd
57a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
57b0: 4f 52 45 49 47 4e 5f 4b 45 59 0a 69 6e 74 20 73  OREIGN_KEY.int s
57c0: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
57d0: 6b 28 56 64 62 65 20 2a 2c 20 69 6e 74 29 3b 0a  k(Vdbe *, int);.
57e0: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
57f0: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
5800: 6b 28 70 2c 69 29 20 30 0a 23 65 6e 64 69 66 0a  k(p,i) 0.#endif.
5810: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
5820: 4d 65 6d 54 72 61 6e 73 6c 61 74 65 28 4d 65 6d  MemTranslate(Mem
5830: 2a 2c 20 75 38 29 3b 0a 23 69 66 64 65 66 20 53  *, u8);.#ifdef S
5840: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f  QLITE_DEBUG.  vo
5850: 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 50 72  id sqlite3VdbePr
5860: 69 6e 74 53 71 6c 28 56 64 62 65 2a 29 3b 0a 20  intSql(Vdbe*);. 
5870: 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62   void sqlite3Vdb
5880: 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28  eMemPrettyPrint(
5890: 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72 20  Mem *pMem, char 
58a0: 2a 7a 42 75 66 29 3b 0a 23 65 6e 64 69 66 0a 69  *zBuf);.#endif.i
58b0: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  nt sqlite3VdbeMe
58c0: 6d 48 61 6e 64 6c 65 42 6f 6d 28 4d 65 6d 20 2a  mHandleBom(Mem *
58d0: 70 4d 65 6d 29 3b 0a 0a 23 69 66 6e 64 65 66 20  pMem);..#ifndef 
58e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 43 52  SQLITE_OMIT_INCR
58f0: 42 4c 4f 42 0a 20 20 69 6e 74 20 73 71 6c 69 74  BLOB.  int sqlit
5900: 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42  e3VdbeMemExpandB
5910: 6c 6f 62 28 4d 65 6d 20 2a 29 3b 0a 20 20 23 64  lob(Mem *);.  #d
5920: 65 66 69 6e 65 20 45 78 70 61 6e 64 42 6c 6f 62  efine ExpandBlob
5930: 28 50 29 20 28 28 28 50 29 2d 3e 66 6c 61 67 73  (P) (((P)->flags
5940: 26 4d 45 4d 5f 5a 65 72 6f 29 3f 73 71 6c 69 74  &MEM_Zero)?sqlit
5950: 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42  e3VdbeMemExpandB
5960: 6c 6f 62 28 50 29 3a 30 29 0a 23 65 6c 73 65 0a  lob(P):0).#else.
5970: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
5980: 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
5990: 6f 62 28 78 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  ob(x) SQLITE_OK.
59a0: 20 20 23 64 65 66 69 6e 65 20 45 78 70 61 6e 64    #define Expand
59b0: 42 6c 6f 62 28 50 29 20 53 51 4c 49 54 45 5f 4f  Blob(P) SQLITE_O
59c0: 4b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66  K.#endif..#endif
59d0: 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 5f 56 44   /* !defined(_VD
59e0: 42 45 49 4e 54 5f 48 5f 29 20 2a 2f 0a           BEINT_H_) */.