/ Hex Artifact Content
Login

Artifact eab39bc209b267271bc4afbcf4991d6c229bae9a:


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 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 63 6f 6e  ../*.** When con
02c0: 76 65 72 74 69 6e 67 20 66 72 6f 6d 20 74 68 65  verting from the
02d0: 20 6e 61 74 69 76 65 20 66 6f 72 6d 61 74 20 74   native format t
02e0: 6f 20 74 68 65 20 6b 65 79 20 66 6f 72 6d 61 74  o the key format
02f0: 20 61 6e 64 20 62 61 63 6b 0a 2a 2a 20 61 67 61   and back.** aga
0300: 69 6e 2c 20 69 6e 20 61 64 64 69 74 69 6f 6e 20  in, in addition 
0310: 74 6f 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20  to changing the 
0320: 62 79 74 65 20 6f 72 64 65 72 20 77 65 20 69 6e  byte order we in
0330: 76 65 72 74 20 74 68 65 20 68 69 67 68 2d 6f 72  vert the high-or
0340: 64 65 72 0a 2a 2a 20 62 69 74 20 6f 66 20 74 68  der.** bit of th
0350: 65 20 6d 6f 73 74 20 73 69 67 6e 69 66 69 63 61  e most significa
0360: 6e 74 20 62 79 74 65 2e 20 20 54 68 69 73 20 63  nt byte.  This c
0370: 61 75 73 65 73 20 6e 65 67 61 74 69 76 65 20 6e  auses negative n
0380: 75 6d 62 65 72 73 20 74 6f 0a 2a 2a 20 73 6f 72  umbers to.** sor
0390: 74 20 62 65 66 6f 72 65 20 70 6f 73 69 74 69 76  t before positiv
03a0: 65 20 6e 75 6d 62 65 72 73 20 69 6e 20 74 68 65  e numbers in the
03b0: 20 6d 65 6d 63 6d 70 28 29 20 66 75 6e 63 74 69   memcmp() functi
03c0: 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6b  on..*/.#define k
03d0: 65 79 54 6f 49 6e 74 28 58 29 20 20 20 28 73 71  eyToInt(X)   (sq
03e0: 6c 69 74 65 56 64 62 65 42 79 74 65 53 77 61 70  liteVdbeByteSwap
03f0: 28 58 29 20 5e 20 30 78 38 30 30 30 30 30 30 30  (X) ^ 0x80000000
0400: 29 0a 23 64 65 66 69 6e 65 20 69 6e 74 54 6f 4b  ).#define intToK
0410: 65 79 28 58 29 20 20 20 28 73 71 6c 69 74 65 56  ey(X)   (sqliteV
0420: 64 62 65 42 79 74 65 53 77 61 70 28 28 58 29 20  dbeByteSwap((X) 
0430: 5e 20 30 78 38 30 30 30 30 30 30 30 29 29 0a 0a  ^ 0x80000000))..
0440: 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 6b 65 66 69  /*.** The makefi
0450: 6c 65 20 73 63 61 6e 73 20 74 68 69 73 20 73 6f  le scans this so
0460: 75 72 63 65 20 66 69 6c 65 20 61 6e 64 20 63 72  urce file and cr
0470: 65 61 74 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77  eates the follow
0480: 69 6e 67 0a 2a 2a 20 61 72 72 61 79 20 6f 66 20  ing.** array of 
0490: 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73  string constants
04a0: 20 77 68 69 63 68 20 61 72 65 20 74 68 65 20 6e   which are the n
04b0: 61 6d 65 73 20 6f 66 20 61 6c 6c 20 56 44 42 45  ames of all VDBE
04c0: 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 69   opcodes..** Thi
04d0: 73 20 61 72 72 61 79 20 69 73 20 64 65 66 69 6e  s array is defin
04e0: 65 64 20 69 6e 20 61 20 73 65 70 61 72 61 74 65  ed in a separate
04f0: 20 73 6f 75 72 63 65 20 63 6f 64 65 20 66 69 6c   source code fil
0500: 65 20 6e 61 6d 65 64 20 6f 70 63 6f 64 65 2e 63  e named opcode.c
0510: 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 75 74  .** which is aut
0520: 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72  omatically gener
0530: 61 74 65 64 20 62 79 20 74 68 65 20 6d 61 6b 65  ated by the make
0540: 66 69 6c 65 2e 0a 2a 2f 0a 65 78 74 65 72 6e 20  file..*/.extern 
0550: 63 68 61 72 20 2a 73 71 6c 69 74 65 4f 70 63 6f  char *sqliteOpco
0560: 64 65 4e 61 6d 65 73 5b 5d 3b 0a 0a 2f 2a 0a 2a  deNames[];../*.*
0570: 2a 20 53 51 4c 20 69 73 20 74 72 61 6e 73 6c 61  * SQL is transla
0580: 74 65 64 20 69 6e 74 6f 20 61 20 73 65 71 75 65  ted into a seque
0590: 6e 63 65 20 6f 66 20 69 6e 73 74 72 75 63 74 69  nce of instructi
05a0: 6f 6e 73 20 74 6f 20 62 65 0a 2a 2a 20 65 78 65  ons to be.** exe
05b0: 63 75 74 65 64 20 62 79 20 61 20 76 69 72 74 75  cuted by a virtu
05c0: 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 45 61 63  al machine.  Eac
05d0: 68 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  h instruction is
05e0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
05f0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
0600: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 74   structure..*/.t
0610: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 64  ypedef struct Vd
0620: 62 65 4f 70 20 4f 70 3b 0a 0a 2f 2a 0a 2a 2a 20  beOp Op;../*.** 
0630: 42 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 73 0a 2a  Boolean values.*
0640: 2f 0a 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e  /.typedef unsign
0650: 65 64 20 63 68 61 72 20 42 6f 6f 6c 3b 0a 0a 2f  ed char Bool;../
0660: 2a 0a 2a 2a 20 41 20 63 75 72 73 6f 72 20 69 73  *.** A cursor is
0670: 20 61 20 70 6f 69 6e 74 65 72 20 69 6e 74 6f 20   a pointer into 
0680: 61 20 73 69 6e 67 6c 65 20 42 54 72 65 65 20 77  a single BTree w
0690: 69 74 68 69 6e 20 61 20 64 61 74 61 62 61 73 65  ithin a database
06a0: 20 66 69 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75   file..** The cu
06b0: 72 73 6f 72 20 63 61 6e 20 73 65 65 6b 20 74 6f  rsor can seek to
06c0: 20 61 20 42 54 72 65 65 20 65 6e 74 72 79 20 77   a BTree entry w
06d0: 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72  ith a particular
06e0: 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 6c 6f 6f 70   key, or.** loop
06f0: 20 6f 76 65 72 20 61 6c 6c 20 65 6e 74 72 69 65   over all entrie
0700: 73 20 6f 66 20 74 68 65 20 42 74 72 65 65 2e 20  s of the Btree. 
0710: 20 59 6f 75 20 63 61 6e 20 61 6c 73 6f 20 69 6e   You can also in
0720: 73 65 72 74 20 6e 65 77 20 42 54 72 65 65 0a 2a  sert new BTree.*
0730: 2a 20 65 6e 74 72 69 65 73 20 6f 72 20 72 65 74  * entries or ret
0740: 72 69 65 76 65 20 74 68 65 20 6b 65 79 20 6f 72  rieve the key or
0750: 20 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20 65   data from the e
0760: 6e 74 72 79 20 74 68 61 74 20 74 68 65 20 63 75  ntry that the cu
0770: 72 73 6f 72 0a 2a 2a 20 69 73 20 63 75 72 72 65  rsor.** is curre
0780: 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
0790: 2e 0a 2a 2a 20 0a 2a 2a 20 45 76 65 72 79 20 63  ..** .** Every c
07a0: 75 72 73 6f 72 20 74 68 61 74 20 74 68 65 20 76  ursor that the v
07b0: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 68  irtual machine h
07c0: 61 73 20 6f 70 65 6e 20 69 73 20 72 65 70 72 65  as open is repre
07d0: 73 65 6e 74 65 64 20 62 79 20 61 6e 0a 2a 2a 20  sented by an.** 
07e0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
07f0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
0800: 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ure..**.** If th
0810: 65 20 43 75 72 73 6f 72 2e 69 73 54 72 69 67 67  e Cursor.isTrigg
0820: 65 72 52 6f 77 20 66 6c 61 67 20 69 73 20 73 65  erRow flag is se
0830: 74 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  t it means that 
0840: 74 68 69 73 20 63 75 72 73 6f 72 20 69 73 0a 2a  this cursor is.*
0850: 2a 20 72 65 61 6c 6c 79 20 61 20 73 69 6e 67 6c  * really a singl
0860: 65 20 72 6f 77 20 74 68 61 74 20 72 65 70 72 65  e row that repre
0870: 73 65 6e 74 73 20 74 68 65 20 4e 45 57 20 6f 72  sents the NEW or
0880: 20 4f 4c 44 20 70 73 65 75 64 6f 2d 74 61 62 6c   OLD pseudo-tabl
0890: 65 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 72  e of.** a row tr
08a0: 69 67 67 65 72 2e 20 20 54 68 65 20 64 61 74 61  igger.  The data
08b0: 20 66 6f 72 20 74 68 65 20 72 6f 77 20 69 73 20   for the row is 
08c0: 73 74 6f 72 65 64 20 69 6e 20 43 75 72 73 6f 72  stored in Cursor
08d0: 2e 70 44 61 74 61 20 61 6e 64 0a 2a 2a 20 74 68  .pData and.** th
08e0: 65 20 72 6f 77 69 64 20 69 73 20 69 6e 20 43 75  e rowid is in Cu
08f0: 72 73 6f 72 2e 69 4b 65 79 2e 0a 2a 2f 0a 73 74  rsor.iKey..*/.st
0900: 72 75 63 74 20 43 75 72 73 6f 72 20 7b 0a 20 20  ruct Cursor {.  
0910: 42 74 43 75 72 73 6f 72 20 2a 70 43 75 72 73 6f  BtCursor *pCurso
0920: 72 3b 20 20 20 20 2f 2a 20 54 68 65 20 63 75 72  r;    /* The cur
0930: 73 6f 72 20 73 74 72 75 63 74 75 72 65 20 6f 66  sor structure of
0940: 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a   the backend */.
0950: 20 20 69 6e 74 20 6c 61 73 74 52 65 63 6e 6f 3b    int lastRecno;
0960: 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
0970: 72 65 63 6e 6f 20 66 72 6f 6d 20 61 20 4e 65 78  recno from a Nex
0980: 74 20 6f 72 20 4e 65 78 74 49 64 78 20 6f 70 65  t or NextIdx ope
0990: 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  ration */.  int 
09a0: 6e 65 78 74 52 6f 77 69 64 3b 20 20 20 20 20 20  nextRowid;      
09b0: 20 20 2f 2a 20 4e 65 78 74 20 72 6f 77 69 64 20    /* Next rowid 
09c0: 72 65 74 75 72 6e 65 64 20 62 79 20 4f 50 5f 4e  returned by OP_N
09d0: 65 77 52 6f 77 69 64 20 2a 2f 0a 20 20 42 6f 6f  ewRowid */.  Boo
09e0: 6c 20 72 65 63 6e 6f 49 73 56 61 6c 69 64 3b 20  l recnoIsValid; 
09f0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6c 61     /* True if la
0a00: 73 74 52 65 63 6e 6f 20 69 73 20 76 61 6c 69 64  stRecno is valid
0a10: 20 2a 2f 0a 20 20 42 6f 6f 6c 20 6b 65 79 41 73   */.  Bool keyAs
0a20: 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 54  Data;       /* T
0a30: 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 63 6f 6d  he OP_Column com
0a40: 6d 61 6e 64 20 77 6f 72 6b 73 20 6f 6e 20 6b 65  mand works on ke
0a50: 79 20 69 6e 73 74 65 61 64 20 6f 66 20 64 61 74  y instead of dat
0a60: 61 20 2a 2f 0a 20 20 42 6f 6f 6c 20 61 74 46 69  a */.  Bool atFi
0a70: 72 73 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  rst;         /* 
0a80: 54 72 75 65 20 69 66 20 70 6f 69 6e 74 69 6e 67  True if pointing
0a90: 20 74 6f 20 66 69 72 73 74 20 65 6e 74 72 79 20   to first entry 
0aa0: 2a 2f 0a 20 20 42 6f 6f 6c 20 75 73 65 52 61 6e  */.  Bool useRan
0ab0: 64 6f 6d 52 6f 77 69 64 3b 20 20 2f 2a 20 47 65  domRowid;  /* Ge
0ac0: 6e 65 72 61 74 65 20 6e 65 77 20 72 65 63 6f 72  nerate new recor
0ad0: 64 20 6e 75 6d 62 65 72 73 20 73 65 6d 69 2d 72  d numbers semi-r
0ae0: 61 6e 64 6f 6d 6c 79 20 2a 2f 0a 20 20 42 6f 6f  andomly */.  Boo
0af0: 6c 20 6e 75 6c 6c 52 6f 77 3b 20 20 20 20 20 20  l nullRow;      
0b00: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 6f     /* True if po
0b10: 69 6e 74 69 6e 67 20 74 6f 20 61 20 72 6f 77 20  inting to a row 
0b20: 77 69 74 68 20 6e 6f 20 64 61 74 61 20 2a 2f 0a  with no data */.
0b30: 20 20 42 6f 6f 6c 20 6e 65 78 74 52 6f 77 69 64    Bool nextRowid
0b40: 56 61 6c 69 64 3b 20 20 2f 2a 20 54 72 75 65 20  Valid;  /* True 
0b50: 69 66 20 74 68 65 20 6e 65 78 74 52 6f 77 69 64  if the nextRowid
0b60: 20 66 69 65 6c 64 20 69 73 20 76 61 6c 69 64 20   field is valid 
0b70: 2a 2f 0a 20 20 42 6f 6f 6c 20 70 73 65 75 64 6f  */.  Bool pseudo
0b80: 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 54 68  Table;     /* Th
0b90: 69 73 20 69 73 20 61 20 4e 45 57 20 6f 72 20 4f  is is a NEW or O
0ba0: 4c 44 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 73  LD pseudo-tables
0bb0: 20 6f 66 20 61 20 74 72 69 67 67 65 72 20 2a 2f   of a trigger */
0bc0: 0a 20 20 42 6f 6f 6c 20 64 65 66 65 72 72 65 64  .  Bool deferred
0bd0: 4d 6f 76 65 74 6f 3b 20 20 2f 2a 20 41 20 63 61  Moveto;  /* A ca
0be0: 6c 6c 20 74 6f 20 73 71 6c 69 74 65 42 74 72 65  ll to sqliteBtre
0bf0: 65 4d 6f 76 65 74 6f 28 29 20 69 73 20 6e 65 65  eMoveto() is nee
0c00: 64 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6d 6f 76  ded */.  int mov
0c10: 65 74 6f 54 61 72 67 65 74 3b 20 20 20 20 20 2f  etoTarget;     /
0c20: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
0c30: 65 20 64 65 66 65 72 72 65 64 20 73 71 6c 69 74  e deferred sqlit
0c40: 65 42 74 72 65 65 4d 6f 76 65 74 6f 28 29 20 2a  eBtreeMoveto() *
0c50: 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20  /.  Btree *pBt; 
0c60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65 70            /* Sep
0c70: 61 72 61 74 65 20 66 69 6c 65 20 68 6f 6c 64 69  arate file holdi
0c80: 6e 67 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ng temporary tab
0c90: 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 61 74  le */.  int nDat
0ca0: 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  a;            /*
0cb0: 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
0cc0: 20 69 6e 20 70 44 61 74 61 20 2a 2f 0a 20 20 63   in pData */.  c
0cd0: 68 61 72 20 2a 70 44 61 74 61 3b 20 20 20 20 20  har *pData;     
0ce0: 20 20 20 20 20 2f 2a 20 44 61 74 61 20 66 6f 72       /* Data for
0cf0: 20 61 20 4e 45 57 20 6f 72 20 4f 4c 44 20 70 73   a NEW or OLD ps
0d00: 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20  eudo-table */.  
0d10: 69 6e 74 20 69 4b 65 79 3b 20 20 20 20 20 20 20  int iKey;       
0d20: 20 20 20 20 20 20 2f 2a 20 4b 65 79 20 66 6f 72        /* Key for
0d30: 20 74 68 65 20 4e 45 57 20 6f 72 20 4f 4c 44 20   the NEW or OLD 
0d40: 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 72 6f 77  pseudo-table row
0d50: 20 2a 2f 0a 7d 3b 0a 74 79 70 65 64 65 66 20 73   */.};.typedef s
0d60: 74 72 75 63 74 20 43 75 72 73 6f 72 20 43 75 72  truct Cursor Cur
0d70: 73 6f 72 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f  sor;../*.** A so
0d80: 72 74 65 72 20 62 75 69 6c 64 73 20 61 20 6c 69  rter builds a li
0d90: 73 74 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 74  st of elements t
0da0: 6f 20 62 65 20 73 6f 72 74 65 64 2e 20 20 45 61  o be sorted.  Ea
0db0: 63 68 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a  ch element of.**
0dc0: 20 74 68 65 20 6c 69 73 74 20 69 73 20 61 6e 20   the list is an 
0dd0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
0de0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
0df0: 75 72 65 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ure..*/.typedef 
0e00: 73 74 72 75 63 74 20 53 6f 72 74 65 72 20 53 6f  struct Sorter So
0e10: 72 74 65 72 3b 0a 73 74 72 75 63 74 20 53 6f 72  rter;.struct Sor
0e20: 74 65 72 20 7b 0a 20 20 69 6e 74 20 6e 4b 65 79  ter {.  int nKey
0e30: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
0e40: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
0e50: 6e 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 63  n the key */.  c
0e60: 68 61 72 20 2a 7a 4b 65 79 3b 20 20 20 20 20 20  har *zKey;      
0e70: 20 20 20 2f 2a 20 54 68 65 20 6b 65 79 20 62 79     /* The key by
0e80: 20 77 68 69 63 68 20 77 65 20 77 69 6c 6c 20 73   which we will s
0e90: 6f 72 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 61  ort */.  int nDa
0ea0: 74 61 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ta;          /* 
0eb0: 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
0ec0: 69 6e 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20  in the data */. 
0ed0: 20 63 68 61 72 20 2a 70 44 61 74 61 3b 20 20 20   char *pData;   
0ee0: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
0ef0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
0f00: 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 53   this key */.  S
0f10: 6f 72 74 65 72 20 2a 70 4e 65 78 74 3b 20 20 20  orter *pNext;   
0f20: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68     /* Next in th
0f30: 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
0f40: 20 0a 2a 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62   .** Number of b
0f50: 75 63 6b 65 74 73 20 75 73 65 64 20 66 6f 72 20  uckets used for 
0f60: 6d 65 72 67 65 2d 73 6f 72 74 2e 20 20 0a 2a 2f  merge-sort.  .*/
0f70: 0a 23 64 65 66 69 6e 65 20 4e 53 4f 52 54 20 33  .#define NSORT 3
0f80: 30 0a 0a 2f 2a 0a 2a 2a 20 4e 75 6d 62 65 72 20  0../*.** Number 
0f90: 6f 66 20 62 79 74 65 73 20 6f 66 20 73 74 72 69  of bytes of stri
0fa0: 6e 67 20 73 74 6f 72 61 67 65 20 73 70 61 63 65  ng storage space
0fb0: 20 61 76 61 69 6c 61 62 6c 65 20 74 6f 20 65 61   available to ea
0fc0: 63 68 20 73 74 61 63 6b 0a 2a 2a 20 6c 61 79 65  ch stack.** laye
0fd0: 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  r without having
0fe0: 20 74 6f 20 6d 61 6c 6c 6f 63 2e 20 20 4e 42 46   to malloc.  NBF
0ff0: 53 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20 4e  S is short for N
1000: 75 6d 62 65 72 20 6f 66 20 42 79 74 65 73 0a 2a  umber of Bytes.*
1010: 2a 20 46 6f 72 20 53 74 72 69 6e 67 73 2e 0a 2a  * For Strings..*
1020: 2f 0a 23 64 65 66 69 6e 65 20 4e 42 46 53 20 33  /.#define NBFS 3
1030: 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 69 6e 67 6c  2../*.** A singl
1040: 65 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 73  e level of the s
1050: 74 61 63 6b 20 69 73 20 61 6e 20 69 6e 73 74 61  tack is an insta
1060: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
1070: 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72  wing.** structur
1080: 65 2e 20 20 45 78 63 65 70 74 2c 20 73 74 72 69  e.  Except, stri
1090: 6e 67 20 76 61 6c 75 65 73 20 61 72 65 20 73 74  ng values are st
10a0: 6f 72 65 64 20 6f 6e 20 61 20 73 65 70 61 72 61  ored on a separa
10b0: 74 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 6f 66  te.** list of of
10c0: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 63 68 61   pointers to cha
10d0: 72 61 63 74 65 72 2e 20 20 54 68 65 20 72 65 61  racter.  The rea
10e0: 73 6f 6e 20 66 6f 72 20 73 74 6f 72 69 6e 67 0a  son for storing.
10f0: 2a 2a 20 73 74 72 69 6e 67 73 20 73 65 70 61 72  ** strings separ
1100: 61 74 65 6c 79 20 69 73 20 73 6f 20 74 68 61 74  ately is so that
1110: 20 74 68 65 79 20 63 61 6e 20 62 65 20 65 61 73   they can be eas
1120: 69 6c 79 20 70 61 73 73 65 64 0a 2a 2a 20 74 6f  ily passed.** to
1130: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 75   the callback fu
1140: 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  nction..*/.struc
1150: 74 20 53 74 61 63 6b 20 7b 0a 20 20 69 6e 74 20  t Stack {.  int 
1160: 69 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  i;         /* In
1170: 74 65 67 65 72 20 76 61 6c 75 65 20 2a 2f 0a 20  teger value */. 
1180: 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
1190: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61  /* Number of cha
11a0: 72 61 63 74 65 72 73 20 69 6e 20 73 74 72 69 6e  racters in strin
11b0: 67 20 76 61 6c 75 65 2c 20 69 6e 63 6c 75 64 69  g value, includi
11c0: 6e 67 20 27 5c 30 27 20 2a 2f 0a 20 20 69 6e 74  ng '\0' */.  int
11d0: 20 66 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 53   flags;     /* S
11e0: 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ome combination 
11f0: 6f 66 20 53 54 4b 5f 4e 75 6c 6c 2c 20 53 54 4b  of STK_Null, STK
1200: 5f 53 74 72 2c 20 53 54 4b 5f 44 79 6e 2c 20 65  _Str, STK_Dyn, e
1210: 74 63 2e 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  tc. */.  double 
1220: 72 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20  r;      /* Real 
1230: 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20  value */.  char 
1240: 7a 5b 4e 42 46 53 5d 3b 20 20 2f 2a 20 53 70 61  z[NBFS];  /* Spa
1250: 63 65 20 66 6f 72 20 73 68 6f 72 74 20 73 74 72  ce for short str
1260: 69 6e 67 73 20 2a 2f 0a 7d 3b 0a 74 79 70 65 64  ings */.};.typed
1270: 65 66 20 73 74 72 75 63 74 20 53 74 61 63 6b 20  ef struct Stack 
1280: 53 74 61 63 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 4d 65  Stack;../*.** Me
1290: 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 20 74  mory cells use t
12a0: 68 65 20 73 61 6d 65 20 73 74 72 75 63 74 75 72  he same structur
12b0: 65 20 61 73 20 74 68 65 20 73 74 61 63 6b 20 65  e as the stack e
12c0: 78 63 65 70 74 20 74 68 61 74 20 73 70 61 63 65  xcept that space
12d0: 0a 2a 2a 20 66 6f 72 20 61 6e 20 61 72 62 69 74  .** for an arbit
12e0: 72 61 72 79 20 73 74 72 69 6e 67 20 69 73 20 61  rary string is a
12f0: 64 64 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  dded..*/.struct 
1300: 4d 65 6d 20 7b 0a 20 20 53 74 61 63 6b 20 73 3b  Mem {.  Stack s;
1310: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 76 61         /* All va
1320: 6c 75 65 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f  lues of the memo
1330: 72 79 20 63 65 6c 6c 20 62 65 73 69 64 65 73 20  ry cell besides 
1340: 73 74 72 69 6e 67 20 2a 2f 0a 20 20 63 68 61 72  string */.  char
1350: 20 2a 7a 3b 20 20 20 20 20 20 20 2f 2a 20 53 74   *z;       /* St
1360: 72 69 6e 67 20 76 61 6c 75 65 20 66 6f 72 20 74  ring value for t
1370: 68 69 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  his memory cell 
1380: 2a 2f 0a 7d 3b 0a 74 79 70 65 64 65 66 20 73 74  */.};.typedef st
1390: 72 75 63 74 20 4d 65 6d 20 4d 65 6d 3b 0a 0a 2f  ruct Mem Mem;../
13a0: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
13b0: 75 65 73 20 66 6f 72 20 53 74 61 63 6b 2e 66 6c  ues for Stack.fl
13c0: 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ags.*/.#define S
13d0: 54 4b 5f 4e 75 6c 6c 20 20 20 20 20 20 30 78 30  TK_Null      0x0
13e0: 30 30 31 20 20 20 2f 2a 20 56 61 6c 75 65 20 69  001   /* Value i
13f0: 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  s NULL */.#defin
1400: 65 20 53 54 4b 5f 53 74 72 20 20 20 20 20 20 20  e STK_Str       
1410: 30 78 30 30 30 32 20 20 20 2f 2a 20 56 61 6c 75  0x0002   /* Valu
1420: 65 20 69 73 20 61 20 73 74 72 69 6e 67 20 2a 2f  e is a string */
1430: 0a 23 64 65 66 69 6e 65 20 53 54 4b 5f 49 6e 74  .#define STK_Int
1440: 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 20         0x0004   
1450: 2f 2a 20 56 61 6c 75 65 20 69 73 20 61 6e 20 69  /* Value is an i
1460: 6e 74 65 67 65 72 20 2a 2f 0a 23 64 65 66 69 6e  nteger */.#defin
1470: 65 20 53 54 4b 5f 52 65 61 6c 20 20 20 20 20 20  e STK_Real      
1480: 30 78 30 30 30 38 20 20 20 2f 2a 20 56 61 6c 75  0x0008   /* Valu
1490: 65 20 69 73 20 61 20 72 65 61 6c 20 6e 75 6d 62  e is a real numb
14a0: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 54  er */.#define ST
14b0: 4b 5f 44 79 6e 20 20 20 20 20 20 20 30 78 30 30  K_Dyn       0x00
14c0: 31 30 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20  10   /* Need to 
14d0: 63 61 6c 6c 20 73 71 6c 69 74 65 46 72 65 65 28  call sqliteFree(
14e0: 29 20 6f 6e 20 7a 53 74 61 63 6b 5b 5d 20 2a 2f  ) on zStack[] */
14f0: 0a 23 64 65 66 69 6e 65 20 53 54 4b 5f 53 74 61  .#define STK_Sta
1500: 74 69 63 20 20 20 20 30 78 30 30 32 30 20 20 20  tic    0x0020   
1510: 2f 2a 20 7a 53 74 61 63 6b 5b 5d 20 70 6f 69 6e  /* zStack[] poin
1520: 74 73 20 74 6f 20 61 20 73 74 61 74 69 63 20 73  ts to a static s
1530: 74 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  tring */.#define
1540: 20 53 54 4b 5f 45 70 68 65 6d 20 20 20 20 20 30   STK_Ephem     0
1550: 78 30 30 34 30 20 20 20 2f 2a 20 7a 53 74 61 63  x0040   /* zStac
1560: 6b 5b 5d 20 70 6f 69 6e 74 73 20 74 6f 20 61 6e  k[] points to an
1570: 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e   ephemeral strin
1580: 67 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 66 6f 6c  g */../* The fol
1590: 6c 6f 77 69 6e 67 20 53 54 4b 5f 20 76 61 6c 75  lowing STK_ valu
15a0: 65 20 61 70 70 65 61 72 73 20 6f 6e 6c 79 20 69  e appears only i
15b0: 6e 20 41 67 67 45 6c 65 6d 2e 61 4d 65 6d 2e 73  n AggElem.aMem.s
15c0: 2e 66 6c 61 67 20 66 69 65 6c 64 73 2e 0a 2a 2a  .flag fields..**
15d0: 20 49 74 20 69 6e 64 69 63 61 74 65 73 20 74 68   It indicates th
15e0: 61 74 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  at the correspon
15f0: 64 69 6e 67 20 41 67 67 45 6c 65 6d 2e 61 4d 65  ding AggElem.aMe
1600: 6d 2e 7a 20 70 6f 69 6e 74 73 20 74 6f 20 61 0a  m.z points to a.
1610: 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ** aggregate fun
1620: 63 74 69 6f 6e 20 63 6f 6e 74 65 78 74 20 74 68  ction context th
1630: 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66  at needs to be f
1640: 69 6e 61 6c 69 7a 65 64 2e 0a 2a 2f 0a 23 64 65  inalized..*/.#de
1650: 66 69 6e 65 20 53 54 4b 5f 41 67 67 43 74 78 20  fine STK_AggCtx 
1660: 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a 20 7a     0x0040   /* z
1670: 53 74 61 63 6b 5b 5d 20 70 6f 69 6e 74 73 20 74  Stack[] points t
1680: 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 74 69 6f  o an agg functio
1690: 6e 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 0a 2f 2a  n context */../*
16a0: 0a 2a 2a 20 54 68 65 20 22 63 6f 6e 74 65 78 74  .** The "context
16b0: 22 20 61 72 67 75 6d 65 6e 74 20 66 6f 72 20 61  " argument for a
16c0: 20 69 6e 73 74 61 6c 6c 61 62 6c 65 20 66 75 6e   installable fun
16d0: 63 74 69 6f 6e 2e 20 20 41 20 70 6f 69 6e 74 65  ction.  A pointe
16e0: 72 20 74 6f 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  r to an.** insta
16f0: 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
1700: 63 74 75 72 65 20 69 73 20 74 68 65 20 66 69 72  cture is the fir
1710: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  st argument to t
1720: 68 65 20 72 6f 75 74 69 6e 65 73 20 75 73 65 64  he routines used
1730: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68  .** implement th
1740: 65 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 2e  e SQL functions.
1750: 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  .**.** There is 
1760: 61 20 74 79 70 65 64 65 66 20 66 6f 72 20 74 68  a typedef for th
1770: 69 73 20 73 74 72 75 63 74 75 72 65 20 69 6e 20  is structure in 
1780: 73 71 6c 69 74 65 2e 68 2e 20 20 53 6f 20 61 6c  sqlite.h.  So al
1790: 6c 20 72 6f 75 74 69 6e 65 73 2c 0a 2a 2a 20 65  l routines,.** e
17a0: 76 65 6e 20 74 68 65 20 70 75 62 6c 69 63 20 69  ven the public i
17b0: 6e 74 65 72 66 61 63 65 20 74 6f 20 53 51 4c 69  nterface to SQLi
17c0: 74 65 2c 20 63 61 6e 20 75 73 65 20 61 20 70 6f  te, can use a po
17d0: 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
17e0: 72 75 63 74 75 72 65 2e 0a 2a 2a 20 42 75 74 20  ructure..** But 
17f0: 74 68 69 73 20 66 69 6c 65 20 69 73 20 74 68 65  this file is the
1800: 20 6f 6e 6c 79 20 70 6c 61 63 65 20 77 68 65 72   only place wher
1810: 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 64  e the internal d
1820: 65 74 61 69 6c 73 20 6f 66 20 74 68 69 73 0a 2a  etails of this.*
1830: 2a 20 73 74 72 75 63 74 75 72 65 20 61 72 65 20  * structure are 
1840: 6b 6e 6f 77 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  known..**.** Thi
1850: 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 64  s structure is d
1860: 65 66 69 6e 65 64 20 69 6e 73 69 64 65 20 6f 66  efined inside of
1870: 20 76 64 62 65 2e 63 20 62 65 63 61 75 73 65 20   vdbe.c because 
1880: 69 74 20 75 73 65 73 20 73 75 62 73 74 72 75 63  it uses substruc
1890: 74 75 72 65 73 0a 2a 2a 20 28 53 74 61 63 6b 29  tures.** (Stack)
18a0: 20 77 68 69 63 68 20 61 72 65 20 6f 6e 6c 79 20   which are only 
18b0: 64 65 66 69 6e 65 64 20 74 68 65 72 65 2e 0a 2a  defined there..*
18c0: 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 5f  /.struct sqlite_
18d0: 66 75 6e 63 20 7b 0a 20 20 46 75 6e 63 44 65 66  func {.  FuncDef
18e0: 20 2a 70 46 75 6e 63 3b 20 20 20 2f 2a 20 50 6f   *pFunc;   /* Po
18f0: 69 6e 74 65 72 20 74 6f 20 66 75 6e 63 74 69 6f  inter to functio
1900: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20  n information.  
1910: 4d 55 53 54 20 42 45 20 46 49 52 53 54 20 2a 2f  MUST BE FIRST */
1920: 0a 20 20 53 74 61 63 6b 20 73 3b 20 20 20 20 20  .  Stack s;     
1930: 20 20 20 20 20 2f 2a 20 53 6d 61 6c 6c 20 73 74       /* Small st
1940: 72 69 6e 67 73 2c 20 69 6e 74 73 2c 20 61 6e 64  rings, ints, and
1950: 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 73 20 67   double values g
1960: 6f 20 68 65 72 65 20 2a 2f 0a 20 20 63 68 61 72  o here */.  char
1970: 20 2a 7a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   *z;          /*
1980: 20 53 70 61 63 65 20 66 6f 72 20 68 6f 6c 64 69   Space for holdi
1990: 6e 67 20 64 79 6e 61 6d 69 63 20 73 74 72 69 6e  ng dynamic strin
19a0: 67 20 72 65 73 75 6c 74 73 20 2a 2f 0a 20 20 76  g results */.  v
19b0: 6f 69 64 20 2a 70 41 67 67 3b 20 20 20 20 20 20  oid *pAgg;      
19c0: 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f   /* Aggregate co
19d0: 6e 74 65 78 74 20 2a 2f 0a 20 20 75 38 20 69 73  ntext */.  u8 is
19e0: 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  Error;       /* 
19f0: 53 65 74 20 74 6f 20 74 72 75 65 20 66 6f 72 20  Set to true for 
1a00: 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38  an error */.  u8
1a10: 20 69 73 53 74 65 70 3b 20 20 20 20 20 20 20 20   isStep;        
1a20: 2f 2a 20 43 75 72 72 65 6e 74 20 69 6e 20 74 68  /* Current in th
1a30: 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
1a40: 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20  */.  int cnt;   
1a50: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1a60: 20 6f 66 20 74 69 6d 65 73 20 74 68 61 74 20 74   of times that t
1a70: 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
1a80: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
1a90: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
1aa0: 20 41 67 67 20 73 74 72 75 63 74 75 72 65 20 64   Agg structure d
1ab0: 65 73 63 72 69 62 65 73 20 61 6e 20 41 67 67 72  escribes an Aggr
1ac0: 65 67 61 74 6f 72 2e 20 20 45 61 63 68 20 41 67  egator.  Each Ag
1ad0: 67 20 63 6f 6e 73 69 73 74 73 20 6f 66 0a 2a 2a  g consists of.**
1ae0: 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 41 67   zero or more Ag
1af0: 67 72 65 67 61 74 6f 72 20 65 6c 65 6d 65 6e 74  gregator element
1b00: 73 20 28 41 67 67 45 6c 65 6d 29 2e 20 20 45 61  s (AggElem).  Ea
1b10: 63 68 20 41 67 67 45 6c 65 6d 20 63 6f 6e 74 61  ch AggElem conta
1b20: 69 6e 73 0a 2a 2a 20 61 20 6b 65 79 20 61 6e 64  ins.** a key and
1b30: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 61 6c   one or more val
1b40: 75 65 73 2e 20 20 54 68 65 20 76 61 6c 75 65 73  ues.  The values
1b50: 20 61 72 65 20 75 73 65 64 20 69 6e 20 70 72 6f   are used in pro
1b60: 63 65 73 73 69 6e 67 0a 2a 2a 20 61 67 67 72 65  cessing.** aggre
1b70: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 69  gate functions i
1b80: 6e 20 61 20 53 45 4c 45 43 54 2e 20 20 54 68 65  n a SELECT.  The
1b90: 20 6b 65 79 20 69 73 20 75 73 65 64 20 74 6f 20   key is used to 
1ba0: 69 6d 70 6c 65 6d 65 6e 74 0a 2a 2a 20 74 68 65  implement.** the
1bb0: 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
1bc0: 20 6f 66 20 61 20 73 65 6c 65 63 74 2e 0a 2a 2f   of a select..*/
1bd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
1be0: 41 67 67 20 41 67 67 3b 0a 74 79 70 65 64 65 66  Agg Agg;.typedef
1bf0: 20 73 74 72 75 63 74 20 41 67 67 45 6c 65 6d 20   struct AggElem 
1c00: 41 67 67 45 6c 65 6d 3b 0a 73 74 72 75 63 74 20  AggElem;.struct 
1c10: 41 67 67 20 7b 0a 20 20 69 6e 74 20 6e 4d 65 6d  Agg {.  int nMem
1c20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1c30: 4e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73  Number of values
1c40: 20 73 74 6f 72 65 64 20 69 6e 20 65 61 63 68 20   stored in each 
1c50: 41 67 67 45 6c 65 6d 20 2a 2f 0a 20 20 41 67 67  AggElem */.  Agg
1c60: 45 6c 65 6d 20 2a 70 43 75 72 72 65 6e 74 3b 20  Elem *pCurrent; 
1c70: 20 20 2f 2a 20 54 68 65 20 41 67 67 45 6c 65 6d    /* The AggElem
1c80: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 66 6f   currently in fo
1c90: 63 75 73 20 2a 2f 0a 20 20 48 61 73 68 45 6c 65  cus */.  HashEle
1ca0: 6d 20 2a 70 53 65 61 72 63 68 3b 20 20 20 2f 2a  m *pSearch;   /*
1cb0: 20 54 68 65 20 68 61 73 68 20 65 6c 65 6d 65 6e   The hash elemen
1cc0: 74 20 66 6f 72 20 70 43 75 72 72 65 6e 74 20 2a  t for pCurrent *
1cd0: 2f 0a 20 20 48 61 73 68 20 68 61 73 68 3b 20 20  /.  Hash hash;  
1ce0: 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68           /* Hash
1cf0: 20 74 61 62 6c 65 20 6f 66 20 61 6c 6c 20 61 67   table of all ag
1d00: 67 72 65 67 61 74 65 20 65 6c 65 6d 65 6e 74 73  gregate elements
1d10: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 2a   */.  FuncDef **
1d20: 61 70 46 75 6e 63 3b 20 20 20 20 2f 2a 20 49 6e  apFunc;    /* In
1d30: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
1d40: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1d50: 6f 6e 73 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74  ons */.};.struct
1d60: 20 41 67 67 45 6c 65 6d 20 7b 0a 20 20 63 68 61   AggElem {.  cha
1d70: 72 20 2a 7a 4b 65 79 3b 20 20 20 20 20 20 20 20  r *zKey;        
1d80: 20 20 2f 2a 20 54 68 65 20 6b 65 79 20 74 6f 20    /* The key to 
1d90: 74 68 69 73 20 41 67 67 45 6c 65 6d 20 2a 2f 0a  this AggElem */.
1da0: 20 20 69 6e 74 20 6e 4b 65 79 3b 20 20 20 20 20    int nKey;     
1db0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1dc0: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
1dd0: 20 6b 65 79 2c 20 69 6e 63 6c 75 64 69 6e 67 20   key, including 
1de0: 27 5c 30 27 20 61 74 20 65 6e 64 20 2a 2f 0a 20  '\0' at end */. 
1df0: 20 4d 65 6d 20 61 4d 65 6d 5b 31 5d 3b 20 20 20   Mem aMem[1];   
1e00: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c        /* The val
1e10: 75 65 73 20 66 6f 72 20 74 68 69 73 20 41 67 67  ues for this Agg
1e20: 45 6c 65 6d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  Elem */.};../*.*
1e30: 2a 20 41 20 53 65 74 20 73 74 72 75 63 74 75 72  * A Set structur
1e40: 65 20 69 73 20 75 73 65 64 20 66 6f 72 20 71 75  e is used for qu
1e50: 69 63 6b 20 74 65 73 74 69 6e 67 20 74 6f 20 73  ick testing to s
1e60: 65 65 20 69 66 20 61 20 76 61 6c 75 65 0a 2a 2a  ee if a value.**
1e70: 20 69 73 20 70 61 72 74 20 6f 66 20 61 20 73 6d   is part of a sm
1e80: 61 6c 6c 20 73 65 74 2e 20 20 53 65 74 73 20 61  all set.  Sets a
1e90: 72 65 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  re used to imple
1ea0: 6d 65 6e 74 20 63 6f 64 65 20 6c 69 6b 65 0a 2a  ment code like.*
1eb0: 2a 20 74 68 69 73 3a 0a 2a 2a 20 20 20 20 20 20  * this:.**      
1ec0: 20 20 20 20 20 20 78 2e 79 20 49 4e 20 28 27 68        x.y IN ('h
1ed0: 69 27 2c 27 68 6f 6f 27 2c 27 68 75 6d 27 29 0a  i','hoo','hum').
1ee0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
1ef0: 74 20 53 65 74 20 53 65 74 3b 0a 73 74 72 75 63  t Set Set;.struc
1f00: 74 20 53 65 74 20 7b 0a 20 20 48 61 73 68 20 68  t Set {.  Hash h
1f10: 61 73 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  ash;            
1f20: 20 2f 2a 20 41 20 73 65 74 20 69 73 20 6a 75 73   /* A set is jus
1f30: 74 20 61 20 68 61 73 68 20 74 61 62 6c 65 20 2a  t a hash table *
1f40: 2f 0a 20 20 48 61 73 68 45 6c 65 6d 20 2a 70 72  /.  HashElem *pr
1f50: 65 76 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72  ev;        /* Pr
1f60: 65 76 69 6f 75 73 6c 79 20 61 63 63 65 73 73 65  eviously accesse
1f70: 64 20 68 61 73 68 20 65 6c 65 6d 65 6e 20 2a 2f  d hash elemen */
1f80: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 4b 65 79  .};../*.** A Key
1f90: 6c 69 73 74 20 69 73 20 61 20 62 75 6e 63 68 20  list is a bunch 
1fa0: 6f 66 20 6b 65 79 73 20 69 6e 74 6f 20 61 20 74  of keys into a t
1fb0: 61 62 6c 65 2e 20 20 54 68 65 20 6b 65 79 6c 69  able.  The keyli
1fc0: 73 74 20 63 61 6e 0a 2a 2a 20 67 72 6f 77 20 77  st can.** grow w
1fd0: 69 74 68 6f 75 74 20 62 6f 75 6e 64 2e 20 20 54  ithout bound.  T
1fe0: 68 65 20 6b 65 79 6c 69 73 74 20 73 74 6f 72 65  he keylist store
1ff0: 73 20 74 68 65 20 52 4f 57 49 44 73 20 6f 66 20  s the ROWIDs of 
2000: 64 61 74 61 62 61 73 65 0a 2a 2a 20 72 65 63 6f  database.** reco
2010: 72 64 73 20 74 68 61 74 20 6e 65 65 64 20 74 6f  rds that need to
2020: 20 62 65 20 64 65 6c 65 74 65 64 20 6f 72 20 75   be deleted or u
2030: 70 64 61 74 65 64 2e 0a 2a 2f 0a 74 79 70 65 64  pdated..*/.typed
2040: 65 66 20 73 74 72 75 63 74 20 4b 65 79 6c 69 73  ef struct Keylis
2050: 74 20 4b 65 79 6c 69 73 74 3b 0a 73 74 72 75 63  t Keylist;.struc
2060: 74 20 4b 65 79 6c 69 73 74 20 7b 0a 20 20 69 6e  t Keylist {.  in
2070: 74 20 6e 4b 65 79 3b 20 20 20 20 20 20 20 20 20  t nKey;         
2080: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f  /* Number of slo
2090: 74 73 20 69 6e 20 61 4b 65 79 5b 5d 20 2a 2f 0a  ts in aKey[] */.
20a0: 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20    int nUsed;    
20b0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 75 6e 77 72      /* Next unwr
20c0: 69 74 74 65 6e 20 73 6c 6f 74 20 69 6e 20 61 4b  itten slot in aK
20d0: 65 79 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ey[] */.  int nR
20e0: 65 61 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ead;        /* N
20f0: 65 78 74 20 75 6e 72 65 61 64 20 73 6c 6f 74 20  ext unread slot 
2100: 69 6e 20 61 4b 65 79 5b 5d 20 2a 2f 0a 20 20 4b  in aKey[] */.  K
2110: 65 79 6c 69 73 74 20 2a 70 4e 65 78 74 3b 20 20  eylist *pNext;  
2120: 20 2f 2a 20 4e 65 78 74 20 62 6c 6f 63 6b 20 6f   /* Next block o
2130: 66 20 6b 65 79 73 20 2a 2f 0a 20 20 69 6e 74 20  f keys */.  int 
2140: 61 4b 65 79 5b 31 5d 3b 20 20 20 20 20 20 2f 2a  aKey[1];      /*
2150: 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 6b 65 79   One or more key
2160: 73 2e 20 20 45 78 74 72 61 20 73 70 61 63 65 20  s.  Extra space 
2170: 61 6c 6c 6f 63 61 74 65 64 20 61 73 20 6e 65 65  allocated as nee
2180: 64 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ded */.};../*.**
2190: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
21a0: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
21b0: 69 6e 65 2e 20 20 54 68 69 73 20 73 74 72 75 63  ine.  This struc
21c0: 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 74 68  ture contains th
21d0: 65 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 73 74  e complete.** st
21e0: 61 74 65 20 6f 66 20 74 68 65 20 76 69 72 74 75  ate of the virtu
21f0: 61 6c 20 6d 61 63 68 69 6e 65 2e 0a 2a 2a 0a 2a  al machine..**.*
2200: 2a 20 54 68 65 20 22 73 71 6c 69 74 65 5f 76 6d  * The "sqlite_vm
2210: 22 20 73 74 72 75 63 74 75 72 65 20 70 6f 69 6e  " structure poin
2220: 74 65 72 20 74 68 61 74 20 69 73 20 72 65 74 75  ter that is retu
2230: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 5f 63  rned by sqlite_c
2240: 6f 6d 70 69 6c 65 28 29 0a 2a 2a 20 69 73 20 72  ompile().** is r
2250: 65 61 6c 6c 79 20 61 20 70 6f 69 6e 74 65 72 20  eally a pointer 
2260: 74 6f 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  to an instance o
2270: 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
2280: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 64 62 65  ..*/.struct Vdbe
2290: 20 7b 0a 20 20 73 71 6c 69 74 65 20 2a 64 62 3b   {.  sqlite *db;
22a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
22b0: 77 68 6f 6c 65 20 64 61 74 61 62 61 73 65 20 2a  whole database *
22c0: 2f 0a 20 20 56 64 62 65 20 2a 70 50 72 65 76 2c  /.  Vdbe *pPrev,
22d0: 2a 70 4e 65 78 74 3b 20 2f 2a 20 4c 69 6e 6b 65  *pNext; /* Linke
22e0: 64 20 6c 69 73 74 20 6f 66 20 56 44 42 45 73 20  d list of VDBEs 
22f0: 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 56 64  with the same Vd
2300: 62 65 2e 64 62 20 2a 2f 0a 20 20 46 49 4c 45 20  be.db */.  FILE 
2310: 2a 74 72 61 63 65 3b 20 20 20 20 20 20 20 20 2f  *trace;        /
2320: 2a 20 57 72 69 74 65 20 61 6e 20 65 78 65 63 75  * Write an execu
2330: 74 69 6f 6e 20 74 72 61 63 65 20 68 65 72 65 2c  tion trace here,
2340: 20 69 66 20 6e 6f 74 20 4e 55 4c 4c 20 2a 2f 0a   if not NULL */.
2350: 20 20 69 6e 74 20 6e 4f 70 3b 20 20 20 20 20 20    int nOp;      
2360: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2370: 6f 66 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  of instructions 
2380: 69 6e 20 74 68 65 20 70 72 6f 67 72 61 6d 20 2a  in the program *
2390: 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63  /.  int nOpAlloc
23a0: 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
23b0: 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63  r of slots alloc
23c0: 61 74 65 64 20 66 6f 72 20 61 4f 70 5b 5d 20 2a  ated for aOp[] *
23d0: 2f 0a 20 20 4f 70 20 2a 61 4f 70 3b 20 20 20 20  /.  Op *aOp;    
23e0: 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
23f0: 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 76 69 72   to hold the vir
2400: 74 75 61 6c 20 6d 61 63 68 69 6e 65 27 73 20 70  tual machine's p
2410: 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20  rogram */.  int 
2420: 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20  nLabel;         
2430: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62  /* Number of lab
2440: 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e  els used */.  in
2450: 74 20 6e 4c 61 62 65 6c 41 6c 6c 6f 63 3b 20 20  t nLabelAlloc;  
2460: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
2470: 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 69  lots allocated i
2480: 6e 20 61 4c 61 62 65 6c 5b 5d 20 2a 2f 0a 20 20  n aLabel[] */.  
2490: 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20  int *aLabel;    
24a0: 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20      /* Space to 
24b0: 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20  hold the labels 
24c0: 2a 2f 0a 20 20 69 6e 74 20 74 6f 73 3b 20 20 20  */.  int tos;   
24d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
24e0: 78 20 6f 66 20 74 6f 70 20 6f 66 20 73 74 61 63  x of top of stac
24f0: 6b 20 2a 2f 0a 20 20 53 74 61 63 6b 20 2a 61 53  k */.  Stack *aS
2500: 74 61 63 6b 3b 20 20 20 20 20 20 2f 2a 20 54 68  tack;      /* Th
2510: 65 20 6f 70 65 72 61 6e 64 20 73 74 61 63 6b 2c  e operand stack,
2520: 20 65 78 63 65 70 74 20 73 74 72 69 6e 67 20 76   except string v
2530: 61 6c 75 65 73 20 2a 2f 0a 20 20 63 68 61 72 20  alues */.  char 
2540: 2a 2a 7a 53 74 61 63 6b 3b 20 20 20 20 20 20 2f  **zStack;      /
2550: 2a 20 54 65 78 74 20 6f 72 20 62 69 6e 61 72 79  * Text or binary
2560: 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 73   values of the s
2570: 74 61 63 6b 20 2a 2f 0a 20 20 63 68 61 72 20 2a  tack */.  char *
2580: 2a 61 7a 43 6f 6c 4e 61 6d 65 3b 20 20 20 2f 2a  *azColName;   /*
2590: 20 42 65 63 6f 6d 65 73 20 74 68 65 20 34 74 68   Becomes the 4th
25a0: 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 63 61   parameter to ca
25b0: 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 69 6e 74  llbacks */.  int
25c0: 20 6e 43 75 72 73 6f 72 3b 20 20 20 20 20 20 20   nCursor;       
25d0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c   /* Number of sl
25e0: 6f 74 73 20 69 6e 20 61 43 73 72 5b 5d 20 2a 2f  ots in aCsr[] */
25f0: 0a 20 20 43 75 72 73 6f 72 20 2a 61 43 73 72 3b  .  Cursor *aCsr;
2600: 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6c         /* One el
2610: 65 6d 65 6e 74 20 6f 66 20 74 68 69 73 20 61 72  ement of this ar
2620: 72 61 79 20 66 6f 72 20 65 61 63 68 20 6f 70 65  ray for each ope
2630: 6e 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 53 6f  n cursor */.  So
2640: 72 74 65 72 20 2a 70 53 6f 72 74 3b 20 20 20 20  rter *pSort;    
2650: 20 20 2f 2a 20 41 20 6c 69 6e 6b 65 64 20 6c 69    /* A linked li
2660: 73 74 20 6f 66 20 6f 62 6a 65 63 74 73 20 74 6f  st of objects to
2670: 20 62 65 20 73 6f 72 74 65 64 20 2a 2f 0a 20 20   be sorted */.  
2680: 46 49 4c 45 20 2a 70 46 69 6c 65 3b 20 20 20 20  FILE *pFile;    
2690: 20 20 20 20 2f 2a 20 41 74 20 6d 6f 73 74 20 6f      /* At most o
26a0: 6e 65 20 6f 70 65 6e 20 66 69 6c 65 20 68 61 6e  ne open file han
26b0: 64 6c 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46  dler */.  int nF
26c0: 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a  ield;         /*
26d0: 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 6c 65 20   Number of file 
26e0: 66 69 65 6c 64 73 20 2a 2f 0a 20 20 63 68 61 72  fields */.  char
26f0: 20 2a 2a 61 7a 46 69 65 6c 64 3b 20 20 20 20 20   **azField;     
2700: 2f 2a 20 44 61 74 61 20 66 6f 72 20 65 61 63 68  /* Data for each
2710: 20 66 69 6c 65 20 66 69 65 6c 64 20 2a 2f 0a 20   file field */. 
2720: 20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20   int nVar;      
2730: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
2740: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 7a 56  f entries in azV
2750: 61 72 69 61 62 6c 65 5b 5d 20 2a 2f 0a 20 20 63  ariable[] */.  c
2760: 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20  har **azVar;    
2770: 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 66 6f 72     /* Values for
2780: 20 74 68 65 20 4f 50 5f 56 61 72 69 61 62 6c 65   the OP_Variable
2790: 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74   opcode */.  int
27a0: 20 2a 61 6e 56 61 72 3b 20 20 20 20 20 20 20 20   *anVar;        
27b0: 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 65 61   /* Length of ea
27c0: 63 68 20 76 61 6c 75 65 20 69 6e 20 61 7a 56 61  ch value in azVa
27d0: 72 69 61 62 6c 65 5b 5d 20 2a 2f 0a 20 20 75 38  riable[] */.  u8
27e0: 20 2a 61 62 56 61 72 3b 20 20 20 20 20 20 20 20   *abVar;        
27f0: 20 20 2f 2a 20 54 52 55 45 20 69 66 20 61 7a 56    /* TRUE if azV
2800: 61 72 69 61 62 6c 65 5b 69 5d 20 6e 65 65 64 73  ariable[i] needs
2810: 20 74 6f 20 62 65 20 73 71 6c 69 74 65 46 72 65   to be sqliteFre
2820: 65 28 29 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  e()ed */.  char 
2830: 2a 7a 4c 69 6e 65 3b 20 20 20 20 20 20 20 20 20  *zLine;         
2840: 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 6c     /* A single l
2850: 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 69 6e 70  ine from the inp
2860: 75 74 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74  ut file */.  int
2870: 20 6e 4c 69 6e 65 41 6c 6c 6f 63 3b 20 20 20 20   nLineAlloc;    
2880: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
2890: 66 20 73 70 61 63 65 73 20 61 6c 6c 6f 63 61 74  f spaces allocat
28a0: 65 64 20 66 6f 72 20 7a 4c 69 6e 65 20 2a 2f 0a  ed for zLine */.
28b0: 20 20 69 6e 74 20 6d 61 67 69 63 3b 20 20 20 20    int magic;    
28c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67            /* Mag
28d0: 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 73 61  ic number for sa
28e0: 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20 2a 2f  nity checking */
28f0: 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20  .  int nMem;    
2900: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
2910: 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 6c  mber of memory l
2920: 6f 63 61 74 69 6f 6e 73 20 63 75 72 72 65 6e 74  ocations current
2930: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a  ly allocated */.
2940: 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20    Mem *aMem;    
2950: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
2960: 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
2970: 73 20 2a 2f 0a 20 20 41 67 67 20 61 67 67 3b 20  s */.  Agg agg; 
2980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2990: 2a 20 41 67 67 72 65 67 61 74 65 20 69 6e 66 6f  * Aggregate info
29a0: 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74  rmation */.  int
29b0: 20 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20 20   nSet;          
29c0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
29d0: 66 20 73 65 74 73 20 61 6c 6c 6f 63 61 74 65 64  f sets allocated
29e0: 20 2a 2f 0a 20 20 53 65 74 20 2a 61 53 65 74 3b   */.  Set *aSet;
29f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2a00: 20 41 6e 20 61 72 72 61 79 20 6f 66 20 73 65 74   An array of set
2a10: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 61 6c 6c  s */.  int nCall
2a20: 62 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 2f  back;          /
2a30: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 61 6c 6c  * Number of call
2a40: 62 61 63 6b 73 20 69 6e 76 6f 6b 65 64 20 73 6f  backs invoked so
2a50: 20 66 61 72 20 2a 2f 0a 20 20 4b 65 79 6c 69 73   far */.  Keylis
2a60: 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 20 20  t *pList;       
2a70: 20 20 2f 2a 20 41 20 6c 69 73 74 20 6f 66 20 52    /* A list of R
2a80: 4f 57 49 44 73 20 2a 2f 0a 20 20 69 6e 74 20 6b  OWIDs */.  int k
2a90: 65 79 6c 69 73 74 53 74 61 63 6b 44 65 70 74 68  eylistStackDepth
2aa0: 3b 20 20 2f 2a 20 54 68 65 20 73 69 7a 65 20 6f  ;  /* The size o
2ab0: 66 20 74 68 65 20 22 6b 65 79 6c 69 73 74 22 20  f the "keylist" 
2ac0: 73 74 61 63 6b 20 2a 2f 0a 20 20 4b 65 79 6c 69  stack */.  Keyli
2ad0: 73 74 20 2a 2a 6b 65 79 6c 69 73 74 53 74 61 63  st **keylistStac
2ae0: 6b 3b 20 2f 2a 20 54 68 65 20 73 74 61 63 6b 20  k; /* The stack 
2af0: 75 73 65 64 20 62 79 20 6f 70 63 6f 64 65 73 20  used by opcodes 
2b00: 4c 69 73 74 50 75 73 68 20 26 20 4c 69 73 74 50  ListPush & ListP
2b10: 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 70 63 3b 20  op */.  int pc; 
2b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b30: 2f 2a 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63  /* The program c
2b40: 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20  ounter */.  int 
2b50: 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
2b60: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
2b70: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 75 6e 73 69  return */.  unsi
2b80: 67 6e 65 64 20 75 6e 69 71 75 65 43 6e 74 3b 20  gned uniqueCnt; 
2b90: 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f      /* Used by O
2ba0: 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 77 68 65  P_MakeRecord whe
2bb0: 6e 20 50 32 21 3d 30 20 2a 2f 0a 20 20 69 6e 74  n P2!=0 */.  int
2bc0: 20 65 72 72 6f 72 41 63 74 69 6f 6e 3b 20 20 20   errorAction;   
2bd0: 20 20 20 20 20 2f 2a 20 52 65 63 6f 76 65 72 79       /* Recovery
2be0: 20 61 63 74 69 6f 6e 20 74 6f 20 64 6f 20 69 6e   action to do in
2bf0: 20 63 61 73 65 20 6f 66 20 61 6e 20 65 72 72 6f   case of an erro
2c00: 72 20 2a 2f 0a 20 20 69 6e 74 20 75 6e 64 6f 54  r */.  int undoT
2c10: 72 61 6e 73 4f 6e 45 72 72 6f 72 3b 20 20 20 2f  ransOnError;   /
2c20: 2a 20 49 66 20 65 72 72 6f 72 2c 20 65 69 74 68  * If error, eith
2c30: 65 72 20 52 4f 4c 4c 42 41 43 4b 20 6f 72 20 43  er ROLLBACK or C
2c40: 4f 4d 4d 49 54 20 2a 2f 0a 20 20 69 6e 74 20 69  OMMIT */.  int i
2c50: 6e 54 65 6d 70 54 72 61 6e 73 3b 20 20 20 20 20  nTempTrans;     
2c60: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 65     /* True if te
2c70: 6d 70 20 64 61 74 61 62 61 73 65 20 69 73 20 74  mp database is t
2c80: 72 61 6e 73 61 63 74 69 6f 6e 65 64 20 2a 2f 0a  ransactioned */.
2c90: 20 20 69 6e 74 20 72 65 74 75 72 6e 53 74 61 63    int returnStac
2ca0: 6b 5b 31 30 30 5d 3b 20 20 20 2f 2a 20 52 65 74  k[100];   /* Ret
2cb0: 75 72 6e 20 61 64 64 72 65 73 73 20 73 74 61 63  urn address stac
2cc0: 6b 20 66 6f 72 20 4f 50 5f 47 6f 73 75 62 20 26  k for OP_Gosub &
2cd0: 20 4f 50 5f 52 65 74 75 72 6e 20 2a 2f 0a 20 20   OP_Return */.  
2ce0: 69 6e 74 20 72 65 74 75 72 6e 44 65 70 74 68 3b  int returnDepth;
2cf0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
2d00: 75 6e 75 73 65 64 20 65 6c 65 6d 65 6e 74 20 69  unused element i
2d10: 6e 20 72 65 74 75 72 6e 53 74 61 63 6b 5b 5d 20  n returnStack[] 
2d20: 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 73 43 6f 6c  */.  int nResCol
2d30: 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  umn;         /* 
2d40: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
2d50: 73 20 69 6e 20 6f 6e 65 20 72 6f 77 20 6f 66 20  s in one row of 
2d60: 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 2a  the result set *
2d70: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 52 65 73  /.  char **azRes
2d80: 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
2d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2da0: 2a 20 56 61 6c 75 65 73 20 66 6f 72 20 6f 6e 65  * Values for one
2db0: 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
2dc0: 2f 20 0a 20 20 69 6e 74 20 28 2a 78 43 61 6c 6c  / .  int (*xCall
2dd0: 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  back)(void*,int,
2de0: 63 68 61 72 2a 2a 2c 63 68 61 72 2a 2a 29 3b 20  char**,char**); 
2df0: 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
2e00: 53 45 4c 45 43 54 20 72 65 73 75 6c 74 73 20 2a  SELECT results *
2e10: 2f 0a 20 20 76 6f 69 64 20 2a 70 43 62 41 72 67  /.  void *pCbArg
2e20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2e40: 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
2e50: 20 74 6f 20 78 43 61 6c 6c 62 61 63 6b 28 29 20   to xCallback() 
2e60: 2a 2f 0a 20 20 69 6e 74 20 70 6f 70 53 74 61 63  */.  int popStac
2e70: 6b 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  k;           /* 
2e80: 50 6f 70 20 74 68 65 20 73 74 61 63 6b 20 74 68  Pop the stack th
2e90: 69 73 20 6d 75 63 68 20 6f 6e 20 65 6e 74 72 79  is much on entry
2ea0: 20 74 6f 20 56 64 62 65 45 78 65 63 28 29 20 2a   to VdbeExec() *
2eb0: 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  /.  char *zErrMs
2ec0: 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45  g;          /* E
2ed0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 77 72 69  rror message wri
2ee0: 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 75  tten here */.  u
2ef0: 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  8 explain;      
2f00: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
2f10: 66 20 45 58 50 4c 41 49 4e 20 70 72 65 73 65 6e  f EXPLAIN presen
2f20: 74 20 6f 6e 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  t on SQL command
2f30: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
2f40: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
2f50: 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  allowed values f
2f60: 6f 72 20 56 64 62 65 2e 6d 61 67 69 63 0a 2a 2f  or Vdbe.magic.*/
2f70: 0a 23 64 65 66 69 6e 65 20 56 44 42 45 5f 4d 41  .#define VDBE_MA
2f80: 47 49 43 5f 49 4e 49 54 20 20 20 20 20 30 78 32  GIC_INIT     0x2
2f90: 36 62 63 65 61 61 35 20 20 20 20 2f 2a 20 42 75  6bceaa5    /* Bu
2fa0: 69 6c 64 69 6e 67 20 61 20 56 44 42 45 20 70 72  ilding a VDBE pr
2fb0: 6f 67 72 61 6d 20 2a 2f 0a 23 64 65 66 69 6e 65  ogram */.#define
2fc0: 20 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20   VDBE_MAGIC_RUN 
2fd0: 20 20 20 20 20 30 78 62 64 66 32 30 64 61 33 20       0xbdf20da3 
2fe0: 20 20 20 2f 2a 20 56 44 42 45 20 69 73 20 72 65     /* VDBE is re
2ff0: 61 64 79 20 74 6f 20 65 78 65 63 75 74 65 20 2a  ady to execute *
3000: 2f 0a 23 64 65 66 69 6e 65 20 56 44 42 45 5f 4d  /.#define VDBE_M
3010: 41 47 49 43 5f 48 41 4c 54 20 20 20 20 20 30 78  AGIC_HALT     0x
3020: 35 31 39 63 32 39 37 33 20 20 20 20 2f 2a 20 56  519c2973    /* V
3030: 44 42 45 20 68 61 73 20 63 6f 6d 70 6c 65 74 65  DBE has complete
3040: 64 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23  d execution */.#
3050: 64 65 66 69 6e 65 20 56 44 42 45 5f 4d 41 47 49  define VDBE_MAGI
3060: 43 5f 44 45 41 44 20 20 20 20 20 30 78 62 36 30  C_DEAD     0xb60
3070: 36 63 33 63 38 20 20 20 20 2f 2a 20 54 68 65 20  6c3c8    /* The 
3080: 56 44 42 45 20 68 61 73 20 62 65 65 6e 20 64 65  VDBE has been de
3090: 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 0a 2f 2a  allocated */../*
30a0: 0a 2a 2a 20 48 65 72 65 20 69 73 20 61 20 6d 61  .** Here is a ma
30b0: 63 72 6f 20 74 6f 20 68 61 6e 64 6c 65 20 74 68  cro to handle th
30c0: 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 6f 66  e common case of
30d0: 20 70 6f 70 70 69 6e 67 20 74 68 65 20 73 74 61   popping the sta
30e0: 63 6b 0a 2a 2a 20 6f 6e 63 65 2e 20 20 54 68 69  ck.** once.  Thi
30f0: 73 20 6d 61 63 72 6f 20 6f 6e 6c 79 20 77 6f 72  s macro only wor
3100: 6b 73 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 74  ks from within t
3110: 68 65 20 73 71 6c 69 74 65 56 64 62 65 45 78 65  he sqliteVdbeExe
3120: 63 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 2e  c().** function.
3130: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50 4f 50 53  .*/.#define POPS
3140: 54 41 43 4b 20 5c 0a 20 20 61 73 73 65 72 74 28  TACK \.  assert(
3150: 70 2d 3e 74 6f 73 3e 3d 30 29 3b 20 5c 0a 20 20  p->tos>=0); \.  
3160: 69 66 28 20 61 53 74 61 63 6b 5b 70 2d 3e 74 6f  if( aStack[p->to
3170: 73 5d 2e 66 6c 61 67 73 20 26 20 53 54 4b 5f 44  s].flags & STK_D
3180: 79 6e 20 29 20 73 71 6c 69 74 65 46 72 65 65 28  yn ) sqliteFree(
3190: 7a 53 74 61 63 6b 5b 70 2d 3e 74 6f 73 5d 29 3b  zStack[p->tos]);
31a0: 20 5c 0a 20 20 70 2d 3e 74 6f 73 2d 2d 3b 0a 0a   \.  p->tos--;..
31b0: 2f 2a 0a 2a 2a 20 46 75 6e 63 74 69 6f 6e 20 70  /*.** Function p
31c0: 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 76 6f 69  rototypes.*/.voi
31d0: 64 20 73 71 6c 69 74 65 56 64 62 65 43 6c 65 61  d sqliteVdbeClea
31e0: 6e 75 70 43 75 72 73 6f 72 28 43 75 72 73 6f 72  nupCursor(Cursor
31f0: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 56  *);.void sqliteV
3200: 64 62 65 53 6f 72 74 65 72 52 65 73 65 74 28 56  dbeSorterReset(V
3210: 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dbe*);.void sqli
3220: 74 65 56 64 62 65 41 67 67 52 65 73 65 74 28 41  teVdbeAggReset(A
3230: 67 67 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  gg*);.void sqlit
3240: 65 56 64 62 65 4b 65 79 6c 69 73 74 46 72 65 65  eVdbeKeylistFree
3250: 28 4b 65 79 6c 69 73 74 2a 29 3b 0a 76 6f 69 64  (Keylist*);.void
3260: 20 73 71 6c 69 74 65 56 64 62 65 50 6f 70 53 74   sqliteVdbePopSt
3270: 61 63 6b 28 56 64 62 65 2a 2c 69 6e 74 29 3b 0a  ack(Vdbe*,int);.
3280: 69 6e 74 20 73 71 6c 69 74 65 56 64 62 65 43 75  int sqliteVdbeCu
3290: 72 73 6f 72 4d 6f 76 65 74 6f 28 43 75 72 73 6f  rsorMoveto(Curso
32a0: 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 56  r*);.int sqliteV
32b0: 64 62 65 42 79 74 65 53 77 61 70 28 69 6e 74 29  dbeByteSwap(int)
32c0: 3b 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e  ;.#if !defined(N
32d0: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
32e0: 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a  d(VDBE_PROFILE).
32f0: 76 6f 69 64 20 73 71 6c 69 74 65 56 64 62 65 50  void sqliteVdbeP
3300: 72 69 6e 74 4f 70 28 46 49 4c 45 2a 2c 20 69 6e  rintOp(FILE*, in
3310: 74 2c 20 4f 70 2a 29 3b 0a 23 65 6e 64 69 66 0a  t, Op*);.#endif.