/ Hex Artifact Content
Login

Artifact 9a6af8787f03f54ce02ff88bd45f89bb600c3a4c:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you 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 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 72 61  ake sure that ra
06c0: 6e 64 5f 73 28 29 20 69 73 20 61 76 61 69 6c 61  nd_s() is availa
06d0: 62 6c 65 20 6f 6e 20 57 69 6e 64 6f 77 73 20 73  ble on Windows s
06e0: 79 73 74 65 6d 73 20 77 69 74 68 20 4d 53 56 43  ystems with MSVC
06f0: 20 32 30 30 35 0a 2a 2a 20 6f 72 20 68 69 67 68   2005.** or high
0700: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
0710: 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20  ed(_MSC_VER) && 
0720: 5f 4d 53 43 5f 56 45 52 3e 3d 31 34 30 30 0a 23  _MSC_VER>=1400.#
0730: 20 20 64 65 66 69 6e 65 20 5f 43 52 54 5f 52 41    define _CRT_RA
0740: 4e 44 5f 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ND_S.#endif../*.
0750: 2a 2a 20 49 6e 63 6c 75 64 65 20 74 68 65 20 68  ** Include the h
0760: 65 61 64 65 72 20 66 69 6c 65 20 75 73 65 64 20  eader file used 
0770: 74 6f 20 63 75 73 74 6f 6d 69 7a 65 20 74 68 65  to customize the
0780: 20 63 6f 6d 70 69 6c 65 72 20 6f 70 74 69 6f 6e   compiler option
0790: 73 20 66 6f 72 20 4d 53 56 43 2e 0a 2a 2a 20 54  s for MSVC..** T
07a0: 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 64 6f  his should be do
07b0: 6e 65 20 66 69 72 73 74 20 73 6f 20 74 68 61 74  ne first so that
07c0: 20 69 74 20 63 61 6e 20 73 75 63 63 65 73 73 66   it can successf
07d0: 75 6c 6c 79 20 70 72 65 76 65 6e 74 20 73 70 75  ully prevent spu
07e0: 72 69 6f 75 73 0a 2a 2a 20 63 6f 6d 70 69 6c 65  rious.** compile
07f0: 72 20 77 61 72 6e 69 6e 67 73 20 64 75 65 20 74  r warnings due t
0800: 6f 20 73 75 62 73 65 71 75 65 6e 74 20 63 6f 6e  o subsequent con
0810: 74 65 6e 74 20 69 6e 20 74 68 69 73 20 66 69 6c  tent in this fil
0820: 65 20 61 6e 64 20 6f 74 68 65 72 20 66 69 6c 65  e and other file
0830: 73 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 69 6e  s.** that are in
0840: 63 6c 75 64 65 64 20 62 79 20 74 68 69 73 20 66  cluded by this f
0850: 69 6c 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  ile..*/.#include
0860: 20 22 6d 73 76 63 2e 68 22 0a 0a 2f 2a 0a 2a 2a   "msvc.h"../*.**
0870: 20 53 70 65 63 69 61 6c 20 73 65 74 75 70 20 66   Special setup f
0880: 6f 72 20 56 78 57 6f 72 6b 73 0a 2a 2f 0a 23 69  or VxWorks.*/.#i
0890: 6e 63 6c 75 64 65 20 22 76 78 77 6f 72 6b 73 2e  nclude "vxworks.
08a0: 68 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  h"../*.** These 
08b0: 23 64 65 66 69 6e 65 73 20 73 68 6f 75 6c 64 20  #defines should 
08c0: 65 6e 61 62 6c 65 20 3e 32 47 42 20 66 69 6c 65  enable >2GB file
08d0: 20 73 75 70 70 6f 72 74 20 6f 6e 20 50 4f 53 49   support on POSI
08e0: 58 20 69 66 20 74 68 65 0a 2a 2a 20 75 6e 64 65  X if the.** unde
08f0: 72 6c 79 69 6e 67 20 6f 70 65 72 61 74 69 6e 67  rlying operating
0900: 20 73 79 73 74 65 6d 20 73 75 70 70 6f 72 74 73   system supports
0910: 20 69 74 2e 20 20 49 66 20 74 68 65 20 4f 53 20   it.  If the OS 
0920: 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72 67 65 20 66  lacks.** large f
0930: 69 6c 65 20 73 75 70 70 6f 72 74 2c 20 6f 72 20  ile support, or 
0940: 69 66 20 74 68 65 20 4f 53 20 69 73 20 77 69 6e  if the OS is win
0950: 64 6f 77 73 2c 20 74 68 65 73 65 20 73 68 6f 75  dows, these shou
0960: 6c 64 20 62 65 20 6e 6f 2d 6f 70 73 2e 0a 2a 2a  ld be no-ops..**
0970: 0a 2a 2a 20 54 69 63 6b 65 74 20 23 32 37 33 39  .** Ticket #2739
0980: 3a 20 20 54 68 65 20 5f 4c 41 52 47 45 46 49 4c  :  The _LARGEFIL
0990: 45 5f 53 4f 55 52 43 45 20 6d 61 63 72 6f 20 6d  E_SOURCE macro m
09a0: 75 73 74 20 61 70 70 65 61 72 20 62 65 66 6f 72  ust appear befor
09b0: 65 20 61 6e 79 0a 2a 2a 20 73 79 73 74 65 6d 20  e any.** system 
09c0: 23 69 6e 63 6c 75 64 65 73 2e 20 20 48 65 6e 63  #includes.  Henc
09d0: 65 2c 20 74 68 69 73 20 62 6c 6f 63 6b 20 6f 66  e, this block of
09e0: 20 63 6f 64 65 20 6d 75 73 74 20 62 65 20 74 68   code must be th
09f0: 65 20 76 65 72 79 20 66 69 72 73 74 0a 2a 2a 20  e very first.** 
0a00: 63 6f 64 65 20 69 6e 20 61 6c 6c 20 73 6f 75 72  code in all sour
0a10: 63 65 20 66 69 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  ce files..**.** 
0a20: 4c 61 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f  Large file suppo
0a30: 72 74 20 63 61 6e 20 62 65 20 64 69 73 61 62 6c  rt can be disabl
0a40: 65 64 20 75 73 69 6e 67 20 74 68 65 20 2d 44 53  ed using the -DS
0a50: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46  QLITE_DISABLE_LF
0a60: 53 20 73 77 69 74 63 68 0a 2a 2a 20 6f 6e 20 74  S switch.** on t
0a70: 68 65 20 63 6f 6d 70 69 6c 65 72 20 63 6f 6d 6d  he compiler comm
0a80: 61 6e 64 20 6c 69 6e 65 2e 20 20 54 68 69 73 20  and line.  This 
0a90: 69 73 20 6e 65 63 65 73 73 61 72 79 20 69 66 20  is necessary if 
0aa0: 79 6f 75 20 61 72 65 20 63 6f 6d 70 69 6c 69 6e  you are compilin
0ab0: 67 0a 2a 2a 20 6f 6e 20 61 20 72 65 63 65 6e 74  g.** on a recent
0ac0: 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52 65   machine (ex: Re
0ad0: 64 20 48 61 74 20 37 2e 32 29 20 62 75 74 20 79  d Hat 7.2) but y
0ae0: 6f 75 20 77 61 6e 74 20 79 6f 75 72 20 63 6f 64  ou want your cod
0af0: 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a 20 6f 6e 20  e to work.** on 
0b00: 61 6e 20 6f 6c 64 65 72 20 6d 61 63 68 69 6e 65  an older machine
0b10: 20 28 65 78 3a 20 52 65 64 20 48 61 74 20 36 2e   (ex: Red Hat 6.
0b20: 30 29 2e 20 20 49 66 20 79 6f 75 20 63 6f 6d 70  0).  If you comp
0b30: 69 6c 65 20 6f 6e 20 52 65 64 20 48 61 74 20 37  ile on Red Hat 7
0b40: 2e 32 0a 2a 2a 20 77 69 74 68 6f 75 74 20 74 68  .2.** without th
0b50: 69 73 20 6f 70 74 69 6f 6e 2c 20 4c 46 53 20 69  is option, LFS i
0b60: 73 20 65 6e 61 62 6c 65 2e 20 20 42 75 74 20 4c  s enable.  But L
0b70: 46 53 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  FS does not exis
0b80: 74 20 69 6e 20 74 68 65 20 6b 65 72 6e 65 6c 0a  t in the kernel.
0b90: 2a 2a 20 69 6e 20 52 65 64 20 48 61 74 20 36 2e  ** in Red Hat 6.
0ba0: 30 2c 20 73 6f 20 74 68 65 20 63 6f 64 65 20 77  0, so the code w
0bb0: 6f 6e 27 74 20 77 6f 72 6b 2e 20 20 48 65 6e 63  on't work.  Henc
0bc0: 65 2c 20 66 6f 72 20 6d 61 78 69 6d 75 6d 20 62  e, for maximum b
0bd0: 69 6e 61 72 79 0a 2a 2a 20 70 6f 72 74 61 62 69  inary.** portabi
0be0: 6c 69 74 79 20 79 6f 75 20 73 68 6f 75 6c 64 20  lity you should 
0bf0: 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a 0a 2a 2a 20  omit LFS..**.** 
0c00: 54 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72  The previous par
0c10: 61 67 72 61 70 68 20 77 61 73 20 77 72 69 74 74  agraph was writt
0c20: 65 6e 20 69 6e 20 32 30 30 35 2e 20 20 28 54 68  en in 2005.  (Th
0c30: 69 73 20 70 61 72 61 67 72 61 70 68 20 69 73 20  is paragraph is 
0c40: 77 72 69 74 74 65 6e 0a 2a 2a 20 6f 6e 20 32 30  written.** on 20
0c50: 30 38 2d 31 31 2d 32 38 2e 29 20 54 68 65 73 65  08-11-28.) These
0c60: 20 64 61 79 73 2c 20 61 6c 6c 20 4c 69 6e 75 78   days, all Linux
0c70: 20 6b 65 72 6e 65 6c 73 20 73 75 70 70 6f 72 74   kernels support
0c80: 20 6c 61 72 67 65 20 66 69 6c 65 73 2c 20 73 6f   large files, so
0c90: 0a 2a 2a 20 79 6f 75 20 73 68 6f 75 6c 64 20 70  .** you should p
0ca0: 72 6f 62 61 62 6c 79 20 6c 65 61 76 65 20 4c 46  robably leave LF
0cb0: 53 20 65 6e 61 62 6c 65 64 2e 20 20 42 75 74 20  S enabled.  But 
0cc0: 73 6f 6d 65 20 65 6d 62 65 64 64 65 64 20 70 6c  some embedded pl
0cd0: 61 74 66 6f 72 6d 73 20 6d 69 67 68 74 0a 2a 2a  atforms might.**
0ce0: 20 6c 61 63 6b 20 4c 46 53 20 69 6e 20 77 68 69   lack LFS in whi
0cf0: 63 68 20 63 61 73 65 20 74 68 65 20 53 51 4c 49  ch case the SQLI
0d00: 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 20 6d  TE_DISABLE_LFS m
0d10: 61 63 72 6f 20 6d 69 67 68 74 20 73 74 69 6c 6c  acro might still
0d20: 20 62 65 20 75 73 65 66 75 6c 2e 0a 2a 2a 0a 2a   be useful..**.*
0d30: 2a 20 53 69 6d 69 6c 61 72 20 69 73 20 74 72 75  * Similar is tru
0d40: 65 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2e 20  e for Mac OS X. 
0d50: 20 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73 75 70   LFS is only sup
0d60: 70 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20 4f 53  ported on Mac OS
0d70: 20 58 20 39 20 61 6e 64 20 6c 61 74 65 72 2e 0a   X 9 and later..
0d80: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
0d90: 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a 23 20  E_DISABLE_LFS.# 
0da0: 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f 46 49  define _LARGE_FI
0db0: 4c 45 20 20 20 20 20 20 20 31 0a 23 20 69 66 6e  LE       1.# ifn
0dc0: 64 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54  def _FILE_OFFSET
0dd0: 5f 42 49 54 53 0a 23 20 20 20 64 65 66 69 6e 65  _BITS.#   define
0de0: 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49   _FILE_OFFSET_BI
0df0: 54 53 20 36 34 0a 23 20 65 6e 64 69 66 0a 23 20  TS 64.# endif.# 
0e00: 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 46 49 4c  define _LARGEFIL
0e10: 45 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e 64 69  E_SOURCE 1.#endi
0e20: 66 0a 0a 2f 2a 20 57 68 61 74 20 76 65 72 73 69  f../* What versi
0e30: 6f 6e 20 6f 66 20 47 43 43 20 69 73 20 62 65 69  on of GCC is bei
0e40: 6e 67 20 75 73 65 64 2e 20 20 30 20 6d 65 61 6e  ng used.  0 mean
0e50: 73 20 47 43 43 20 69 73 20 6e 6f 74 20 62 65 69  s GCC is not bei
0e60: 6e 67 20 75 73 65 64 20 2a 2f 0a 23 69 66 64 65  ng used */.#ifde
0e70: 66 20 5f 5f 47 4e 55 43 5f 5f 0a 23 20 64 65 66  f __GNUC__.# def
0e80: 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20  ine GCC_VERSION 
0e90: 28 5f 5f 47 4e 55 43 5f 5f 2a 31 30 30 30 30 30  (__GNUC__*100000
0ea0: 30 2b 5f 5f 47 4e 55 43 5f 4d 49 4e 4f 52 5f 5f  0+__GNUC_MINOR__
0eb0: 2a 31 30 30 30 2b 5f 5f 47 4e 55 43 5f 50 41 54  *1000+__GNUC_PAT
0ec0: 43 48 4c 45 56 45 4c 5f 5f 29 0a 23 65 6c 73 65  CHLEVEL__).#else
0ed0: 0a 23 20 64 65 66 69 6e 65 20 47 43 43 5f 56 45  .# define GCC_VE
0ee0: 52 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 0a  RSION 0.#endif..
0ef0: 2f 2a 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61  /* Needed for va
0f00: 72 69 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e  rious definition
0f10: 73 2e 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69  s... */.#if defi
0f20: 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26  ned(__GNUC__) &&
0f30: 20 21 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53   !defined(_GNU_S
0f40: 4f 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20  OURCE).# define 
0f50: 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64  _GNU_SOURCE.#end
0f60: 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
0f70: 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20  __OpenBSD__) && 
0f80: 21 64 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f  !defined(_BSD_SO
0f90: 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f  URCE).# define _
0fa0: 42 53 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69  BSD_SOURCE.#endi
0fb0: 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e  f../*.** For Min
0fc0: 47 57 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65  GW, check to see
0fd0: 20 69 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75   if we can inclu
0fe0: 64 65 20 74 68 65 20 68 65 61 64 65 72 20 66 69  de the header fi
0ff0: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74  le containing it
1000: 73 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66  s.** version inf
1010: 6f 72 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20  ormation, among 
1020: 6f 74 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e  other things.  N
1030: 6f 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e  ormally, this in
1040: 74 65 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20  ternal MinGW.** 
1050: 68 65 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c  header file woul
1060: 64 20 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c  d [only] be incl
1070: 75 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  uded automatical
1080: 6c 79 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47  ly by other MinG
1090: 57 20 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65  W header.** file
10a0: 73 3b 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20  s; however, the 
10b0: 63 6f 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f  contained versio
10c0: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  n information is
10d0: 20 6e 6f 77 20 72 65 71 75 69 72 65 64 20 62 79   now required by
10e0: 20 74 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20   this.** header 
10f0: 66 69 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f  file to work aro
1100: 75 6e 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61  und binary compa
1110: 74 69 62 69 6c 69 74 79 20 69 73 73 75 65 73 20  tibility issues 
1120: 28 73 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a  (see below) and.
1130: 2a 2a 20 74 68 69 73 20 69 73 20 74 68 65 20 6f  ** this is the o
1140: 6e 6c 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f  nly known way to
1150: 20 72 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e   reliably obtain
1160: 20 69 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72   it.  This entir
1170: 65 20 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77  e #if block.** w
1180: 6f 75 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65  ould be complete
1190: 6c 79 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69  ly unnecessary i
11a0: 66 20 74 68 65 72 65 20 77 61 73 20 61 6e 79 20  f there was any 
11b0: 6f 74 68 65 72 20 77 61 79 20 6f 66 20 64 65 74  other way of det
11c0: 65 63 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20  ecting.** MinGW 
11d0: 76 69 61 20 74 68 65 69 72 20 70 72 65 70 72 6f  via their prepro
11e0: 63 65 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20  cessor (e.g. if 
11f0: 74 68 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20  they customized 
1200: 74 68 65 69 72 20 47 43 43 20 74 6f 20 64 65 66  their GCC to def
1210: 69 6e 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47  ine.** some MinG
1220: 57 2d 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f  W-specific macro
1230: 73 29 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c  s).  When compil
1240: 69 6e 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65  ing for MinGW, e
1250: 69 74 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41  ither the.** _HA
1260: 56 45 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48  VE_MINGW_H or _H
1270: 41 56 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f  AVE__MINGW_H (no
1280: 74 65 20 74 68 65 20 65 78 74 72 61 20 75 6e 64  te the extra und
1290: 65 72 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d  erscore) macro m
12a0: 75 73 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65  ust be.** define
12b0: 64 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65  d; otherwise, de
12c0: 74 65 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69  tection of condi
12d0: 74 69 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74  tions specific t
12e0: 6f 20 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a  o MinGW will be.
12f0: 2a 2a 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a  ** disabled..*/.
1300: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56  #if defined(_HAV
1310: 45 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63  E_MINGW_H).# inc
1320: 6c 75 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23  lude "mingw.h".#
1330: 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  elif defined(_HA
1340: 56 45 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69  VE__MINGW_H).# i
1350: 6e 63 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68  nclude "_mingw.h
1360: 22 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ".#endif../*.** 
1370: 46 6f 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f  For MinGW versio
1380: 6e 20 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65  n 4.x (and highe
1390: 72 29 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65  r), check to see
13a0: 20 69 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42   if the _USE_32B
13b0: 49 54 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66  IT_TIME_T.** def
13c0: 69 6e 65 20 69 73 20 72 65 71 75 69 72 65 64 20  ine is required 
13d0: 74 6f 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61  to maintain bina
13e0: 72 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ry compatibility
13f0: 20 77 69 74 68 20 74 68 65 20 4d 53 56 43 20 72   with the MSVC r
1400: 75 6e 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72  untime.** librar
1410: 79 20 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66  y in use (e.g. f
1420: 6f 72 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a  or Windows XP)..
1430: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1440: 5f 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f  _USE_32BIT_TIME_
1450: 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  T) && !defined(_
1460: 55 53 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54  USE_64BIT_TIME_T
1470: 29 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e  ) && \.    defin
1480: 65 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64  ed(_WIN32) && !d
1490: 65 66 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26  efined(_WIN64) &
14a0: 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28  & \.    defined(
14b0: 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45  __MINGW_MAJOR_VE
14c0: 52 53 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47  RSION) && __MING
14d0: 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20  W_MAJOR_VERSION 
14e0: 3e 3d 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65  >= 4 && \.    de
14f0: 66 69 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f  fined(__MSVCRT__
1500: 29 0a 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f  ).# define _USE_
1510: 33 32 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e  32BIT_TIME_T.#en
1520: 64 69 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c  dif../* The publ
1530: 69 63 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66  ic SQLite interf
1540: 61 63 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f  ace.  The _FILE_
1550: 4f 46 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72  OFFSET_BITS macr
1560: 6f 20 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a  o must appear.**
1570: 20 66 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20   first in QNX.  
1580: 41 6c 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33  Also, the _USE_3
1590: 32 42 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72  2BIT_TIME_T macr
15a0: 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 66 69  o must appear fi
15b0: 72 73 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57  rst for.** MinGW
15c0: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
15d0: 71 6c 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a  qlite3.h"../*.**
15e0: 20 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e   Include the con
15f0: 66 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65  figuration heade
1600: 72 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e  r output by 'con
1610: 66 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65  figure' if we're
1620: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75   using the.** au
1630: 74 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69  toconf-based bui
1640: 6c 64 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41  ld.*/.#ifdef _HA
1650: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
1660: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e  _H.#include "con
1670: 66 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23  fig.h".#endif..#
1680: 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c  include "sqliteL
1690: 69 6d 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61  imit.h"../* Disa
16a0: 62 6c 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72  ble nuisance war
16b0: 6e 69 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64  nings on Borland
16c0: 20 63 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69   compilers */.#i
16d0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c  f defined(__BORL
16e0: 41 4e 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20  ANDC__).#pragma 
16f0: 77 61 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72  warn -rch /* unr
1700: 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f  eachable code */
1710: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63  .#pragma warn -c
1720: 63 63 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20  cc /* Condition 
1730: 69 73 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f  is always true o
1740: 72 20 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67  r false */.#prag
1750: 6d 61 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20  ma warn -aus /* 
1760: 41 73 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69  Assigned value i
1770: 73 20 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a  s never used */.
1780: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73  #pragma warn -cs
1790: 75 20 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73  u /* Comparing s
17a0: 69 67 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e  igned and unsign
17b0: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
17c0: 72 6e 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69  rn -spa /* Suspi
17d0: 63 69 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72  cious pointer ar
17e0: 69 74 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64  ithmetic */.#end
17f0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64  if../*.** Includ
1800: 65 20 73 74 61 6e 64 61 72 64 20 68 65 61 64 65  e standard heade
1810: 72 20 66 69 6c 65 73 20 61 73 20 6e 65 63 65 73  r files as neces
1820: 73 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66 20 48  sary.*/.#ifdef H
1830: 41 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23 69 6e  AVE_STDINT_H.#in
1840: 63 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e  clude <stdint.h>
1850: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48  .#endif.#ifdef H
1860: 41 56 45 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23  AVE_INTTYPES_H.#
1870: 69 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65  include <inttype
1880: 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  s.h>.#endif../*.
1890: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
18a0: 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64   macros are used
18b0: 20 74 6f 20 63 61 73 74 20 70 6f 69 6e 74 65 72   to cast pointer
18c0: 73 20 74 6f 20 69 6e 74 65 67 65 72 73 20 61 6e  s to integers an
18d0: 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20 74 6f  d.** integers to
18e0: 20 70 6f 69 6e 74 65 72 73 2e 20 20 54 68 65 20   pointers.  The 
18f0: 77 61 79 20 79 6f 75 20 64 6f 20 74 68 69 73 20  way you do this 
1900: 76 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e 65 20  varies from one 
1910: 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 74  compiler.** to t
1920: 68 65 20 6e 65 78 74 2c 20 73 6f 20 77 65 20 68  he next, so we h
1930: 61 76 65 20 64 65 76 65 6c 6f 70 65 64 20 74 68  ave developed th
1940: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 74 20  e following set 
1950: 6f 66 20 23 69 66 20 73 74 61 74 65 6d 65 6e 74  of #if statement
1960: 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61 74 65  s.** to generate
1970: 20 61 70 70 72 6f 70 72 69 61 74 65 20 6d 61 63   appropriate mac
1980: 72 6f 73 20 66 6f 72 20 61 20 77 69 64 65 20 72  ros for a wide r
1990: 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c 65 72  ange of compiler
19a0: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 72  s..**.** The cor
19b0: 72 65 63 74 20 22 41 4e 53 49 22 20 77 61 79 20  rect "ANSI" way 
19c0: 74 6f 20 64 6f 20 74 68 69 73 20 69 73 20 74 6f  to do this is to
19d0: 20 75 73 65 20 74 68 65 20 69 6e 74 70 74 72 5f   use the intptr_
19e0: 74 20 74 79 70 65 2e 0a 2a 2a 20 55 6e 66 6f 72  t type..** Unfor
19f0: 74 75 6e 61 74 65 6c 79 2c 20 74 68 61 74 20 74  tunately, that t
1a00: 79 70 65 64 65 66 20 69 73 20 6e 6f 74 20 61 76  ypedef is not av
1a10: 61 69 6c 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63  ailable on all c
1a20: 6f 6d 70 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20  ompilers, or.** 
1a30: 69 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62  if it is availab
1a40: 6c 65 2c 20 69 74 20 72 65 71 75 69 72 65 73 20  le, it requires 
1a50: 61 6e 20 23 69 6e 63 6c 75 64 65 20 6f 66 20 73  an #include of s
1a60: 70 65 63 69 66 69 63 20 68 65 61 64 65 72 73 0a  pecific headers.
1a70: 2a 2a 20 74 68 61 74 20 76 61 72 79 20 66 72 6f  ** that vary fro
1a80: 6d 20 6f 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f  m one machine to
1a90: 20 74 68 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a   the next..**.**
1aa0: 20 54 69 63 6b 65 74 20 23 33 38 36 30 3a 20 20   Ticket #3860:  
1ab0: 54 68 65 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32  The llvm-gcc-4.2
1ac0: 20 63 6f 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41   compiler from A
1ad0: 70 70 6c 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a  pple chokes on.*
1ae0: 2a 20 74 68 65 20 28 28 76 6f 69 64 2a 29 26 28  * the ((void*)&(
1af0: 28 63 68 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f  (char*)0)[X]) co
1b00: 6e 73 74 72 75 63 74 2e 20 20 42 75 74 20 4d 53  nstruct.  But MS
1b10: 56 43 20 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76  VC chokes on ((v
1b20: 6f 69 64 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f  oid*)(X))..** So
1b30: 20 77 65 20 68 61 76 65 20 74 6f 20 64 65 66 69   we have to defi
1b40: 6e 65 20 74 68 65 20 6d 61 63 72 6f 73 20 69 6e  ne the macros in
1b50: 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20   different ways 
1b60: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65  depending on the
1b70: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f  .** compiler..*/
1b80: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 50  .#if defined(__P
1b90: 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 20 20  TRDIFF_TYPE__)  
1ba0: 2f 2a 20 54 68 69 73 20 63 61 73 65 20 73 68 6f  /* This case sho
1bb0: 75 6c 64 20 77 6f 72 6b 20 66 6f 72 20 47 43 43  uld work for GCC
1bc0: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
1bd0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
1be0: 29 20 20 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54  )  ((void*)(__PT
1bf0: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29  RDIFF_TYPE__)(X)
1c00: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1c10: 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20  E_PTR_TO_INT(X) 
1c20: 20 28 28 69 6e 74 29 28 5f 5f 50 54 52 44 49 46   ((int)(__PTRDIF
1c30: 46 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 65  F_TYPE__)(X)).#e
1c40: 6c 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 47  lif !defined(__G
1c50: 4e 55 43 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20  NUC__)       /* 
1c60: 57 6f 72 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c  Works for compil
1c70: 65 72 73 20 6f 74 68 65 72 20 74 68 61 6e 20 4c  ers other than L
1c80: 4c 56 4d 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  LVM */.# define 
1c90: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
1ca0: 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 26 28  R(X)  ((void*)&(
1cb0: 28 63 68 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20  (char*)0)[X]).# 
1cc0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
1cd0: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
1ce0: 6e 74 29 28 28 28 63 68 61 72 2a 29 58 29 2d 28  nt)(((char*)X)-(
1cf0: 63 68 61 72 2a 29 30 29 29 0a 23 65 6c 69 66 20  char*)0)).#elif 
1d00: 64 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44  defined(HAVE_STD
1d10: 49 4e 54 5f 48 29 20 20 20 2f 2a 20 55 73 65 20  INT_H)   /* Use 
1d20: 74 68 69 73 20 63 61 73 65 20 69 66 20 77 65 20  this case if we 
1d30: 68 61 76 65 20 41 4e 53 49 20 68 65 61 64 65 72  have ANSI header
1d40: 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51  s */.# define SQ
1d50: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
1d60: 58 29 20 20 28 28 76 6f 69 64 2a 29 28 69 6e 74  X)  ((void*)(int
1d70: 70 74 72 5f 74 29 28 58 29 29 0a 23 20 64 65 66  ptr_t)(X)).# def
1d80: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54  ine SQLITE_PTR_T
1d90: 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29  O_INT(X)  ((int)
1da0: 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23  (intptr_t)(X)).#
1db0: 65 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20  else            
1dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1dd0: 20 47 65 6e 65 72 61 74 65 73 20 61 20 77 61 72   Generates a war
1de0: 6e 69 6e 67 20 2d 20 62 75 74 20 69 74 20 61 6c  ning - but it al
1df0: 77 61 79 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20  ways works */.# 
1e00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e  define SQLITE_IN
1e10: 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76  T_TO_PTR(X)  ((v
1e20: 6f 69 64 2a 29 28 58 29 29 0a 23 20 64 65 66 69  oid*)(X)).# defi
1e30: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
1e40: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
1e50: 58 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  X)).#endif../*.*
1e60: 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e  * A macro to hin
1e70: 74 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65  t to the compile
1e80: 72 20 74 68 61 74 20 61 20 66 75 6e 63 74 69 6f  r that a functio
1e90: 6e 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a  n should not be.
1ea0: 2a 2a 20 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23  ** inlined..*/.#
1eb0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55  if defined(__GNU
1ec0: 43 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 53  C__).#  define S
1ed0: 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20  QLITE_NOINLINE  
1ee0: 5f 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 6e  __attribute__((n
1ef0: 6f 69 6e 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20  oinline)).#elif 
1f00: 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52  defined(_MSC_VER
1f10: 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31  ) && _MSC_VER>=1
1f20: 33 31 30 0a 23 20 20 64 65 66 69 6e 65 20 53 51  310.#  define SQ
1f30: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f  LITE_NOINLINE  _
1f40: 5f 64 65 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69  _declspec(noinli
1f50: 6e 65 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ne).#else.#  def
1f60: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
1f70: 49 4e 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  INE.#endif../*.*
1f80: 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74  * Make sure that
1f90: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 69 6e   the compiler in
1fa0: 74 72 69 6e 73 69 63 73 20 77 65 20 64 65 73 69  trinsics we desi
1fb0: 72 65 20 61 72 65 20 65 6e 61 62 6c 65 64 20 77  re are enabled w
1fc0: 68 65 6e 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67  hen.** compiling
1fd0: 20 77 69 74 68 20 61 6e 20 61 70 70 72 6f 70 72   with an appropr
1fe0: 69 61 74 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  iate version of 
1ff0: 4d 53 56 43 20 75 6e 6c 65 73 73 20 70 72 65 76  MSVC unless prev
2000: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  ented by.** the 
2010: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
2020: 4e 54 52 49 4e 53 49 43 20 64 65 66 69 6e 65 2e  NTRINSIC define.
2030: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2040: 28 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f  (SQLITE_DISABLE_
2050: 49 4e 54 52 49 4e 53 49 43 29 0a 23 20 20 69 66  INTRINSIC).#  if
2060: 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45   defined(_MSC_VE
2070: 52 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d  R) && _MSC_VER>=
2080: 31 33 30 30 0a 23 20 20 20 20 69 66 20 21 64 65  1300.#    if !de
2090: 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57 43 45  fined(_WIN32_WCE
20a0: 29 0a 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65  ).#      include
20b0: 20 3c 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20   <intrin.h>.#   
20c0: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
20d0: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 73  sic(_byteswap_us
20e0: 68 6f 72 74 29 0a 23 20 20 20 20 20 20 70 72 61  hort).#      pra
20f0: 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62  gma intrinsic(_b
2100: 79 74 65 73 77 61 70 5f 75 6c 6f 6e 67 29 0a 23  yteswap_ulong).#
2110: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
2120: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
2130: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
2140: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2150: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2160: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2170: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2180: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2190: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
21a0: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
21b0: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
21c0: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
21d0: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
21e0: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
21f0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
2200: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
2210: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
2220: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
2230: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
2240: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2250: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2260: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2270: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2280: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2290: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
22a0: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
22b0: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
22c0: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
22d0: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
22e0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
22f0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
2300: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
2310: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
2320: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
2330: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
2340: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2350: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2360: 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  gacy..*/.#if !de
2370: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48 52  fined(SQLITE_THR
2380: 45 41 44 53 41 46 45 29 0a 23 20 69 66 20 64 65  EADSAFE).# if de
2390: 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46 45  fined(THREADSAFE
23a0: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
23b0: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 54  ITE_THREADSAFE T
23c0: 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c 73 65  HREADSAFE.# else
23d0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
23e0: 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 31 20  TE_THREADSAFE 1 
23f0: 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37 32 2d  /* IMP: R-07272-
2400: 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69 66  22309 */.# endif
2410: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50  .#endif../*.** P
2420: 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77 72 69  owersafe overwri
2430: 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65 66 61  te is on by defa
2440: 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20 62 65  ult.  But can be
2450: 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73 69 6e   turned off usin
2460: 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49 54  g.** the -DSQLIT
2470: 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52  E_POWERSAFE_OVER
2480: 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d  WRITE=0 command-
2490: 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a  line option..*/.
24a0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 50  #ifndef SQLITE_P
24b0: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
24c0: 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  TE.# define SQLI
24d0: 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45  TE_POWERSAFE_OVE
24e0: 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69 66 0a  RWRITE 1.#endif.
24f0: 0a 2f 2a 0a 2a 2a 20 45 56 49 44 45 4e 43 45 2d  ./*.** EVIDENCE-
2500: 4f 46 3a 20 52 2d 32 35 37 31 35 2d 33 37 30 37  OF: R-25715-3707
2510: 32 20 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  2 Memory allocat
2520: 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 61  ion statistics a
2530: 72 65 20 65 6e 61 62 6c 65 64 20 62 79 0a 2a 2a  re enabled by.**
2540: 20 64 65 66 61 75 6c 74 20 75 6e 6c 65 73 73 20   default unless 
2550: 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c  SQLite is compil
2560: 65 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44  ed with SQLITE_D
2570: 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53  EFAULT_MEMSTATUS
2580: 3d 30 20 69 6e 0a 2a 2a 20 77 68 69 63 68 20 63  =0 in.** which c
2590: 61 73 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ase memory alloc
25a0: 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73  ation statistics
25b0: 20 61 72 65 20 64 69 73 61 62 6c 65 64 20 62 79   are disabled by
25c0: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
25d0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
25e0: 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54  _DEFAULT_MEMSTAT
25f0: 55 53 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  US).# define SQL
2600: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
2610: 54 41 54 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a  TATUS 1.#endif..
2620: 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e  /*.** Exactly on
2630: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
2640: 6e 67 20 6d 61 63 72 6f 73 20 6d 75 73 74 20 62  ng macros must b
2650: 65 20 64 65 66 69 6e 65 64 20 69 6e 20 6f 72 64  e defined in ord
2660: 65 72 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79  er to.** specify
2670: 20 77 68 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c   which memory al
2680: 6c 6f 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74  location subsyst
2690: 65 6d 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a  em to use..**.**
26a0: 20 20 20 20 20 53 51 4c 49 54 45 5f 53 59 53 54       SQLITE_SYST
26b0: 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  EM_MALLOC       
26c0: 20 20 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c     // Use normal
26d0: 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29   system malloc()
26e0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 57  .**     SQLITE_W
26f0: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  IN32_MALLOC     
2700: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 57 69 6e        // Use Win
2710: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 41  32 native heap A
2720: 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  PI.**     SQLITE
2730: 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20  _ZERO_MALLOC    
2740: 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 61          // Use a
2750: 20 73 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20   stub allocator 
2760: 74 68 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c  that always fail
2770: 73 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  s.**     SQLITE_
2780: 4d 45 4d 44 45 42 55 47 20 20 20 20 20 20 20 20  MEMDEBUG        
2790: 20 20 20 20 20 20 20 2f 2f 20 44 65 62 75 67 67         // Debugg
27a0: 69 6e 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 73  ing version of s
27b0: 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a  ystem malloc().*
27c0: 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c  *.** On Windows,
27d0: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 57   if the SQLITE_W
27e0: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49  IN32_MALLOC_VALI
27f0: 44 41 54 45 20 6d 61 63 72 6f 20 69 73 20 64 65  DATE macro is de
2800: 66 69 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a  fined and the.**
2810: 20 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f 20   assert() macro 
2820: 69 73 20 65 6e 61 62 6c 65 64 2c 20 65 61 63 68  is enabled, each
2830: 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57   call into the W
2840: 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61 70  in32 native heap
2850: 20 73 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69   subsystem.** wi
2860: 6c 6c 20 63 61 75 73 65 20 48 65 61 70 56 61 6c  ll cause HeapVal
2870: 69 64 61 74 65 20 74 6f 20 62 65 20 63 61 6c 6c  idate to be call
2880: 65 64 2e 20 20 49 66 20 68 65 61 70 20 76 61 6c  ed.  If heap val
2890: 69 64 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66  idation should f
28a0: 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72  ail, an.** asser
28b0: 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72 69  tion will be tri
28c0: 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  ggered..**.** If
28d0: 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f   none of the abo
28e0: 76 65 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  ve are defined, 
28f0: 74 68 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f  then set SQLITE_
2900: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73  SYSTEM_MALLOC as
2910: 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e  .** the default.
2920: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
2930: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
2940: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
2950: 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32  ned(SQLITE_WIN32
2960: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
2970: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45  efined(SQLITE_ZE
2980: 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  RO_MALLOC) \.  +
2990: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
29a0: 4d 45 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72  MEMDEBUG)>1.# er
29b0: 72 6f 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65  ror "Two or more
29c0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
29d0: 67 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63  g compile-time c
29e0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
29f0: 69 6f 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e  ions\. are defin
2a00: 65 64 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f  ed but at most o
2a10: 6e 65 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a  ne is allowed:\.
2a20: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
2a30: 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49  ALLOC, SQLITE_WI
2a40: 4e 33 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49  N32_MALLOC, SQLI
2a50: 54 45 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53  TE_MEMDEBUG,\. S
2a60: 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f  QLITE_ZERO_MALLO
2a70: 43 22 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  C".#endif.#if de
2a80: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2a90: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2aa0: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2ab0: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2ac0: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2ad0: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2ae0: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2af0: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d  QLITE_MEMDEBUG)=
2b00: 3d 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  =0.# define SQLI
2b10: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2b20: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2b30: 20 49 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f   If SQLITE_MALLO
2b40: 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20  C_SOFT_LIMIT is 
2b50: 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  not zero, then t
2b60: 72 79 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a  ry to keep the.*
2b70: 2a 20 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72  * sizes of memor
2b80: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65  y allocations be
2b90: 6c 6f 77 20 74 68 69 73 20 76 61 6c 75 65 20 77  low this value w
2ba0: 68 65 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  here possible..*
2bb0: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
2bc0: 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46  QLITE_MALLOC_SOF
2bd0: 54 5f 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e  T_LIMIT).# defin
2be0: 65 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  e SQLITE_MALLOC_
2bf0: 53 4f 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a  SOFT_LIMIT 1024.
2c00: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65  #endif../*.** We
2c10: 20 6e 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20   need to define 
2c20: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73  _XOPEN_SOURCE as
2c30: 20 66 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65   follows in orde
2c40: 72 20 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72  r to enable.** r
2c50: 65 63 75 72 73 69 76 65 20 6d 75 74 65 78 65 73  ecursive mutexes
2c60: 20 6f 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79   on most Unix sy
2c70: 73 74 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64  stems and fchmod
2c80: 28 29 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a  () on OpenBSD..*
2c90: 2a 20 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55  * But _XOPEN_SOU
2ca0: 52 43 45 20 64 65 66 69 6e 65 20 63 61 75 73 65  RCE define cause
2cb0: 73 20 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d  s problems for M
2cc0: 61 63 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74  ac OS X, so omit
2cd0: 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21  .** it..*/.#if !
2ce0: 64 65 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53  defined(_XOPEN_S
2cf0: 4f 55 52 43 45 29 20 26 26 20 21 64 65 66 69 6e  OURCE) && !defin
2d00: 65 64 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26  ed(__DARWIN__) &
2d10: 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  & !defined(__APP
2d20: 4c 45 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20  LE__).#  define 
2d30: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30  _XOPEN_SOURCE 60
2d40: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
2d50: 4e 44 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54  NDEBUG and SQLIT
2d60: 45 5f 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f  E_DEBUG are oppo
2d70: 73 69 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c  sites.  It shoul
2d80: 64 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  d always be true
2d90: 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64   that.** defined
2da0: 28 4e 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e  (NDEBUG)==!defin
2db0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2dc0: 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f  .  If this is no
2dd0: 74 20 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65  t currently true
2de0: 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75  ,.** make it tru
2df0: 65 20 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72  e by defining or
2e00: 20 75 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42   undefining NDEB
2e10: 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e  UG..**.** Settin
2e20: 67 20 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74  g NDEBUG makes t
2e30: 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20  he code smaller 
2e40: 61 6e 64 20 66 61 73 74 65 72 20 62 79 20 64 69  and faster by di
2e50: 73 61 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61  sabling the.** a
2e60: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
2e70: 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20  ts in the code. 
2e80: 20 53 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20   So we want the 
2e90: 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a  default action.*
2ea0: 2a 20 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42  * to be for NDEB
2eb0: 55 47 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64  UG to be set and
2ec0: 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e   NDEBUG to be un
2ed0: 64 65 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20  defined only if 
2ee0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20  SQLITE_DEBUG.** 
2ef0: 69 73 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44  is set.  Thus ND
2f00: 45 42 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20  EBUG becomes an 
2f10: 6f 70 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68  opt-in rather th
2f20: 61 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a  an an opt-out.**
2f30: 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66   feature..*/.#if
2f40: 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47   !defined(NDEBUG
2f50: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
2f60: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65  LITE_DEBUG).# de
2f70: 66 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65  fine NDEBUG 1.#e
2f80: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
2f90: 28 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69  (NDEBUG) && defi
2fa0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
2fb0: 29 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47  ).# undef NDEBUG
2fc0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
2fd0: 6e 61 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41  nable SQLITE_ENA
2fe0: 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d  BLE_EXPLAIN_COMM
2ff0: 45 4e 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44  ENTS if SQLITE_D
3000: 45 42 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f  EBUG is turned o
3010: 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  n..*/.#if !defin
3020: 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
3030: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
3040: 53 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  S) && defined(SQ
3050: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65  LITE_DEBUG).# de
3060: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
3070: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
3080: 4e 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  NTS 1.#endif../*
3090: 0a 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65  .** The testcase
30a0: 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
30b0: 20 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72   to aid in cover
30c0: 61 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68  age testing.  Wh
30d0: 65 6e 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65  en.** doing cove
30e0: 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68  rage testing, th
30f0: 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69  e condition insi
3100: 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  de the argument 
3110: 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29  to.** testcase()
3120: 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74   must be evaluat
3130: 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64  ed both true and
3140: 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20   false in order 
3150: 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62  to.** get full b
3160: 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20  ranch coverage. 
3170: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
3180: 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65  macro is inserte
3190: 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73  d.** to help ens
31a0: 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73  ure adequate tes
31b0: 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c  t coverage in pl
31c0: 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c  aces where simpl
31d0: 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64  e.** condition/d
31e0: 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65  ecision coverage
31f0: 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20   is inadequate. 
3200: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65   For example, te
3210: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
3220: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
3230: 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61  sure boundary va
3240: 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e  lues are tested.
3250: 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b    For.** bitmask
3260: 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65   tests, testcase
3270: 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  () can be used t
3280: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68  o make sure each
3290: 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69   bit.** is signi
32a0: 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20  ficant and used 
32b0: 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20  at least once.  
32c0: 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  On switch statem
32d0: 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75  ents.** where mu
32e0: 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20  ltiple cases go 
32f0: 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63  to the same bloc
3300: 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63  k of code, testc
3310: 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73  ase().** can ins
3320: 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73  ure that all cas
3330: 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  es are evaluated
3340: 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ..**.*/.#ifdef S
3350: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
3360: 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
3370: 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b  e3Coverage(int);
3380: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
3390: 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20  se(X)  if( X ){ 
33a0: 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28  sqlite3Coverage(
33b0: 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c  __LINE__); }.#el
33c0: 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74  se.# define test
33d0: 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  case(X).#endif..
33e0: 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e  /*.** The TESTON
33f0: 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  LY macro is used
3400: 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69   to enclose vari
3410: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
3420: 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69  s or.** other bi
3430: 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  ts of code that 
3440: 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75  are needed to su
3450: 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65  pport the argume
3460: 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65  nts.** within te
3470: 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73  stcase() and ass
3480: 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f  ert() macros..*/
3490: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
34a0: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
34b0: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
34c0: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
34d0: 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23  TESTONLY(X)  X.#
34e0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45  else.# define TE
34f0: 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66  STONLY(X).#endif
3500: 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65  ../*.** Sometime
3510: 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c  s we need a smal
3520: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65  l amount of code
3530: 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61   such as a varia
3540: 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ble initializati
3550: 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66  on.** to setup f
3560: 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72  or a later asser
3570: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  t() statement.  
3580: 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  We do not want t
3590: 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61  his code to.** a
35a0: 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72  ppear when asser
35b0: 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e  t() is disabled.
35c0: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
35d0: 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f  macro is therefo
35e0: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f  re.** used to co
35f0: 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70  ntain that setup
3600: 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41   code.  The "VVA
3610: 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73  " acronym stands
3620: 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63   for.** "Verific
3630: 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
3640: 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  n, and Accredita
3650: 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72  tion".  In other
3660: 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63   words, the.** c
3670: 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f  ode within VVA_O
3680: 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20  NLY() will only 
3690: 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66  run during verif
36a0: 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65  ication processe
36b0: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44  s..*/.#ifndef ND
36c0: 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56  EBUG.# define VV
36d0: 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  A_ONLY(X)  X.#el
36e0: 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  se.# define VVA_
36f0: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
3700: 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53  /*.** The ALWAYS
3710: 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f   and NEVER macro
3720: 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65  s surround boole
3730: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77  an expressions w
3740: 68 69 63 68 0a 2a 2a 20 61 72 65 20 69 6e 74 65  hich.** are inte
3750: 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62  nded to always b
3760: 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c  e true or false,
3770: 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
3780: 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69  Such.** expressi
3790: 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69  ons could be omi
37a0: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f  tted from the co
37b0: 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20  de completely.  
37c0: 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20  But they.** are 
37d0: 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65  included in a fe
37e0: 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72  w cases in order
37f0: 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20   to enhance the 
3800: 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66  resilience.** of
3810: 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70   SQLite to unexp
3820: 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d  ected behavior -
3830: 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64   to make the cod
3840: 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22  e "self-healing"
3850: 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22  .** or "ductile"
3860: 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69   rather than bei
3870: 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64  ng "brittle" and
3880: 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65   crashing at the
3890: 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f   first.** hint o
38a0: 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61  f unplanned beha
38b0: 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f  vior..**.** In o
38c0: 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41  ther words, ALWA
38d0: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
38e0: 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e   added for defen
38f0: 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  sive code..**.**
3900: 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65   When doing cove
3910: 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57  rage testing ALW
3920: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
3930: 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a  e hard-coded to.
3940: 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66  ** be true and f
3950: 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65  alse so that the
3960: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64   unreachable cod
3970: 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77  e they specify w
3980: 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f  ill.** not be co
3990: 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65  unted as unteste
39a0: 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64  d code..*/.#if d
39b0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
39c0: 56 45 52 41 47 45 5f 54 45 53 54 29 20 7c 7c 20  VERAGE_TEST) || 
39d0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
39e0: 55 54 41 54 49 4f 4e 5f 54 45 53 54 29 0a 23 20  UTATION_TEST).# 
39f0: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
3a00: 20 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69        (1).# defi
3a10: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
3a20: 20 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66    (0).#elif !def
3a30: 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64  ined(NDEBUG).# d
3a40: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
3a50: 20 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73       ((X)?1:(ass
3a60: 65 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66  ert(0),0)).# def
3a70: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3a80: 20 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28     ((X)?(assert(
3a90: 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23  0),1):0).#else.#
3aa0: 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58   define ALWAYS(X
3ab0: 29 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66  )      (X).# def
3ac0: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3ad0: 20 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f     (X).#endif../
3ae0: 2a 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63  *.** Some malloc
3af0: 20 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e   failures are on
3b00: 6c 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53  ly possible if S
3b10: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
3b20: 4f 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20  OC_STRESS is.** 
3b30: 64 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65  defined.  We nee
3b40: 64 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69  d to defend agai
3b50: 6e 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72  nst those failur
3b60: 65 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20  es when testing 
3b70: 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54  with.** SQLITE_T
3b80: 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45  EST_REALLOC_STRE
3b90: 53 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74  SS, but we don't
3ba0: 20 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63   want the unreac
3bb0: 68 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a  hable branches.*
3bc0: 2a 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61  * during a norma
3bd0: 6c 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f  l build.  The fo
3be0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61  llowing macro ca
3bf0: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73  n be used to dis
3c00: 61 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68  able tests.** th
3c10: 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61  at are always fa
3c20: 6c 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20  lse except when 
3c30: 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c  SQLITE_TEST_REAL
3c40: 4c 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65  LOC_STRESS is se
3c50: 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  t..*/.#if define
3c60: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45  d(SQLITE_TEST_RE
3c70: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20  ALLOC_STRESS).# 
3c80: 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52  define ONLY_IF_R
3c90: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29  EALLOC_STRESS(X)
3ca0: 20 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66    (X).#elif !def
3cb0: 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64  ined(NDEBUG).# d
3cc0: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
3cd0: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
3ce0: 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29   ((X)?(assert(0)
3cf0: 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64  ,1):0).#else.# d
3d00: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
3d10: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
3d20: 20 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   (0).#endif../*.
3d30: 2a 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20  ** Declarations 
3d40: 75 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67  used for tracing
3d50: 20 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73   the operating s
3d60: 79 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73  ystem interfaces
3d70: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
3d80: 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53  (SQLITE_FORCE_OS
3d90: 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e  _TRACE) || defin
3da0: 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20  ed(SQLITE_TEST) 
3db0: 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
3dc0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
3dd0: 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  && SQLITE_OS_WIN
3de0: 29 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ).  extern int s
3df0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23  qlite3OSTrace;.#
3e00: 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28   define OSTRACE(
3e10: 58 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20  X)          if( 
3e20: 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29  sqlite3OSTrace )
3e30: 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
3e40: 6e 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53  ntf X.# define S
3e50: 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52  QLITE_HAVE_OS_TR
3e60: 41 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ACE.#else.# defi
3e70: 6e 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20  ne OSTRACE(X).# 
3e80: 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41  undef  SQLITE_HA
3e90: 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64  VE_OS_TRACE.#end
3ea0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65  if../*.** Is the
3eb0: 20 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28   sqlite3ErrName(
3ec0: 29 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65  ) function neede
3ed0: 64 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20  d in the build? 
3ee0: 20 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69   Currently,.** i
3ef0: 74 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22  t is needed by "
3f00: 6d 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68  mutex_w32.c" (wh
3f10: 65 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22  en debugging), "
3f20: 6f 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a  os_win.c" (when.
3f30: 2a 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e  ** OSTRACE is en
3f40: 61 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73  abled), and by s
3f50: 65 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22  everal "test*.c"
3f60: 20 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72   files (which ar
3f70: 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73  e.** compiled us
3f80: 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29  ing SQLITE_TEST)
3f90: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
3fa0: 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f  (SQLITE_HAVE_OS_
3fb0: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
3fc0: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
3fd0: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
3fe0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
3ff0: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4000: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4010: 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23  _NEED_ERR_NAME.#
4020: 65 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51  else.# undef  SQ
4030: 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41  LITE_NEED_ERR_NA
4040: 4d 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ME.#endif../*.**
4050: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45   SQLITE_ENABLE_E
4060: 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20  XPLAIN_COMMENTS 
4070: 69 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20  is incompatible 
4080: 77 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54  with SQLITE_OMIT
4090: 5f 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64  _EXPLAIN.*/.#ifd
40a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
40b0: 58 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53  XPLAIN.# undef S
40c0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
40d0: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65  LAIN_COMMENTS.#e
40e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  ndif../*.** Retu
40f0: 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72  rn true (non-zer
4100: 6f 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20  o) if the input 
4110: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68  is an integer th
4120: 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a  at is too large.
4130: 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d  ** to fit in 32-
4140: 62 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72  bits.  This macr
4150: 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65  o is used inside
4160: 20 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74   of various test
4170: 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73  case().** macros
4180: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
4190: 77 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53  we have tested S
41a0: 51 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d  QLite for large-
41b0: 66 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f  file support..*/
41c0: 0a 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f  .#define IS_BIG_
41d0: 49 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28  INT(X)  (((X)&~(
41e0: 69 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21  i64)0xffffffff)!
41f0: 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d  =0)../*.** The m
4200: 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20  acro unlikely() 
4210: 69 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73  is a hint that s
4220: 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65  urrounds a boole
4230: 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
4240: 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79   that is usually
4250: 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c   false.  Macro l
4260: 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64  ikely() surround
4270: 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65  s.** a boolean e
4280: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
4290: 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20  s usually true. 
42a0: 20 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75   These hints cou
42b0: 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79  ld,.** in theory
42c0: 2c 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65  , be used by the
42d0: 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e   compiler to gen
42e0: 65 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64  erate better cod
42f0: 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e  e, but.** curren
4300: 74 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73  tly they are jus
4310: 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68  t comments for h
4320: 75 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f  uman readers..*/
4330: 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28  .#define likely(
4340: 58 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e  X)    (X).#defin
4350: 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28  e unlikely(X)  (
4360: 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61  X)..#include "ha
4370: 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  sh.h".#include "
4380: 70 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64  parse.h".#includ
4390: 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63  e <stdio.h>.#inc
43a0: 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a  lude <stdlib.h>.
43b0: 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67  #include <string
43c0: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73  .h>.#include <as
43d0: 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  sert.h>.#include
43e0: 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a   <stddef.h>../*.
43f0: 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20  ** If compiling 
4400: 66 6f 72 20 61 20 70 72 6f 63 65 73 73 6f 72 20  for a processor 
4410: 74 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74  that lacks float
4420: 69 6e 67 20 70 6f 69 6e 74 20 73 75 70 70 6f 72  ing point suppor
4430: 74 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75 74 65  t,.** substitute
4440: 20 69 6e 74 65 67 65 72 20 66 6f 72 20 66 6c 6f   integer for flo
4450: 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23  ating-point.*/.#
4460: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
4470: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
4480: 0a 23 20 64 65 66 69 6e 65 20 64 6f 75 62 6c 65  .# define double
4490: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
44a0: 64 65 66 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c  define float sql
44b0: 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69  ite_int64.# defi
44c0: 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59  ne LONGDOUBLE_TY
44d0: 50 45 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a  PE sqlite_int64.
44e0: 23 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  # ifndef SQLITE_
44f0: 42 49 47 5f 44 42 4c 0a 23 20 20 20 64 65 66 69  BIG_DBL.#   defi
4500: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ne SQLITE_BIG_DB
4510: 4c 20 28 28 28 73 71 6c 69 74 65 33 5f 69 6e 74  L (((sqlite3_int
4520: 36 34 29 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64  64)1)<<50).# end
4530: 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  if.# define SQLI
4540: 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45  TE_OMIT_DATETIME
4550: 5f 46 55 4e 43 53 20 31 0a 23 20 64 65 66 69 6e  _FUNCS 1.# defin
4560: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  e SQLITE_OMIT_TR
4570: 41 43 45 20 31 0a 23 20 75 6e 64 65 66 20 53 51  ACE 1.# undef SQ
4580: 4c 49 54 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41  LITE_MIXED_ENDIA
4590: 4e 5f 36 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20  N_64BIT_FLOAT.# 
45a0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 48 41 56  undef SQLITE_HAV
45b0: 45 5f 49 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23  E_ISNAN.#endif.#
45c0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49  ifndef SQLITE_BI
45d0: 47 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53  G_DBL.# define S
45e0: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31  QLITE_BIG_DBL (1
45f0: 65 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  e99).#endif../*.
4600: 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69  ** OMIT_TEMPDB i
4610: 73 20 73 65 74 20 74 6f 20 31 20 69 66 20 53 51  s set to 1 if SQ
4620: 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42  LITE_OMIT_TEMPDB
4630: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20   is defined, or 
4640: 30 0a 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20  0.** afterward. 
4650: 48 61 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72  Having this macr
4660: 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63  o allows us to c
4670: 61 75 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69  ause the C compi
4680: 6c 65 72 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63  ler.** to omit c
4690: 6f 64 65 20 75 73 65 64 20 62 79 20 54 45 4d 50  ode used by TEMP
46a0: 20 74 61 62 6c 65 73 20 77 69 74 68 6f 75 74 20   tables without 
46b0: 6d 65 73 73 79 20 23 69 66 6e 64 65 66 20 73 74  messy #ifndef st
46c0: 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66  atements..*/.#if
46d0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
46e0: 54 45 4d 50 44 42 0a 23 64 65 66 69 6e 65 20 4f  TEMPDB.#define O
46f0: 4d 49 54 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c  MIT_TEMPDB 1.#el
4700: 73 65 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f  se.#define OMIT_
4710: 54 45 4d 50 44 42 20 30 0a 23 65 6e 64 69 66 0a  TEMPDB 0.#endif.
4720: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65  ./*.** The "file
4730: 20 66 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72 20   format" number 
4740: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68  is an integer th
4750: 61 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  at is incremente
4760: 64 20 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68  d whenever.** th
4770: 65 20 56 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c  e VDBE-level fil
4780: 65 20 66 6f 72 6d 61 74 20 63 68 61 6e 67 65 73  e format changes
4790: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
47a0: 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 20 74   macros define t
47b0: 68 65 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c  he.** the defaul
47c0: 74 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f  t file format fo
47d0: 72 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  r new databases 
47e0: 61 6e 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  and the maximum 
47f0: 66 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74  file format.** t
4800: 68 61 74 20 74 68 65 20 6c 69 62 72 61 72 79 20  hat the library 
4810: 63 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65  can read..*/.#de
4820: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
4830: 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69  FILE_FORMAT 4.#i
4840: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
4850: 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  AULT_FILE_FORMAT
4860: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4870: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
4880: 52 4d 41 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f  RMAT 4.#endif../
4890: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 77  *.** Determine w
48a0: 68 65 74 68 65 72 20 74 72 69 67 67 65 72 73 20  hether triggers 
48b0: 61 72 65 20 72 65 63 75 72 73 69 76 65 20 62 79  are recursive by
48c0: 20 64 65 66 61 75 6c 74 2e 20 20 54 68 69 73 20   default.  This 
48d0: 63 61 6e 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65  can be.** change
48e0: 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 75 73  d at run-time us
48f0: 69 6e 67 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f  ing a pragma..*/
4900: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4910: 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56  DEFAULT_RECURSIV
4920: 45 5f 54 52 49 47 47 45 52 53 0a 23 20 64 65 66  E_TRIGGERS.# def
4930: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
4940: 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49  LT_RECURSIVE_TRI
4950: 47 47 45 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a  GGERS 0.#endif..
4960: 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20  /*.** Provide a 
4970: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f  default value fo
4980: 72 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  r SQLITE_TEMP_ST
4990: 4f 52 45 20 69 6e 20 63 61 73 65 20 69 74 20 69  ORE in case it i
49a0: 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 0a  s not specified.
49b0: 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e  ** on the comman
49c0: 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65  d-line.*/.#ifnde
49d0: 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  f SQLITE_TEMP_ST
49e0: 4f 52 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ORE.# define SQL
49f0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31  ITE_TEMP_STORE 1
4a00: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4a10: 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 78 63 20 31  _TEMP_STORE_xc 1
4a20: 20 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f    /* Exclude fro
4a30: 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e  m ctime.c */.#en
4a40: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e 6f  dif../*.** If no
4a50: 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e 20   value has been 
4a60: 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51 4c  provided for SQL
4a70: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
4a80: 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a 2a  HREADS, or if.**
4a90: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
4aa0: 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20 28  RE is set to 3 (
4ab0: 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f 72  never use tempor
4ac0: 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74 20  ary files), set 
4ad0: 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a 2a  it.** to zero..*
4ae0: 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45 4d  /.#if SQLITE_TEM
4af0: 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53 51  P_STORE==3 || SQ
4b00: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d  LITE_THREADSAFE=
4b10: 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  =0.# undef SQLIT
4b20: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
4b30: 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51  EADS.# define SQ
4b40: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
4b50: 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66  THREADS 0.#endif
4b60: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4b70: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
4b80: 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  DS.# define SQLI
4b90: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
4ba0: 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a 23  READS 8.#endif.#
4bb0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45  ifndef SQLITE_DE
4bc0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
4bd0: 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51  EADS.# define SQ
4be0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52  LITE_DEFAULT_WOR
4bf0: 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65  KER_THREADS 0.#e
4c00: 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f  ndif.#if SQLITE_
4c10: 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54  DEFAULT_WORKER_T
4c20: 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d 41  HREADS>SQLITE_MA
4c30: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
4c40: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
4c50: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
4c60: 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  DS.# define SQLI
4c70: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
4c80: 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45 46  READS SQLITE_DEF
4c90: 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  AULT_WORKER_THRE
4ca0: 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ADS.#endif../*.*
4cb0: 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69 6e  * The default in
4cc0: 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e  itial allocation
4cd0: 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61 63   for the pagecac
4ce0: 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73 65  he when using se
4cf0: 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63 61  parate.** pageca
4d00: 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64 61  ches for each da
4d10: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
4d20: 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20 6e  n.  A positive n
4d30: 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a 20  umber is the.** 
4d40: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 2e  number of pages.
4d50: 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75 6d    A negative num
4d60: 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69 6f  ber N translatio
4d70: 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  ns means that a 
4d80: 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31 30  buffer.** of -10
4d90: 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61 6c  24*N bytes is al
4da0: 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65 64  located and used
4db0: 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61 67   for as many pag
4dc0: 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68 6f  es as it will ho
4dd0: 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ld..*/.#ifndef S
4de0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43  QLITE_DEFAULT_PC
4df0: 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20 64 65  ACHE_INITSZ.# de
4e00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
4e10: 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49 54 53  ULT_PCACHE_INITS
4e20: 5a 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  Z 100.#endif../*
4e30: 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74  .** GCC does not
4e40: 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73   define the offs
4e50: 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20  etof() macro so 
4e60: 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f  we'll have to do
4e70: 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73   it.** ourselves
4e80: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66  ..*/.#ifndef off
4e90: 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66  setof.#define of
4ea0: 66 73 65 74 6f 66 28 53 54 52 55 43 54 55 52 45  fsetof(STRUCTURE
4eb0: 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28  ,FIELD) ((int)((
4ec0: 63 68 61 72 2a 29 26 28 28 53 54 52 55 43 54 55  char*)&((STRUCTU
4ed0: 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a  RE*)0)->FIELD)).
4ee0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
4ef0: 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20  cros to compute 
4f00: 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69  minimum and maxi
4f10: 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65  mum of two numbe
4f20: 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4d  rs..*/.#ifndef M
4f30: 49 4e 0a 23 20 64 65 66 69 6e 65 20 4d 49 4e 28  IN.# define MIN(
4f40: 41 2c 42 29 20 28 28 41 29 3c 28 42 29 3f 28 41  A,B) ((A)<(B)?(A
4f50: 29 3a 28 42 29 29 0a 23 65 6e 64 69 66 0a 23 69  ):(B)).#endif.#i
4f60: 66 6e 64 65 66 20 4d 41 58 0a 23 20 64 65 66 69  fndef MAX.# defi
4f70: 6e 65 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29  ne MAX(A,B) ((A)
4f80: 3e 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 65  >(B)?(A):(B)).#e
4f90: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70  ndif../*.** Swap
4fa0: 20 74 77 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20   two objects of 
4fb0: 74 79 70 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64  type TYPE..*/.#d
4fc0: 65 66 69 6e 65 20 53 57 41 50 28 54 59 50 45 2c  efine SWAP(TYPE,
4fd0: 41 2c 42 29 20 7b 54 59 50 45 20 74 3d 41 3b 20  A,B) {TYPE t=A; 
4fe0: 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a  A=B; B=t;}../*.*
4ff0: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
5000: 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75  f this machine u
5010: 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65  ses EBCDIC.  (Ye
5020: 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72  s, believe it or
5030: 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61  .** not, there a
5040: 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65  re still machine
5050: 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74  s out there that
5060: 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f   use EBCDIC.).*/
5070: 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30  .#if 'A' == '\30
5080: 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1'.# define SQLI
5090: 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73  TE_EBCDIC 1.#els
50a0: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
50b0: 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66  E_ASCII 1.#endif
50c0: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73  ../*.** Integers
50d0: 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e   of known sizes.
50e0: 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73    These typedefs
50f0: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f   might change fo
5100: 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a  r architectures.
5110: 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a  ** where the siz
5120: 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f  es very.  Prepro
5130: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72  cessor macros ar
5140: 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74  e available so t
5150: 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73  hat the.** types
5160: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65   can be convenie
5170: 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61  ntly redefined a
5180: 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20  t compile-type. 
5190: 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   Like this:.**.*
51a0: 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44  *         cc '-D
51b0: 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e  UINTPTR_TYPE=lon
51c0: 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a  g long int' ....
51d0: 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33  */.#ifndef UINT3
51e0: 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  2_TYPE.# ifdef H
51f0: 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20  AVE_UINT32_T.#  
5200: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
5210: 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c  PE uint32_t.# el
5220: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
5230: 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T32_TYPE unsigne
5240: 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  d int.# endif.#e
5250: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
5260: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
5270: 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23   HAVE_UINT16_T.#
5280: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
5290: 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20  TYPE uint16_t.# 
52a0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
52b0: 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67  INT16_TYPE unsig
52c0: 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  ned short int.# 
52d0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
52e0: 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a  ndef INT16_TYPE.
52f0: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
5300: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  16_T.#  define I
5310: 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f  NT16_TYPE int16_
5320: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5330: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68  ne INT16_TYPE sh
5340: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
5350: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
5360: 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65  INT8_TYPE.# ifde
5370: 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23  f HAVE_UINT8_T.#
5380: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
5390: 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c  YPE uint8_t.# el
53a0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
53b0: 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  T8_TYPE unsigned
53c0: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
53d0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
53e0: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
53f0: 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65  AVE_INT8_T.#  de
5400: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69  fine INT8_TYPE i
5410: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
5420: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
5430: 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65   signed char.# e
5440: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
5450: 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  def LONGDOUBLE_T
5460: 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  YPE.# define LON
5470: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e  GDOUBLE_TYPE lon
5480: 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a  g double.#endif.
5490: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69  typedef sqlite_i
54a0: 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20  nt64 i64;       
54b0: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67     /* 8-byte sig
54c0: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
54d0: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69  ypedef sqlite_ui
54e0: 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20  nt64 u64;       
54f0: 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69    /* 8-byte unsi
5500: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
5510: 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54  typedef UINT32_T
5520: 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20  YPE u32;        
5530: 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73     /* 4-byte uns
5540: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
5550: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f  .typedef UINT16_
5560: 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20  TYPE u16;       
5570: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e      /* 2-byte un
5580: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
5590: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
55a0: 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20  TYPE i16;       
55b0: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73       /* 2-byte s
55c0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
55d0: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54  .typedef UINT8_T
55e0: 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20  YPE u8;         
55f0: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e      /* 1-byte un
5600: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
5610: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54  /.typedef INT8_T
5620: 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20  YPE i8;         
5630: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73       /* 1-byte s
5640: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
5650: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d  ../*.** SQLITE_M
5660: 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20  AX_U32 is a u64 
5670: 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73  constant that is
5680: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34   the maximum u64
5690: 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63   value.** that c
56a0: 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  an be stored in 
56b0: 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f  a u32 without lo
56c0: 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ss of data.  The
56d0: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30   value.** is 0x0
56e0: 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e  0000000ffffffff.
56f0: 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66    But because of
5700: 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20   quirks of some 
5710: 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a  compilers, we.**
5720: 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79   have to specify
5730: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68   the value in th
5740: 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65  e less intuitive
5750: 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a   manner shown:.*
5760: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
5770: 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36  _MAX_U32  ((((u6
5780: 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a  4)1)<<32)-1)../*
5790: 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
57a0: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65   used to store e
57b0: 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20  stimates of the 
57c0: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
57d0: 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  n a.** table or 
57e0: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20  index.  This is 
57f0: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
5800: 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39  ger type.  For 9
5810: 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77  9.9% of.** the w
5820: 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69  orld, a 32-bit i
5830: 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63  nteger is suffic
5840: 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d  ient.  But a 64-
5850: 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63  bit integer.** c
5860: 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f  an be used at co
5870: 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65  mpile-time if de
5880: 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  sired..*/.#ifdef
5890: 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54   SQLITE_64BIT_ST
58a0: 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34  ATS. typedef u64
58b0: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
58c0: 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72  64-bit only if r
58d0: 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70  equested at comp
58e0: 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73  ile-time */.#els
58f0: 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74  e. typedef u32 t
5900: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32  Rowcnt;    /* 32
5910: 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61  -bit is the defa
5920: 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  ult */.#endif../
5930: 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64 20 71  *.** Estimated q
5940: 75 61 6e 74 69 74 69 65 73 20 75 73 65 64 20 66  uantities used f
5950: 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e  or query plannin
5960: 67 20 61 72 65 20 73 74 6f 72 65 64 20 61 73 20  g are stored as 
5970: 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69  16-bit.** logari
5980: 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e 74  thms.  For quant
5990: 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c 75 65  ity X, the value
59a0: 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f   stored is 10*lo
59b0: 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20  g2(X).  This.** 
59c0: 67 69 76 65 73 20 61 20 70 6f 73 73 69 62 6c 65  gives a possible
59d0: 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73   range of values
59e0: 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c   of approximatel
59f0: 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31 65 2d  y 1.0e986 to 1e-
5a00: 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20  986..** But the 
5a10: 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61  allowed values a
5a20: 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f  re "grainy".  No
5a30: 74 20 65 76 65 72 79 20 76 61 6c 75 65 20 69 73  t every value is
5a40: 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a   representable..
5a50: 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  ** For example, 
5a60: 71 75 61 6e 74 69 74 69 65 73 20 31 36 20 61 6e  quantities 16 an
5a70: 64 20 31 37 20 61 72 65 20 62 6f 74 68 20 72 65  d 17 are both re
5a80: 70 72 65 73 65 6e 74 65 64 20 62 79 20 61 20 4c  presented by a L
5a90: 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20  ogEst.** of 40. 
5aa0: 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63 65 20   However, since 
5ab0: 4c 6f 67 45 73 74 20 71 75 61 6e 74 69 74 69 65  LogEst quantitie
5ac0: 73 20 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f  s are suppose to
5ad0: 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a   be estimates,.*
5ae0: 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75  * not exact valu
5af0: 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69  es, this impreci
5b00: 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72  sion is not a pr
5b10: 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f  oblem..**.** "Lo
5b20: 67 45 73 74 22 20 69 73 20 73 68 6f 72 74 20 66  gEst" is short f
5b30: 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69 63 20  or "Logarithmic 
5b40: 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a  Estimate"..**.**
5b50: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20   Examples:.**   
5b60: 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20     1 -> 0       
5b70: 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20         20 -> 43 
5b80: 20 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d           10000 -
5b90: 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20  > 132.**      2 
5ba0: 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20  -> 10           
5bb0: 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20    25 -> 46      
5bc0: 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36      25000 -> 146
5bd0: 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36  .**      3 -> 16
5be0: 20 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20              100 
5bf0: 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30  -> 66        100
5c00: 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20  0000 -> 199.**  
5c10: 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20      4 -> 20     
5c20: 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39        1000 -> 99
5c30: 20 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20          1048576 
5c40: 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30  -> 200.**     10
5c50: 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20   -> 33          
5c60: 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20   1024 -> 100    
5c70: 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32  4294967296 -> 32
5c80: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45  0.**.** The LogE
5c90: 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69  st can be negati
5ca0: 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66  ve to indicate f
5cb0: 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73  ractional values
5cc0: 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  ..** Examples:.*
5cd0: 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d  *.**    0.5 -> -
5ce0: 31 30 20 20 20 20 20 20 20 20 20 20 20 30 2e 31  10           0.1
5cf0: 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30   -> -33        0
5d00: 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a  .0625 -> -40.*/.
5d10: 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59  typedef INT16_TY
5d20: 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a  PE LogEst;../*.*
5d30: 2a 20 53 65 74 20 74 68 65 20 53 51 4c 49 54 45  * Set the SQLITE
5d40: 5f 50 54 52 53 49 5a 45 20 6d 61 63 72 6f 20 74  _PTRSIZE macro t
5d50: 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
5d60: 62 79 74 65 73 20 69 6e 20 61 20 70 6f 69 6e 74  bytes in a point
5d70: 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  er.*/.#ifndef SQ
5d80: 4c 49 54 45 5f 50 54 52 53 49 5a 45 0a 23 20 69  LITE_PTRSIZE.# i
5d90: 66 20 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a 45  f defined(__SIZE
5da0: 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23 20  OF_POINTER__).# 
5db0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
5dc0: 50 54 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f 46  PTRSIZE __SIZEOF
5dd0: 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c 69  _POINTER__.# eli
5de0: 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20  f defined(i386) 
5df0: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
5e00: 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65  _i386__)   || de
5e10: 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c  fined(_M_IX86) |
5e20: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 20 64 65  |    \.       de
5e30: 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20  fined(_M_ARM)   
5e40: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d  || defined(__arm
5e50: 5f 5f 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  __)    || define
5e60: 64 28 5f 5f 78 38 36 29 0a 23 20 20 20 64 65 66  d(__x86).#   def
5e70: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49  ine SQLITE_PTRSI
5e80: 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20 20 20  ZE 4.# else.#   
5e90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
5ea0: 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69 66 0a  RSIZE 8.# endif.
5eb0: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 75  #endif../* The u
5ec0: 70 74 72 20 74 79 70 65 20 69 73 20 61 6e 20 75  ptr type is an u
5ed0: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
5ee0: 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20  large enough to 
5ef0: 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72 0a 2a  hold a pointer.*
5f00: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 48 41  /.#if defined(HA
5f10: 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20 20 74  VE_STDINT_H).  t
5f20: 79 70 65 64 65 66 20 75 69 6e 74 70 74 72 5f 74  ypedef uintptr_t
5f30: 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53 51 4c   uptr;.#elif SQL
5f40: 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34 0a 20  ITE_PTRSIZE==4. 
5f50: 20 74 79 70 65 64 65 66 20 75 33 32 20 75 70 74   typedef u32 upt
5f60: 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  r;.#else.  typed
5f70: 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23 65 6e  ef u64 uptr;.#en
5f80: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  dif../*.** The S
5f90: 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53  QLITE_WITHIN(P,S
5fa0: 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63 6b 73  ,E) macro checks
5fb0: 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69 6e 74   to see if point
5fc0: 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  er P points to.*
5fd0: 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65 74 77  * something betw
5fe0: 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69 76 65  een S (inclusive
5ff0: 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75 73 69  ) and E (exclusi
6000: 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74  ve)..**.** In ot
6010: 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69 73 20  her words, S is 
6020: 61 20 62 75 66 66 65 72 20 61 6e 64 20 45 20 69  a buffer and E i
6030: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
6040: 68 65 20 66 69 72 73 74 20 62 79 74 65 20 61 66  he first byte af
6050: 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f  ter.** the end o
6060: 66 20 62 75 66 66 65 72 20 53 2e 20 20 54 68 69  f buffer S.  Thi
6070: 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e 73 20  s macro returns 
6080: 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e 74 73  true if P points
6090: 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a 2a 2a   to something.**
60a0: 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   contained withi
60b0: 6e 20 74 68 65 20 62 75 66 66 65 72 20 53 2e 0a  n the buffer S..
60c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
60d0: 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20  E_WITHIN(P,S,E) 
60e0: 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28 75 70  (((uptr)(P)>=(up
60f0: 74 72 29 28 53 29 29 26 26 28 28 75 70 74 72 29  tr)(S))&&((uptr)
6100: 28 50 29 3c 28 75 70 74 72 29 28 45 29 29 29 0a  (P)<(uptr)(E))).
6110: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
6120: 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74  o determine whet
6130: 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20  her the machine 
6140: 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65  is big or little
6150: 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20   endian,.** and 
6160: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
6170: 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74 69 6f  hat determinatio
6180: 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72  n is run-time or
6190: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a   compile-time..*
61a0: 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20 70 65  *.** For best pe
61b0: 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74  rformance, an at
61c0: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
61d0: 20 67 75 65 73 73 20 61 74 20 74 68 65 20 62 79   guess at the by
61e0: 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e  te-order.** usin
61f0: 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72  g C-preprocessor
6200: 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74 68 61   macros.  If tha
6210: 74 20 69 73 20 75 6e 73 75 63 63 65 73 73 66 75  t is unsuccessfu
6220: 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51  l, or if.** -DSQ
6230: 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54  LITE_RUNTIME_BYT
6240: 45 4f 52 44 45 52 3d 31 20 69 73 20 73 65 74 2c  EORDER=1 is set,
6250: 20 74 68 65 6e 20 62 79 74 65 2d 6f 72 64 65 72   then byte-order
6260: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a   is determined.*
6270: 2a 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a  * at run-time..*
6280: 2f 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28 69  /.#if (defined(i
6290: 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69  386)     || defi
62a0: 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20  ned(__i386__)   
62b0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58  || defined(_M_IX
62c0: 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20  86) ||    \.    
62d0: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36   defined(__x86_6
62e0: 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  4) || defined(__
62f0: 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20 64 65 66  x86_64__) || def
6300: 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20 20 7c 7c  ined(_M_X64)  ||
6310: 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e      \.     defin
6320: 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c 20  ed(_M_AMD64) || 
6330: 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20  defined(_M_ARM) 
6340: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6350: 5f 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a  _x86)   ||    \.
6360: 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 61       defined(__a
6370: 72 6d 5f 5f 29 29 20 26 26 20 21 64 65 66 69 6e  rm__)) && !defin
6380: 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d  ed(SQLITE_RUNTIM
6390: 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64  E_BYTEORDER).# d
63a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
63b0: 45 4f 52 44 45 52 20 20 20 20 31 32 33 34 0a 23  EORDER    1234.#
63c0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
63d0: 49 47 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20  IGENDIAN    0.# 
63e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49  define SQLITE_LI
63f0: 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64  TTLEENDIAN 1.# d
6400: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46  efine SQLITE_UTF
6410: 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45  16NATIVE  SQLITE
6420: 5f 55 54 46 31 36 4c 45 0a 23 65 6e 64 69 66 0a  _UTF16LE.#endif.
6430: 23 69 66 20 28 64 65 66 69 6e 65 64 28 73 70 61  #if (defined(spa
6440: 72 63 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  rc)    || define
6450: 64 28 5f 5f 70 70 63 5f 5f 29 29 20 20 5c 0a 20  d(__ppc__))  \. 
6460: 20 20 20 26 26 20 21 64 65 66 69 6e 65 64 28 53     && !defined(S
6470: 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59  QLITE_RUNTIME_BY
6480: 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e  TEORDER).# defin
6490: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
64a0: 45 52 20 20 20 20 34 33 32 31 0a 23 20 64 65 66  ER    4321.# def
64b0: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
64c0: 44 49 41 4e 20 20 20 20 31 0a 23 20 64 65 66 69  DIAN    1.# defi
64d0: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
64e0: 45 4e 44 49 41 4e 20 30 0a 23 20 64 65 66 69 6e  ENDIAN 0.# defin
64f0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
6500: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
6510: 31 36 42 45 0a 23 65 6e 64 69 66 0a 23 69 66 20  16BE.#endif.#if 
6520: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
6530: 42 59 54 45 4f 52 44 45 52 29 0a 23 20 69 66 64  BYTEORDER).# ifd
6540: 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
6550: 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69  MATION.  const i
6560: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20  nt sqlite3one = 
6570: 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65  1;.# else.  exte
6580: 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  rn const int sql
6590: 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66  ite3one;.# endif
65a0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
65b0: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 30 20  _BYTEORDER    0 
65c0: 20 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22      /* 0 means "
65d0: 75 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69  unknown at compi
65e0: 6c 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65  le-time" */.# de
65f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
6600: 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72  NDIAN    (*(char
6610: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
6620: 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==0).# define SQ
6630: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
6640: 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71  N (*(char *)(&sq
6650: 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20  lite3one)==1).# 
6660: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
6670: 46 31 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49  F16NATIVE  (SQLI
6680: 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c  TE_BIGENDIAN?SQL
6690: 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49  ITE_UTF16BE:SQLI
66a0: 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64  TE_UTF16LE).#end
66b0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61  if../*.** Consta
66c0: 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67  nts for the larg
66d0: 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74  est and smallest
66e0: 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74   possible 64-bit
66f0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
6700: 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  ..** These macro
6710: 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74  s are designed t
6720: 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79  o work correctly
6730: 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20   on both 32-bit 
6740: 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f  and 64-bit.** co
6750: 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66  mpilers..*/.#def
6760: 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  ine LARGEST_INT6
6770: 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28  4  (0xffffffff|(
6780: 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66  ((i64)0x7fffffff
6790: 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20  )<<32)).#define 
67a0: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28  SMALLEST_INT64 (
67b0: 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47  ((i64)-1) - LARG
67c0: 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a  EST_INT64)../*.*
67d0: 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d  * Round up a num
67e0: 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ber to the next 
67f0: 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20  larger multiple 
6800: 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20 75  of 8.  This is u
6810: 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20  sed.** to force 
6820: 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  8-byte alignment
6830: 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69   on 64-bit archi
6840: 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65  tectures..*/.#de
6850: 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20  fine ROUND8(x)  
6860: 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a     (((x)+7)&~7).
6870: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77  ./*.** Round dow
6880: 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74  n to the nearest
6890: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a   multiple of 8.*
68a0: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44  /.#define ROUNDD
68b0: 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29  OWN8(x) ((x)&~7)
68c0: 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74  ../*.** Assert t
68d0: 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20  hat the pointer 
68e0: 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20  X is aligned to 
68f0: 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61  an 8-byte bounda
6900: 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63  ry.  This.** mac
6910: 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  ro is used only 
6920: 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29 20  within assert() 
6930: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
6940: 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20  he code gets.** 
6950: 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65  all alignment re
6960: 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65  strictions corre
6970: 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74  ct..**.** Except
6980: 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  , if SQLITE_4_BY
6990: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
69a0: 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  C is defined, th
69b0: 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c  en the.** underl
69c0: 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d  ying malloc() im
69d0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67  plementation mig
69e0: 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62  ht return us 4-b
69f0: 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70  yte aligned.** p
6a00: 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61  ointers.  In tha
6a10: 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72  t case, only ver
6a20: 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e  ify 4-byte align
6a30: 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ment..*/.#ifdef 
6a40: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
6a50: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64  IGNED_MALLOC.# d
6a60: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
6a70: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
6a80: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
6a90: 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29  (char*)0)&3)==0)
6aa0: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
6ab0: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
6ac0: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
6ad0: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
6ae0: 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69  )0)&7)==0).#endi
6af0: 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65  f../*.** Disable
6b00: 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72   MMAP on platfor
6b10: 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20 6b  ms where it is k
6b20: 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b  nown to not work
6b30: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6b40: 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20  __OpenBSD__) || 
6b50: 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f  defined(__QNXNTO
6b60: 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  __).# undef SQLI
6b70: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6b80: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6b90: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
6ba0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
6bb0: 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73  efault maximum s
6bc0: 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73  ize of memory us
6bd0: 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70  ed by memory-map
6be0: 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56  ped I/O in the V
6bf0: 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41  FS.*/.#ifdef __A
6c00: 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65  PPLE__.# include
6c10: 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f   <TargetConditio
6c20: 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 23  nals.h>.#endif.#
6c30: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41  ifndef SQLITE_MA
6c40: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66  X_MMAP_SIZE.# if
6c50: 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78   defined(__linux
6c60: 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  __) \.  || defin
6c70: 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c  ed(_WIN32) \.  |
6c80: 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  | (defined(__APP
6c90: 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64  LE__) && defined
6ca0: 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20  (__MACH__)) \.  
6cb0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e  || defined(__sun
6cc0: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
6cd0: 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29 20 5c 0a  (__FreeBSD__) \.
6ce0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 44    || defined(__D
6cf0: 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20 20 20  ragonFly__).#   
6d00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
6d10: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66  X_MMAP_SIZE 0x7f
6d20: 66 66 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34  ff0000  /* 21474
6d30: 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a  18112 */.# else.
6d40: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6d50: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
6d60: 30 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69  0.# endif.# defi
6d70: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
6d80: 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20  AP_SIZE_xc 1 /* 
6d90: 65 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69  exclude from cti
6da0: 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  me.c */.#endif..
6db0: 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c  /*.** The defaul
6dc0: 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a  t MMAP_SIZE is z
6dd0: 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66  ero on all platf
6de0: 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20  orms.  Or, even 
6df0: 69 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64  if a larger.** d
6e00: 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45  efault MMAP_SIZE
6e10: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 74   is specified at
6e20: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d   compile-time, m
6e30: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 69 74  ake sure that it
6e40: 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63   does.** not exc
6e50: 65 65 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  eed the maximum 
6e60: 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69  mmap size..*/.#i
6e70: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
6e80: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  AULT_MMAP_SIZE.#
6e90: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
6ea0: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
6eb0: 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   0.# define SQLI
6ec0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
6ed0: 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a 20 45 78  SIZE_xc 1  /* Ex
6ee0: 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65  clude from ctime
6ef0: 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  .c */.#endif.#if
6f00: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
6f10: 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45  MMAP_SIZE>SQLITE
6f20: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
6f30: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45   undef SQLITE_DE
6f40: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a  FAULT_MMAP_SIZE.
6f50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6f60: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
6f70: 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  E SQLITE_MAX_MMA
6f80: 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f  P_SIZE.#endif../
6f90: 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66  *.** Only one of
6fa0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
6fb0: 54 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45  TAT3 or SQLITE_E
6fc0: 4e 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20  NABLE_STAT4 can 
6fd0: 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50  be defined..** P
6fe0: 72 69 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e  riority is given
6ff0: 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   to SQLITE_ENABL
7000: 45 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69 74  E_STAT4.  If eit
7010: 68 65 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c  her are defined,
7020: 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20   also.** define 
7030: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
7040: 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a  AT3_OR_STAT4.*/.
7050: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
7060: 41 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64  ABLE_STAT4.# und
7070: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
7080: 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20  _STAT3.# define 
7090: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
70a0: 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23  AT3_OR_STAT4 1.#
70b0: 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  elif SQLITE_ENAB
70c0: 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e  LE_STAT3.# defin
70d0: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
70e0: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31  STAT3_OR_STAT4 1
70f0: 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e  .#elif SQLITE_EN
7100: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
7110: 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  AT4.# undef SQLI
7120: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
7130: 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a  OR_STAT4.#endif.
7140: 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41  ./*.** SELECTTRA
7150: 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20  CE_ENABLED will 
7160: 62 65 20 65 69 74 68 65 72 20 31 20 6f 72 20 30  be either 1 or 0
7170: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
7180: 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20  ether or not.** 
7190: 74 68 65 20 53 65 6c 65 63 74 20 71 75 65 72 79  the Select query
71a0: 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61 63 69   generator traci
71b0: 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75 72 6e  ng logic is turn
71c0: 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65  ed on..*/.#if de
71d0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
71e0: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
71f0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c  QLITE_ENABLE_SEL
7200: 45 43 54 54 52 41 43 45 29 0a 23 20 64 65 66 69  ECTTRACE).# defi
7210: 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45  ne SELECTTRACE_E
7220: 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73 65 0a 23  NABLED 1.#else.#
7230: 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52   define SELECTTR
7240: 41 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a 23 65  ACE_ENABLED 0.#e
7250: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
7260: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
7270: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
7280: 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  re is used to st
7290: 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e  ore the busy-han
72a0: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
72b0: 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c   for a given sql
72c0: 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a 0a 2a  ite handle..**.*
72d0: 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62 75 73  * The sqlite.bus
72e0: 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20  yHandler member 
72f0: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20 73 74  of the sqlite st
7300: 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  ruct contains th
7310: 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61  e busy.** callba
7320: 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  ck for the datab
7330: 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61 63 68  ase handle. Each
7340: 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20 76 69   pager opened vi
7350: 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20  a the sqlite.** 
7360: 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73 65 64  handle is passed
7370: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 73 71   a pointer to sq
7380: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
7390: 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e 64 6c  . The busy-handl
73a0: 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69  er.** callback i
73b0: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f  s currently invo
73c0: 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69  ked only from wi
73d0: 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f  thin pager.c..*/
73e0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
73f0: 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75 73 79  BusyHandler Busy
7400: 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74 20  Handler;.struct 
7410: 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20  BusyHandler {.  
7420: 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76 6f 69  int (*xFunc)(voi
7430: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
7440: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
7450: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 3b  */.  void *pArg;
7460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7470: 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f 20  /* First arg to 
7480: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
7490: 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20  .  int nBusy;   
74a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
74b0: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
74c0: 68 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c  h each busy call
74d0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61   */.};../*.** Na
74e0: 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72  me of the master
74f0: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e   database table.
7500: 20 20 54 68 65 20 6d 61 73 74 65 72 20 64 61 74    The master dat
7510: 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69  abase table.** i
7520: 73 20 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c  s a special tabl
7530: 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  e that holds the
7540: 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69   names and attri
7550: 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20  butes of all.** 
7560: 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20  user tables and 
7570: 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66  indices..*/.#def
7580: 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20  ine MASTER_NAME 
7590: 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61        "sqlite_ma
75a0: 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45  ster".#define TE
75b0: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20  MP_MASTER_NAME  
75c0: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
75d0: 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ter"../*.** The 
75e0: 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65  root-page of the
75f0: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
7600: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69   table..*/.#defi
7610: 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20  ne MASTER_ROOT  
7620: 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
7630: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63  e name of the sc
7640: 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23  hema table..*/.#
7650: 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41  define SCHEMA_TA
7660: 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f  BLE(x)  ((!OMIT_
7670: 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f  TEMPDB)&&(x==1)?
7680: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
7690: 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f  :MASTER_NAME)../
76a0: 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e  *.** A convenien
76b0: 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65  ce macro that re
76c0: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
76d0: 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a   of elements in.
76e0: 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a  ** an array..*/.
76f0: 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a  #define ArraySiz
7700: 65 28 58 29 20 20 20 20 28 28 69 6e 74 29 28 73  e(X)    ((int)(s
7710: 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28  izeof(X)/sizeof(
7720: 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44  X[0])))../*.** D
7730: 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the 
7740: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f  argument is a po
7750: 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64  wer of two.*/.#d
7760: 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54  efine IsPowerOfT
7770: 77 6f 28 58 29 20 28 28 28 58 29 26 28 28 58 29  wo(X) (((X)&((X)
7780: 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  -1))==0)../*.** 
7790: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61  The following va
77a0: 6c 75 65 20 61 73 20 61 20 64 65 73 74 72 75 63  lue as a destruc
77b0: 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65  tor means to use
77c0: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
77d0: 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33  ..** The sqlite3
77e0: 44 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65  DbFree() routine
77f0: 20 72 65 71 75 69 72 65 73 20 74 77 6f 20 70 61   requires two pa
7800: 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64  rameters instead
7810: 20 6f 66 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70   of the.** one p
7820: 61 72 61 6d 65 74 65 72 20 74 68 61 74 20 64 65  arameter that de
7830: 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c  structors normal
7840: 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20  ly want.  So we 
7850: 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63  have to introduc
7860: 65 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20  e.** this magic 
7870: 76 61 6c 75 65 20 74 68 61 74 20 74 68 65 20 63  value that the c
7880: 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e  ode knows to han
7890: 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e  dle differently.
78a0: 20 20 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72    Any.** pointer
78b0: 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20   will work here 
78c0: 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73  as long as it is
78d0: 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53   distinct from S
78e0: 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20  QLITE_STATIC.** 
78f0: 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  and SQLITE_TRANS
7900: 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  IENT..*/.#define
7910: 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20   SQLITE_DYNAMIC 
7920: 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74    ((sqlite3_dest
7930: 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69  ructor_type)sqli
7940: 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a  te3MallocSize)..
7950: 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54  /*.** When SQLIT
7960: 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65  E_OMIT_WSD is de
7970: 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20  fined, it means 
7980: 74 68 61 74 20 74 68 65 20 74 61 72 67 65 74 20  that the target 
7990: 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a  platform does.**
79a0: 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69   not support Wri
79b0: 74 61 62 6c 65 20 53 74 61 74 69 63 20 44 61 74  table Static Dat
79c0: 61 20 28 57 53 44 29 20 73 75 63 68 20 61 73 20  a (WSD) such as 
79d0: 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69  global and stati
79e0: 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20  c variables..** 
79f0: 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75  All variables mu
7a00: 73 74 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20  st either be on 
7a10: 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e  the stack or dyn
7a20: 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
7a30: 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68  ed from.** the h
7a40: 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69  eap.  When WSD i
7a50: 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74  s unsupported, t
7a60: 68 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c  he variable decl
7a70: 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72  arations scatter
7a80: 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74  ed.** throughout
7a90: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65   the SQLite code
7aa0: 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e   must become con
7ab0: 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20  stants instead. 
7ac0: 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a   The SQLITE_WSD.
7ad0: 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  ** macro is used
7ae0: 20 66 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73   for this purpos
7af0: 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20  e.  And instead 
7b00: 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74  of referencing t
7b10: 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64  he variable.** d
7b20: 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20  irectly, we use 
7b30: 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20  its constant as 
7b40: 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20  a key to lookup 
7b50: 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c  the run-time all
7b60: 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72  ocated.** buffer
7b70: 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c   that holds real
7b80: 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20   variable.  The 
7b90: 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f  constant is also
7ba0: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72   the initializer
7bb0: 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d  .** for the run-
7bc0: 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62  time allocated b
7bd0: 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  uffer..**.** In 
7be0: 74 68 65 20 75 73 75 61 6c 20 63 61 73 65 20 77  the usual case w
7bf0: 68 65 72 65 20 57 53 44 20 69 73 20 73 75 70 70  here WSD is supp
7c00: 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54  orted, the SQLIT
7c10: 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c  E_WSD and GLOBAL
7c20: 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d  .** macros becom
7c30: 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76  e no-ops and hav
7c40: 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e  e zero performan
7c50: 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69  ce impact..*/.#i
7c60: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
7c70: 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53  _WSD.  #define S
7c80: 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a  QLITE_WSD const.
7c90: 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c    #define GLOBAL
7ca0: 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69  (t,v) (*(t*)sqli
7cb0: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f  te3_wsd_find((vo
7cc0: 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66  id*)&(v), sizeof
7cd0: 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20  (v))).  #define 
7ce0: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
7cf0: 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63  fig GLOBAL(struc
7d00: 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c  t Sqlite3Config,
7d10: 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a   sqlite3Config).
7d20: 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73    int sqlite3_ws
7d30: 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e  d_init(int N, in
7d40: 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71  t J);.  void *sq
7d50: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76  lite3_wsd_find(v
7d60: 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a  oid *K, int L);.
7d70: 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
7d80: 53 51 4c 49 54 45 5f 57 53 44 0a 20 20 23 64 65  SQLITE_WSD.  #de
7d90: 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29  fine GLOBAL(t,v)
7da0: 20 76 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   v.  #define sql
7db0: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
7dc0: 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23   sqlite3Config.#
7dd0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
7de0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
7df0: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 75  s are used to su
7e00: 70 70 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20  ppress compiler 
7e10: 77 61 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a  warnings and to.
7e20: 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72  ** make it clear
7e30: 20 74 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72   to human reader
7e40: 73 20 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f  s when a functio
7e50: 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 64  n parameter is d
7e60: 65 6c 69 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c  eliberately.** l
7e70: 65 66 74 20 75 6e 75 73 65 64 20 77 69 74 68 69  eft unused withi
7e80: 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20  n the body of a 
7e90: 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75  function. This u
7ea0: 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77  sually happens w
7eb0: 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f  hen.** a functio
7ec0: 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20  n is called via 
7ed0: 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74  a function point
7ee0: 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20  er. For example 
7ef0: 74 68 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74  the.** implement
7f00: 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20  ation of an SQL 
7f10: 61 67 67 72 65 67 61 74 65 20 73 74 65 70 20 63  aggregate step c
7f20: 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20  allback may not 
7f30: 75 73 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d  use the.** param
7f40: 65 74 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20  eter indicating 
7f50: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
7f60: 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74  guments passed t
7f70: 6f 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2c  o the aggregate,
7f80: 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20  .** if it knows 
7f90: 74 68 61 74 20 74 68 69 73 20 69 73 20 65 6e 66  that this is enf
7fa0: 6f 72 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e  orced elsewhere.
7fb0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75  .**.** When a fu
7fc0: 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72  nction parameter
7fd0: 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20   is not used at 
7fe0: 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62  all within the b
7ff0: 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ody of a functio
8000: 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65  n,.** it is gene
8010: 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74  rally named "Not
8020: 55 73 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65  Used" or "NotUse
8030: 64 32 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e  d2" to make thin
8040: 67 73 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e  gs even clearer.
8050: 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65  .** However, the
8060: 73 65 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c  se macros may al
8070: 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 73 75  so be used to su
8080: 70 70 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20  ppress warnings 
8090: 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61  related to.** pa
80a0: 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61  rameters that ma
80b0: 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20  y or may not be 
80c0: 75 73 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f  used depending o
80d0: 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70  n compilation op
80e0: 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78  tions..** For ex
80f0: 61 6d 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61  ample those para
8100: 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64  meters only used
8110: 20 69 6e 20 61 73 73 65 72 74 28 29 20 73 74 61   in assert() sta
8120: 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73  tements. In thes
8130: 65 0a 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70  e.** cases the p
8140: 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61  arameters are na
8150: 6d 65 64 20 61 73 20 70 65 72 20 74 68 65 20 75  med as per the u
8160: 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73  sual conventions
8170: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55  ..*/.#define UNU
8180: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29  SED_PARAMETER(x)
8190: 20 28 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69   (void)(x).#defi
81a0: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
81b0: 54 45 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44  TER2(x,y) UNUSED
81c0: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e  _PARAMETER(x),UN
81d0: 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79  USED_PARAMETER(y
81e0: 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64  )../*.** Forward
81f0: 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73   references to s
8200: 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70  tructures.*/.typ
8210: 65 64 65 66 20 73 74 72 75 63 74 20 41 67 67 49  edef struct AggI
8220: 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70  nfo AggInfo;.typ
8230: 65 64 65 66 20 73 74 72 75 63 74 20 41 75 74 68  edef struct Auth
8240: 43 6f 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74  Context AuthCont
8250: 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ext;.typedef str
8260: 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  uct AutoincInfo 
8270: 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70  AutoincInfo;.typ
8280: 65 64 65 66 20 73 74 72 75 63 74 20 42 69 74 76  edef struct Bitv
8290: 65 63 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64  ec Bitvec;.typed
82a0: 65 66 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65  ef struct CollSe
82b0: 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64  q CollSeq;.typed
82c0: 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e  ef struct Column
82d0: 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66   Column;.typedef
82e0: 20 73 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74   struct Db Db;.t
82f0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 63  ypedef struct Sc
8300: 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70  hema Schema;.typ
8310: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
8320: 20 45 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73   Expr;.typedef s
8330: 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 45  truct ExprList E
8340: 78 70 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66  xprList;.typedef
8350: 20 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e   struct ExprSpan
8360: 20 45 78 70 72 53 70 61 6e 3b 0a 74 79 70 65 64   ExprSpan;.typed
8370: 65 66 20 73 74 72 75 63 74 20 46 4b 65 79 20 46  ef struct FKey F
8380: 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Key;.typedef str
8390: 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74  uct FuncDestruct
83a0: 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  or FuncDestructo
83b0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
83c0: 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63 44 65  t FuncDef FuncDe
83d0: 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  f;.typedef struc
83e0: 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 46 75  t FuncDefHash Fu
83f0: 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70 65 64  ncDefHash;.typed
8400: 65 66 20 73 74 72 75 63 74 20 49 64 4c 69 73 74  ef struct IdList
8410: 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64 65 66   IdList;.typedef
8420: 20 73 74 72 75 63 74 20 49 6e 64 65 78 20 49 6e   struct Index In
8430: 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72  dex;.typedef str
8440: 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20  uct IndexSample 
8450: 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70  IndexSample;.typ
8460: 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 43  edef struct KeyC
8470: 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74  lass KeyClass;.t
8480: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65  ypedef struct Ke
8490: 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74  yInfo KeyInfo;.t
84a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
84b0: 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64  okaside Lookasid
84c0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
84d0: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20  t LookasideSlot 
84e0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74  LookasideSlot;.t
84f0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4d 6f  ypedef struct Mo
8500: 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70  dule Module;.typ
8510: 65 64 65 66 20 73 74 72 75 63 74 20 4e 61 6d 65  edef struct Name
8520: 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74  Context NameCont
8530: 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ext;.typedef str
8540: 75 63 74 20 50 61 72 73 65 20 50 61 72 73 65 3b  uct Parse Parse;
8550: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8560: 50 72 65 55 70 64 61 74 65 20 50 72 65 55 70 64  PreUpdate PreUpd
8570: 61 74 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ate;.typedef str
8580: 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65  uct PrintfArgume
8590: 6e 74 73 20 50 72 69 6e 74 66 41 72 67 75 6d 65  nts PrintfArgume
85a0: 6e 74 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nts;.typedef str
85b0: 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65  uct RowSet RowSe
85c0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
85d0: 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65  t Savepoint Save
85e0: 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73  point;.typedef s
85f0: 74 72 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c  truct Select Sel
8600: 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ect;.typedef str
8610: 75 63 74 20 53 51 4c 69 74 65 54 68 72 65 61 64  uct SQLiteThread
8620: 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b 0a 74   SQLiteThread;.t
8630: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
8640: 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63 74 44  lectDest SelectD
8650: 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  est;.typedef str
8660: 75 63 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c  uct SrcList SrcL
8670: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
8680: 75 63 74 20 53 74 72 41 63 63 75 6d 20 53 74 72  uct StrAccum Str
8690: 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73  Accum;.typedef s
86a0: 74 72 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c  truct Table Tabl
86b0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
86c0: 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c  t TableLock Tabl
86d0: 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73  eLock;.typedef s
86e0: 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65  truct Token Toke
86f0: 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  n;.typedef struc
8700: 74 20 54 72 65 65 56 69 65 77 20 54 72 65 65 56  t TreeView TreeV
8710: 69 65 77 3b 0a 74 79 70 65 64 65 66 20 73 74 72  iew;.typedef str
8720: 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67  uct Trigger Trig
8730: 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ger;.typedef str
8740: 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 54  uct TriggerPrg T
8750: 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64  riggerPrg;.typed
8760: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
8770: 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74 65  rStep TriggerSte
8780: 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  p;.typedef struc
8790: 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
87a0: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b   UnpackedRecord;
87b0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
87c0: 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74  VTable VTable;.t
87d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74  ypedef struct Vt
87e0: 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74  abCtx VtabCtx;.t
87f0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61  ypedef struct Wa
8800: 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70  lker Walker;.typ
8810: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
8820: 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b  eInfo WhereInfo;
8830: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8840: 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a  With With;../*.*
8850: 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67  * Defer sourcing
8860: 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65   vdbe.h and btre
8870: 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20  e.h until after 
8880: 74 68 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20  the "u8" and.** 
8890: 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79  "BusyHandler" ty
88a0: 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61  pedefs. vdbe.h a
88b0: 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66  lso requires a f
88c0: 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65  ew of the opaque
88d0: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65  .** pointer type
88e0: 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29  s (i.e. FuncDef)
88f0: 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a   defined above..
8900: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72  */.#include "btr
8910: 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  ee.h".#include "
8920: 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  vdbe.h".#include
8930: 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c   "pager.h".#incl
8940: 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23  ude "pcache.h".#
8950: 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23  include "os.h".#
8960: 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68  include "mutex.h
8970: 22 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45  "../* The SQLITE
8980: 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63  _EXTRA_DURABLE c
8990: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
89a0: 6f 6e 20 75 73 65 64 20 74 6f 20 73 65 74 20 74  on used to set t
89b0: 68 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79  he default.** sy
89c0: 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e  nchronous settin
89d0: 67 20 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20  g to EXTRA.  It 
89e0: 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70  is no longer sup
89f0: 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  ported..*/.#ifde
8a00: 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44  f SQLITE_EXTRA_D
8a10: 55 52 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67  URABLE.# warning
8a20: 20 55 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41   Use SQLITE_DEFA
8a30: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d  ULT_SYNCHRONOUS=
8a40: 33 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c  3 instead of SQL
8a50: 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c  ITE_EXTRA_DURABL
8a60: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
8a70: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
8a80: 4f 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a  ONOUS 3.#endif..
8a90: 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79  /*.** Default sy
8aa0: 6e 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73  nchronous levels
8ab0: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61  ..**.** Note tha
8ac0: 74 20 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c  t (for historcal
8ad0: 20 72 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41   reasons) the PA
8ae0: 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f  GER_SYNCHRONOUS_
8af0: 2a 20 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a  * macros differ.
8b00: 2a 2a 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49  ** from the SQLI
8b10: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
8b20: 52 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20  RONOUS value by 
8b30: 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20  1..**.**        
8b40: 20 20 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f     PAGER_SYNCHRO
8b50: 4e 4f 55 53 20 20 20 20 20 20 20 44 45 46 41 55  NOUS       DEFAU
8b60: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a  LT_SYNCHRONOUS.*
8b70: 2a 20 20 20 4f 46 46 20 20 20 20 20 20 20 20 20  *   OFF         
8b80: 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20    1             
8b90: 20 20 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a              0.**
8ba0: 20 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20     NORMAL       
8bb0: 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20   2              
8bc0: 20 20 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20             1.** 
8bd0: 20 20 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20    FULL          
8be0: 33 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  3               
8bf0: 20 20 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20            2.**  
8c00: 20 45 58 54 52 41 20 20 20 20 20 20 20 20 20 34   EXTRA         4
8c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c20: 20 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a           3.**.**
8c30: 20 54 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e   The "PRAGMA syn
8c40: 63 68 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d  chronous" statem
8c50: 65 6e 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68  ent also uses th
8c60: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d  e zero-based num
8c70: 62 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  bers..** In othe
8c80: 72 20 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72  r words, the zer
8c90: 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20  o-based numbers 
8ca0: 61 72 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c  are used for all
8cb0: 20 65 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66   external interf
8cc0: 61 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20  aces.** and the 
8cd0: 6f 6e 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73  one-based values
8ce0: 20 61 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e   are used intern
8cf0: 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ally..*/.#ifndef
8d00: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
8d10: 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65  SYNCHRONOUS.# de
8d20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
8d30: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  ULT_SYNCHRONOUS 
8d40: 28 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f  (PAGER_SYNCHRONO
8d50: 55 53 5f 46 55 4c 4c 2d 31 29 0a 23 65 6e 64 69  US_FULL-1).#endi
8d60: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
8d70: 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e  _DEFAULT_WAL_SYN
8d80: 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e  CHRONOUS.# defin
8d90: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
8da0: 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  _WAL_SYNCHRONOUS
8db0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
8dc0: 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 65 6e 64  SYNCHRONOUS.#end
8dd0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  if../*.** Each d
8de0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20  atabase file to 
8df0: 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74  be accessed by t
8e00: 68 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20  he system is an 
8e10: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
8e20: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
8e30: 75 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61  ucture.  There a
8e40: 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20  re normally two 
8e50: 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75  of these structu
8e60: 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71  res.** in the sq
8e70: 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79  lite.aDb[] array
8e80: 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65  .  aDb[0] is the
8e90: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
8ea0: 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31  ile and.** aDb[1
8eb0: 5d 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  ] is the databas
8ec0: 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68  e file used to h
8ed0: 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61  old temporary ta
8ee0: 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61  bles.  Additiona
8ef0: 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d  l.** databases m
8f00: 61 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a  ay be attached..
8f10: 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20  */.struct Db {. 
8f20: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
8f30: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
8f40: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
8f50: 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20  /.  Btree *pBt; 
8f60: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
8f70: 42 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65  B*Tree structure
8f80: 20 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61   for this databa
8f90: 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20  se file */.  u8 
8fa0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20  safety_level;   
8fb0: 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73    /* How aggress
8fc0: 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64  ive at syncing d
8fd0: 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20  ata to disk */. 
8fe0: 20 75 38 20 62 53 79 6e 63 53 65 74 3b 20 20 20   u8 bSyncSet;   
8ff0: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
9000: 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f   "PRAGMA synchro
9010: 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62 65 65 6e  nous=N" has been
9020: 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68 65 6d 61   run */.  Schema
9030: 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f   *pSchema;     /
9040: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64 61 74  * Pointer to dat
9050: 61 62 61 73 65 20 73 63 68 65 6d 61 20 28 70 6f  abase schema (po
9060: 73 73 69 62 6c 79 20 73 68 61 72 65 64 29 20 2a  ssibly shared) *
9070: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
9080: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
9090: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
90a0: 72 65 20 73 74 6f 72 65 73 20 61 20 64 61 74 61  re stores a data
90b0: 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a  base schema..**.
90c0: 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f  ** Most Schema o
90d0: 62 6a 65 63 74 73 20 61 72 65 20 61 73 73 6f 63  bjects are assoc
90e0: 69 61 74 65 64 20 77 69 74 68 20 61 20 42 74 72  iated with a Btr
90f0: 65 65 2e 20 20 54 68 65 20 65 78 63 65 70 74 69  ee.  The excepti
9100: 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53 63 68  on is.** the Sch
9110: 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45 4d 50  ema for the TEMP
9120: 20 64 61 74 61 62 61 65 73 20 28 73 71 6c 69 74   databaes (sqlit
9130: 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69 63 68  e3.aDb[1]) which
9140: 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64 69 6e   is free-standin
9150: 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65 64 20  g..** In shared 
9160: 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20 73 69  cache mode, a si
9170: 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62 6a 65  ngle Schema obje
9180: 63 74 20 63 61 6e 20 62 65 20 73 68 61 72 65 64  ct can be shared
9190: 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20   by multiple.** 
91a0: 42 74 72 65 65 73 20 74 68 61 74 20 72 65 66 65  Btrees that refe
91b0: 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20 75 6e  r to the same un
91c0: 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61 72 65  derlying BtShare
91d0: 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20  d object..**.** 
91e0: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61  Schema objects a
91f0: 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  re automatically
9200: 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77 68 65   deallocated whe
9210: 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72 65 65  n the last Btree
9220: 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e   that.** referen
9230: 63 65 73 20 74 68 65 6d 20 69 73 20 64 65 73 74  ces them is dest
9240: 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54 45 4d  royed.   The TEM
9250: 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61 6e 75  P Schema is manu
9260: 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a 2a 2a  ally freed by.**
9270: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29   sqlite3_close()
9280: 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61 64 20  ..*.** A thread 
9290: 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e 67 20  must be holding 
92a0: 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 63  a mutex on the c
92b0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42 74 72  orresponding Btr
92c0: 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74  ee in order.** t
92d0: 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d 61 20  o access Schema 
92e0: 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73 20 69  content.  This i
92f0: 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68 65 20  mplies that the 
9300: 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c 73 6f  thread must also
9310: 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61   be.** holding a
9320: 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 73 71   mutex on the sq
9330: 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e  lite3 connection
9340: 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20 6f 77   pointer that ow
9350: 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a  ns the Btree..**
9360: 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63 68 65   For a TEMP Sche
9370: 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e  ma, only the con
9380: 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 69 73  nection mutex is
9390: 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74   required..*/.st
93a0: 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a 20 20  ruct Schema {.  
93b0: 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  int schema_cooki
93c0: 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65  e;   /* Database
93d0: 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
93e0: 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20  number for this 
93f0: 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47  file */.  int iG
9400: 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f  eneration;     /
9410: 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  * Generation cou
9420: 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74  nter.  Increment
9430: 65 64 20 77 69 74 68 20 65 61 63 68 20 63 68 61  ed with each cha
9440: 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 62  nge */.  Hash tb
9450: 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a  lHash;        /*
9460: 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e 64 65   All tables inde
9470: 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20  xed by name */. 
9480: 20 48 61 73 68 20 69 64 78 48 61 73 68 3b 20 20   Hash idxHash;  
9490: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61        /* All (na
94a0: 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69 6e 64  med) indices ind
94b0: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
94c0: 20 20 48 61 73 68 20 74 72 69 67 48 61 73 68 3b    Hash trigHash;
94d0: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72         /* All tr
94e0: 69 67 67 65 72 73 20 69 6e 64 65 78 65 64 20 62  iggers indexed b
94f0: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
9500: 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20 20 20   fkeyHash;      
9510: 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20   /* All foreign 
9520: 6b 65 79 73 20 62 79 20 72 65 66 65 72 65 6e 63  keys by referenc
9530: 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f  ed table name */
9540: 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71 54 61  .  Table *pSeqTa
9550: 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73  b;      /* The s
9560: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
9570: 61 62 6c 65 20 75 73 65 64 20 62 79 20 41 55 54  able used by AUT
9580: 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20  OINCREMENT */.  
9590: 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20  u8 file_format; 
95a0: 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 66       /* Schema f
95b0: 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 66 6f  ormat version fo
95c0: 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20  r this file */. 
95d0: 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
95e0: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
95f0: 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79 20 74  coding used by t
9600: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
9610: 20 20 75 31 36 20 73 63 68 65 6d 61 46 6c 61 67    u16 schemaFlag
9620: 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20  s;     /* Flags 
9630: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
9640: 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20  this schema */. 
9650: 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a 65 3b   int cache_size;
9660: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9670: 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73 65 20  of pages to use 
9680: 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a 2f 0a  in the cache */.
9690: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  };../*.** These 
96a0: 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73  macros can be us
96b0: 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c  ed to test, set,
96c0: 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69   or clear bits i
96d0: 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70 53 63 68  n the.** Db.pSch
96e0: 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64  ema->flags field
96f0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 62 48  ..*/.#define DbH
9700: 61 73 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  asProperty(D,I,P
9710: 29 20 20 20 20 20 28 28 28 44 29 2d 3e 61 44 62  )     (((D)->aDb
9720: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  [I].pSchema->sch
9730: 65 6d 61 46 6c 61 67 73 26 28 50 29 29 3d 3d 28  emaFlags&(P))==(
9740: 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61  P)).#define DbHa
9750: 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49  sAnyProperty(D,I
9760: 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b  ,P)  (((D)->aDb[
9770: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
9780: 6d 61 46 6c 61 67 73 26 28 50 29 29 21 3d 30 29  maFlags&(P))!=0)
9790: 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74 50 72  .#define DbSetPr
97a0: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
97b0: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
97c0: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
97d0: 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20  gs|=(P).#define 
97e0: 44 62 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28  DbClearProperty(
97f0: 44 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e 61 44  D,I,P)   (D)->aD
9800: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
9810: 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a  hemaFlags&=~(P).
9820: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
9830: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44 42  alues for the DB
9840: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20  .pSchema->flags 
9850: 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  field..**.** The
9860: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
9870: 20 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74   flag is set aft
9880: 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
9890: 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a  schema has been.
98a0: 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74  ** read into int
98b0: 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65  ernal hash table
98c0: 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65  s..**.** DB_Unre
98d0: 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74  setViews means t
98e0: 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  hat one or more 
98f0: 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d  views have colum
9900: 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20  n names that.** 
9910: 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64  have been filled
9920: 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63   out.  If the sc
9930: 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68  hema changes, th
9940: 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ese column names
9950: 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65   might.** change
9960: 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65  s and so the vie
9970: 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62  w will need to b
9980: 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  e reset..*/.#def
9990: 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  ine DB_SchemaLoa
99a0: 64 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f  ded    0x0001  /
99b0: 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73  * The schema has
99c0: 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a   been loaded */.
99d0: 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73  #define DB_Unres
99e0: 65 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30  etViews    0x000
99f0: 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73  2  /* Some views
9a00: 20 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f   have defined co
9a10: 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64  lumn names */.#d
9a20: 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20  efine DB_Empty  
9a30: 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20           0x0004 
9a40: 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20   /* The file is 
9a50: 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20  empty (length 0 
9a60: 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  bytes) */../*.**
9a70: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   The number of d
9a80: 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f  ifferent kinds o
9a90: 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61  f things that ca
9aa0: 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20  n be limited.** 
9ab0: 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  using the sqlite
9ac0: 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66  3_limit() interf
9ad0: 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ace..*/.#define 
9ae0: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28  SQLITE_N_LIMIT (
9af0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52  SQLITE_LIMIT_WOR
9b00: 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a  KER_THREADS+1)..
9b10: 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  /*.** Lookaside 
9b20: 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20  malloc is a set 
9b30: 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75  of fixed-size bu
9b40: 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62  ffers that can b
9b50: 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74  e used.** to sat
9b60: 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73  isfy small trans
9b70: 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ient memory allo
9b80: 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20  cation requests 
9b90: 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61  for objects.** a
9ba0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
9bb0: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
9bc0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
9bd0: 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20    The use of.** 
9be0: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
9bf0: 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e   provides a sign
9c00: 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61  ificant performa
9c10: 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a  nce enhancement.
9c20: 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20  ** (approx 10%) 
9c30: 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65  by avoiding nume
9c40: 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65  rous malloc/free
9c50: 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20   requests while 
9c60: 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73  parsing.** SQL s
9c70: 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
9c80: 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73   The Lookaside s
9c90: 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63  tructure holds c
9ca0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66  onfiguration inf
9cb0: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
9cc0: 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  he.** lookaside 
9cd0: 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d  malloc subsystem
9ce0: 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c  .  Each availabl
9cf0: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
9d00: 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f  ion in.** the lo
9d10: 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65  okaside subsyste
9d20: 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61  m is stored on a
9d30: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
9d40: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a  LookasideSlot.**
9d50: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20   objects..**.** 
9d60: 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  Lookaside alloca
9d70: 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61  tions are only a
9d80: 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63  llowed for objec
9d90: 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f  ts that are asso
9da0: 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61  ciated.** with a
9db0: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
9dc0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
9dd0: 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20    Hence, schema 
9de0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e  information cann
9df0: 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20  ot.** be stored 
9e00: 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63  in lookaside bec
9e10: 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63  ause in shared c
9e20: 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63  ache mode the sc
9e30: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
9e40: 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79  .** is shared by
9e50: 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
9e60: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20  se connections. 
9e70: 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c   Therefore, whil
9e80: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68  e parsing.** sch
9e90: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  ema information,
9ea0: 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62   the Lookaside.b
9eb0: 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20  Enabled flag is 
9ec0: 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a  cleared so that.
9ed0: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** lookaside all
9ee0: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74  ocations are not
9ef0: 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75   used to constru
9f00: 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62  ct the schema ob
9f10: 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  jects..*/.struct
9f20: 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75   Lookaside {.  u
9f30: 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20 20 20  32 bDisable;    
9f40: 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f         /* Only o
9f50: 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b 61  perate the looka
9f60: 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f 20 2a  side when zero *
9f70: 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20  /.  u16 sz;     
9f80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
9f90: 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66  ize of each buff
9fa0: 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  er in bytes */. 
9fb0: 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20   u8 bMalloced;  
9fc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
9fd0: 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61 69   if pStart obtai
9fe0: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
9ff0: 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69  _malloc() */.  i
a000: 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20 20 20 20  nt nOut;        
a010: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
a020: 20 6f 66 20 62 75 66 66 65 72 73 20 63 75 72 72   of buffers curr
a030: 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20 6f 75  ently checked ou
a040: 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74  t */.  int mxOut
a050: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
a060: 2a 20 48 69 67 68 77 61 74 65 72 20 6d 61 72 6b  * Highwater mark
a070: 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69   for nOut */.  i
a080: 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20  nt anStat[3];   
a090: 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74         /* 0: hit
a0a0: 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73  s.  1: size miss
a0b0: 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73  es.  2: full mis
a0c0: 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69  ses */.  Lookasi
a0d0: 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20  deSlot *pFree;  
a0e0: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69   /* List of avai
a0f0: 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f  lable buffers */
a100: 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b  .  void *pStart;
a110: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
a120: 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61 69  rst byte of avai
a130: 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61  lable memory spa
a140: 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45  ce */.  void *pE
a150: 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
a160: 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70 61  /* First byte pa
a170: 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61  st end of availa
a180: 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a  ble space */.};.
a190: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
a1a0: 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69  Slot {.  Lookasi
a1b0: 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20  deSlot *pNext;  
a1c0: 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72    /* Next buffer
a1d0: 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20   in the list of 
a1e0: 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a  free buffers */.
a1f0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68  };../*.** A hash
a200: 20 74 61 62 6c 65 20 66 6f 72 20 62 75 69 6c 74   table for built
a210: 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  -in function def
a220: 69 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c  initions.  (Appl
a230: 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a  ication-defined.
a240: 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65  ** functions use
a250: 20 61 20 72 65 67 75 6c 61 72 20 74 61 62 6c 65   a regular table
a260: 20 74 61 62 6c 65 20 66 72 6f 6d 20 68 61 73 68   table from hash
a270: 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20  .h.).**.** Hash 
a280: 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72  each FuncDef str
a290: 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20  ucture into one 
a2a0: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61  of the FuncDefHa
a2b0: 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a  sh.a[] slots..**
a2c0: 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20   Collisions are 
a2d0: 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 75  on the FuncDef.u
a2e0: 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f  .pHash chain..*/
a2f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a300: 46 55 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a  FUNC_HASH_SZ 23.
a310: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61  struct FuncDefHa
a320: 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a  sh {.  FuncDef *
a330: 61 5b 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41  a[SQLITE_FUNC_HA
a340: 53 48 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a  SH_SZ];       /*
a350: 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20   Hash table for 
a360: 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a  functions */.};.
a370: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
a380: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
a390: 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61  ON./*.** Informa
a3a0: 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65  tion held in the
a3b0: 20 22 73 71 6c 69 74 65 33 22 20 64 61 74 61 62   "sqlite3" datab
a3c0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f  ase connection o
a3d0: 62 6a 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a  bject and used.*
a3e0: 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72  * to manage user
a3f0: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e   authentication.
a400: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
a410: 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  ct sqlite3_usera
a420: 75 74 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72  uth sqlite3_user
a430: 61 75 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c  auth;.struct sql
a440: 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a  ite3_userauth {.
a450: 20 20 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20    u8 authLevel; 
a460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a470: 2f 2a 20 43 75 72 72 65 6e 74 20 61 75 74 68 65  /* Current authe
a480: 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20  ntication level 
a490: 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57  */.  int nAuthPW
a4a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a4b0: 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
a4c0: 65 20 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74  e zAuthPW in byt
a4d0: 65 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  es */.  char *zA
a4e0: 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20  uthPW;          
a4f0: 20 20 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72        /* Passwor
a500: 64 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e  d used to authen
a510: 74 69 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72  ticate */.  char
a520: 20 2a 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20   *zAuthUser;    
a530: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
a540: 72 20 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61  r name used to a
a550: 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d  uthenticate */.}
a560: 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61  ;../* Allowed va
a570: 6c 75 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33  lues for sqlite3
a580: 5f 75 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65  _userauth.authLe
a590: 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  vel */.#define U
a5a0: 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20  AUTH_Unknown    
a5b0: 20 30 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e   0     /* Authen
a5c0: 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74  tication not yet
a5d0: 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66   checked */.#def
a5e0: 69 6e 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20  ine UAUTH_Fail  
a5f0: 20 20 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55        1     /* U
a600: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
a610: 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65  on failed */.#de
a620: 66 69 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20  fine UAUTH_User 
a630: 20 20 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20         2     /* 
a640: 41 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73  Authenticated as
a650: 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a   a normal user *
a660: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
a670: 41 64 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20  Admin       3   
a680: 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74    /* Authenticat
a690: 65 64 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73  ed as an adminis
a6a0: 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75  trator */../* Fu
a6b0: 6e 63 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c  nctions used onl
a6c0: 79 20 62 79 20 75 73 65 72 20 61 75 74 68 6f 72  y by user author
a6d0: 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f  ization logic */
a6e0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72  .int sqlite3User
a6f0: 41 75 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20  AuthTable(const 
a700: 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
a710: 74 65 33 55 73 65 72 41 75 74 68 43 68 65 63 6b  te3UserAuthCheck
a720: 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63  Login(sqlite3*,c
a730: 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b  onst char*,u8*);
a740: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65  .void sqlite3Use
a750: 72 41 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65  rAuthInit(sqlite
a760: 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
a770: 33 43 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74  3CryptFunc(sqlit
a780: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
a790: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
a7a0: 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  ;..#endif /* SQL
a7b0: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
a7c0: 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a  ICATION */../*.*
a7d0: 2a 20 74 79 70 65 64 65 66 20 66 6f 72 20 74 68  * typedef for th
a7e0: 65 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20  e authorization 
a7f0: 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f  callback functio
a800: 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  n..*/.#ifdef SQL
a810: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
a820: 49 43 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65  ICATION.  typede
a830: 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f  f int (*sqlite3_
a840: 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74  xauth)(void*,int
a850: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
a860: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
a870: 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  har*,.          
a880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a890: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
a8a0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
a8b0: 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20  #else.  typedef 
a8c0: 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61  int (*sqlite3_xa
a8d0: 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  uth)(void*,int,c
a8e0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
a8f0: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
a900: 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r*,.            
a910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a920: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b     const char*);
a930: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
a940: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50   SQLITE_OMIT_DEP
a950: 52 45 43 41 54 45 44 0a 2f 2a 20 54 68 69 73 20  RECATED./* This 
a960: 69 73 20 61 6e 20 65 78 74 72 61 20 53 51 4c 49  is an extra SQLI
a970: 54 45 5f 54 52 41 43 45 20 6d 61 63 72 6f 20 74  TE_TRACE macro t
a980: 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 22 6c  hat indicates "l
a990: 65 67 61 63 79 22 20 74 72 61 63 69 6e 67 0a 2a  egacy" tracing.*
a9a0: 2a 20 69 6e 20 74 68 65 20 73 74 79 6c 65 20 6f  * in the style o
a9b0: 66 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28  f sqlite3_trace(
a9c0: 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ).*/.#define SQL
a9d0: 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59  ITE_TRACE_LEGACY
a9e0: 20 20 30 78 38 30 0a 23 65 6c 73 65 0a 23 64 65    0x80.#else.#de
a9f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43  fine SQLITE_TRAC
aa00: 45 5f 4c 45 47 41 43 59 20 20 30 0a 23 65 6e 64  E_LEGACY  0.#end
aa10: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
aa20: 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a  T_DEPRECATED */.
aa30: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
aa40: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
aa50: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
aa60: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
aa70: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
aa80: 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a  truct sqlite3 {.
aa90: 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70    sqlite3_vfs *p
aaa0: 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Vfs;            
aab0: 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20  /* OS Interface 
aac0: 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65  */.  struct Vdbe
aad0: 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
aae0: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
aaf0: 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63  tive virtual mac
ab00: 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53  hines */.  CollS
ab10: 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20  eq *pDfltColl;  
ab20: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
ab30: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e  default collatin
ab40: 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41  g sequence (BINA
ab50: 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  RY) */.  sqlite3
ab60: 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20  _mutex *mutex;  
ab70: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63         /* Connec
ab80: 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20  tion mutex */.  
ab90: 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20  Db *aDb;        
aba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
abb0: 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f   All backends */
abc0: 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20  .  int nDb;     
abd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abe0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61   /* Number of ba
abf0: 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79  ckends currently
ac00: 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74   in use */.  int
ac10: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
ac20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69             /* Mi
ac30: 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67  scellaneous flag
ac40: 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a  s. See below */.
ac50: 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b    i64 lastRowid;
ac60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac70: 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74  /* ROWID of most
ac80: 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28   recent insert (
ac90: 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20  see above) */.  
aca0: 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20  i64 szMmap;     
acb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
acc0: 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69   Default mmap_si
acd0: 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20  ze setting */.  
ace0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65  unsigned int ope
acf0: 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a  nFlags;       /*
ad00: 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
ad10: 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70   sqlite3_vfs.xOp
ad20: 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72  en() */.  int er
ad30: 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  rCode;          
ad40: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
ad50: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64  recent error cod
ad60: 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a  e (SQLITE_*) */.
ad70: 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20    int errMask;  
ad80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad90: 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65  /* & result code
ada0: 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f  s with this befo
adb0: 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a  re returning */.
adc0: 20 20 69 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b    int iSysErrno;
add0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ade0: 2f 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65 20 66  /* Errno value f
adf0: 72 6f 6d 20 6c 61 73 74 20 73 79 73 74 65 6d 20  rom last system 
ae00: 65 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64  error */.  u16 d
ae10: 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20  bOptFlags;      
ae20: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67           /* Flag
ae30: 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61  s to enable/disa
ae40: 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ble optimization
ae50: 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  s */.  u8 enc;  
ae60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae70: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
ae80: 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75  oding */.  u8 au
ae90: 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20  toCommit;       
aea0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
aeb0: 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
aec0: 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73  . */.  u8 temp_s
aed0: 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20  tore;           
aee0: 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20       /* 1: file 
aef0: 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66  2: memory 0: def
af00: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c  ault */.  u8 mal
af10: 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20  locFailed;      
af20: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
af30: 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20  if we have seen 
af40: 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  a malloc failure
af50: 20 2a 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e   */.  u8 bBenign
af60: 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  Malloc;         
af70: 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65      /* Do not re
af80: 71 75 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72  quire OOMs if tr
af90: 75 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c  ue */.  u8 dfltL
afa0: 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ockMode;        
afb0: 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
afc0: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f   locking-mode fo
afd0: 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a  r attached dbs *
afe0: 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20  /.  signed char 
aff0: 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20  nextAutovac;    
b000: 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74    /* Autovac set
b010: 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55  ting after VACUU
b020: 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38  M if >=0 */.  u8
b030: 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20   suppressErr;   
b040: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
b050: 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f  o not issue erro
b060: 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72  r messages if tr
b070: 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f  ue */.  u8 vtabO
b080: 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20  nConflict;      
b090: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
b0a0: 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f  o return for s3_
b0b0: 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74  vtab_on_conflict
b0c0: 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61  () */.  u8 isTra
b0d0: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
b0e0: 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  t;    /* True if
b0f0: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73   the outermost s
b100: 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53  avepoint is a TS
b110: 20 2a 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b   */.  u8 mTrace;
b120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b130: 20 20 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d      /* zero or m
b140: 6f 72 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45  ore SQLITE_TRACE
b150: 20 66 6c 61 67 73 20 2a 2f 0a 20 20 69 6e 74 20   flags */.  int 
b160: 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20  nextPagesize;   
b170: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
b180: 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43 55  esize after VACU
b190: 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33  UM if >0 */.  u3
b1a0: 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20  2 magic;        
b1b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
b1c0: 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20  agic number for 
b1d0: 64 65 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d  detect library m
b1e0: 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  isuse */.  int n
b1f0: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
b200: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
b210: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
b220: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20  lite3_changes() 
b230: 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43  */.  int nTotalC
b240: 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20  hange;          
b250: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
b260: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
b270: 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20  total_changes() 
b280: 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b  */.  int aLimit[
b290: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b  SQLITE_N_LIMIT];
b2a0: 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a     /* Limits */.
b2b0: 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72    int nMaxSorter
b2c0: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
b2d0: 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20  /* Maximum size 
b2e0: 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65  of regions mappe
b2f0: 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20  d by sorter */. 
b300: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49   struct sqlite3I
b310: 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f  nitInfo {      /
b320: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  * Information us
b330: 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ed during initia
b340: 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  lization */.    
b350: 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20  int newTnum;    
b360: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
b370: 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65  ootpage of table
b380: 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
b390: 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62  ed */.    u8 iDb
b3a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b3b0: 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64        /* Which d
b3c0: 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20  b file is being 
b3d0: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
b3e0: 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20     u8 busy;     
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b400: 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e  * TRUE if curren
b410: 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67  tly initializing
b420: 20 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61   */.    u8 orpha
b430: 6e 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 20  nTrigger;       
b440: 20 20 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74      /* Last stat
b450: 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65  ement is orphane
b460: 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a  d TEMP trigger *
b470: 2f 0a 20 20 20 20 75 38 20 69 6d 70 6f 73 74 65  /.    u8 imposte
b480: 72 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  rTable;         
b490: 20 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e    /* Building an
b4a0: 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20   imposter table 
b4b0: 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69  */.  } init;.  i
b4c0: 6e 74 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20  nt nVdbeActive; 
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b4e0: 4e 75 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20  Number of VDBEs 
b4f0: 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e  currently runnin
b500: 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65  g */.  int nVdbe
b510: 52 65 61 64 3b 20 20 20 20 20 20 20 20 20 20 20  Read;           
b520: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
b530: 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74  f active VDBEs t
b540: 68 61 74 20 72 65 61 64 20 6f 72 20 77 72 69 74  hat read or writ
b550: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65  e */.  int nVdbe
b560: 57 72 69 74 65 3b 20 20 20 20 20 20 20 20 20 20  Write;          
b570: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
b580: 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74  f active VDBEs t
b590: 68 61 74 20 72 65 61 64 20 61 6e 64 20 77 72 69  hat read and wri
b5a0: 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62  te */.  int nVdb
b5b0: 65 45 78 65 63 3b 20 20 20 20 20 20 20 20 20 20  eExec;          
b5c0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
b5d0: 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20  of nested calls 
b5e0: 74 6f 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f  to VdbeExec() */
b5f0: 0a 20 20 69 6e 74 20 6e 56 44 65 73 74 72 6f 79  .  int nVDestroy
b600: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b610: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
b620: 74 69 76 65 20 4f 50 5f 56 44 65 73 74 72 6f 79  tive OP_VDestroy
b630: 20 6f 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20   operations */. 
b640: 20 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b   int nExtension;
b650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b660: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64  * Number of load
b670: 65 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f  ed extensions */
b680: 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e  .  void **aExten
b690: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
b6a0: 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61   /* Array of sha
b6b0: 72 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64  red library hand
b6c0: 6c 65 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  les */.  int (*x
b6d0: 54 72 61 63 65 29 28 75 33 32 2c 76 6f 69 64 2a  Trace)(u32,void*
b6e0: 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 29 3b 20 20  ,void*,void*);  
b6f0: 20 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63     /* Trace func
b700: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
b710: 70 54 72 61 63 65 41 72 67 3b 20 20 20 20 20 20  pTraceArg;      
b720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b730: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
b740: 74 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e  to the trace fun
b750: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
b760: 28 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64  (*xProfile)(void
b770: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36  *,const char*,u6
b780: 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e  4);  /* Profilin
b790: 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  g function */.  
b7a0: 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72  void *pProfileAr
b7b0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
b7c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
b7d0: 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65  ument to profile
b7e0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
b7f0: 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b  oid *pCommitArg;
b800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b810: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
b820: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28  xCommitCallback(
b830: 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f  ) */.  int (*xCo
b840: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f  mmitCallback)(vo
b850: 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f  id*);    /* Invo
b860: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
b870: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
b880: 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20  pRollbackArg;   
b890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
b8a0: 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c  rgument to xRoll
b8b0: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a  backCallback() *
b8c0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c  /.  void (*xRoll
b8d0: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f  backCallback)(vo
b8e0: 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64  id*); /* Invoked
b8f0: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
b900: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70  . */.  void *pUp
b910: 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20  dateArg;.  void 
b920: 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  (*xUpdateCallbac
b930: 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  k)(void*,int, co
b940: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
b950: 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74  char*,sqlite_int
b960: 36 34 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  64);.#ifdef SQLI
b970: 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44  TE_ENABLE_PREUPD
b980: 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69 64 20  ATE_HOOK.  void 
b990: 2a 70 50 72 65 55 70 64 61 74 65 41 72 67 3b 20  *pPreUpdateArg; 
b9a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
b9b0: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 50  t argument to xP
b9c0: 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  reUpdateCallback
b9d0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
b9e0: 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  eUpdateCallback)
b9f0: 28 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 65  (   /* Registere
ba00: 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  d using sqlite3_
ba10: 70 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b 28 29  preupdate_hook()
ba20: 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 2c 73 71   */.    void*,sq
ba30: 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68 61 72 20  lite3*,int,char 
ba40: 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63 6f 6e 73  const*,char cons
ba50: 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  t*,sqlite3_int64
ba60: 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 0a 20  ,sqlite3_int64. 
ba70: 20 29 3b 0a 20 20 50 72 65 55 70 64 61 74 65 20   );.  PreUpdate 
ba80: 2a 70 50 72 65 55 70 64 61 74 65 3b 20 20 20 20  *pPreUpdate;    
ba90: 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66      /* Context f
baa0: 6f 72 20 61 63 74 69 76 65 20 70 72 65 2d 75 70  or active pre-up
bab0: 64 61 74 65 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  date callback */
bac0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
bad0: 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
bae0: 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66 6e 64  TE_HOOK */.#ifnd
baf0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
bb00: 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43  AL.  int (*xWalC
bb10: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c  allback)(void *,
bb20: 20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73   sqlite3 *, cons
bb30: 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
bb40: 20 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b    void *pWalArg;
bb50: 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a  .#endif.  void(*
bb60: 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69  xCollNeeded)(voi
bb70: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
bb80: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63  eTextRep,const c
bb90: 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78  har*);.  void(*x
bba0: 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f  CollNeeded16)(vo
bbb0: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
bbc0: 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20   eTextRep,const 
bbd0: 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a  void*);.  void *
bbe0: 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a  pCollNeededArg;.
bbf0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
bc00: 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  *pErr;          
bc10: 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65  /* Most recent e
bc20: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
bc30: 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f    union {.    vo
bc40: 6c 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74  latile int isInt
bc50: 65 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75  errupted; /* Tru
bc60: 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74  e if sqlite3_int
bc70: 65 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20  errupt has been 
bc80: 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f  called */.    do
bc90: 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20  uble notUsed1;  
bca0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
bcb0: 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20  cer */.  } u1;. 
bcc0: 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61   Lookaside looka
bcd0: 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f  side;          /
bce0: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * Lookaside mall
bcf0: 6f 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  oc configuration
bd00: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
bd10: 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
bd20: 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f  ATION.  sqlite3_
bd30: 78 61 75 74 68 20 78 41 75 74 68 3b 20 20 20 20  xauth xAuth;    
bd40: 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20        /* Access 
bd50: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75  authorization fu
bd60: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
bd70: 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20   *pAuthArg;     
bd80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
bd90: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
bda0: 20 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e   access auth fun
bdb0: 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ction */.#endif.
bdc0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
bdd0: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
bde0: 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50  LBACK.  int (*xP
bdf0: 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29  rogress)(void *)
be00: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f  ;     /* The pro
be10: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a  gress callback *
be20: 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72  /.  void *pProgr
be30: 65 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20  essArg;         
be40: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
be50: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
be60: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69  llback */.  unsi
be70: 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70  gned nProgressOp
be80: 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  s;        /* Num
be90: 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66  ber of opcodes f
bea0: 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  or progress call
beb0: 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  back */.#endif.#
bec0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
bed0: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
bee0: 20 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20    int nVTrans;  
bef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf00: 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a  /* Allocated siz
bf10: 65 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a  e of aVTrans */.
bf20: 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20    Hash aModule; 
bf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf40: 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20  /* populated by 
bf50: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d  sqlite3_create_m
bf60: 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61  odule() */.  Vta
bf70: 62 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20  bCtx *pVtabCtx; 
bf80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
bf90: 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65  ntext for active
bfa0: 20 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72   vtab connect/cr
bfb0: 65 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65  eate */.  VTable
bfc0: 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20   **aVTrans;     
bfd0: 20 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75          /* Virtu
bfe0: 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f  al tables with o
bff0: 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  pen transactions
c000: 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44   */.  VTable *pD
c010: 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a  isconnect;    /*
c020: 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73   Disconnect thes
c030: 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65  e in next sqlite
c040: 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23  3_prepare() */.#
c050: 65 6e 64 69 66 0a 20 20 48 61 73 68 20 61 46 75  endif.  Hash aFu
c060: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
c070: 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61        /* Hash ta
c080: 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f  ble of connectio
c090: 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20  n functions */. 
c0a0: 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20   Hash aCollSeq; 
c0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c0c0: 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20  * All collating 
c0d0: 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42  sequences */.  B
c0e0: 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48  usyHandler busyH
c0f0: 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20  andler;      /* 
c100: 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  Busy callback */
c110: 0a 20 20 44 62 20 61 44 62 53 74 61 74 69 63 5b  .  Db aDbStatic[
c120: 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  2];             
c130: 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63 65   /* Static space
c140: 20 66 6f 72 20 74 68 65 20 32 20 64 65 66 61 75   for the 2 defau
c150: 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  lt backends */. 
c160: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76   Savepoint *pSav
c170: 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f  epoint;        /
c180: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
c190: 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20   savepoints */. 
c1a0: 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74   int busyTimeout
c1b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
c1c0: 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74  * Busy handler t
c1d0: 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20  imeout, in msec 
c1e0: 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f  */.  int nSavepo
c1f0: 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  int;            
c200: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c210: 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  non-transaction 
c220: 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20  savepoints */.  
c230: 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20  int nStatement; 
c240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c250: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
c260: 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  d statement-tran
c270: 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69  sactions  */.  i
c280: 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  64 nDeferredCons
c290: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
c2a0: 4e 65 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e  Net deferred con
c2b0: 73 74 72 61 69 6e 74 73 20 74 68 69 73 20 74 72  straints this tr
c2c0: 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20  ansaction. */.  
c2d0: 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d  i64 nDeferredImm
c2e0: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a  Cons;         /*
c2f0: 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 69 6d   Net deferred im
c300: 6d 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69  mediate constrai
c310: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e  nts */.  int *pn
c320: 42 79 74 65 73 46 72 65 65 64 3b 20 20 20 20 20  BytesFreed;     
c330: 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
c340: 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74   NULL, increment
c350: 20 74 68 69 73 20 69 6e 20 44 62 46 72 65 65 28   this in DbFree(
c360: 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ) */.#ifdef SQLI
c370: 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
c380: 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65  _NOTIFY.  /* The
c390: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61   following varia
c3a0: 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f  bles are all pro
c3b0: 74 65 63 74 65 64 20 62 79 20 74 68 65 20 53 54  tected by the ST
c3c0: 41 54 49 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a  ATIC_MASTER.  **
c3d0: 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73   mutex, not by s
c3e0: 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68  qlite3.mutex. Th
c3f0: 65 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63  ey are used by c
c400: 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e  ode in notify.c.
c410: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
c420: 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74  X.pUnlockConnect
c430: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
c440: 6e 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69  ns that X is wai
c450: 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20  ting for Y to.  
c460: 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61  ** unlock so tha
c470: 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64  t it can proceed
c480: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e  ..  **.  ** When
c490: 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e   X.pBlockingConn
c4a0: 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20  ection==Y, that 
c4b0: 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74  means that somet
c4c0: 68 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65  hing that X trie
c4d0: 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20  d.  ** tried to 
c4e0: 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c  do recently fail
c4f0: 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ed with an SQLIT
c500: 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64  E_LOCKED error d
c510: 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a  ue to locks.  **
c520: 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f   held by Y..  */
c530: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f  .  sqlite3 *pBlo
c540: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b  ckingConnection;
c550: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
c560: 68 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54  hat caused SQLIT
c570: 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71  E_LOCKED */.  sq
c580: 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f  lite3 *pUnlockCo
c590: 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20  nnection;       
c5a0: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
c5b0: 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75  n to watch for u
c5c0: 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  nlock */.  void 
c5d0: 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20  *pUnlockArg;    
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5f0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
c600: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f  xUnlockNotify */
c610: 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63  .  void (*xUnloc
c620: 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a  kNotify)(void **
c630: 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f  , int);  /* Unlo
c640: 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61  ck notify callba
c650: 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ck */.  sqlite3 
c660: 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20  *pNextBlocked;  
c670: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
c680: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f   list of all blo
c690: 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  cked connections
c6a0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65   */.#endif.#ifde
c6b0: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
c6c0: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73  THENTICATION.  s
c6d0: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20  qlite3_userauth 
c6e0: 61 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  auth;        /* 
c6f0: 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  User authenticat
c700: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ion information 
c710: 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
c720: 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64  .** A macro to d
c730: 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f  iscover the enco
c740: 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61  ding of a databa
c750: 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  se..*/.#define S
c760: 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28  CHEMA_ENC(db) ((
c770: 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68  db)->aDb[0].pSch
c780: 65 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e  ema->enc).#defin
c790: 65 20 45 4e 43 28 64 62 29 20 20 20 20 20 20 20  e ENC(db)       
c7a0: 20 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a   ((db)->enc)../*
c7b0: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
c7c0: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
c7d0: 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a  te3.flags..**.**
c7e0: 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
c7f0: 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61  ts (enforced via
c800: 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20   assert()):.**  
c810: 20 20 20 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46      SQLITE_FullF
c820: 53 79 6e 63 20 20 20 20 20 3d 3d 20 50 41 47 45  Sync     == PAGE
c830: 52 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20  R_FULLFSYNC.**  
c840: 20 20 20 20 53 51 4c 49 54 45 5f 43 6b 70 74 46      SQLITE_CkptF
c850: 75 6c 6c 46 53 79 6e 63 20 3d 3d 20 50 41 47 45  ullFSync == PAGE
c860: 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43  R_CKPT_FULLFSYNC
c870: 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  .**      SQLITE_
c880: 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20 3d 3d  CacheSpill    ==
c890: 20 50 41 47 45 52 5f 43 41 43 48 45 5f 53 50 49   PAGER_CACHE_SPI
c8a0: 4c 4c 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL.*/.#define SQ
c8b0: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 20  LITE_VdbeTrace  
c8c0: 20 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20      0x00000001  
c8d0: 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63 65  /* True to trace
c8e0: 20 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20   VDBE execution 
c8f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c900: 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20  E_InternChanges 
c910: 20 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20   0x00000002  /* 
c920: 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68  Uncommitted Hash
c930: 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a   table changes *
c940: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c950: 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20  _FullColNames   
c960: 30 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 53  0x00000004  /* S
c970: 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20  how full column 
c980: 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20  names on SELECT 
c990: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c9a0: 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20  E_FullFSync     
c9b0: 20 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20   0x00000008  /* 
c9c0: 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f  Use full fsync o
c9d0: 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f  n the backend */
c9e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c9f0: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30  CkptFullFSync  0
ca00: 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20 55 73  x00000010  /* Us
ca10: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72  e full fsync for
ca20: 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23   checkpoint */.#
ca30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61  define SQLITE_Ca
ca40: 63 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30  cheSpill     0x0
ca50: 30 30 30 30 30 32 30 20 20 2f 2a 20 4f 4b 20 74  0000020  /* OK t
ca60: 6f 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61  o spill pager ca
ca70: 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  che */.#define S
ca80: 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61  QLITE_ShortColNa
ca90: 6d 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20  mes  0x00000040 
caa0: 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63   /* Show short c
cab0: 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a  olumns names */.
cac0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
cad0: 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78  ountRows      0x
cae0: 30 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75  00000080  /* Cou
caf0: 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20  nt rows changed 
cb00: 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20  by INSERT, */.  
cb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb30: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c          /*   DEL
cb40: 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61  ETE, or UPDATE a
cb50: 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20  nd return */.   
cb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb80: 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20         /*   the 
cb90: 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61  count using a ca
cba0: 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69  llback. */.#defi
cbb0: 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61  ne SQLITE_NullCa
cbc0: 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30  llback   0x00000
cbd0: 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  100  /* Invoke t
cbe0: 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65  he callback once
cbf0: 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20   if the */.     
cc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc20: 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74       /*   result
cc30: 20 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f   set is empty */
cc40: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
cc50: 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 30  SqlTrace       0
cc60: 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 65  x00000200  /* De
cc70: 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73  bug print SQL as
cc80: 20 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a   it executes */.
cc90: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
cca0: 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78  dbeListing    0x
ccb0: 30 30 30 30 30 34 30 30 20 20 2f 2a 20 44 65 62  00000400  /* Deb
ccc0: 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56  ug listings of V
ccd0: 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a  DBE programs */.
cce0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
ccf0: 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78  riteSchema    0x
cd00: 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20  00000800  /* OK 
cd10: 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45  to update SQLITE
cd20: 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69  _MASTER */.#defi
cd30: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64  ne SQLITE_VdbeAd
cd40: 64 6f 70 54 72 61 63 65 20 30 78 30 30 30 30 31  dopTrace 0x00001
cd50: 30 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71  000  /* Trace sq
cd60: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 29  lite3VdbeAddOp()
cd70: 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e   calls */.#defin
cd80: 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43  e SQLITE_IgnoreC
cd90: 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 32 30  hecks   0x000020
cda0: 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e  00  /* Do not en
cdb0: 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73  force check cons
cdc0: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
cdd0: 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e  ne SQLITE_ReadUn
cde0: 63 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30 34  committed 0x0004
cdf0: 30 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72  000  /* For shar
ce00: 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f  ed-cache mode */
ce10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ce20: 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30  LegacyFileFmt  0
ce30: 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 43 72  x00008000  /* Cr
ce40: 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73  eate new databas
ce50: 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a  es in format 1 *
ce60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ce70: 5f 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20  _RecoveryMode   
ce80: 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 49  0x00010000  /* I
ce90: 67 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72  gnore schema err
cea0: 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ors */.#define S
ceb0: 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64  QLITE_ReverseOrd
cec0: 65 72 20 20 20 30 78 30 30 30 32 30 30 30 30 20  er   0x00020000 
ced0: 20 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72   /* Reverse unor
cee0: 64 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f  dered SELECTs */
cef0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
cf00: 52 65 63 54 72 69 67 67 65 72 73 20 20 20 20 30  RecTriggers    0
cf10: 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45 6e  x00040000  /* En
cf20: 61 62 6c 65 20 72 65 63 75 72 73 69 76 65 20 74  able recursive t
cf30: 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69  riggers */.#defi
cf40: 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67  ne SQLITE_Foreig
cf50: 6e 4b 65 79 73 20 20 20 20 30 78 30 30 30 38 30  nKeys    0x00080
cf60: 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20  000  /* Enforce 
cf70: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
cf80: 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66  traints  */.#def
cf90: 69 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49  ine SQLITE_AutoI
cfa0: 6e 64 65 78 20 20 20 20 20 20 30 78 30 30 31 30  ndex      0x0010
cfb0: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
cfc0: 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65  automatic indexe
cfd0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
cfe0: 49 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69  ITE_PreferBuilti
cff0: 6e 20 20 30 78 30 30 32 30 30 30 30 30 20 20 2f  n  0x00200000  /
d000: 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20  * Preference to 
d010: 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a  built-in funcs *
d020: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d030: 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20  _LoadExtension  
d040: 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45  0x00400000  /* E
d050: 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e  nable load_exten
d060: 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sion */.#define 
d070: 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 46 75  SQLITE_LoadExtFu
d080: 6e 63 20 20 20 20 30 78 30 30 38 30 30 30 30 30  nc    0x00800000
d090: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64    /* Enable load
d0a0: 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 53 51 4c  _extension() SQL
d0b0: 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
d0c0: 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72   SQLITE_EnableTr
d0d0: 69 67 67 65 72 20 20 30 78 30 31 30 30 30 30 30  igger  0x0100000
d0e0: 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e  0  /* True to en
d0f0: 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
d100: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d110: 44 65 66 65 72 46 4b 73 20 20 20 20 20 20 20 30  DeferFKs       0
d120: 78 30 32 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x02000000  /* De
d130: 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74  fer all FK const
d140: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
d150: 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e  e SQLITE_QueryOn
d160: 6c 79 20 20 20 20 20 20 30 78 30 34 30 30 30 30  ly      0x040000
d170: 30 30 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64  00  /* Disable d
d180: 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20  atabase changes 
d190: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d1a0: 45 5f 56 64 62 65 45 51 50 20 20 20 20 20 20 20  E_VdbeEQP       
d1b0: 20 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a 20   0x08000000  /* 
d1c0: 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55  Debug EXPLAIN QU
d1d0: 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66  ERY PLAN */.#def
d1e0: 69 6e 65 20 53 51 4c 49 54 45 5f 56 61 63 75 75  ine SQLITE_Vacuu
d1f0: 6d 20 20 20 20 20 20 20 20 20 30 78 31 30 30 30  m         0x1000
d200: 30 30 30 30 20 20 2f 2a 20 43 75 72 72 65 6e 74  0000  /* Current
d210: 6c 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a  ly in a VACUUM *
d220: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d230: 5f 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20  _CellSizeCk     
d240: 30 78 32 30 30 30 30 30 30 30 20 20 2f 2a 20 43  0x20000000  /* C
d250: 68 65 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20  heck btree cell 
d260: 73 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f  sizes on load */
d270: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d280: 46 74 73 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30  Fts3Tokenizer  0
d290: 78 34 30 30 30 30 30 30 30 20 20 2f 2a 20 45 6e  x40000000  /* En
d2a0: 61 62 6c 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69  able fts3_tokeni
d2b0: 7a 65 72 28 32 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  zer(2) */.../*.*
d2c0: 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71  * Bits of the sq
d2d0: 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73  lite3.dbOptFlags
d2e0: 20 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20   field that are 
d2f0: 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73  used by the.** s
d300: 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
d310: 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43  rol(SQLITE_TESTC
d320: 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  TRL_OPTIMIZATION
d330: 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65  S,...) interface
d340: 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65   to.** selective
d350: 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f  ly disable vario
d360: 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
d370: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
d380: 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e  ITE_QueryFlatten
d390: 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51  er 0x0001   /* Q
d3a0: 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20  uery flattening 
d3b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d3c0: 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20  E_ColumnCache   
d3d0: 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c   0x0002   /* Col
d3e0: 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  umn cache */.#de
d3f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75  fine SQLITE_Grou
d400: 70 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30  pByOrder   0x000
d410: 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63  4   /* GROUPBY c
d420: 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20  over of ORDERBY 
d430: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d440: 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74  E_FactorOutConst
d450: 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e   0x0008   /* Con
d460: 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20  stant factoring 
d470: 2a 2f 0a 2f 2a 20 20 20 20 20 20 20 20 20 20 20  */./*           
d480: 20 20 20 20 20 6e 6f 74 20 75 73 65 64 20 20 20       not used   
d490: 20 30 78 30 30 31 30 20 20 20 2f 2f 20 57 61 73   0x0010   // Was
d4a0: 3a 20 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c  : SQLITE_IdxReal
d4b0: 41 73 49 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  AsInt */.#define
d4c0: 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74   SQLITE_Distinct
d4d0: 4f 70 74 20 20 20 20 30 78 30 30 32 30 20 20 20  Opt    0x0020   
d4e0: 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e  /* DISTINCT usin
d4f0: 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  g indexes */.#de
d500: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65  fine SQLITE_Cove
d510: 72 49 64 78 53 63 61 6e 20 20 20 30 78 30 30 34  rIdxScan   0x004
d520: 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20  0   /* Covering 
d530: 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23  index scans */.#
d540: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72  define SQLITE_Or
d550: 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30  derByIdxJoin 0x0
d560: 30 38 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42  080   /* ORDER B
d570: 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69  Y of joins via i
d580: 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
d590: 53 51 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f 75  SQLITE_SubqCorou
d5a0: 74 69 6e 65 20 20 30 78 30 31 30 30 20 20 20 2f  tine  0x0100   /
d5b0: 2a 20 45 76 61 6c 75 61 74 65 20 73 75 62 71 75  * Evaluate subqu
d5c0: 65 72 69 65 73 20 61 73 20 63 6f 72 6f 75 74 69  eries as corouti
d5d0: 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nes */.#define S
d5e0: 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65  QLITE_Transitive
d5f0: 20 20 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a       0x0200   /*
d600: 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73   Transitive cons
d610: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
d620: 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f  ne SQLITE_OmitNo
d630: 6f 70 4a 6f 69 6e 20 20 20 30 78 30 34 30 30 20  opJoin   0x0400 
d640: 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64    /* Omit unused
d650: 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73   tables in joins
d660: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d670: 54 45 5f 53 74 61 74 33 34 20 20 20 20 20 20 20  TE_Stat34       
d680: 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73    0x0800   /* Us
d690: 65 20 53 54 41 54 33 20 6f 72 20 53 54 41 54 34  e STAT3 or STAT4
d6a0: 20 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65   data */.#define
d6b0: 20 53 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69   SQLITE_CursorHi
d6c0: 6e 74 73 20 20 20 20 30 78 32 30 30 30 20 20 20  nts    0x2000   
d6d0: 2f 2a 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72  /* Add OP_Cursor
d6e0: 48 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a  Hint opcodes */.
d6f0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
d700: 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78  llOpts        0x
d710: 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70  ffff   /* All op
d720: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a  timizations */..
d730: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72  /*.** Macros for
d740: 20 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72   testing whether
d750: 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61   or not optimiza
d760: 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65  tions are enable
d770: 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a  d or disabled..*
d780: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
d790: 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
d7a0: 53 54 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  ST.#define Optim
d7b0: 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28  izationDisabled(
d7c0: 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62  db, mask)  (((db
d7d0: 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d  )->dbOptFlags&(m
d7e0: 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  ask))!=0).#defin
d7f0: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e  e OptimizationEn
d800: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
d810: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
d820: 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29  lags&(mask))==0)
d830: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f  .#else.#define O
d840: 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62  ptimizationDisab
d850: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 30  led(db, mask)  0
d860: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
d870: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
d880: 20 6d 61 73 6b 29 20 20 20 31 0a 23 65 6e 64 69   mask)   1.#endi
d890: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
d8a0: 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f  true if it OK to
d8b0: 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74   factor constant
d8c0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74   expressions int
d8d0: 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61  o the initializa
d8e0: 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68  tion.** code. Th
d8f0: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
d900: 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72  Parse object for
d910: 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
d920: 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  tor..*/.#define 
d930: 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29  ConstFactorOk(P)
d940: 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61   ((P)->okConstFa
d950: 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  ctor)../*.** Pos
d960: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
d970: 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69   the sqlite.magi
d980: 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20  c field..** The 
d990: 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61  numbers are obta
d9a0: 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61  ined at random a
d9b0: 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69  nd have no speci
d9c0: 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65  al meaning, othe
d9d0: 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20  r.** than being 
d9e0: 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e  distinct from on
d9f0: 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64  e another..*/.#d
da00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
da10: 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30  IC_OPEN     0xa0
da20: 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62  29a697  /* Datab
da30: 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23  ase is open */.#
da40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
da50: 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39  GIC_CLOSED   0x9
da60: 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61  f3c2d33  /* Data
da70: 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a  base is closed *
da80: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
da90: 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20  _MAGIC_SICK     
daa0: 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45  0x4b771290  /* E
dab0: 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e  rror and awaitin
dac0: 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69  g close */.#defi
dad0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
dae0: 42 55 53 59 20 20 20 20 20 30 78 66 30 33 62 37  BUSY     0xf03b7
daf0: 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65  906  /* Database
db00: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
db10: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
db20: 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20  ITE_MAGIC_ERROR 
db30: 20 20 20 30 78 62 35 33 35 37 39 33 30 20 20 2f     0xb5357930  /
db40: 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  * An SQLITE_MISU
db50: 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  SE error occurre
db60: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
db70: 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45  ITE_MAGIC_ZOMBIE
db80: 20 20 20 30 78 36 34 63 66 66 63 37 66 20 20 2f     0x64cffc7f  /
db90: 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73  * Close with las
dba0: 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73  t statement clos
dbb0: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  e */../*.** Each
dbc0: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
dbd0: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69   defined by an i
dbe0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
dbf0: 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75  ollowing.** stru
dc00: 63 74 75 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62  cture.  For glob
dc10: 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  al built-in func
dc20: 74 69 6f 6e 73 20 28 65 78 3a 20 73 75 62 73 74  tions (ex: subst
dc30: 72 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e  r(), max(), coun
dc40: 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  t()).** a pointe
dc50: 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
dc60: 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74  ure is held in t
dc70: 68 65 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69  he sqlite3Builti
dc80: 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63  nFunctions objec
dc90: 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f  t..** For per-co
dca0: 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69 63 61  nnection applica
dcb0: 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e  tion-defined fun
dcc0: 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65  ctions, a pointe
dcd0: 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72  r to this.** str
dce0: 75 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69  ucture is held i
dcf0: 6e 20 74 68 65 20 64 62 2d 3e 61 48 61 73 68 20  n the db->aHash 
dd00: 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  hash table..**.*
dd10: 2a 20 54 68 65 20 75 2e 70 48 61 73 68 20 66 69  * The u.pHash fi
dd20: 65 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 74  eld is used by t
dd30: 68 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d  he global built-
dd40: 69 6e 73 2e 20 20 54 68 65 20 75 2e 70 44 65 73  ins.  The u.pDes
dd50: 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64  tructor.** field
dd60: 20 69 73 20 75 73 65 64 20 62 79 20 70 65 72 2d   is used by per-
dd70: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64  connection app-d
dd80: 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f  ef functions..*/
dd90: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20  .struct FuncDef 
dda0: 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20 20 20 20  {.  i8 nArg;    
ddb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
ddc0: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  er of arguments.
ddd0: 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d    -1 means unlim
dde0: 69 74 65 64 20 2a 2f 0a 20 20 75 31 36 20 66 75  ited */.  u16 fu
ddf0: 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  ncFlags;       /
de00: 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69  * Some combinati
de10: 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e  on of SQLITE_FUN
de20: 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  C_* */.  void *p
de30: 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a  UserData;     /*
de40: 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61 6d   User data param
de50: 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65  eter */.  FuncDe
de60: 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f  f *pNext;      /
de70: 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20  * Next function 
de80: 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a  with same name *
de90: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 46 75 6e  /.  void (*xSFun
dea0: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
deb0: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
dec0: 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e  value**); /* fun
ded0: 63 20 6f 72 20 61 67 67 2d 73 74 65 70 20 2a 2f  c or agg-step */
dee0: 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c  .  void (*xFinal
def0: 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  ize)(sqlite3_con
df00: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
df10: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 20           /* Agg 
df20: 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63  finalizer */.  c
df30: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
df40: 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20  ;   /* SQL name 
df50: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
df60: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
df70: 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68    FuncDef *pHash
df80: 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77  ;      /* Next w
df90: 69 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20  ith a different 
dfa0: 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d  name but the sam
dfb0: 65 20 68 61 73 68 20 2a 2f 0a 20 20 20 20 46 75  e hash */.    Fu
dfc0: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44  ncDestructor *pD
dfd0: 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20  estructor;   /* 
dfe0: 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65  Reference counte
dff0: 64 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e  d destructor fun
e000: 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a  ction */.  } u;.
e010: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73  };../*.** This s
e020: 74 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75  tructure encapsu
e030: 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e  lates a user-fun
e040: 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72  ction destructor
e050: 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a   callback (as.**
e060: 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e   configured usin
e070: 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  g create_functio
e080: 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65  n_v2()) and a re
e090: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e  ference counter.
e0a0: 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f   When.** create_
e0b0: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73  function_v2() is
e0c0: 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74   called to creat
e0d0: 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  e a function wit
e0e0: 68 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a  h a destructor,.
e0f0: 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65  ** a single obje
e100: 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
e110: 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75  is allocated. Fu
e120: 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65  ncDestructor.nRe
e130: 66 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 74  f is set to.** t
e140: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e  he number of Fun
e150: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65  cDef objects cre
e160: 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f  ated (either 1 o
e170: 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f  r 3, depending o
e180: 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20  n whether.** or 
e190: 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65  not the specifie
e1a0: 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51  d encoding is SQ
e1b0: 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46  LITE_ANY). The F
e1c0: 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74  uncDef.pDestruct
e1d0: 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20  or.** member of 
e1e0: 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20  each of the new 
e1f0: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
e200: 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20  is set to point 
e210: 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64  to the allocated
e220: 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74  .** FuncDestruct
e230: 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61  or..**.** Therea
e240: 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f  fter, when one o
e250: 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62  f the FuncDef ob
e260: 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64  jects is deleted
e270: 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a  , the reference.
e280: 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73  ** count on this
e290: 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65   object is decre
e2a0: 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20  mented. When it 
e2b0: 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64  reaches 0, the d
e2c0: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20  estructor.** is 
e2d0: 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20  invoked and the 
e2e0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73  FuncDestructor s
e2f0: 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a  tructure freed..
e300: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
e310: 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74  structor {.  int
e320: 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a   nRef;.  void (*
e330: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
e340: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  );.  void *pUser
e350: 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  Data;.};../*.** 
e360: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
e370: 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67  for FuncDef.flag
e380: 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  s.  Note that th
e390: 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54  e _LENGTH and _T
e3a0: 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20  YPEOF.** values 
e3b0: 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  must correspond 
e3c0: 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  to OPFLAG_LENGTH
e3d0: 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54  ARG and OPFLAG_T
e3e0: 59 50 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a  YPEOFARG.  And.*
e3f0: 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  * SQLITE_FUNC_CO
e400: 4e 53 54 41 4e 54 20 6d 75 73 74 20 62 65 20 74  NSTANT must be t
e410: 68 65 20 73 61 6d 65 20 61 73 20 53 51 4c 49 54  he same as SQLIT
e420: 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 2e  E_DETERMINISTIC.
e430: 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61    There.** are a
e440: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
e450: 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74  ts in the code t
e460: 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a  o verify this..*
e470: 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
e480: 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64  raints (enforced
e490: 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
e4a0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
e4b0: 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d 20  NC_MINMAX    == 
e4c0: 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20   NC_MinMaxAgg   
e4d0: 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41     == SF_MinMaxA
e4e0: 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  gg.**     SQLITE
e4f0: 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 20  _FUNC_LENGTH    
e500: 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  ==  OPFLAG_LENGT
e510: 48 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49  HARG.**     SQLI
e520: 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20  TE_FUNC_TYPEOF  
e530: 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59 50    ==  OPFLAG_TYP
e540: 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20 20 53 51  EOFARG.**     SQ
e550: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
e560: 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f 44  NT  ==  SQLITE_D
e570: 45 54 45 52 4d 49 4e 49 53 54 49 43 20 66 72 6f  ETERMINISTIC fro
e580: 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20 20 20 20  m the API.**    
e590: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43   SQLITE_FUNC_ENC
e5a0: 4d 41 53 4b 20 20 20 64 65 70 65 6e 64 73 20 6f  MASK   depends o
e5b0: 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d 61  n SQLITE_UTF* ma
e5c0: 63 72 6f 73 20 69 6e 20 74 68 65 20 41 50 49 0a  cros in the API.
e5d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e5e0: 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20  E_FUNC_ENCMASK  
e5f0: 30 78 30 30 30 33 20 2f 2a 20 53 51 4c 49 54 45  0x0003 /* SQLITE
e600: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54  _UTF8, SQLITE_UT
e610: 46 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45  F16BE or UTF16LE
e620: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e630: 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20  TE_FUNC_LIKE    
e640: 20 30 78 30 30 30 34 20 2f 2a 20 43 61 6e 64 69   0x0004 /* Candi
e650: 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b  date for the LIK
e660: 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a  E optimization *
e670: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e680: 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30  _FUNC_CASE     0
e690: 78 30 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65  x0008 /* Case-se
e6a0: 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70  nsitive LIKE-typ
e6b0: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  e function */.#d
e6c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
e6d0: 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30 30 31  C_EPHEM    0x001
e6e0: 30 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20  0 /* Ephemeral. 
e6f0: 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44 42   Delete with VDB
e700: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
e710: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
e720: 4c 20 30 78 30 30 32 30 20 2f 2a 20 73 71 6c 69  L 0x0020 /* sqli
e730: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
e740: 71 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c  q() might be cal
e750: 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  led*/.#define SQ
e760: 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48  LITE_FUNC_LENGTH
e770: 20 20 20 30 78 30 30 34 30 20 2f 2a 20 42 75 69     0x0040 /* Bui
e780: 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66  lt-in length() f
e790: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
e7a0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54  ne SQLITE_FUNC_T
e7b0: 59 50 45 4f 46 20 20 20 30 78 30 30 38 30 20 2f  YPEOF   0x0080 /
e7c0: 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f  * Built-in typeo
e7d0: 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  f() function */.
e7e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
e7f0: 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 30  UNC_COUNT    0x0
e800: 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  100 /* Built-in 
e810: 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61  count(*) aggrega
e820: 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  te */.#define SQ
e830: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53  LITE_FUNC_COALES
e840: 43 45 20 30 78 30 32 30 30 20 2f 2a 20 42 75 69  CE 0x0200 /* Bui
e850: 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29  lt-in coalesce()
e860: 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a   or ifnull() */.
e870: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
e880: 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30  UNC_UNLIKELY 0x0
e890: 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  400 /* Built-in 
e8a0: 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74  unlikely() funct
e8b0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
e8c0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
e8d0: 41 4e 54 20 30 78 30 38 30 30 20 2f 2a 20 43 6f  ANT 0x0800 /* Co
e8e0: 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69  nstant inputs gi
e8f0: 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75  ve a constant ou
e900: 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tput */.#define 
e910: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
e920: 41 58 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54  AX   0x1000 /* T
e930: 72 75 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e  rue for min() an
e940: 64 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74  d max() aggregat
e950: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
e960: 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
e970: 47 20 20 30 78 32 30 30 30 20 2f 2a 20 22 53 6c  G  0x2000 /* "Sl
e980: 6f 77 20 43 68 61 6e 67 65 22 2e 20 56 61 6c 75  ow Change". Valu
e990: 65 20 63 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e  e constant durin
e9a0: 67 20 61 0a 20 20 20 20 20 20 20 20 20 20 20 20  g a.            
e9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9c0: 20 20 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c          ** singl
e9d0: 65 20 71 75 65 72 79 20 2d 20 6d 69 67 68 74 20  e query - might 
e9e0: 63 68 61 6e 67 65 20 6f 76 65 72 20 74 69 6d 65  change over time
e9f0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66   */../*.** The f
ea00: 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d  ollowing three m
ea10: 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28  acros, FUNCTION(
ea20: 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e  ), LIKEFUNC() an
ea30: 64 20 41 47 47 52 45 47 41 54 45 28 29 20 61 72  d AGGREGATE() ar
ea40: 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65  e.** used to cre
ea50: 61 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69  ate the initiali
ea60: 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e  zers for the Fun
ea70: 63 44 65 66 20 73 74 72 75 63 74 75 72 65 73 2e  cDef structures.
ea80: 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f  .**.**   FUNCTIO
ea90: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
eaa0: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
eab0: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
eac0: 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20  create a scalar 
ead0: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
eae0: 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ion of a functio
eaf0: 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 69  n zName.**     i
eb00: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20  mplemented by C 
eb10: 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74  function xFunc t
eb20: 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67  hat accepts nArg
eb30: 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a   arguments. The.
eb40: 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73  **     value pas
eb50: 73 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63  sed as iArg is c
eb60: 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29  ast to a (void*)
eb70: 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61   and made availa
eb80: 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68  ble.**     as th
eb90: 65 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c  e user-data (sql
eba0: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29  ite3_user_data()
ebb0: 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69  ) for the functi
ebc0: 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61 72  on. If.**     ar
ebd0: 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72  gument bNC is tr
ebe0: 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c  ue, then the SQL
ebf0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
ec00: 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a  L flag is set..*
ec10: 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e  *.**   VFUNCTION
ec20: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
ec30: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
ec40: 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43  **     Like FUNC
ec50: 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f  TION except it o
ec60: 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f  mits the SQLITE_
ec70: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c  FUNC_CONSTANT fl
ec80: 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e  ag..**.**   DFUN
ec90: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
eca0: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
ecb0: 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65  unc).**     Like
ecc0: 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74   FUNCTION except
ecd0: 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51   it omits the SQ
ece0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
ecf0: 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20 20  NT flag and.**  
ed00: 20 20 20 61 64 64 73 20 74 68 65 20 53 51 4c 49     adds the SQLI
ed10: 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20  TE_FUNC_SLOCHNG 
ed20: 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72 20  flag.  Used for 
ed30: 64 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e 63  date & time func
ed40: 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e 64  tions.**     and
ed50: 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65 20   functions like 
ed60: 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29  sqlite_version()
ed70: 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67 65   that can change
ed80: 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e 67  , but not during
ed90: 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c 65  .**     a single
eda0: 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 20 20   query..**.**   
edb0: 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
edc0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
edd0: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29  , xStep, xFinal)
ede0: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
edf0: 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67  create an aggreg
ee00: 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  ate function def
ee10: 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  inition implemen
ee20: 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68  ted by.**     th
ee30: 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53  e C functions xS
ee40: 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20  tep and xFinal. 
ee50: 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70  The first four p
ee60: 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20  arameters.**    
ee70: 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64   are interpreted
ee80: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
ee90: 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20   as the first 4 
eea0: 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a  parameters to.**
eeb0: 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e       FUNCTION().
eec0: 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e  .**.**   LIKEFUN
eed0: 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  C(zName, nArg, p
eee0: 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20  Arg, flags).**  
eef0: 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
ef00: 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74  e a scalar funct
ef10: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  ion definition o
ef20: 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61  f a function zNa
ef30: 6d 65 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61  me.**     that a
ef40: 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75  ccepts nArg argu
ef50: 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70  ments and is imp
ef60: 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61  lemented by a ca
ef70: 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20 20 20 20 66  ll to C.**     f
ef80: 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63  unction likeFunc
ef90: 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20  . Argument pArg 
efa0: 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f  is cast to a (vo
efb0: 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a  id *) and made.*
efc0: 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20  *     available 
efd0: 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  as the function 
efe0: 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74  user-data (sqlit
eff0: 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e  e3_user_data()).
f000: 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63   The.**     Func
f010: 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62  Def.flags variab
f020: 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  le is set to the
f030: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
f040: 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20   the flags.**   
f050: 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a    parameter..*/.
f060: 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e  #define FUNCTION
f070: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
f080: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
f090: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
f0a0: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
f0b0: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
f0c0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
f0d0: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
f0e0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
f0f0: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
f100: 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
f110: 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49  .#define VFUNCTI
f120: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
f130: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
f140: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
f150: 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
f160: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
f170: 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
f180: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
f190: 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
f1a0: 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
f1b0: 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28  efine DFUNCTION(
f1c0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
f1d0: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
f1e0: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
f1f0: 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51  _FUNC_SLOCHNG|SQ
f200: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
f210: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
f220: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
f230: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
f240: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
f250: 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
f260: 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32  define FUNCTION2
f270: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
f280: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20  rg, bNC, xFunc, 
f290: 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20  extraFlags) \.  
f2a0: 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e  {nArg,SQLITE_FUN
f2b0: 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
f2c0: 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
f2d0: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
f2e0: 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20  )|extraFlags,\. 
f2f0: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
f300: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
f310: 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
f320: 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 53 54  {0} }.#define ST
f330: 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  R_FUNCTION(zName
f340: 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e  , nArg, pArg, bN
f350: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
f360: 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
f370: 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f  _SLOCHNG|SQLITE_
f380: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
f390: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
f3a0: 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78   \.   pArg, 0, x
f3b0: 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
f3c0: 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46   }.#define LIKEF
f3d0: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
f3e0: 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20   arg, flags) \. 
f3f0: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
f400: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
f410: 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20  ITE_UTF8|flags, 
f420: 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67  \.   (void *)arg
f430: 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30  , 0, likeFunc, 0
f440: 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
f450: 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54  #define AGGREGAT
f460: 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  E(zName, nArg, a
f470: 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
f480: 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67  Final) \.  {nArg
f490: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
f4a0: 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
f4b0: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
f4c0: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
f4d0: 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78  arg), 0, xStep,x
f4e0: 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30  Final,#zName, {0
f4f0: 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45  }}.#define AGGRE
f500: 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  GATE2(zName, nAr
f510: 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65  g, arg, nc, xSte
f520: 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61  p, xFinal, extra
f530: 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  Flags) \.  {nArg
f540: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
f550: 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
f560: 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
f570: 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  gs, \.   SQLITE_
f580: 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c  INT_TO_PTR(arg),
f590: 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
f5a0: 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 2f  ,#zName, {0}}../
f5b0: 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74  *.** All current
f5c0: 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   savepoints are 
f5d0: 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
f5e0: 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
f5f0: 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70   at.** sqlite3.p
f600: 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66  Savepoint. The f
f610: 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20  irst element in 
f620: 74 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20  the list is the 
f630: 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a  most recently.**
f640: 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e   opened savepoin
f650: 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72  t. Savepoints ar
f660: 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c  e added to the l
f670: 69 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a  ist by the vdbe.
f680: 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20  ** OP_Savepoint 
f690: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
f6a0: 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74  struct Savepoint
f6b0: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
f6c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
f6d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65           /* Save
f6e0: 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d  point name (nul-
f6f0: 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20  terminated) */. 
f700: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
f710: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
f720: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
f730: 66 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69  f deferred fk vi
f740: 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36  olations */.  i6
f750: 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  4 nDeferredImmCo
f760: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
f770: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
f780: 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20  eferred imm fk. 
f790: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
f7a0: 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
f7b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65           /* Pare
f7c0: 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66  nt savepoint (if
f7d0: 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   any) */.};../*.
f7e0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
f7f0: 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65   are used as the
f800: 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65   second paramete
f810: 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65  r to sqlite3Save
f820: 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20  point(),.** and 
f830: 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  as the P1 argume
f840: 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76  nt to the OP_Sav
f850: 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
f860: 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  on..*/.#define S
f870: 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20  AVEPOINT_BEGIN  
f880: 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41      0.#define SA
f890: 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
f8a0: 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56     1.#define SAV
f8b0: 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
f8c0: 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68    2.../*.** Each
f8d0: 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28   SQLite module (
f8e0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65  virtual table de
f8f0: 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66  finition) is def
f900: 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  ined by an.** in
f910: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
f920: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
f930: 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  e, stored in the
f940: 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65   sqlite3.aModule
f950: 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a  .** hash table..
f960: 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  */.struct Module
f970: 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74   {.  const sqlit
f980: 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
f990: 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c  le;       /* Cal
f9a0: 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a  lback pointers *
f9b0: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
f9c0: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
f9d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
f9e0: 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
f9f0: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
fa00: 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20  void *pAux;     
fa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa20: 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73       /* pAux pas
fa30: 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
fa40: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
fa50: 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
fa60: 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  d *);           
fa70: 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72   /* Module destr
fa80: 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  uctor function *
fa90: 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45 70 6f 54  /.  Table *pEpoT
faa0: 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ab;             
fab0: 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e           /* Epon
fac0: 79 6d 6f 75 73 20 74 61 62 6c 65 20 66 6f 72 20  ymous table for 
fad0: 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d  this module */.}
fae0: 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ;../*.** informa
faf0: 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
fb00: 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c  column of an SQL
fb10: 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69   table is held i
fb20: 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  n an instance.**
fb30: 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
fb40: 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f  re..*/.struct Co
fb50: 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lumn {.  char *z
fb60: 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d  Name;     /* Nam
fb70: 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
fb80: 2c 20 5c 30 30 30 2c 20 74 68 65 6e 20 74 68 65  , \000, then the
fb90: 20 74 79 70 65 20 2a 2f 0a 20 20 45 78 70 72 20   type */.  Expr 
fba0: 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44  *pDflt;     /* D
fbb0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
fbc0: 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
fbd0: 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20   char *zColl;   
fbe0: 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
fbf0: 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c  equence.  If NUL
fc00: 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66 61 75  L, use the defau
fc10: 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75  lt */.  u8 notNu
fc20: 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f  ll;      /* An O
fc30: 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64  E_ code for hand
fc40: 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20  ling a NOT NULL 
fc50: 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20  constraint */.  
fc60: 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
fc70: 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53   /* One of the S
fc80: 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61  QLITE_AFF_... va
fc90: 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45  lues */.  u8 szE
fca0: 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73  st;        /* Es
fcb0: 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20  timated size of 
fcc0: 76 61 6c 75 65 20 69 6e 20 74 68 69 73 20 63 6f  value in this co
fcd0: 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54  lumn. sizeof(INT
fce0: 29 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c  )==1 */.  u8 col
fcf0: 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f  Flags;     /* Bo
fd00: 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73  olean properties
fd10: 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20  .  See COLFLAG_ 
fd20: 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f  defines below */
fd30: 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20  .};../* Allowed 
fd40: 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d  values for Colum
fd50: 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23  n.colFlags:.*/.#
fd60: 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50  define COLFLAG_P
fd70: 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20  RIMKEY  0x0001  
fd80: 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70    /* Column is p
fd90: 61 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61  art of the prima
fda0: 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ry key */.#defin
fdb0: 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  e COLFLAG_HIDDEN
fdc0: 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20     0x0002    /* 
fdd0: 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20  A hidden column 
fde0: 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  in a virtual tab
fdf0: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  le */.#define CO
fe00: 4c 46 4c 41 47 5f 48 41 53 54 59 50 45 20 20 30  LFLAG_HASTYPE  0
fe10: 78 30 30 30 34 20 20 20 20 2f 2a 20 54 79 70 65  x0004    /* Type
fe20: 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77 73 20 63 6f   name follows co
fe30: 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 0a 2f 2a  lumn name */../*
fe40: 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67  .** A "Collating
fe50: 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64 65   Sequence" is de
fe60: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
fe70: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
fe80: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
fe90: 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79  re. Conceptually
fea0: 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  , a collating se
feb0: 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20  quence consists 
fec0: 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a  of a name and.**
fed0: 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f   a comparison ro
fee0: 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e  utine that defin
fef0: 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  es the order of 
ff00: 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a  that sequence..*
ff10: 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e  *.** If CollSeq.
ff20: 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74  xCmp is NULL, it
ff30: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a   means that the.
ff40: 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
ff50: 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e  uence is undefin
ff60: 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69  ed.  Indices bui
ff70: 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e  lt on an undefin
ff80: 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20  ed.** collating 
ff90: 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74  sequence may not
ffa0: 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74   be read or writ
ffb0: 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ten..*/.struct C
ffc0: 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20  ollSeq {.  char 
ffd0: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
ffe0: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
fff0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
10000 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  ce, UTF-8 encode
10010 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  d */.  u8 enc;  
10020 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10030 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61  Text encoding ha
10040 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20  ndled by xCmp() 
10050 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
10060 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69  ;          /* Fi
10070 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
10080 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20  xCmp() */.  int 
10090 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e  (*xCmp)(void*,in
100a0 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  t, const void*, 
100b0 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
100c0 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  );.  void (*xDel
100d0 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65  )(void*);  /* De
100e0 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73  structor for pUs
100f0 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
10100 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e  A sort order can
10110 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f   be either ASC o
10120 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69  r DESC..*/.#defi
10130 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43  ne SQLITE_SO_ASC
10140 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72         0  /* Sor
10150 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  t in ascending o
10160 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rder */.#define 
10170 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20  SQLITE_SO_DESC  
10180 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69      1  /* Sort i
10190 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
101a0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
101b0 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44  ITE_SO_UNDEFINED
101c0 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f   -1 /* No sort o
101d0 72 64 65 72 20 73 70 65 63 69 66 69 65 64 20 2a  rder specified *
101e0 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20  /../*.** Column 
101f0 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a  affinity types..
10200 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64  **.** These used
10210 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69   to have mnemoni
10220 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20  c name like 'i' 
10230 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  for SQLITE_AFF_I
10240 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74  NTEGER and.** 't
10250 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
10260 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63  _TEXT.  But we c
10270 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65  an save a little
10280 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f   space and impro
10290 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20  ve.** the speed 
102a0 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62  a little by numb
102b0 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73  ering the values
102c0 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 0a   consecutively..
102d0 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72  **.** But rather
102e0 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68   than start with
102f0 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69   0 or 1, we begi
10300 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68 61  n with 'A'.  Tha
10310 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d  t way,.** when m
10320 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79  ultiple affinity
10330 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61   types are conca
10340 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73  tenated into a s
10350 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65  tring and.** use
10360 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72  d as the P4 oper
10370 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62  and, they will b
10380 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e  e more readable.
10390 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f  .**.** Note also
103a0 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69   that the numeri
103b0 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75  c types are grou
103c0 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20  ped together so 
103d0 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20  that testing.** 
103e0 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79  for a numeric ty
103f0 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  pe is a single c
10400 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20  omparison.  And 
10410 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69 73  the BLOB type is
10420 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69   first..*/.#defi
10430 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c  ne SQLITE_AFF_BL
10440 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65 66 69  OB     'A'.#defi
10450 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ne SQLITE_AFF_TE
10460 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66 69  XT     'B'.#defi
10470 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ne SQLITE_AFF_NU
10480 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66 69  MERIC  'C'.#defi
10490 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ne SQLITE_AFF_IN
104a0 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66 69  TEGER  'D'.#defi
104b0 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ne SQLITE_AFF_RE
104c0 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66  AL     'E'..#def
104d0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d  ine sqlite3IsNum
104e0 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20  ericAffinity(X) 
104f0 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46   ((X)>=SQLITE_AF
10500 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a  F_NUMERIC)../*.*
10510 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
10520 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73  _MASK values mas
10530 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69  ks off the signi
10540 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61  ficant bits of a
10550 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61  n.** affinity va
10560 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lue..*/.#define 
10570 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
10580 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20      0x47../*.** 
10590 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76  Additional bit v
105a0 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62  alues that can b
105b0 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61  e ORed with an a
105c0 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a  ffinity without.
105d0 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20  ** changing the 
105e0 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20  affinity..**.** 
105f0 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55  The SQLITE_NOTNU
10600 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d  LL flag is a com
10610 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c  bination of NULL
10620 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c  EQ and JUMPIFNUL
10630 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20  L..** It causes 
10640 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 66  an assert() to f
10650 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f 70  ire if either op
10660 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61  erand to a compa
10670 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f  rison.** operato
10680 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69  r is NULL.  It i
10690 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74 61  s added to certa
106a0 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70  in comparison op
106b0 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72  erators to.** pr
106c0 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70 65  ove that the ope
106d0 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73  rands are always
106e0 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64   NOT NULL..*/.#d
106f0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d  efine SQLITE_JUM
10700 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20  PIFNULL   0x10  
10710 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68  /* jumps if eith
10720 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
10730 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL */.#define SQ
10740 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20  LITE_STOREP2    
10750 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65    0x20  /* Store
10760 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50   result in reg[P
10770 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a  2] rather than j
10780 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ump */.#define S
10790 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20  QLITE_NULLEQ    
107a0 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c     0x80  /* NULL
107b0 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65  =NULL */.#define
107c0 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20   SQLITE_NOTNULL 
107d0 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73       0x90  /* As
107e0 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e  sert that operan
107f0 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c  ds are never NUL
10800 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  L */../*.** An o
10810 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
10820 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  pe is created fo
10830 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74  r each virtual t
10840 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a  able present in.
10850 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
10860 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66  schema..**.** If
10870 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
10880 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
10890 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e  then there is on
108a0 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
108b0 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
108c0 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
108d0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71  e connection (sq
108e0 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65  lite3*) that use
108f0 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20  s the shared.** 
10900 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20  schema. This is 
10910 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74  because each dat
10920 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
10930 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77   requires its ow
10940 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74  n unique.** inst
10950 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69  ance of the sqli
10960 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
10970 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
10980 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
10990 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
109a0 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61  ion. sqlite3_vta
109b0 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e  b* handles can n
109c0 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74  ot be shared bet
109d0 77 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65  ween.** database
109e0 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76   connections, ev
109f0 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74  en when the rest
10a00 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72   of the in-memor
10a10 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 73 63  y database.** sc
10a20 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
10a30 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  as the implement
10a40 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72  ation often stor
10a50 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  es the database.
10a60 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ** connection ha
10a70 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69  ndle passed to i
10a80 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65  t via the xConne
10a90 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28  ct() or xCreate(
10aa0 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69  ) method.** duri
10ab0 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
10ac0 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68  n internally. Th
10ad0 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  is database conn
10ae0 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61  ection handle ma
10af0 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65  y.** then be use
10b00 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c  d by the virtual
10b10 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
10b20 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20  ation to access 
10b30 72 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77  real tables.** w
10b40 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61  ithin the databa
10b50 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79  se. So that they
10b60 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20   appear as part 
10b70 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a  of the callers.*
10b80 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
10b90 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65  hese accesses ne
10ba0 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69  ed to be made vi
10bb0 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  a the same datab
10bc0 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
10bd0 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74  n as that used t
10be0 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70  o execute SQL op
10bf0 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  erations on the 
10c00 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
10c10 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20  *.** All VTable 
10c20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72  objects that cor
10c30 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e  respond to a sin
10c40 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73  gle table in a s
10c50 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  hared.** databas
10c60 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69  e schema are ini
10c70 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e  tially stored in
10c80 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70   a linked-list p
10c90 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20  ointed to by.** 
10ca0 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
10cb0 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  e member variabl
10cc0 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
10cd0 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a  onding Table obj
10ce0 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ect..** When an 
10cf0 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
10d00 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72  ) operation is r
10d10 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73  equired to acces
10d20 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  s the virtual.**
10d30 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63   table, it searc
10d40 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72  hes the list for
10d50 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74   the VTable that
10d60 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
10d70 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
10d80 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67  connection doing
10d90 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73   the preparing s
10da0 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20  o as to use the 
10db0 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74  correct.** sqlit
10dc0 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
10dd0 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  in the compiled 
10de0 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  query..**.** Whe
10df0 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54  n an in-memory T
10e00 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64  able object is d
10e10 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d  eleted (for exam
10e20 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  ple when the.** 
10e30 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20  schema is being 
10e40 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d  reloaded for som
10e50 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56  e reason), the V
10e60 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72  Table objects ar
10e70 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64  e not.** deleted
10e80 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33   and the sqlite3
10e90 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61  _vtab* handles a
10ea0 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65  re not xDisconne
10eb0 63 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69  ct()ed.** immedi
10ec0 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20  ately. Instead, 
10ed0 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66  they are moved f
10ee0 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56  rom the Table.pV
10ef0 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a  Table list to.**
10f00 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20   another linked 
10f10 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74  list headed by t
10f20 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  he sqlite3.pDisc
10f30 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66  onnect member of
10f40 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
10f50 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74  nding sqlite3 st
10f60 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72  ructure. They ar
10f70 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78  e then deleted/x
10f80 44 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20  Disconnected.** 
10f90 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74  next time a stat
10fa0 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65  ement is prepare
10fb0 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c  d using said sql
10fc0 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64  ite3*. This is d
10fd0 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  one.** to avoid 
10fe0 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20  deadlock issues 
10ff0 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70  involving multip
11000 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  le sqlite3.mutex
11010 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66   mutexes..** Ref
11020 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61  er to comments a
11030 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71  bove function sq
11040 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
11050 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20  ist() for an.** 
11060 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74  explanation as t
11070 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65  o why it is safe
11080 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79   to add an entry
11090 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70   to an sqlite3.p
110a0 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69  Disconnect.** li
110b0 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69  st without holdi
110c0 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
110d0 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74  ding sqlite3.mut
110e0 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20  ex mutex..**.** 
110f0 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f  The memory for o
11100 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74  bjects of this t
11110 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c  ype is always al
11120 6c 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20 73 71  located by.** sq
11130 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c  lite3DbMalloc(),
11140 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65   using the conne
11150 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f  ction handle sto
11160 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62  red in VTable.db
11170 20 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74   as.** the first
11180 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
11190 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20  ruct VTable {.  
111a0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
111b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
111c0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
111d0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
111e0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
111f0 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20   Module *pMod;  
11200 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
11210 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20  inter to module 
11220 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
11230 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /.  sqlite3_vtab
11240 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a   *pVtab;      /*
11250 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62   Pointer to vtab
11260 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69   instance */.  i
11270 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
11280 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11290 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
112a0 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
112b0 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72   */.  u8 bConstr
112c0 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  aint;           
112d0 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
112e0 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f  raints are suppo
112f0 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  rted */.  int iS
11300 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
11310 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20      /* Depth of 
11320 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74  the SAVEPOINT st
11330 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ack */.  VTable 
11340 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
11350 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
11360 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61  nked list (see a
11370 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  bove) */.};../*.
11380 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f  ** The schema fo
11390 72 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65  r each SQL table
113a0 20 61 6e 64 20 76 69 65 77 20 69 73 20 72 65 70   and view is rep
113b0 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
113c0 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74  ry.** by an inst
113d0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
113e0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
113f0 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65  .*/.struct Table
11400 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
11410 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ;         /* Nam
11420 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  e of the table o
11430 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75  r view */.  Colu
11440 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20  mn *aCol;       
11450 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
11460 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
11470 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49  n */.  Index *pI
11480 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c  ndex;       /* L
11490 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78  ist of SQL index
114a0 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65  es on this table
114b0 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  . */.  Select *p
114c0 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e  Select;     /* N
114d0 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20  ULL for tables. 
114e0 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e   Points to defin
114f0 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e  ition if a view.
11500 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65   */.  FKey *pFKe
11510 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  y;         /* Li
11520 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c  nked list of all
11530 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e   foreign keys in
11540 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
11550 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
11560 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
11570 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
11580 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
11590 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69  lumn */.  ExprLi
115a0 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f  st *pCheck;    /
115b0 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73  * All CHECK cons
115c0 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20  traints */.     
115d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115e0 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20    /*   ... also 
115f0 75 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e  used as column n
11600 61 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49  ame list in a VI
11610 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  EW */.  int tnum
11620 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11630 52 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20  Root BTree page 
11640 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a  for this table *
11650 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20  /.  i16 iPKey;  
11660 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e           /* If n
11670 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65  ot negative, use
11680 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20   aCol[iPKey] as 
11690 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69  the rowid */.  i
116a0 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20  16 nCol;        
116b0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
116c0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
116d0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20   table */.  u16 
116e0 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
116f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
11700 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 54  inters to this T
11710 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  able */.  LogEst
11720 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f   nRowLogEst;   /
11730 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73  * Estimated rows
11740 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d   in table - from
11750 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
11760 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  ble */.  LogEst 
11770 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a  szTabRow;     /*
11780 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20   Estimated size 
11790 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f  of each table ro
117a0 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69  w in bytes */.#i
117b0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
117c0 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f  LE_COSTMULT.  Lo
117d0 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20  gEst costMult;  
117e0 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69     /* Cost multi
117f0 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20  plier for using 
11800 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65  this table */.#e
11810 6e 64 69 66 0a 20 20 75 38 20 74 61 62 46 6c 61  ndif.  u8 tabFla
11820 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  gs;         /* M
11830 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75  ask of TF_* valu
11840 65 73 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f  es */.  u8 keyCo
11850 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
11860 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61  What to do in ca
11870 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73  se of uniqueness
11880 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b   conflict on iPK
11890 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ey */.#ifndef SQ
118a0 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
118b0 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f  ABLE.  int addCo
118c0 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f  lOffset;    /* O
118d0 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20  ffset in CREATE 
118e0 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64  TABLE stmt to ad
118f0 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a  d a new column *
11900 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
11910 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
11920 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
11930 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20  nModuleArg;     
11940 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
11950 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d  guments to the m
11960 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  odule */.  char 
11970 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20  **azModuleArg;  
11980 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20  /* 0: module 1: 
11990 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e  schema 2: vtab n
119a0 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a  ame 3...: args *
119b0 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61  /.  VTable *pVTa
119c0 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74  ble;     /* List
119d0 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63   of VTable objec
119e0 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ts. */.#endif.  
119f0 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
11a00 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  r;   /* List of 
11a10 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20  triggers stored 
11a20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20  in pSchema */.  
11a30 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
11a40 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74       /* Schema t
11a50 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69  hat contains thi
11a60 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62  s table */.  Tab
11a70 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b  le *pNextZombie;
11a80 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65    /* Next on the
11a90 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61   Parse.pZombieTa
11aa0 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  b list */.};../*
11ab0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
11ac0 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62  es for Table.tab
11ad0 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f  Flags..**.** TF_
11ae0 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65  OOOHidden applie
11af0 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20 76  s to tables or v
11b00 69 65 77 20 74 68 61 74 20 68 61 76 65 20 68 69  iew that have hi
11b10 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61  dden columns tha
11b20 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65  t are.** followe
11b30 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20  d by non-hidden 
11b40 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c  columns.  Exampl
11b50 65 3a 20 20 22 43 52 45 41 54 45 20 56 49 52 54  e:  "CREATE VIRT
11b60 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e  UAL TABLE x USIN
11b70 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44  G.** vtab1(a HID
11b80 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63  DEN, b);".  Sinc
11b90 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68  e "b" is a non-h
11ba0 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74  idden column but
11bb0 20 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a   "a" is hidden,.
11bc0 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64  ** the TF_OOOHid
11bd0 64 65 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f  den attribute wo
11be0 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69  uld apply in thi
11bf0 73 20 63 61 73 65 2e 20 20 53 75 63 68 20 74 61  s case.  Such ta
11c00 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20  bles require.** 
11c10 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67  special handling
11c20 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70   during INSERT p
11c30 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64  rocessing..*/.#d
11c40 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c  efine TF_Readonl
11c50 79 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20  y        0x01   
11c60 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79   /* Read-only sy
11c70 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64  stem table */.#d
11c80 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72  efine TF_Ephemer
11c90 61 6c 20 20 20 20 20 20 20 30 78 30 32 20 20 20  al       0x02   
11ca0 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c   /* An ephemeral
11cb0 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
11cc0 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b  e TF_HasPrimaryK
11cd0 65 79 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20  ey   0x04    /* 
11ce0 54 61 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d  Table has a prim
11cf0 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  ary key */.#defi
11d00 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d  ne TF_Autoincrem
11d10 65 6e 74 20 20 20 30 78 30 38 20 20 20 20 2f 2a  ent   0x08    /*
11d20 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   Integer primary
11d30 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72   key is autoincr
11d40 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  ement */.#define
11d50 20 54 46 5f 56 69 72 74 75 61 6c 20 20 20 20 20   TF_Virtual     
11d60 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 49      0x10    /* I
11d70 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  s a virtual tabl
11d80 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
11d90 57 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20  WithoutRowid    
11da0 30 78 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f  0x20    /* No ro
11db0 77 69 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45  wid.  PRIMARY KE
11dc0 59 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a  Y is the key */.
11dd0 23 64 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73  #define TF_NoVis
11de0 69 62 6c 65 52 6f 77 69 64 20 20 30 78 34 30 20  ibleRowid  0x40 
11df0 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69     /* No user-vi
11e00 73 69 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f  sible "rowid" co
11e10 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lumn */.#define 
11e20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20  TF_OOOHidden    
11e30 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 75     0x80    /* Ou
11e40 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65  t-of-Order hidde
11e50 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 0a 0a 2f  n columns */.../
11e60 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65  *.** Test to see
11e70 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
11e80 61 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72  a table is a vir
11e90 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69  tual table.  Thi
11ea0 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20  s is.** done as 
11eb0 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20  a macro so that 
11ec0 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d  it will be optim
11ed0 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69  ized out when vi
11ee0 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73  rtual.** table s
11ef0 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65  upport is omitte
11f00 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64  d from the build
11f10 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
11f20 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
11f30 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
11f40 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
11f50 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67    (((X)->tabFlag
11f60 73 20 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21  s & TF_Virtual)!
11f70 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  =0).#else.#  def
11f80 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
11f90 20 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a        0.#endif..
11fa0 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
11fb0 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20 63  determine if a c
11fc0 6f 6c 75 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e  olumn is hidden.
11fd0 20 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64    IsOrdinaryHidd
11fe0 65 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e  enColumn().** on
11ff0 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e  ly works for non
12000 2d 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20  -virtual tables 
12010 28 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73  (ordinary tables
12020 20 61 6e 64 20 76 69 65 77 73 29 20 61 6e 64 20   and views) and 
12030 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c  is.** always fal
12040 73 65 20 75 6e 6c 65 73 73 20 53 51 4c 49 54 45  se unless SQLITE
12050 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43  _ENABLE_HIDDEN_C
12060 4f 4c 55 4d 4e 53 20 69 73 20 64 65 66 69 6e 65  OLUMNS is define
12070 64 2e 20 20 54 68 65 0a 2a 2a 20 49 73 48 69 64  d.  The.** IsHid
12080 64 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72  denColumn() macr
12090 6f 20 69 73 20 67 65 6e 65 72 61 6c 20 70 75 72  o is general pur
120a0 70 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  pose..*/.#if def
120b0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
120c0 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e  LE_HIDDEN_COLUMN
120d0 53 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48  S).#  define IsH
120e0 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20  iddenColumn(X)  
120f0 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f         (((X)->co
12100 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47  lFlags & COLFLAG
12110 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20  _HIDDEN)!=0).#  
12120 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72  define IsOrdinar
12130 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  yHiddenColumn(X)
12140 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
12150 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
12160 4e 29 21 3d 30 29 0a 23 65 6c 69 66 20 21 64 65  N)!=0).#elif !de
12170 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
12180 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
12190 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
121a0 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20  enColumn(X)     
121b0 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c      (((X)->colFl
121c0 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49  ags & COLFLAG_HI
121d0 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66  DDEN)!=0).#  def
121e0 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69  ine IsOrdinaryHi
121f0 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a  ddenColumn(X) 0.
12200 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
12210 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
12220 29 20 20 20 20 20 20 20 20 20 30 0a 23 20 20 64  )         0.#  d
12230 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79  efine IsOrdinary
12240 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
12250 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f  0.#endif.../* Do
12260 65 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76  es the table hav
12270 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  e a rowid */.#de
12280 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29  fine HasRowid(X)
12290 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46       (((X)->tabF
122a0 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75  lags & TF_Withou
122b0 74 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66  tRowid)==0).#def
122c0 69 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64  ine VisibleRowid
122d0 28 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c  (X) (((X)->tabFl
122e0 61 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62  ags & TF_NoVisib
122f0 6c 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a  leRowid)==0)../*
12300 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e  .** Each foreign
12310 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
12320 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
12330 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
12340 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
12350 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69   A foreign key i
12360 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
12370 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54  h two tables.  T
12380 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20  he "from" table 
12390 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  is.** the table 
123a0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
123b0 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
123c0 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73  use that creates
123d0 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
123e0 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74  key.  The "to" t
123f0 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c  able is the tabl
12400 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20  e that is named 
12410 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  in the REFERENCE
12420 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e  S clause..** Con
12430 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70  sider this examp
12440 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  le:.**.**     CR
12450 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a  EATE TABLE ex1(.
12460 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47  **       a INTEG
12470 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
12480 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47  **       b INTEG
12490 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b  ER CONSTRAINT fk
124a0 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32  1 REFERENCES ex2
124b0 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a  (x).**     );.**
124c0 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20  .** For foreign 
124d0 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66  key "fk1", the f
124e0 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78  rom-table is "ex
124f0 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61  1" and the to-ta
12500 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a  ble is "ex2"..**
12510 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65   Equivalent name
12520 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f  s:.**.**     fro
12530 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64  m-table == child
12540 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  -table.**       
12550 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65  to-table == pare
12560 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45  nt-table.**.** E
12570 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63  ach REFERENCES c
12580 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20  lause generates 
12590 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
125a0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
125b0 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20  ucture.** which 
125c0 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
125d0 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20  he from-table.  
125e0 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65  The to-table nee
125f0 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e  d not exist when
12600 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  .** the from-tab
12610 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  le is created.  
12620 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66  The existence of
12630 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
12640 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a   not checked..**
12650 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20  .** The list of 
12660 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20  all parents for 
12670 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73  child Table X is
12680 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79   held at X.pFKey
12690 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ..**.** A list o
126a0 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66  f all children f
126b0 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64  or a table named
126c0 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20   Z (which might 
126d0 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a  not even exist).
126e0 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63  ** is held in Sc
126f0 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69  hema.fkeyHash wi
12700 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66  th a hash key of
12710 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b   Z..*/.struct FK
12720 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46  ey {.  Table *pF
12730 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c  rom;     /* Tabl
12740 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
12750 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
12760 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20  se (aka: Child) 
12770 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
12780 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46  From;  /* Next F
12790 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d  Key with the sam
127a0 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74  e in pFrom. Next
127b0 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d   parent of pFrom
127c0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b   */.  char *zTo;
127d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
127e0 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  of table that th
127f0 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20  e key points to 
12800 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f  (aka: Parent) */
12810 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f  .  FKey *pNextTo
12820 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74  ;    /* Next wit
12830 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20  h the same zTo. 
12840 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54  Next child of zT
12850 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50  o. */.  FKey *pP
12860 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65  revTo;    /* Pre
12870 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73  vious with the s
12880 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74  ame zTo */.  int
12890 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f   nCol;         /
128a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
128b0 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20  mns in this key 
128c0 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30  */.  /* EV: R-30
128d0 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75  323-21917 */.  u
128e0 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20  8 isDeferred;   
128f0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
12900 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69  onstraint checki
12910 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74  ng is deferred t
12920 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20  ill COMMIT */.  
12930 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20  u8 aAction[2];  
12940 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45        /* ON DELE
12950 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45  TE and ON UPDATE
12960 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63   actions, respec
12970 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67  tively */.  Trig
12980 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32  ger *apTrigger[2
12990 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f  ];/* Triggers fo
129a0 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69  r aAction[] acti
129b0 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
129c0 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f  sColMap {      /
129d0 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c  * Mapping of col
129e0 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f  umns in pFrom to
129f0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20   columns in zTo 
12a00 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d  */.    int iFrom
12a10 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
12a20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20  Index of column 
12a30 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20  in pFrom */.    
12a40 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20  char *zCol;     
12a50 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
12a60 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20   column in zTo. 
12a70 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49   If NULL use PRI
12a80 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20  MARY KEY */.  } 
12a90 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20  aCol[1];        
12aa0 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
12ab0 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f   for each of nCo
12ac0 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a  l columns */.};.
12ad0 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75  ./*.** SQLite su
12ae0 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66  pports many diff
12af0 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65  erent ways to re
12b00 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69  solve a constrai
12b10 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f  nt.** error.  RO
12b20 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e  LLBACK processin
12b30 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63  g means that a c
12b40 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
12b50 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68  ion.** causes th
12b60 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
12b70 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61  rocess to fail a
12b80 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  nd for the curre
12b90 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
12ba0 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  * to be rolled b
12bb0 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63  ack.  ABORT proc
12bc0 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65  essing means the
12bd0 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
12be0 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61  ocess.** fails a
12bf0 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61  nd any prior cha
12c00 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f  nges from that o
12c10 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  ne operation are
12c20 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20   backed out,.** 
12c30 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  but the transact
12c40 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65  ion is not rolle
12c50 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72  d back.  FAIL pr
12c60 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
12c70 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61  hat.** the opera
12c80 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
12c90 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72   stops and retur
12ca0 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  ns an error code
12cb0 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20  .  But prior.** 
12cc0 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74  changes due to t
12cd0 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
12ce0 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64  n are not backed
12cf0 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c   out and no roll
12d00 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20  back.** occurs. 
12d10 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68   IGNORE means th
12d20 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  at the particula
12d30 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65  r row that cause
12d40 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  d the constraint
12d50 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74  .** error is not
12d60 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
12d70 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ated.  Processin
12d80 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
12d90 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72  no error.** is r
12da0 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43  eturned.  REPLAC
12db0 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65  E means that pre
12dc0 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
12dd0 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73  e rows that caus
12de0 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63  ed.** a UNIQUE c
12df0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
12e00 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ion are removed 
12e10 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20  so that the new 
12e20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64  insert or.** upd
12e30 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e  ate can proceed.
12e40 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
12e50 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
12e60 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e  ror is reported.
12e70 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c  .**.** RESTRICT,
12e80 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41   SETNULL, and CA
12e90 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70  SCADE actions ap
12ea0 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65  ply only to fore
12eb0 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53  ign keys..** RES
12ec0 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d  TRICT is the sam
12ed0 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49  e as ABORT for I
12ee0 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e  MMEDIATE foreign
12ef0 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a   keys and the.**
12f00 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43   same as ROLLBAC
12f10 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b  K for DEFERRED k
12f20 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65  eys.  SETNULL me
12f30 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72  ans that the for
12f40 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73  eign.** key is s
12f50 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53  et to NULL.  CAS
12f60 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20  CADE means that 
12f70 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  a DELETE or UPDA
12f80 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66  TE of the.** ref
12f90 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f  erenced table ro
12fa0 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20  w is propagated 
12fb0 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61  into the row tha
12fc0 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66  t holds the.** f
12fd0 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a  oreign key..**.*
12fe0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
12ff0 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20  symbolic values 
13000 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f  are used to reco
13010 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a  rd which type.**
13020 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61   of action to ta
13030 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ke..*/.#define O
13040 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f  E_None     0   /
13050 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f  * There is no co
13060 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63  nstraint to chec
13070 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  k */.#define OE_
13080 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20  Rollback 1   /* 
13090 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69  Fail the operati
130a0 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20  on and rollback 
130b0 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
130c0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62  */.#define OE_Ab
130d0 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61  ort    2   /* Ba
130e0 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62  ck out changes b
130f0 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63  ut do no rollbac
13100 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f  k transaction */
13110 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c  .#define OE_Fail
13120 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70       3   /* Stop
13130 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62   the operation b
13140 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69  ut leave all pri
13150 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  or changes */.#d
13160 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20  efine OE_Ignore 
13170 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20    4   /* Ignore 
13180 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f  the error. Do no
13190 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20  t do the INSERT 
131a0 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  or UPDATE */.#de
131b0 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20  fine OE_Replace 
131c0 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65   5   /* Delete e
131d0 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20  xisting record, 
131e0 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f  then do INSERT o
131f0 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65  r UPDATE */..#de
13200 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74  fine OE_Restrict
13210 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74   6   /* OE_Abort
13220 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20   for IMMEDIATE, 
13230 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20  OE_Rollback for 
13240 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66  DEFERRED */.#def
13250 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20  ine OE_SetNull  
13260 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  7   /* Set the f
13270 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
13280 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   to NULL */.#def
13290 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20  ine OE_SetDflt  
132a0 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  8   /* Set the f
132b0 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
132c0 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20   to its default 
132d0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61  */.#define OE_Ca
132e0 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61  scade  9   /* Ca
132f0 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65  scade the change
13300 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45  s */..#define OE
13310 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f 2a  _Default  10  /*
13320 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65   Do whatever the
13330 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20   default action 
13340 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e  is */.../*.** An
13350 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
13360 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
13370 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61  ture is passed a
13380 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  s the first.** a
13390 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74  rgument to sqlit
133a0 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65  e3VdbeKeyCompare
133b0 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20   and is used to 
133c0 63 6f 6e 74 72 6f 6c 20 74 68 65 0a 2a 2a 20 63  control the.** c
133d0 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65  omparison of the
133e0 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e   two index keys.
133f0 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
13400 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e   aSortOrder[] an
13410 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e  d aColl[] have n
13420 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20  Field+1 slots.  
13430 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69  There.** are nFi
13440 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68  eld slots for th
13450 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20  e columns of an 
13460 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65  index then one e
13470 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72  xtra slot.** for
13480 20 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68   the rowid at th
13490 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
134a0 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32   KeyInfo {.  u32
134b0 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
134c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
134d0 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73  ferences to this
134e0 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20   KeyInfo object 
134f0 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
13500 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
13510 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20   encoding - one 
13520 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54  of the SQLITE_UT
13530 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  F* values */.  u
13540 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  16 nField;      
13550 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13560 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  key columns in t
13570 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31  he index */.  u1
13580 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20 20 20  6 nXField;      
13590 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
135a0 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20 74 68  olumns beyond th
135b0 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f  e key columns */
135c0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
135d0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
135e0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
135f0 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  n */.  u8 *aSort
13600 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f  Order;     /* So
13610 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63  rt order for eac
13620 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43  h column. */.  C
13630 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d  ollSeq *aColl[1]
13640 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20  ;  /* Collating 
13650 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63  sequence for eac
13660 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65  h term of the ke
13670 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  y */.};../*.** T
13680 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73  his object holds
13690 20 61 20 72 65 63 6f 72 64 20 77 68 69 63 68 20   a record which 
136a0 68 61 73 20 62 65 65 6e 20 70 61 72 73 65 64 20  has been parsed 
136b0 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64  out into individ
136c0 75 61 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c 20 66  ual.** fields, f
136d0 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
136e0 6f 66 20 64 6f 69 6e 67 20 61 20 63 6f 6d 70 61  of doing a compa
136f0 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72  rison..**.** A r
13700 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65  ecord is an obje
13710 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ct that contains
13720 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65   one or more fie
13730 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20  lds of data..** 
13740 52 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64  Records are used
13750 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f   to store the co
13760 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65  ntent of a table
13770 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72   row and to stor
13780 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20  e.** the key of 
13790 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f  an index.  A blo
137a0 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  b encoding of a 
137b0 72 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65  record is create
137c0 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d  d by.** the OP_M
137d0 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65  akeRecord opcode
137e0 20 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64   of the VDBE and
137f0 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64   is disassembled
13800 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f   by the.** OP_Co
13810 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  lumn opcode..**.
13820 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
13830 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73 65  f this object se
13840 72 76 65 73 20 61 73 20 61 20 22 6b 65 79 22 20  rves as a "key" 
13850 66 6f 72 20 64 6f 69 6e 67 20 61 20 73 65 61 72  for doing a sear
13860 63 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65  ch on.** an inde
13870 78 20 62 2b 74 72 65 65 2e 20 54 68 65 20 67 6f  x b+tree. The go
13880 61 6c 20 6f 66 20 74 68 65 20 73 65 61 72 63 68  al of the search
13890 20 69 73 20 74 6f 20 66 69 6e 64 20 74 68 65 20   is to find the 
138a0 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 69 73  entry that.** is
138b0 20 63 6c 6f 73 65 64 20 74 6f 20 74 68 65 20 6b   closed to the k
138c0 65 79 20 64 65 73 63 72 69 62 65 64 20 62 79 20  ey described by 
138d0 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68  this object.  Th
138e0 69 73 20 6f 62 6a 65 63 74 20 6d 69 67 68 74 20  is object might 
138f0 68 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20 61 20 70  hold.** just a p
13900 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79  refix of the key
13910 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  .  The number of
13920 20 66 69 65 6c 64 73 20 69 73 20 67 69 76 65 6e   fields is given
13930 20 62 79 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d   by.** pKeyInfo-
13940 3e 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54  >nField..**.** T
13950 68 65 20 72 31 20 61 6e 64 20 72 32 20 66 69 65  he r1 and r2 fie
13960 6c 64 73 20 61 72 65 20 74 68 65 20 76 61 6c 75  lds are the valu
13970 65 73 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  es to return if 
13980 74 68 69 73 20 6b 65 79 20 69 73 20 6c 65 73 73  this key is less
13990 20 74 68 61 6e 0a 2a 2a 20 6f 72 20 67 72 65 61   than.** or grea
139a0 74 65 72 20 74 68 61 6e 20 61 20 6b 65 79 20 69  ter than a key i
139b0 6e 20 74 68 65 20 62 74 72 65 65 2c 20 72 65 73  n the btree, res
139c0 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 73  pectively.  Thes
139d0 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a  e are normally.*
139e0 2a 20 2d 31 20 61 6e 64 20 2b 31 20 72 65 73 70  * -1 and +1 resp
139f0 65 63 74 69 76 65 6c 79 2c 20 62 75 74 20 6d 69  ectively, but mi
13a00 67 68 74 20 62 65 20 69 6e 76 65 72 74 65 64 20  ght be inverted 
13a10 74 6f 20 2b 31 20 61 6e 64 20 2d 31 20 69 66 20  to +1 and -1 if 
13a20 74 68 65 20 62 2d 74 72 65 65 0a 2a 2a 20 69 73  the b-tree.** is
13a30 20 69 6e 20 44 45 53 43 20 6f 72 64 65 72 2e 0a   in DESC order..
13a40 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f  **.** The key co
13a50 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f  mparison functio
13a60 6e 73 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75  ns actually retu
13a70 72 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 77 68  rn default_rc wh
13a80 65 6e 20 74 68 65 79 20 66 69 6e 64 0a 2a 2a 20  en they find.** 
13a90 61 6e 20 65 71 75 61 6c 73 20 63 6f 6d 70 61 72  an equals compar
13aa0 69 73 6f 6e 2e 20 20 64 65 66 61 75 6c 74 5f 72  ison.  default_r
13ab0 63 20 63 61 6e 20 62 65 20 2d 31 2c 20 30 2c 20  c can be -1, 0, 
13ac0 6f 72 20 2b 31 2e 20 20 49 66 20 74 68 65 72 65  or +1.  If there
13ad0 20 61 72 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65   are.** multiple
13ae0 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
13af0 62 2d 74 72 65 65 20 77 69 74 68 20 74 68 65 20  b-tree with the 
13b00 73 61 6d 65 20 6b 65 79 20 28 77 68 65 6e 20 6f  same key (when o
13b10 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61  nly looking.** a
13b20 74 20 74 68 65 20 66 69 72 73 74 20 70 4b 65 79  t the first pKey
13b30 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29 20  Info->nFields,) 
13b40 74 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 20  then default_rc 
13b50 63 61 6e 20 62 65 20 73 65 74 20 74 6f 20 2d 31  can be set to -1
13b60 20 74 6f 0a 2a 2a 20 63 61 75 73 65 20 74 68 65   to.** cause the
13b70 20 73 65 61 72 63 68 20 74 6f 20 66 69 6e 64 20   search to find 
13b80 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2c 20  the last match, 
13b90 6f 72 20 2b 31 20 74 6f 20 63 61 75 73 65 20 74  or +1 to cause t
13ba0 68 65 20 73 65 61 72 63 68 20 74 6f 0a 2a 2a 20  he search to.** 
13bb0 66 69 6e 64 20 74 68 65 20 66 69 72 73 74 20 6d  find the first m
13bc0 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  atch..**.** The 
13bd0 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  key comparison f
13be0 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 65  unctions will se
13bf0 74 20 65 71 53 65 65 6e 20 74 6f 20 74 72 75 65  t eqSeen to true
13c00 20 69 66 20 74 68 65 79 20 65 76 65 72 0a 2a 2a   if they ever.**
13c10 20 67 65 74 20 61 6e 64 20 65 71 75 61 6c 20 72   get and equal r
13c20 65 73 75 6c 74 73 20 77 68 65 6e 20 63 6f 6d 70  esults when comp
13c30 61 72 69 6e 67 20 74 68 69 73 20 73 74 72 75 63  aring this struc
13c40 74 75 72 65 20 74 6f 20 61 20 62 2d 74 72 65 65  ture to a b-tree
13c50 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e   record..** When
13c60 20 64 65 66 61 75 6c 74 5f 72 63 21 3d 30 2c 20   default_rc!=0, 
13c70 74 68 65 20 73 65 61 72 63 68 20 6d 69 67 68 74  the search might
13c80 20 65 6e 64 20 75 70 20 6f 6e 20 74 68 65 20 72   end up on the r
13c90 65 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c  ecord immediatel
13ca0 79 0a 2a 2a 20 62 65 66 6f 72 65 20 74 68 65 20  y.** before the 
13cb0 66 69 72 73 74 20 6d 61 74 63 68 20 6f 72 20 69  first match or i
13cc0 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72  mmediately after
13cd0 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2e   the last match.
13ce0 20 20 54 68 65 0a 2a 2a 20 65 71 53 65 65 6e 20    The.** eqSeen 
13cf0 66 69 65 6c 64 20 77 69 6c 6c 20 69 6e 64 69 63  field will indic
13d00 61 74 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ate whether or n
13d10 6f 74 20 61 6e 20 65 78 61 63 74 20 6d 61 74 63  ot an exact matc
13d20 68 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 0a  h exists in the.
13d30 2a 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74  ** b-tree..*/.st
13d40 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
13d50 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20  ord {.  KeyInfo 
13d60 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43  *pKeyInfo;  /* C
13d70 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72  ollation and sor
13d80 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74  t-order informat
13d90 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d  ion */.  Mem *aM
13da0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
13db0 56 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20  Values */.  u16 
13dc0 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
13dd0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
13de0 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20  ries in apMem[] 
13df0 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f  */.  i8 default_
13e00 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70  rc;      /* Comp
13e10 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66  arison result if
13e20 20 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c 20   keys are equal 
13e30 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b  */.  u8 errCode;
13e40 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
13e50 72 20 64 65 74 65 63 74 65 64 20 62 79 20 78 52  r detected by xR
13e60 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f  ecordCompare (CO
13e70 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20  RRUPT or NOMEM) 
13e80 2a 2f 0a 20 20 69 38 20 72 31 3b 20 20 20 20 20  */.  i8 r1;     
13e90 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
13ea0 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28  e to return if (
13eb0 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20  lhs > rhs) */.  
13ec0 69 38 20 72 32 3b 20 20 20 20 20 20 20 20 20 20  i8 r2;          
13ed0 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
13ee0 72 65 74 75 72 6e 20 69 66 20 28 72 68 73 20 3c  return if (rhs <
13ef0 20 6c 68 73 29 20 2a 2f 0a 20 20 75 38 20 65 71   lhs) */.  u8 eq
13f00 53 65 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  Seen;          /
13f10 2a 20 54 72 75 65 20 69 66 20 61 6e 20 65 71 75  * True if an equ
13f20 61 6c 69 74 79 20 63 6f 6d 70 61 72 69 73 6f 6e  ality comparison
13f30 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a   has been seen *
13f40 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  /.};.../*.** Eac
13f50 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72  h SQL index is r
13f60 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
13f70 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  mory by an.** in
13f80 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
13f90 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
13fa0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c  e..**.** The col
13fb0 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
13fc0 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65  e that are to be
13fd0 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73   indexed are des
13fe0 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65  cribed.** by the
13ff0 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c   aiColumn[] fiel
14000 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  d of this struct
14010 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ure.  For exampl
14020 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65  e, suppose.** we
14030 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77   have the follow
14040 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e  ing table and in
14050 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  dex:.**.**     C
14060 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28  REATE TABLE Ex1(
14070 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20  c1 int, c2 int, 
14080 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20  c3 text);.**    
14090 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78   CREATE INDEX Ex
140a0 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b  2 ON Ex1(c3,c1);
140b0 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61  .**.** In the Ta
140c0 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65  ble structure de
140d0 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43  scribing Ex1, nC
140e0 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68  ol==3 because th
140f0 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65  ere are.** three
14100 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
14110 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49  table.  In the I
14120 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64  ndex structure d
14130 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32  escribing.** Ex2
14140 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e  , nColumn==2 sin
14150 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f  ce 2 of the 3 co
14160 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65  lumns of Ex1 are
14170 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65   indexed..** The
14180 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75   value of aiColu
14190 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61  mn is {2, 0}.  a
141a0 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65  iColumn[0]==2 be
141b0 63 61 75 73 65 20 74 68 65 0a 2a 2a 20 66 69 72  cause the.** fir
141c0 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20  st column to be 
141d0 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73  indexed (c3) has
141e0 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69   an index of 2 i
141f0 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a  n Ex1.aCol[]..**
14200 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75   The second colu
14210 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
14220 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64   (c1) has an ind
14230 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78  ex of 0 in.** Ex
14240 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20  1.aCol[], hence 
14250 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d  Ex2.aiColumn[1]=
14260 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e  =0..**.** The In
14270 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c  dex.onError fiel
14280 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65  d determines whe
14290 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
142a0 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a  indexed columns.
142b0 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75  ** must be uniqu
142c0 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f  e and what to do
142d0 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74   if they are not
142e0 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e  .  When Index.on
142f0 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a  Error=OE_None,.*
14300 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20  * it means this 
14310 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20  is not a unique 
14320 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73  index.  Otherwis
14330 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65  e it is a unique
14340 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68   index.** and th
14350 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78  e value of Index
14360 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74  .onError indicat
14370 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66  e the which conf
14380 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a  lict resolution.
14390 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  ** algorithm to 
143a0 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20  employ whenever 
143b0 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  an attempt is ma
143c0 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e  de to insert a n
143d0 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65  on-unique.** ele
143e0 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c  ment..**.** Whil
143f0 65 20 70 61 72 73 69 6e 67 20 61 20 43 52 45 41  e parsing a CREA
14400 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45 41  TE TABLE or CREA
14410 54 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65  TE INDEX stateme
14420 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  nt in order to.*
14430 2a 20 67 65 6e 65 72 61 74 65 20 56 44 42 45 20  * generate VDBE 
14440 63 6f 64 65 20 28 61 73 20 6f 70 70 6f 73 65 64  code (as opposed
14450 20 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e 65 20   to parsing one 
14460 72 65 61 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c  read from an sql
14470 69 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61  ite_master.** ta
14480 62 6c 65 20 61 73 20 70 61 72 74 20 6f 66 20 70  ble as part of p
14490 61 72 73 69 6e 67 20 61 6e 20 65 78 69 73 74 69  arsing an existi
144a0 6e 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ng database sche
144b0 6d 61 29 2c 20 74 72 61 6e 73 69 65 6e 74 20 69  ma), transient i
144c0 6e 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74  nstances.** of t
144d0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 6d 61  his structure ma
144e0 79 20 62 65 20 63 72 65 61 74 65 64 2e 20 49 6e  y be created. In
144f0 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 49   this case the I
14500 6e 64 65 78 2e 74 6e 75 6d 20 76 61 72 69 61 62  ndex.tnum variab
14510 6c 65 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  le is.** used to
14520 20 73 74 6f 72 65 20 74 68 65 20 61 64 64 72 65   store the addre
14530 73 73 20 6f 66 20 61 20 56 44 42 45 20 69 6e 73  ss of a VDBE ins
14540 74 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20  truction, not a 
14550 64 61 74 61 62 61 73 65 20 70 61 67 65 0a 2a 2a  database page.**
14560 20 6e 75 6d 62 65 72 20 28 69 74 20 63 61 6e 6e   number (it cann
14570 6f 74 20 2d 20 74 68 65 20 64 61 74 61 62 61 73  ot - the databas
14580 65 20 70 61 67 65 20 69 73 20 6e 6f 74 20 61 6c  e page is not al
14590 6c 6f 63 61 74 65 64 20 75 6e 74 69 6c 20 74 68  located until th
145a0 65 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61  e VDBE.** progra
145b0 6d 20 69 73 20 65 78 65 63 75 74 65 64 29 2e 20  m is executed). 
145c0 53 65 65 20 63 6f 6e 76 65 72 74 54 6f 57 69 74  See convertToWit
145d0 68 6f 75 74 52 6f 77 69 64 54 61 62 6c 65 28 29  houtRowidTable()
145e0 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
145f0 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a  .struct Index {.
14600 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
14610 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
14620 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  me of this index
14630 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c   */.  i16 *aiCol
14640 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  umn;           /
14650 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20  * Which columns 
14660 61 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73  are used by this
14670 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20   index.  1st is 
14680 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61  0 */.  LogEst *a
14690 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20  iRowLogEst;     
146a0 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a  /* From ANALYZE:
146b0 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63   Est. rows selec
146c0 74 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75  ted by each colu
146d0 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  mn */.  Table *p
146e0 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
146f0 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c   /* The SQL tabl
14700 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20  e being indexed 
14710 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
14720 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ff;           /*
14730 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
14740 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
14750 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
14760 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20    Index *pNext; 
14770 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
14780 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73  e next index ass
14790 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
147a0 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20   same table */. 
147b0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
147c0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  ;         /* Sch
147d0 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
147e0 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  his index */.  u
147f0 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
14800 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65          /* for e
14810 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65  ach column: True
14820 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41  ==DESC, False==A
14830 53 43 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  SC */.  const ch
14840 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20  ar **azColl;    
14850 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c   /* Array of col
14860 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
14870 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20  names for index 
14880 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74  */.  Expr *pPart
14890 49 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a  IdxWhere;     /*
148a0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
148b0 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65  r partial indice
148c0 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
148d0 2a 61 43 6f 6c 45 78 70 72 3b 20 20 20 20 20 20  *aColExpr;      
148e0 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78 70 72 65 73  /* Column expres
148f0 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 74  sions */.  int t
14900 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
14910 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63      /* DB Page c
14920 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f  ontaining root o
14930 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
14940 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f    LogEst szIdxRo
14950 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73  w;         /* Es
14960 74 69 6d 61 74 65 64 20 61 76 65 72 61 67 65 20  timated average 
14970 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65  row size in byte
14980 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43  s */.  u16 nKeyC
14990 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ol;             
149a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
149b0 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65  umns forming the
149c0 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43   key */.  u16 nC
149d0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
149e0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
149f0 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69  columns stored i
14a00 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  n the index */. 
14a10 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20   u8 onError;    
14a20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f            /* OE_
14a30 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65  Abort, OE_Ignore
14a40 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72  , OE_Replace, or
14a50 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e   OE_None */.  un
14a60 73 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a 32  signed idxType:2
14a70 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49  ;      /* 1==UNI
14a80 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20  QUE, 2==PRIMARY 
14a90 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49  KEY, 0==CREATE I
14aa0 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  NDEX */.  unsign
14ab0 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b  ed bUnordered:1;
14ac0 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69     /* Use this i
14ad0 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49  ndex for == or I
14ae0 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a  N queries only *
14af0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69  /.  unsigned uni
14b00 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20  qNotNull:1;  /* 
14b10 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20 61  True if UNIQUE a
14b20 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20  nd NOT NULL for 
14b30 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  all columns */. 
14b40 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69   unsigned isResi
14b50 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75  zed:1;    /* Tru
14b60 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78  e if resizeIndex
14b70 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65 65  Object() has bee
14b80 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e  n called */.  un
14b90 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e  signed isCoverin
14ba0 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69  g:1;   /* True i
14bb0 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76 65  f this is a cove
14bc0 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ring index */.  
14bd0 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53  unsigned noSkipS
14be0 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e  can:1;   /* Do n
14bf0 6f 74 20 74 72 79 20 74 6f 20 75 73 65 20 73 6b  ot try to use sk
14c00 69 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65 20  ip-scan if true 
14c10 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
14c20 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
14c30 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61  _STAT4.  int nSa
14c40 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  mple;           
14c50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
14c60 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70  lements in aSamp
14c70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  le[] */.  int nS
14c80 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20  ampleCol;       
14c90 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e     /* Size of In
14ca0 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d  dexSample.anEq[]
14cb0 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20   and so on */.  
14cc0 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b  tRowcnt *aAvgEq;
14cd0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72           /* Aver
14ce0 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66  age nEq values f
14cf0 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61  or keys not in a
14d00 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65  Sample */.  Inde
14d10 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65  xSample *aSample
14d20 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20  ;    /* Samples 
14d30 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  of the left-most
14d40 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e   key */.  tRowcn
14d50 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20  t *aiRowEst;    
14d60 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69     /* Non-logari
14d70 74 68 6d 69 63 20 73 74 61 74 31 20 64 61 74 61  thmic stat1 data
14d80 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20   for this index 
14d90 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f  */.  tRowcnt nRo
14da0 77 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f 2a  wEst0;        /*
14db0 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63   Non-logarithmic
14dc0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
14dd0 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
14de0 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
14df0 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
14e00 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70  for Index.idxTyp
14e10 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e.*/.#define SQL
14e20 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44  ITE_IDXTYPE_APPD
14e30 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43  EF      0   /* C
14e40 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45  reated using CRE
14e50 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65  ATE INDEX */.#de
14e60 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
14e70 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20  YPE_UNIQUE      
14e80 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1   /* Implement
14e90 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  s a UNIQUE const
14ea0 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
14eb0 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
14ec0 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20  PRIMARYKEY  2   
14ed0 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41 52  /* Is the PRIMAR
14ee0 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61  Y KEY for the ta
14ef0 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72  ble */../* Retur
14f00 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
14f10 58 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b  X is a PRIMARY K
14f20 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  EY index */.#def
14f30 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79  ine IsPrimaryKey
14f40 49 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e  Index(X)  ((X)->
14f50 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  idxType==SQLITE_
14f60 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b  IDXTYPE_PRIMARYK
14f70 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74  EY)../* Return t
14f80 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69  rue if index X i
14f90 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78  s a UNIQUE index
14fa0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e   */.#define IsUn
14fb0 69 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20  iqueIndex(X)    
14fc0 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21    ((X)->onError!
14fd0 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68  =OE_None)../* Th
14fe0 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e  e Index.aiColumn
14ff0 5b 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f  [] values are no
15000 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65 20  rmally positive 
15010 69 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a  integer.  But.**
15020 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20   there are some 
15030 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20  negative values 
15040 74 68 61 74 20 68 61 76 65 20 73 70 65 63 69 61  that have specia
15050 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64  l meaning:.*/.#d
15060 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20  efine XN_ROWID  
15070 20 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20 49     (-1)     /* I
15080 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73  ndexed column is
15090 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64   the rowid */.#d
150a0 65 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20 20  efine XN_EXPR   
150b0 20 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20 49     (-2)     /* I
150c0 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73  ndexed column is
150d0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a   an expression *
150e0 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61  /../*.** Each sa
150f0 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74  mple stored in t
15100 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
15110 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
15120 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a  nted in memory.*
15130 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74  * using a struct
15140 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65  ure of this type
15150 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  .  See documenta
15160 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20  tion at the top 
15170 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a  of the.** analyz
15180 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20  e.c source file 
15190 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
151a0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
151b0 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
151c0 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20  e {.  void *p;  
151d0 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
151e0 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65  er to sampled re
151f0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b  cord */.  int n;
15200 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
15210 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e  ize of record in
15220 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77   bytes */.  tRow
15230 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a  cnt *anEq;    /*
15240 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
15250 72 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b  rows where the k
15260 65 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73  ey equals this s
15270 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
15280 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20  nt *anLt;    /* 
15290 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
152a0 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73  ows where key is
152b0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
152c0 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77  sample */.  tRow
152d0 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a  cnt *anDLt;   /*
152e0 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
152f0 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65  distinct keys le
15300 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d  ss than this sam
15310 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ple */.};../*.**
15320 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69   Each token comi
15330 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65  ng out of the le
15340 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  xer is an instan
15350 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74  ce of.** this st
15360 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73  ructure.  Tokens
15370 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61   are also used a
15380 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70  s part of an exp
15390 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e  ression..**.** N
153a0 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d  ote if Token.z==
153b0 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e  0 then Token.dyn
153c0 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65   and Token.n are
153d0 20 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a   undefined and.*
153e0 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61  * may contain ra
153f0 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f  ndom values.  Do
15400 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73   not make any as
15410 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20  sumptions about 
15420 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64  Token.dyn.** and
15430 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f   Token.n when To
15440 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72  ken.z==0..*/.str
15450 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f  uct Token {.  co
15460 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  nst char *z;    
15470 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
15480 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c  token.  Not NULL
15490 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a  -terminated! */.
154a0 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e    unsigned int n
154b0 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  ;    /* Number o
154c0 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  f characters in 
154d0 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b  this token */.};
154e0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
154f0 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
15500 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69  cture contains i
15510 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65  nformation neede
15520 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a  d to generate.**
15530 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45   code for a SELE
15540 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  CT that contains
15550 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
15560 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45  ions..**.** If E
15570 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43  xpr.op==TK_AGG_C
15580 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f  OLUMN or TK_AGG_
15590 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78  FUNCTION then Ex
155a0 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61  pr.pAggInfo is a
155b0 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  .** pointer to t
155c0 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
155d0 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  The Expr.iColumn
155e0 20 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e   field is the in
155f0 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66  dex in.** AggInf
15600 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49  o.aCol[] or AggI
15610 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69  nfo.aFunc[] of i
15620 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65  nformation neede
15630 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a  d to generate.**
15640 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e   code for that n
15650 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e  ode..**.** AggIn
15660 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20  fo.pGroupBy and 
15670 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45  AggInfo.aFunc.pE
15680 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65  xpr point to fie
15690 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a  lds within the.*
156a0 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63  * original Selec
156b0 74 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  t structure that
156c0 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53   describes the S
156d0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
156e0 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64    These.** field
156f0 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f  s do not need to
15700 20 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64   be freed when d
15710 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20  eallocating the 
15720 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72  AggInfo structur
15730 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67  e..*/.struct Agg
15740 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65  Info {.  u8 dire
15750 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ctMode;         
15760 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65   /* Direct rende
15770 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20  ring mode means 
15780 74 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74  take data direct
15790 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ly.             
157a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
157b0 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c  from source tabl
157c0 65 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66  es rather than f
157d0 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73  rom accumulators
157e0 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74   */.  u8 useSort
157f0 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a  ingIdx;       /*
15800 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c   In direct mode,
15810 20 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73   reference the s
15820 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74  orting index rat
15830 68 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  her.            
15840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
15850 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65   than the source
15860 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   table */.  int 
15870 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20  sortingIdx;     
15880 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
15890 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74  mber of the sort
158a0 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
158b0 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61  nt sortingIdxPTa
158c0 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72  b;     /* Cursor
158d0 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64   number of pseud
158e0 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  o-table */.  int
158f0 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b   nSortingColumn;
15900 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15910 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
15920 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
15930 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d  /.  int mnReg, m
15940 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52  xReg;       /* R
15950 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65 72  ange of register
15960 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
15970 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a  aCol and aFunc *
15980 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47  /.  ExprList *pG
15990 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54  roupBy;     /* T
159a0 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75  he group by clau
159b0 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41  se */.  struct A
159c0 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20  ggInfo_col {    
159d0 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* For each colu
159e0 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63  mn used in sourc
159f0 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20  e tables */.    
15a00 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
15a10 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72           /* Sour
15a20 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
15a30 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
15a40 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
15a50 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
15a60 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
15a70 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e  .    int iColumn
15a80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
15a90 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77   Column number w
15aa0 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65  ithin the source
15ab0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
15ac0 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b  t iSorterColumn;
15ad0 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e         /* Column
15ae0 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73   number in the s
15af0 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
15b00 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20      int iMem;   
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15b20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  Memory location 
15b30 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63  that acts as acc
15b40 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20  umulator */.    
15b50 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
15b60 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
15b70 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73  original express
15b80 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c  ion */.  } *aCol
15b90 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b  ;.  int nColumn;
15ba0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
15bb0 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e  umber of used en
15bc0 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20  tries in aCol[] 
15bd0 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75  */.  int nAccumu
15be0 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  lator;       /* 
15bf0 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
15c00 73 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f  s that show thro
15c10 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75  ugh to the outpu
15c20 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
15c30 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
15c40 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d  Additional colum
15c50 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79  ns are used only
15c60 20 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74   as parameters t
15c70 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  o.              
15c80 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61              ** a
15c90 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
15ca0 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41  ns */.  struct A
15cb0 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20  ggInfo_func {   
15cc0 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72  /* For each aggr
15cd0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a  egate function *
15ce0 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
15cf0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
15d00 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63  * Expression enc
15d10 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69  oding the functi
15d20 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65  on */.    FuncDe
15d30 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20  f *pFunc;       
15d40 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67     /* The aggreg
15d50 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70  ate function imp
15d60 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
15d70 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
15d80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
15d90 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
15da0 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
15db0 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69  mulator */.    i
15dc0 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20  nt iDistinct;   
15dd0 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d          /* Ephem
15de0 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20  eral table used 
15df0 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49  to enforce DISTI
15e00 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e  NCT */.  } *aFun
15e10 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20  c;.  int nFunc; 
15e20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15e30 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
15e40 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a  s in aFunc[] */.
15e50 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61  };../*.** The da
15e60 74 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20  tatype ynVar is 
15e70 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  a signed integer
15e80 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20  , either 16-bit 
15e90 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73  or 32-bit..** Us
15ea0 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62  ually it is 16-b
15eb0 69 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c  its.  But if SQL
15ec0 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
15ed0 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74  _NUMBER is great
15ee0 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37  er.** than 32767
15ef0 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65   we have to make
15f00 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d   it 32-bit.  16-
15f10 62 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64  bit is preferred
15f20 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75   because.** it u
15f30 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20  ses less memory 
15f40 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65  in the Expr obje
15f50 63 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62  ct, which is a b
15f60 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a  ig memory user.*
15f70 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74  * in systems wit
15f80 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72  h lots of prepar
15f90 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20  ed statements.  
15fa0 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74  And few applicat
15fb0 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72  ions.** need mor
15fc0 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20  e than about 10 
15fd0 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e  or 20 variables.
15fe0 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65    But some extre
15ff0 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a  me users want.**
16000 20 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65   to have prepare
16010 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  d statements wit
16020 68 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72  h over 32767 var
16030 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20  iables, and for 
16040 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69  them.** the opti
16050 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20  on is available 
16060 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  (at compile-time
16070 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  )..*/.#if SQLITE
16080 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
16090 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65  MBER<=32767.type
160a0 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23  def i16 ynVar;.#
160b0 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74  else.typedef int
160c0 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a   ynVar;.#endif..
160d0 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20  /*.** Each node 
160e0 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
160f0 20 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72   in the parse tr
16100 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  ee is an instanc
16110 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
16120 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78  ucture..**.** Ex
16130 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63  pr.op is the opc
16140 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72  ode. The integer
16150 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f   parser token co
16160 64 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a  des are reused.*
16170 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72  * as opcodes her
16180 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  e. For example, 
16190 74 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e  the parser defin
161a0 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61  es TK_GE to be a
161b0 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64  n integer.** cod
161c0 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  e representing t
161d0 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72  he ">=" operator
161e0 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65  . This same inte
161f0 67 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73  ger code is reus
16200 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65  ed.** to represe
16210 6e 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74  nt the greater-t
16220 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20  han-or-equal-to 
16230 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20  operator in the 
16240 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72  expression.** tr
16250 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ee..**.** If the
16260 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
16270 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54  n SQL literal (T
16280 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c  K_INTEGER, TK_FL
16290 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a  OAT, TK_BLOB,.**
162a0 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20   or TK_STRING), 
162b0 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
162c0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78  contains the tex
162d0 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74  t of the SQL lit
162e0 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20  eral. If.** the 
162f0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
16300 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52  variable (TK_VAR
16310 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70  IABLE), then Exp
16320 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
16330 20 74 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65   the.** variable
16340 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20   name. Finally, 
16350 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
16360 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
16370 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f  tion (TK_FUNCTIO
16380 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72  N),.** then Expr
16390 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
163a0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
163b0 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  function..**.** 
163c0 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20  Expr.pRight and 
163d0 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74  Expr.pLeft are t
163e0 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
163f0 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73  t subexpressions
16400 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20   of a.** binary 
16410 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72  operator. Either
16420 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20   or both may be 
16430 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  NULL..**.** Expr
16440 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69  .x.pList is a li
16450 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  st of arguments 
16460 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
16470 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
16480 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20  tion,.** a CASE 
16490 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e  expression or an
164a0 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   IN expression o
164b0 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  f the form "<lhs
164c0 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e  > IN (<y>, <z>..
164d0 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  .)"..** Expr.x.p
164e0 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69  Select is used i
164f0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
16500 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74   is a sub-select
16510 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f   or an expressio
16520 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d  n of.** the form
16530 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45   "<lhs> IN (SELE
16540 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65  CT ...)". If the
16550 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69   EP_xIsSelect bi
16560 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a  t is set in the.
16570 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  ** Expr.flags ma
16580 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e  sk, then Expr.x.
16590 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
165a0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70  . Otherwise, Exp
165b0 72 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20  r.x.pList is.** 
165c0 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  valid..**.** An 
165d0 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
165e0 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e  e form ID or ID.
165f0 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63  ID refers to a c
16600 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65  olumn in a table
16610 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78  ..** For such ex
16620 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e  pressions, Expr.
16630 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f  op is set to TK_
16640 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e  COLUMN and Expr.
16650 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65  iTable is.** the
16660 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20   integer cursor 
16670 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45  number of a VDBE
16680 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
16690 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61   to that table a
166a0 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75  nd.** Expr.iColu
166b0 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e  mn is the column
166c0 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
166d0 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e  specific column.
166e0 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72    If the.** expr
166f0 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61  ession is used a
16700 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  s a result in an
16710 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43   aggregate SELEC
16720 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76  T, then the.** v
16730 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f  alue is also sto
16740 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e  red in the Expr.
16750 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  iAgg column in t
16760 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20  he aggregate so 
16770 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62  that.** it can b
16780 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72  e accessed after
16790 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20   all aggregates 
167a0 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a  are computed..**
167b0 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
167c0 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f  ssion is an unbo
167d0 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72  und variable mar
167e0 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20  ker (a question 
167f0 6d 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65  mark.** characte
16800 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69  r '?' in the ori
16810 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20  ginal SQL) then 
16820 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20  the Expr.iTable 
16830 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 0a  holds the index.
16840 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ** number for th
16850 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a  at variable..**.
16860 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
16870 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65  sion is a subque
16880 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f  ry then Expr.iCo
16890 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e  lumn holds an in
168a0 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65  teger.** registe
168b0 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e  r number contain
168c0 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ing the result o
168d0 66 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20  f the subquery. 
168e0 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75   If the.** subqu
168f0 65 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73  ery gives a cons
16900 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65  tant result, the
16910 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20  n iTable is -1. 
16920 20 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79   If the subquery
16930 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66  .** gives a diff
16940 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20  erent answer at 
16950 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20  different times 
16960 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  during statement
16970 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74   processing.** t
16980 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68  hen iTable is th
16990 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73  e address of a s
169a0 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63  ubroutine that c
169b0 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71  omputes the subq
169c0 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uery..**.** If t
169d0 68 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79  he Expr is of ty
169e0 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e  pe OP_Column, an
169f0 64 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69  d the table it i
16a00 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d  s selecting from
16a10 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61  .** is a disk ta
16a20 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e  ble or the "old.
16a30 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c  *" pseudo-table,
16a40 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74   then pTab point
16a50 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72  s to the.** corr
16a60 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20  esponding table 
16a70 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a  definition..**.*
16a80 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54  * ALLOCATION NOT
16a90 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f  ES:.**.** Expr o
16aa0 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61  bjects can use a
16ab0 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73   lot of memory s
16ac0 70 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65  pace in database
16ad0 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20   schema.  To.** 
16ae0 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f  help reduce memo
16af0 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c  ry requirements,
16b00 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78   sometimes an Ex
16b10 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62  pr object will b
16b20 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20  e.** truncated. 
16b30 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74   And to reduce t
16b40 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  he number of mem
16b50 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c  ory allocations,
16b60 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77   sometimes.** tw
16b70 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f  o or more Expr o
16b80 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73  bjects will be s
16b90 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
16ba0 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
16bb0 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72  ion,.** together
16bc0 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65   with Expr.zToke
16bd0 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a  n strings..**.**
16be0 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
16bf0 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f  ed and EP_TokenO
16c00 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65  nly flags are se
16c10 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70  t when.** an Exp
16c20 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e  r object is trun
16c30 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f  cated.  When EP_
16c40 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20  Reduced is set, 
16c50 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20  then all.** the 
16c60 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63  child Expr objec
16c70 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70  ts in the Expr.p
16c80 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52  Left and Expr.pR
16c90 69 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a  ight subtrees.**
16ca0 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77   are contained w
16cb0 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d  ithin the same m
16cc0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
16cd0 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72  .  Note, however
16ce0 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75  , that.** the su
16cf0 62 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78  btrees in Expr.x
16d00 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78  .pList or Expr.x
16d10 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77  .pSelect are alw
16d20 61 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a  ays separately.*
16d30 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67  * allocated, reg
16d40 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
16d50 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64  er or not EP_Red
16d60 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a  uced is set..*/.
16d70 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20  struct Expr {.  
16d80 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
16d90 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74         /* Operat
16da0 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79  ion performed by
16db0 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20   this node */.  
16dc0 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
16dd0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66         /* The af
16de0 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f  finity of the co
16df0 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74  lumn or 0 if not
16e00 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75   a column */.  u
16e10 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  32 flags;       
16e20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73        /* Various
16e30 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65   flags.  EP_* Se
16e40 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69  e below */.  uni
16e50 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  on {.    char *z
16e60 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20  Token;          
16e70 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20  /* Token value. 
16e80 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20  Zero terminated 
16e90 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a  and dequoted */.
16ea0 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20      int iValue; 
16eb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f             /* No
16ec0 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67  n-negative integ
16ed0 65 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49  er value if EP_I
16ee0 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75  ntValue */.  } u
16ef0 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
16f00 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
16f10 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45   is set in the E
16f20 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
16f30 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61  then no.  ** spa
16f40 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  ce is allocated 
16f50 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62  for the fields b
16f60 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e  elow this point.
16f70 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20   An attempt to. 
16f80 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20   ** access them 
16f90 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
16fa0 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c   segfault or mal
16fb0 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a  function..  ****
16fc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16fd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16fe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16ff0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17000 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66  */..  Expr *pLef
17010 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
17020 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  Left subnode */.
17030 20 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20    Expr *pRight; 
17040 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68           /* Righ
17050 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75  t subnode */.  u
17060 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c  nion {.    ExprL
17070 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20  ist *pList;     
17080 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53  /* op = IN, EXIS
17090 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45  TS, SELECT, CASE
170a0 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57  , FUNCTION, BETW
170b0 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  EEN */.    Selec
170c0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
170d0 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  /* EP_xIsSelect 
170e0 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49  and op = IN, EXI
170f0 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20  STS, SELECT */. 
17100 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74   } x;..  /* If t
17110 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
17120 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  ag is set in the
17130 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
17140 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73  , then no.  ** s
17150 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  pace is allocate
17160 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73  d for the fields
17170 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e   below this poin
17180 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  t. An attempt to
17190 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65  .  ** access the
171a0 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  m will result in
171b0 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d   a segfault or m
171c0 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a  alfunction..  **
171d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
171e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
171f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17200 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17210 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45  ***/..#if SQLITE
17220 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
17230 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  0.  int nHeight;
17240 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
17250 69 67 68 74 20 6f 66 20 74 68 65 20 74 72 65 65  ight of the tree
17260 20 68 65 61 64 65 64 20 62 79 20 74 68 69 73 20   headed by this 
17270 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  node */.#endif. 
17280 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
17290 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
172a0 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d  LUMN: cursor num
172b0 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c  ber of table hol
172c0 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20  ding column.    
172d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172e0 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53       ** TK_REGIS
172f0 54 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75  TER: register nu
17300 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  mber.           
17310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
17320 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d   TK_TRIGGER: 1 -
17330 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a  > new, 0 -> old.
17340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17350 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55           ** EP_U
17360 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31 37  nlikely:  134217
17370 37 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69  728 times likeli
17380 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20  hood */.  ynVar 
17390 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
173a0 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
173b0 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31  olumn index.  -1
173c0 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20   for rowid..    
173d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173e0 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41       ** TK_VARIA
173f0 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75  BLE: variable nu
17400 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20  mber (always >= 
17410 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41 67  1). */.  i16 iAg
17420 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
17430 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20 69  /* Which entry i
17440 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c  n pAggInfo->aCol
17450 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20  [] or ->aFunc[] 
17460 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a  */.  i16 iRightJ
17470 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49  oinTable;   /* I
17480 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74  f EP_FromJoin, t
17490 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f  he right table o
174a0 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20  f the join */.  
174b0 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20  u8 op2;         
174c0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47         /* TK_REG
174d0 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20  ISTER: original 
174e0 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70  value of Expr.op
174f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17500 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
17510 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75  COLUMN: the valu
17520 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43  e of p5 for OP_C
17530 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20  olumn.          
17540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
17550 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  * TK_AGG_FUNCTIO
17560 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68  N: nesting depth
17570 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70   */.  AggInfo *p
17580 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20  AggInfo;     /* 
17590 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43  Used by TK_AGG_C
175a0 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47  OLUMN and TK_AGG
175b0 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54  _FUNCTION */.  T
175c0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
175d0 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66        /* Table f
175e0 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70  or TK_COLUMN exp
175f0 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a  ressions. */.};.
17600 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
17610 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61  wing are the mea
17620 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e  nings of bits in
17630 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
17640 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
17650 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30  e EP_FromJoin  0
17660 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69  x000001 /* Origi
17670 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e  nates in ON/USIN
17680 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74 65  G clause of oute
17690 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
176a0 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20 30  e EP_Agg       0
176b0 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61  x000002 /* Conta
176c0 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
176d0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
176e0 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ons */.#define E
176f0 50 5f 52 65 73 6f 6c 76 65 64 20 20 30 78 30 30  P_Resolved  0x00
17700 30 30 30 34 20 2f 2a 20 49 44 73 20 68 61 76 65  0004 /* IDs have
17710 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 74   been resolved t
17720 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65  o COLUMNs */.#de
17730 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20 20 20  fine EP_Error   
17740 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20 45 78    0x000008 /* Ex
17750 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e  pression contain
17760 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72  s one or more er
17770 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rors */.#define 
17780 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78 30  EP_Distinct  0x0
17790 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67 61  00010 /* Aggrega
177a0 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  te function with
177b0 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
177c0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  d */.#define EP_
177d0 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30 30  VarSelect 0x0000
177e0 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73  20 /* pSelect is
177f0 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74   correlated, not
17800 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65   constant */.#de
17810 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65  fine EP_DblQuote
17820 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74 6f  d 0x000040 /* to
17830 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e  ken.z was origin
17840 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f  ally in "..." */
17850 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69  .#define EP_Infi
17860 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20 2f  xFunc 0x000080 /
17870 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e  * True for an in
17880 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49  fix function: LI
17890 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f  KE, GLOB, etc */
178a0 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c  .#define EP_Coll
178b0 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20 2f  ate   0x000100 /
178c0 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
178d0 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65  a TK_COLLATE ope
178e0 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  rator */.#define
178f0 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30 78   EP_Generic   0x
17900 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65  000200 /* Ignore
17910 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66 69   COLLATE or affi
17920 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72 65  nity on this tre
17930 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
17940 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30 34  IntValue  0x0004
17950 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61  00 /* Integer va
17960 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  lue contained in
17970 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65   u.iValue */.#de
17980 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63  fine EP_xIsSelec
17990 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e  t 0x000800 /* x.
179a0 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
179b0 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c   (otherwise x.pL
179c0 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69  ist is) */.#defi
179d0 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20 20  ne EP_Skip      
179e0 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c  0x001000 /* COLL
179f0 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49  ATE, AS, or UNLI
17a00 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  KELY */.#define 
17a10 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78 30  EP_Reduced   0x0
17a20 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74  02000 /* Expr st
17a30 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43 45  ruct EXPR_REDUCE
17a40 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  DSIZE bytes only
17a50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54   */.#define EP_T
17a60 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30  okenOnly 0x00400
17a70 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74  0 /* Expr struct
17a80 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
17a90 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a  IZE bytes only *
17aa0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61  /.#define EP_Sta
17ab0 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30 20  tic    0x008000 
17ac0 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72  /* Held in memor
17ad0 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66  y not obtained f
17ae0 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a  rom malloc() */.
17af0 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f  #define EP_MemTo
17b00 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f 2a  ken  0x010000 /*
17b10 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33   Need to sqlite3
17b20 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54  DbFree() Expr.zT
17b30 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oken */.#define 
17b40 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78 30  EP_NoReduce  0x0
17b50 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20  20000 /* Cannot 
17b60 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 74  EXPRDUP_REDUCE t
17b70 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65 66  his Expr */.#def
17b80 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20  ine EP_Unlikely 
17b90 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c   0x040000 /* unl
17ba0 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c  ikely() or likel
17bb0 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e  ihood() function
17bc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
17bd0 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30 30 30  onstFunc 0x08000
17be0 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46 55  0 /* A SQLITE_FU
17bf0 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20 5f  NC_CONSTANT or _
17c00 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f 6e  SLOCHNG function
17c10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
17c20 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30 30 30  anBeNull 0x10000
17c30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c  0 /* Can be null
17c40 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c   despite NOT NUL
17c50 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
17c60 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 71 75  #define EP_Subqu
17c70 65 72 79 20 20 30 78 32 30 30 30 30 30 20 2f 2a  ery  0x200000 /*
17c80 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61   Tree contains a
17c90 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72 61   TK_SELECT opera
17ca0 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  tor */.#define E
17cb0 50 5f 41 6c 69 61 73 20 20 20 20 20 30 78 34 30  P_Alias     0x40
17cc0 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20 61 6c  0000 /* Is an al
17cd0 69 61 73 20 66 6f 72 20 61 20 72 65 73 75 6c 74  ias for a result
17ce0 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23   set column */.#
17cf0 64 65 66 69 6e 65 20 45 50 5f 56 65 63 74 6f 72  define EP_Vector
17d00 20 20 20 20 30 78 38 30 30 30 30 30 20 2f 2a 20      0x800000 /* 
17d10 54 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20  This expression 
17d20 69 73 20 61 20 72 6f 77 20 76 61 6c 75 65 20 2a  is a row value *
17d30 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62 69 6e 61  /../*.** Combina
17d40 74 69 6f 6e 73 20 6f 66 20 74 77 6f 20 6f 72 20  tions of two or 
17d50 6d 6f 72 65 20 45 50 5f 2a 20 66 6c 61 67 73 0a  more EP_* flags.
17d60 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 50 72  */.#define EP_Pr
17d70 6f 70 61 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c  opagate (EP_Coll
17d80 61 74 65 7c 45 50 5f 53 75 62 71 75 65 72 79 29  ate|EP_Subquery)
17d90 20 2f 2a 20 50 72 6f 70 61 67 61 74 65 20 74 68   /* Propagate th
17da0 65 73 65 20 62 69 74 73 20 75 70 20 74 72 65 65  ese bits up tree
17db0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65   */../*.** These
17dc0 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75   macros can be u
17dd0 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74  sed to test, set
17de0 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20  , or clear bits 
17df0 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66  in the.** Expr.f
17e00 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
17e10 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72  define ExprHasPr
17e20 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
17e30 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
17e40 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78  )!=0).#define Ex
17e50 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79  prHasAllProperty
17e60 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c  (E,P)  (((E)->fl
17e70 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
17e80 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72  define ExprSetPr
17e90 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
17ea0 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
17eb0 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61  #define ExprClea
17ec0 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  rProperty(E,P)  
17ed0 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50   (E)->flags&=~(P
17ee0 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65  )../* The ExprSe
17ef0 74 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d  tVVAProperty() m
17f00 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72  acro is used for
17f10 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56   Verification, V
17f20 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e  alidation,.** an
17f30 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20  d Accreditation 
17f40 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20  only.  It works 
17f50 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70  like ExprSetProp
17f60 65 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56  erty() during VV
17f70 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62  A.** processes b
17f80 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f  ut is a no-op fo
17f90 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23  r delivery..*/.#
17fa0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
17fb0 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72  UG.# define Expr
17fc0 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45  SetVVAProperty(E
17fd0 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c  ,P)  (E)->flags|
17fe0 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  =(P).#else.# def
17ff0 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72  ine ExprSetVVAPr
18000 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64  operty(E,P).#end
18010 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
18020 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
18030 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
18040 73 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20  s required by a 
18050 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a 20 73  normal Expr.** s
18060 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73  truct, an Expr s
18070 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
18080 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73  P_Reduced flag s
18090 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73  et in Expr.flags
180a0 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20  .** and an Expr 
180b0 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20  struct with the 
180c0 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
180d0 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  g set..*/.#defin
180e0 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20  e EXPR_FULLSIZE 
180f0 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66            sizeof
18100 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20  (Expr)          
18110 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f   /* Full size */
18120 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45  .#define EXPR_RE
18130 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20  DUCEDSIZE       
18140 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69   offsetof(Expr,i
18150 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f  Table)  /* Commo
18160 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64  n features */.#d
18170 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e  efine EXPR_TOKEN
18180 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66  ONLYSIZE      of
18190 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66  fsetof(Expr,pLef
181a0 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65  t)   /* Fewer fe
181b0 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  atures */../*.**
181c0 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
181d0 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72   the sqlite3Expr
181e0 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20  Dup() function. 
181f0 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63  See the header c
18200 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76 65 20  omment.** above 
18210 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
18220 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
18230 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50  .#define EXPRDUP
18240 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20  _REDUCE         
18250 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20  0x0001  /* Used 
18260 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70  reduced-size Exp
18270 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  r nodes */../*.*
18280 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72  * A list of expr
18290 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65  essions.  Each e
182a0 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70  xpression may op
182b0 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a  tionally have a.
182c0 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70  ** name.  An exp
182d0 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69  r/name combinati
182e0 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69  on can be used i
182f0 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
18300 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c  such.** as the l
18310 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20  ist of "expr AS 
18320 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f  ID" fields follo
18330 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20  wing a "SELECT" 
18340 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73  or in the.** lis
18350 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22  t of "ID = expr"
18360 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44   items in an UPD
18370 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20  ATE.  A list of 
18380 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a  expressions can.
18390 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  ** also be used 
183a0 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  as the argument 
183b0 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69  to a function, i
183c0 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
183d0 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c   a.zName.** fiel
183e0 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  d is not used..*
183f0 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20  *.** By default 
18400 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66  the Expr.zSpan f
18410 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d  ield holds a hum
18420 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63  an-readable desc
18430 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ription of.** th
18440 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  e expression tha
18450 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65  t is used in the
18460 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65   generation of e
18470 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e  rror messages an
18480 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65  d.** column labe
18490 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  ls.  In this cas
184a0 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73  e, Expr.zSpan is
184b0 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74   typically the t
184c0 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75  ext of a.** colu
184d0 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73  mn expression as
184e0 20 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20   it exists in a 
184f0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
18500 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a  .  However, if.*
18510 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62  * the bSpanIsTab
18520 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
18530 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72  en zSpan is over
18540 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74  loaded to mean t
18550 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68  he name.** of th
18560 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  e result column 
18570 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54  in the form: DAT
18580 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55  ABASE.TABLE.COLU
18590 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a  MN.  This later.
185a0 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20  ** form is used 
185b0 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74  for name resolut
185c0 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20  ion with nested 
185d0 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f  FROM clauses..*/
185e0 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74  .struct ExprList
185f0 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20   {.  int nExpr; 
18600 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
18610 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73  umber of express
18620 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  ions on the list
18630 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70   */.  struct Exp
18640 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20  rList_item { /* 
18650 46 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73  For each express
18660 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ion in the list 
18670 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
18680 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  pr;            /
18690 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78  * The list of ex
186a0 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20  pressions */.   
186b0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
186c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
186d0 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
186e0 68 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f  h this expressio
186f0 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  n */.    char *z
18700 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20  Span;           
18710 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78   /* Original tex
18720 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  t of the express
18730 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f  ion */.    u8 so
18740 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
18750 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43     /* 1 for DESC
18760 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f   or 0 for ASC */
18770 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f  .    unsigned do
18780 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20  ne :1;       /* 
18790 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61  A flag to indica
187a0 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69  te when processi
187b0 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a  ng is finished *
187c0 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62  /.    unsigned b
187d0 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a  SpanIsTab :1; /*
187e0 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e   zSpan holds DB.
187f0 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a  TABLE.COLUMN */.
18800 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75      unsigned reu
18810 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43  sable :1;   /* C
18820 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
18830 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a  on is reusable *
18840 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
18850 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
18860 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42       u16 iOrderB
18870 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f  yCol;      /* Fo
18880 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75  r ORDER BY, colu
18890 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73  mn number in res
188a0 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20  ult set */.     
188b0 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20     u16 iAlias;  
188c0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
188d0 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c  x into Parse.aAl
188e0 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20  ias[] for zName 
188f0 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20  */.      } x;.  
18900 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78      int iConstEx
18910 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52  prReg;      /* R
18920 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68  egister in which
18930 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63   Expr value is c
18940 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75  ached */.    } u
18950 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20  ;.  } *a;       
18960 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
18970 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74  loc a power of t
18980 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20 65 71  wo greater or eq
18990 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a  ual to nExpr */.
189a0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
189b0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
189c0 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
189d0 62 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f  by the parser to
189e0 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20   record both.** 
189f0 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  the parse tree f
18a00 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
18a10 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66   and the span of
18a20 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20   input text for 
18a30 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
18a40 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
18a50 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70  Span {.  Expr *p
18a60 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Expr;          /
18a70 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * The expression
18a80 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20   parse tree */. 
18a90 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74   const char *zSt
18aa0 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20  art;   /* First 
18ab0 63 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70  character of inp
18ac0 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e  ut text */.  con
18ad0 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20  st char *zEnd;  
18ae0 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63     /* One charac
18af0 74 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64  ter past the end
18b00 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
18b10 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
18b20 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
18b30 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f  structure can ho
18b40 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74  ld a simple list
18b50 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c   of identifiers,
18b60 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20  .** such as the 
18b70 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20  list "a,b,c" in 
18b80 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
18b90 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20  atements:.**.** 
18ba0 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
18bb0 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53   t(a,b,c) VALUES
18bc0 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52   ...;.**      CR
18bd0 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f  EATE INDEX idx O
18be0 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20  N t(a,b,c);.**  
18bf0 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
18c00 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55  ER trig BEFORE U
18c10 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63  PDATE ON t(a,b,c
18c20 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65  ) ...;.**.** The
18c30 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69   IdList.a.idx fi
18c40 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e  eld is used when
18c50 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72   the IdList repr
18c60 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20  esents the list 
18c70 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d  of.** column nam
18c80 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  es after a table
18c90 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45   name in an INSE
18ca0 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  RT statement.  I
18cb0 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  n the statement.
18cc0 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54  **.**     INSERT
18cd0 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e   INTO t(a,b,c) .
18ce0 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20  ...**.** If "a" 
18cf0 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75  is the k-th colu
18d00 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c  mn of table "t",
18d10 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30   then IdList.a[0
18d20 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72  ].idx==k..*/.str
18d30 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73  uct IdList {.  s
18d40 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65  truct IdList_ite
18d50 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e  m {.    char *zN
18d60 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
18d70 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66  e of the identif
18d80 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ier */.    int i
18d90 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
18da0 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61  Index in some Ta
18db0 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20  ble.aCol[] of a 
18dc0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61  column named zNa
18dd0 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20  me */.  } *a;.  
18de0 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20  int nId;        
18df0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64   /* Number of id
18e00 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65  entifiers on the
18e10 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
18e20 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64  ** The bitmask d
18e30 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20  atatype defined 
18e40 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f  below is used fo
18e50 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  r various optimi
18e60 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43  zations..**.** C
18e70 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f  hanging this fro
18e80 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20  m a 64-bit to a 
18e90 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69  32-bit type limi
18ea0 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
18eb0 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20  .** tables in a 
18ec0 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65  join to 32 inste
18ed0 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69  ad of 64.  But i
18ee0 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74  t also reduces t
18ef0 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
18f00 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38  e library by 738
18f10 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a   bytes on ix86..
18f20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
18f30 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20  _BITMASK_TYPE.  
18f40 74 79 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42  typedef SQLITE_B
18f50 49 54 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d  ITMASK_TYPE Bitm
18f60 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ask;.#else.  typ
18f70 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b  edef u64 Bitmask
18f80 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
18f90 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  The number of bi
18fa0 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e  ts in a Bitmask.
18fb0 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42    "BMS" means "B
18fc0 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f  itMask Size"..*/
18fd0 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28  .#define BMS  ((
18fe0 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d  int)(sizeof(Bitm
18ff0 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20  ask)*8))../*.** 
19000 41 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61  A bit in a Bitma
19010 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  sk.*/.#define MA
19020 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69  SKBIT(n)   (((Bi
19030 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23  tmask)1)<<(n)).#
19040 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32  define MASKBIT32
19050 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20  (n) (((unsigned 
19060 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65  int)1)<<(n)).#de
19070 66 69 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20  fine ALLBITS    
19080 20 20 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a    ((Bitmask)-1).
19090 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
190a0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64  wing structure d
190b0 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f  escribes the FRO
190c0 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
190d0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
190e0 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72  ** Each table or
190f0 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65   subquery in the
19100 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20   FROM clause is 
19110 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65  a separate eleme
19120 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63  nt of.** the Src
19130 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a  List.a[] array..
19140 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61  **.** With the a
19150 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69  ddition of multi
19160 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75 70  ple database sup
19170 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  port, the follow
19180 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
19190 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65   can also be use
191a0 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61 20  d to describe a 
191b0 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
191c0 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61 62   such as the tab
191d0 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f  le that.** is mo
191e0 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53  dified by an INS
191f0 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20  ERT, DELETE, or 
19200 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
19210 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53  .  In standard S
19220 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61  QL,.** such a ta
19230 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73 69  ble must be a si
19240 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20  mple name: ID.  
19250 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74  But in SQLite, t
19260 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20  he table can.** 
19270 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69 65  now be identifie
19280 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65 20  d by a database 
19290 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65  name, a dot, the
192a0 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  n the table name
192b0 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54  : ID.ID..**.** T
192c0 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72  he jointype star
192d0 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74  ts out showing t
192e0 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74  he join type bet
192f0 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  ween the current
19300 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68   table.** and th
19310 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20  e next table on 
19320 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70  the list.  The p
19330 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68 65  arser builds the
19340 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a   list this way..
19350 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53 72  ** But sqlite3Sr
19360 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
19370 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66 74  pe() later shift
19380 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20  s the jointypes 
19390 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20  so that each.** 
193a0 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73 73  jointype express
193b0 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77  es the join betw
193c0 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e  een the table an
193d0 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74  d the previous t
193e0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  able..**.** In t
193f0 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64  he colUsed field
19400 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72  , the high-order
19410 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69 73   bit (bit 63) is
19420 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62 6c   set if the tabl
19430 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f  e.** contains mo
19440 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d  re than 63 colum
19450 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68  ns and the 64-th
19460 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e   or later column
19470 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72   is used..*/.str
19480 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20  uct SrcList {.  
19490 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20  int nSrc;       
194a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
194b0 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
194c0 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  es in the FROM c
194d0 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e  lause */.  u32 n
194e0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e  Alloc;      /* N
194f0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
19500 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b   allocated in a[
19510 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72  ] below */.  str
19520 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
19530 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70   {.    Schema *p
19540 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65  Schema;  /* Sche
19550 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ma to which this
19560 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a   item is fixed *
19570 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74  /.    char *zDat
19580 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20  abase;  /* Name 
19590 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
195a0 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ing this table *
195b0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
195c0 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
195d0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  of the table */.
195e0 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73      char *zAlias
195f0 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22  ;     /* The "B"
19600 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53   part of a "A AS
19610 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61   B" phrase.  zNa
19620 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f  me is the "A" */
19630 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
19640 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c  ;      /* An SQL
19650 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e   table correspon
19660 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f  ding to zName */
19670 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
19680 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45  lect;  /* A SELE
19690 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65  CT statement use
196a0 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20  d in place of a 
196b0 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
196c0 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75    int addrFillSu
196d0 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f  b;  /* Address o
196e0 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20  f subroutine to 
196f0 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75  manifest a subqu
19700 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  ery */.    int r
19710 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20  egReturn;    /* 
19720 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
19730 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20   return address 
19740 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a  of addrFillSub *
19750 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73  /.    int regRes
19760 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73  ult;    /* Regis
19770 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73  ters holding res
19780 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75  ults of a co-rou
19790 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  tine */.    stru
197a0 63 74 20 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f  ct {.      u8 jo
197b0 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20  intype;      /* 
197c0 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74  Type of join bet
197d0 77 65 65 6e 20 74 68 69 73 20 74 61 62 6c 65 20  ween this table 
197e0 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73  and the previous
197f0 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
19800 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31  ed notIndexed :1
19810 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
19820 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49  there is a NOT I
19830 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f  NDEXED clause */
19840 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
19850 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b 20  isIndexedBy :1; 
19860 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
19870 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45 44  re is an INDEXED
19880 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
19890 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 54      unsigned isT
198a0 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f  abFunc :1;     /
198b0 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c 65 2d  * True if table-
198c0 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20  valued-function 
198d0 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20 20  syntax */.      
198e0 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65  unsigned isCorre
198f0 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72  lated :1;  /* Tr
19900 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20  ue if sub-query 
19910 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f  is correlated */
19920 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
19930 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b  viaCoroutine :1;
19940 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64    /* Implemented
19950 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   as a co-routine
19960 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
19970 65 64 20 69 73 52 65 63 75 72 73 69 76 65 20 3a  ed isRecursive :
19980 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  1;   /* True for
19990 20 72 65 63 75 72 73 69 76 65 20 72 65 66 65 72   recursive refer
199a0 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a  ence in WITH */.
199b0 20 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e 64 65      } fg;.#ifnde
199c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
199d0 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65  PLAIN.    u8 iSe
199e0 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49  lectId;     /* I
199f0 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68  f pSelect!=0, th
19a00 65 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d  e id of the sub-
19a10 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f  select in EQP */
19a20 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20  .#endif.    int 
19a30 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a  iCursor;      /*
19a40 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
19a50 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20   number used to 
19a60 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c  access this tabl
19a70 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  e */.    Expr *p
19a80 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  On;        /* Th
19a90 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61  e ON clause of a
19aa0 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c   join */.    IdL
19ab0 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f  ist *pUsing;   /
19ac0 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75  * The USING clau
19ad0 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
19ae0 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55      Bitmask colU
19af0 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28  sed;  /* Bit N (
19b00 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c  1<<N) set if col
19b10 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73  umn N of pTab is
19b20 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69   used */.    uni
19b30 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20  on {.      char 
19b40 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20 20 20 20  *zIndexedBy;    
19b50 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72  /* Identifier fr
19b60 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c  om "INDEXED BY <
19b70 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20  zIndex>" clause 
19b80 2a 2f 0a 20 20 20 20 20 20 45 78 70 72 4c 69 73  */.      ExprLis
19b90 74 20 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a  t *pFuncArg;  /*
19ba0 20 41 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 61   Arguments to ta
19bb0 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74  ble-valued-funct
19bc0 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b  ion */.    } u1;
19bd0 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 42 49  .    Index *pIBI
19be0 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20  ndex;  /* Index 
19bf0 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73  structure corres
19c00 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49  ponding to u1.zI
19c10 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20  ndexedBy */.  } 
19c20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  a[1];           
19c30 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66    /* One entry f
19c40 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69  or each identifi
19c50 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  er on the list *
19c60 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d  /.};../*.** Perm
19c70 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20  itted values of 
19c80 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f  the SrcList.a.jo
19c90 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a  intype field.*/.
19ca0 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52  #define JT_INNER
19cb0 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f       0x0001    /
19cc0 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e  * Any kind of in
19cd0 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69  ner or cross joi
19ce0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
19cf0 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32  CROSS     0x0002
19d00 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20      /* Explicit 
19d10 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53  use of the CROSS
19d20 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
19d30 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20  ine JT_NATURAL  
19d40 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72   0x0004    /* Tr
19d50 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61  ue for a "natura
19d60 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  l" join */.#defi
19d70 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20  ne JT_LEFT      
19d80 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66  0x0008    /* Lef
19d90 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
19da0 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54  #define JT_RIGHT
19db0 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f       0x0010    /
19dc0 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f  * Right outer jo
19dd0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
19de0 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32  _OUTER     0x002
19df0 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54  0    /* The "OUT
19e00 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70  ER" keyword is p
19e10 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  resent */.#defin
19e20 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30  e JT_ERROR     0
19e30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e  x0040    /* unkn
19e40 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74  own or unsupport
19e50 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a  ed join type */.
19e60 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70  ../*.** Flags ap
19e70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68  propriate for th
19e80 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72  e wctrlFlags par
19e90 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65  ameter of sqlite
19ea0 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a  3WhereBegin().**
19eb0 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e   and the WhereIn
19ec0 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65  fo.wctrlFlags me
19ed0 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  mber..**.** Valu
19ee0 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65  e constraints (e
19ef0 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65  nforced via asse
19f00 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48  rt()):.**     WH
19f10 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d  ERE_USE_LIMIT  =
19f20 3d 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a  = SF_FixedLimit.
19f30 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
19f40 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20  _ORDERBY_NORMAL 
19f50 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f    0x0000 /* No-o
19f60 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  p */.#define WHE
19f70 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20  RE_ORDERBY_MIN  
19f80 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52      0x0001 /* OR
19f90 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e  DER BY processin
19fa0 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63  g for min() func
19fb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
19fc0 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20  E_ORDERBY_MAX   
19fd0 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44     0x0002 /* ORD
19fe0 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
19ff0 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20   for max() func 
1a000 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1a010 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44  _ONEPASS_DESIRED
1a020 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74    0x0004 /* Want
1a030 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20   to do one-pass 
1a040 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f  UPDATE/DELETE */
1a050 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1a060 4e 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20  NEPASS_MULTIROW 
1a070 30 78 30 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53  0x0008 /* ONEPAS
1a080 53 20 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c  S is ok with mul
1a090 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64  tiple rows */.#d
1a0a0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c  efine WHERE_DUPL
1a0b0 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30  ICATES_OK    0x0
1a0c0 30 31 30 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74  010 /* Ok to ret
1a0d0 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74  urn a row more t
1a0e0 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66  han once */.#def
1a0f0 69 6e 65 20 57 48 45 52 45 5f 4f 52 5f 53 55 42  ine WHERE_OR_SUB
1a100 43 4c 41 55 53 45 20 20 20 20 20 30 78 30 30 32  CLAUSE     0x002
1a110 30 20 2f 2a 20 50 72 6f 63 65 73 73 69 6e 67 20  0 /* Processing 
1a120 61 20 73 75 62 2d 57 48 45 52 45 20 61 73 20 70  a sub-WHERE as p
1a130 61 72 74 20 6f 66 0a 20 20 20 20 20 20 20 20 20  art of.         
1a140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a150 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
1a160 74 68 65 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74  the OR optimizat
1a170 69 6f 6e 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ion  */.#define 
1a180 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20  WHERE_GROUPBY   
1a190 20 20 20 20 20 20 20 30 78 30 30 34 30 20 2f 2a         0x0040 /*
1a1a0 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61   pOrderBy is rea
1a1b0 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a  lly a GROUP BY *
1a1c0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1a1d0 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20  DISTINCTBY      
1a1e0 20 30 78 30 30 38 30 20 2f 2a 20 70 4f 72 64 65   0x0080 /* pOrde
1a1f0 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rby is really a 
1a200 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20  DISTINCT clause 
1a210 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1a220 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20  _WANT_DISTINCT  
1a230 20 20 30 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20    0x0100 /* All 
1a240 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20  output needs to 
1a250 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23  be distinct */.#
1a260 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52  define WHERE_SOR
1a270 54 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78  TBYGROUP      0x
1a280 30 32 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20  0200 /* Support 
1a290 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
1a2a0 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e  rted() */.#defin
1a2b0 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 54 41 42  e WHERE_SEEK_TAB
1a2c0 4c 45 20 20 20 20 20 20 20 30 78 30 34 30 30 20  LE       0x0400 
1a2d0 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20  /* Do not defer 
1a2e0 73 65 65 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61  seeks on main ta
1a2f0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ble */.#define W
1a300 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d  HERE_ORDERBY_LIM
1a310 49 54 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20  IT    0x0800 /* 
1a320 4f 52 44 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e  ORDERBY+LIMIT on
1a330 20 74 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20   the inner loop 
1a340 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
1a350 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
1a360 20 20 30 78 31 30 30 30 20 20 20 20 6e 6f 74 20    0x1000    not 
1a370 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a  currently used *
1a380 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
1a390 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20            /*    
1a3a0 20 30 78 32 30 30 30 20 20 20 20 6e 6f 74 20 63   0x2000    not c
1a3b0 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f  urrently used */
1a3c0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 55  .#define WHERE_U
1a3d0 53 45 5f 4c 49 4d 49 54 20 20 20 20 20 20 20 20  SE_LIMIT        
1a3e0 30 78 34 30 30 30 20 2f 2a 20 55 73 65 20 74 68  0x4000 /* Use th
1a3f0 65 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73 74 20  e LIMIT in cost 
1a400 65 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20 20 20  estimates */.   
1a410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a420 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78 38 30       /*     0x80
1a430 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e  00    not curren
1a440 74 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20  tly used */../* 
1a450 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76  Allowed return v
1a460 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74  alues from sqlit
1a470 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63  e3WhereIsDistinc
1a480 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57  t().*/.#define W
1a490 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f  HERE_DISTINCT_NO
1a4a0 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49  OP      0  /* DI
1a4b0 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e  STINCT keyword n
1a4c0 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  ot used */.#defi
1a4d0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1a4e0 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f  T_UNIQUE    1  /
1a4f0 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20  * No duplicates 
1a500 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1a510 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45  _DISTINCT_ORDERE
1a520 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75  D   2  /* All du
1a530 70 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a  plicates are adj
1a540 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  acent */.#define
1a550 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
1a560 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20  UNORDERED 3  /* 
1a570 44 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73  Duplicates are s
1a580 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a  cattered */../*.
1a590 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ** A NameContext
1a5a0 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65   defines a conte
1a5b0 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72  xt in which to r
1a5c0 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64  esolve table and
1a5d0 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73   column.** names
1a5e0 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63  .  The context c
1a5f0 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73  onsists of a lis
1a600 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65  t of tables (the
1a610 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64   pSrcList) field
1a620 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f   and.** a list o
1a630 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  f named expressi
1a640 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68  on (pEList).  Th
1a650 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  e named expressi
1a660 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62  on list may.** b
1a670 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72  e NULL.  The pSr
1a680 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  c corresponds to
1a690 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
1a6a0 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a   of a SELECT or.
1a6b0 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ** to the table 
1a6c0 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
1a6d0 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44  n by INSERT, UPD
1a6e0 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20  ATE, or DELETE. 
1a6f0 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63   The.** pEList c
1a700 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
1a710 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20  e result set of 
1a720 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20  a SELECT and is 
1a730 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65  NULL for.** othe
1a740 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  r statements..**
1a750 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73  .** NameContexts
1a760 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20   can be nested. 
1a770 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20   When resolving 
1a780 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72  names, the inner
1a790 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74  -most.** context
1a7a0 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72   is searched fir
1a7b0 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68  st.  If no match
1a7c0 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
1a7d0 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e  ext outer.** con
1a7e0 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e  text is checked.
1a7f0 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74    If there is st
1a800 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68  ill no match, th
1a810 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a  e next context.*
1a820 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54  * is checked.  T
1a830 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74  his process cont
1a840 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68  inues until eith
1a850 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f  er a match is fo
1a860 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f  und.** or all co
1a870 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b  ntexts are check
1a880 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20  .  When a match 
1a890 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52  is found, the nR
1a8a0 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20  ef member of.** 
1a8b0 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74  the context cont
1a8c0 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68  aining the match
1a8d0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
1a8e0 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71  .**.** Each subq
1a8f0 75 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20  uery gets a new 
1a900 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68  NameContext.  Th
1a910 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f  e pNext field po
1a920 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e  ints to the.** N
1a930 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68  ameContext in th
1a940 65 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20  e parent query. 
1a950 20 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73   Thus the proces
1a960 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68  s of scanning th
1a970 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  e.** NameContext
1a980 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64   list correspond
1a990 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74  s to searching t
1a9a0 68 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76  hrough successiv
1a9b0 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62  ely outer.** sub
1a9c0 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20  queries looking 
1a9d0 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a  for a match..*/.
1a9e0 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65  struct NameConte
1a9f0 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  xt {.  Parse *pP
1aa00 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  arse;       /* T
1aa10 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53  he parser */.  S
1aa20 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
1aa30 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f  ;   /* One or mo
1aa40 72 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74  re tables used t
1aa50 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20  o resolve names 
1aa60 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1aa70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74  EList;    /* Opt
1aa80 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65  ional list of re
1aa90 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73  sult-set columns
1aaa0 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70   */.  AggInfo *p
1aab0 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e  AggInfo;   /* In
1aac0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
1aad0 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74 68  aggregates at th
1aae0 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61  is level */.  Na
1aaf0 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74  meContext *pNext
1ab00 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72  ;  /* Next outer
1ab10 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20   name context.  
1ab20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f  NULL for outermo
1ab30 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  st */.  int nRef
1ab40 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1ab50 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20  Number of names 
1ab60 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73  resolved by this
1ab70 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e   context */.  in
1ab80 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
1ab90 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1aba0 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72  errors encounter
1abb0 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69  ed while resolvi
1abc0 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31  ng names */.  u1
1abd0 36 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  6 ncFlags;      
1abe0 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f     /* Zero or mo
1abf0 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65  re NC_* flags de
1ac00 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d  fined below */.}
1ac10 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
1ac20 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
1ac30 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46  NameContext, ncF
1ac40 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a  lags field..**.*
1ac50 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
1ac60 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64  nts (all checked
1ac70 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
1ac80 2a 2a 20 20 20 20 4e 43 5f 48 61 73 41 67 67 20  **    NC_HasAgg 
1ac90 20 20 20 3d 3d 20 53 46 5f 48 61 73 41 67 67 0a     == SF_HasAgg.
1aca0 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78 41  **    NC_MinMaxA
1acb0 67 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41  gg == SF_MinMaxA
1acc0 67 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e  gg == SQLITE_FUN
1acd0 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23  C_MINMAX.**.*/.#
1ace0 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41  define NC_AllowA
1acf0 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41  gg  0x0001  /* A
1ad00 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1ad10 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68  ns are allowed h
1ad20 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ere */.#define N
1ad30 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 30 30  C_PartIdx   0x00
1ad40 30 32 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72  02  /* True if r
1ad50 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69  esolving a parti
1ad60 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a  al index WHERE *
1ad70 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43  /.#define NC_IsC
1ad80 68 65 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f  heck   0x0004  /
1ad90 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
1ada0 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43  ing names in a C
1adb0 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
1adc0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e  */.#define NC_In
1add0 41 67 67 46 75 6e 63 20 30 78 30 30 30 38 20 20  AggFunc 0x0008  
1ade0 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79  /* True if analy
1adf0 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74  zing arguments t
1ae00 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f  o an agg func */
1ae10 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41  .#define NC_HasA
1ae20 67 67 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a  gg    0x0010  /*
1ae30 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   One or more agg
1ae40 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1ae50 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   seen */.#define
1ae60 20 4e 43 5f 49 64 78 45 78 70 72 20 20 20 30 78   NC_IdxExpr   0x
1ae70 30 30 32 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0020  /* True if
1ae80 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d   resolving colum
1ae90 6e 73 20 6f 66 20 43 52 45 41 54 45 20 49 4e 44  ns of CREATE IND
1aea0 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  EX */.#define NC
1aeb0 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 34  _VarSelect 0x004
1aec0 30 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c 61 74  0  /* A correlat
1aed0 65 64 20 73 75 62 71 75 65 72 79 20 68 61 73 20  ed subquery has 
1aee0 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23 64 65  been seen */.#de
1aef0 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67  fine NC_MinMaxAg
1af00 67 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e  g 0x1000  /* min
1af10 2f 6d 61 78 20 61 67 67 72 65 67 61 74 65 73 20  /max aggregates 
1af20 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20  seen.  See note 
1af30 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  above */../*.** 
1af40 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1af50 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1af60 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
1af70 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  all information.
1af80 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  ** needed to gen
1af90 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61  erate code for a
1afa0 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73   single SELECT s
1afb0 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20  tatement..**.** 
1afc0 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f  nLimit is set to
1afd0 20 2d 31 20 69 66 20 74 68 65 72 65 20 69 73 20   -1 if there is 
1afe0 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e  no LIMIT clause.
1aff0 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74    nOffset is set
1b000 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65   to 0..** If the
1b010 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c  re is a LIMIT cl
1b020 61 75 73 65 2c 20 74 68 65 20 70 61 72 73 65 72  ause, the parser
1b030 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20   sets nLimit to 
1b040 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
1b050 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f  .** limit and nO
1b060 66 66 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  ffset to the val
1b070 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74  ue of the offset
1b080 20 28 6f 72 20 30 20 69 66 20 74 68 65 72 65 20   (or 0 if there 
1b090 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74  is not.** offset
1b0a0 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e  ).  But later on
1b0b0 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66  , nLimit and nOf
1b0c0 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20  fset become the 
1b0d0 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73  memory locations
1b0e0 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20  .** in the VDBE 
1b0f0 74 68 61 74 20 72 65 63 6f 72 64 20 74 68 65 20  that record the 
1b100 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74  limit and offset
1b110 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a   counters..**.**
1b120 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20   addrOpenEphm[] 
1b130 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20  entries contain 
1b140 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f  the address of O
1b150 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
1b160 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73  opcodes..** Thes
1b170 65 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74  e addresses must
1b180 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68   be stored so th
1b190 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63  at we can go bac
1b1a0 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a  k and fill in.**
1b1b0 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20   the P4_KEYINFO 
1b1c0 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72  and P2 parameter
1b1d0 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65  s later.  Neithe
1b1e0 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f  r the KeyInfo no
1b1f0 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  r.** the number 
1b200 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32  of columns in P2
1b210 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64   can be computed
1b220 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
1b230 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f  e.** as the OP_O
1b240 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74  penEphm instruct
1b250 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63  ion is coded bec
1b260 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75  ause not.** enou
1b270 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  gh information a
1b280 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e  bout the compoun
1b290 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e  d query is known
1b2a0 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a   at that point..
1b2b0 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  ** The KeyInfo f
1b2c0 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b  or addrOpenTran[
1b2d0 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61  0] and [1] conta
1b2e0 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ins collating se
1b2f0 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74  quences.** for t
1b300 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20  he result set.  
1b310 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20  The KeyInfo for 
1b320 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20  addrOpenEphm[2] 
1b330 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
1b340 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20  ng.** sequences 
1b350 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  for the ORDER BY
1b360 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
1b370 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78  ct Select {.  Ex
1b380 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
1b390 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c       /* The fiel
1b3a0 64 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ds of the result
1b3b0 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
1b3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b3d0 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e  One of: TK_UNION
1b3e0 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52   TK_ALL TK_INTER
1b3f0 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a  SECT TK_EXCEPT *
1b400 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65  /.  LogEst nSele
1b410 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73  ctRow;     /* Es
1b420 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f  timated number o
1b430 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f  f result rows */
1b440 0a 20 20 75 33 32 20 73 65 6c 46 6c 61 67 73 3b  .  u32 selFlags;
1b450 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72            /* Var
1b460 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73  ious SF_* values
1b470 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74   */.  int iLimit
1b480 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20  , iOffset;   /* 
1b490 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73  Memory registers
1b4a0 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26   holding LIMIT &
1b4b0 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73   OFFSET counters
1b4c0 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52   */.#if SELECTTR
1b4d0 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68  ACE_ENABLED.  ch
1b4e0 61 72 20 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b  ar zSelName[12];
1b4f0 20 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63       /* Symbolic
1b500 20 6e 61 6d 65 20 6f 66 20 74 68 69 73 20 53 45   name of this SE
1b510 4c 45 43 54 20 75 73 65 20 66 6f 72 20 64 65 62  LECT use for deb
1b520 75 67 67 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66  ugging */.#endif
1b530 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45  .  int addrOpenE
1b540 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f  phm[2];   /* OP_
1b550 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65  OpenEphem opcode
1b560 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69  s related to thi
1b570 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72  s select */.  Sr
1b580 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20  cList *pSrc;    
1b590 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d       /* The FROM
1b5a0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
1b5b0 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20  r *pWhere;      
1b5c0 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
1b5d0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
1b5e0 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
1b5f0 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50      /* The GROUP
1b600 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
1b610 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20  Expr *pHaving;  
1b620 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41         /* The HA
1b630 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20  VING clause */. 
1b640 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65   ExprList *pOrde
1b650 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f  rBy;    /* The O
1b660 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a  RDER BY clause *
1b670 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69  /.  Select *pPri
1b680 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72  or;        /* Pr
1b690 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20  ior select in a 
1b6a0 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20  compound select 
1b6b0 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53  statement */.  S
1b6c0 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20  elect *pNext;   
1b6d0 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65        /* Next se
1b6e0 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74  lect to the left
1b6f0 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a   in a compound *
1b700 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74  /.  Expr *pLimit
1b710 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49  ;          /* LI
1b720 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  MIT expression. 
1b730 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75  NULL means not u
1b740 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a  sed. */.  Expr *
1b750 70 4f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20  pOffset;        
1b760 20 2f 2a 20 4f 46 46 53 45 54 20 65 78 70 72 65   /* OFFSET expre
1b770 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e  ssion. NULL mean
1b780 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20  s not used. */. 
1b790 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
1b7a0 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20          /* WITH 
1b7b0 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20  clause attached 
1b7c0 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20  to this select. 
1b7d0 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a  Or NULL. */.};..
1b7e0 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
1b7f0 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e  lues for Select.
1b800 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22  selFlags.  The "
1b810 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64  SF" prefix stand
1b820 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74  s for.** "Select
1b830 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61   Flag"..**.** Va
1b840 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
1b850 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61  (all checked via
1b860 20 61 73 73 65 72 74 28 29 29 0a 2a 2a 20 20 20   assert()).**   
1b870 20 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20    SF_HasAgg     
1b880 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a 20  == NC_HasAgg.** 
1b890 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67      SF_MinMaxAgg
1b8a0 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41 67    == NC_MinMaxAg
1b8b0 67 20 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f  g     == SQLITE_
1b8c0 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20  FUNC_MINMAX.**  
1b8d0 20 20 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74     SF_FixedLimit
1b8e0 20 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c 49   == WHERE_USE_LI
1b8f0 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  MIT.*/.#define S
1b900 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20  F_Distinct      
1b910 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f 75 74   0x00001  /* Out
1b920 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49  put should be DI
1b930 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e  STINCT */.#defin
1b940 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20  e SF_All        
1b950 20 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a 20      0x00002  /* 
1b960 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c  Includes the ALL
1b970 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
1b980 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20  ine SF_Resolved 
1b990 20 20 20 20 20 20 30 78 30 30 30 30 34 20 20 2f        0x00004  /
1b9a0 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61  * Identifiers ha
1b9b0 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64  ve been resolved
1b9c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
1b9d0 67 67 72 65 67 61 74 65 20 20 20 20 20 20 30 78  ggregate      0x
1b9e0 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69  00008  /* Contai
1b9f0 6e 73 20 61 67 67 20 66 75 6e 63 74 69 6f 6e 73  ns agg functions
1ba00 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20 2a   or a GROUP BY *
1ba10 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73  /.#define SF_Has
1ba20 41 67 67 20 20 20 20 20 20 20 20 20 30 78 30 30  Agg         0x00
1ba30 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  010  /* Contains
1ba40 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1ba50 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
1ba60 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c  SF_UsesEphemeral
1ba70 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20 55 73    0x00020  /* Us
1ba80 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d  es the OpenEphem
1ba90 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  eral opcode */.#
1baa0 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64  define SF_Expand
1bab0 65 64 20 20 20 20 20 20 20 30 78 30 30 30 34 30  ed       0x00040
1bac0 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65    /* sqlite3Sele
1bad0 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65  ctExpand() calle
1bae0 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65  d on this */.#de
1baf0 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49  fine SF_HasTypeI
1bb00 6e 66 6f 20 20 20 20 30 78 30 30 30 38 30 20 20  nfo    0x00080  
1bb10 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69  /* FROM subqueri
1bb20 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65  es have Table me
1bb30 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e  tadata */.#defin
1bb40 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20  e SF_Compound   
1bb50 20 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a 20      0x00100  /* 
1bb60 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75  Part of a compou
1bb70 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66  nd query */.#def
1bb80 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20  ine SF_Values   
1bb90 20 20 20 20 20 20 30 78 30 30 32 30 30 20 20 2f        0x00200  /
1bba0 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72  * Synthesized fr
1bbb0 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  om VALUES clause
1bbc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1bbd0 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30 78  ultiValue     0x
1bbe0 30 30 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65  00400  /* Single
1bbf0 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74   VALUES term wit
1bc00 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  h multiple rows 
1bc10 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65  */.#define SF_Ne
1bc20 73 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78 30  stedFrom     0x0
1bc30 30 38 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0800  /* Part of
1bc40 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64   a parenthesized
1bc50 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1bc60 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61  #define SF_MinMa
1bc70 78 41 67 67 20 20 20 20 20 20 30 78 30 31 30 30  xAgg      0x0100
1bc80 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  0  /* Aggregate 
1bc90 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29  containing min()
1bca0 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65   or max() */.#de
1bcb0 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76  fine SF_Recursiv
1bcc0 65 20 20 20 20 20 20 30 78 30 32 30 30 30 20 20  e      0x02000  
1bcd0 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65  /* The recursive
1bce0 20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72   part of a recur
1bcf0 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66  sive CTE */.#def
1bd00 69 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d 69  ine SF_FixedLimi
1bd10 74 20 20 20 20 20 30 78 30 34 30 30 30 20 20 2f  t     0x04000  /
1bd20 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65 74  * nSelectRow set
1bd30 20 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c   by a constant L
1bd40 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  IMIT */.#define 
1bd50 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20  SF_MaybeConvert 
1bd60 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4e 65    0x08000  /* Ne
1bd70 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ed convertCompou
1bd80 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1bd90 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ry() */.#define 
1bda0 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20  SF_Converted    
1bdb0 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20 42 79    0x10000  /* By
1bdc0 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
1bdd0 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
1bde0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
1bdf0 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20  _IncludeHidden  
1be00 30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c  0x20000  /* Incl
1be10 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  ude hidden colum
1be20 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a  ns in output */.
1be30 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75  ../*.** The resu
1be40 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20  lts of a SELECT 
1be50 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74  can be distribut
1be60 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
1be70 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a  ys, as defined.*
1be80 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  * by one of the 
1be90 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
1bea0 2e 20 20 54 68 65 20 22 53 52 54 22 20 70 72 65  .  The "SRT" pre
1beb0 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43  fix means "SELEC
1bec0 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65  T Result.** Type
1bed0 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1bee0 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f  _Union       Sto
1bef0 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 61 20  re results as a 
1bf00 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61  key in a tempora
1bf10 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20  ry index.**     
1bf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf30 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 70 44  identified by pD
1bf40 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
1bf50 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65  .**     SRT_Exce
1bf60 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72  pt      Remove r
1bf70 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20  esults from the 
1bf80 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20  temporary index 
1bf90 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1bfa0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78  **.**     SRT_Ex
1bfb0 69 73 74 73 20 20 20 20 20 20 53 74 6f 72 65 20  ists      Store 
1bfc0 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65  a 1 in memory ce
1bfd0 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ll pDest->iSDPar
1bfe0 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a  m if the result.
1bff0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1c000 20 20 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f         set is no
1c010 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20  t empty..**.**  
1c020 20 20 20 53 52 54 5f 44 69 73 63 61 72 64 20 20     SRT_Discard  
1c030 20 20 20 54 68 72 6f 77 20 74 68 65 20 72 65 73     Throw the res
1c040 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69 73  ults away.  This
1c050 20 69 73 20 75 73 65 64 20 62 79 20 53 45 4c 45   is used by SELE
1c060 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  CT.**           
1c070 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
1c080 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67  ents within trig
1c090 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20  gers whose only 
1c0a0 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20  purpose is.**   
1c0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0c0 20 20 74 68 65 20 73 69 64 65 2d 65 66 66 65 63    the side-effec
1c0d0 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e  ts of functions.
1c0e0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
1c0f0 65 20 61 62 6f 76 65 20 61 72 65 20 66 72 65 65  e above are free
1c100 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72   to ignore their
1c110 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1c120 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20  . Those that.** 
1c130 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f  follow must hono
1c140 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  r the ORDER BY c
1c150 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  lause..**.**    
1c160 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
1c170 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20   Generate a row 
1c180 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67  of output (using
1c190 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f   the OP_ResultRo
1c1a0 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  w.**            
1c1b0 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29           opcode)
1c1c0 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e   for each row in
1c1d0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
1c1e0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d  .**.**     SRT_M
1c1f0 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20  em         Only 
1c200 76 61 6c 69 64 20 69 66 20 74 68 65 20 72 65 73  valid if the res
1c210 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ult is a single 
1c220 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20  column..**      
1c230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1c240 74 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 63  tore the first c
1c250 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72  olumn of the fir
1c260 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a  st result row.**
1c270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c280 20 20 20 20 20 69 6e 20 72 65 67 69 73 74 65 72       in register
1c290 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1c2a0 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65  then abandon the
1c2b0 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20   rest.**        
1c2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20               of 
1c2d0 74 68 65 20 71 75 65 72 79 2e 20 20 54 68 69 73  the query.  This
1c2e0 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70   destination imp
1c2f0 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a  lies "LIMIT 1"..
1c300 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65  **.**     SRT_Se
1c310 74 20 20 20 20 20 20 20 20 20 54 68 65 20 72 65  t         The re
1c320 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73  sult must be a s
1c330 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53  ingle column.  S
1c340 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20  tore each.**    
1c350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c360 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61   row of result a
1c370 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62  s the key in tab
1c380 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1c390 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  m..**           
1c3a0 20 20 20 20 20 20 20 20 20 20 41 70 70 6c 79 20            Apply 
1c3b0 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 44 65  the affinity pDe
1c3c0 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f  st->affSdst befo
1c3d0 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20  re storing.**   
1c3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3f0 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64    results.  Used
1c400 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49   to implement "I
1c410 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
1c420 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
1c430 70 68 65 6d 54 61 62 20 20 20 20 43 72 65 61 74  phemTab    Creat
1c440 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74  e an temporary t
1c450 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1c460 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a  arm and store.**
1c470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c480 20 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 20       the result 
1c490 74 68 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f  there. The curso
1c4a0 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61  r is left open a
1c4b0 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20  fter.**         
1c4c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1c4d0 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20  rning.  This is 
1c4e0 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65  like SRT_Table e
1c4f0 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20  xcept that.**   
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c510 20 20 74 68 69 73 20 64 65 73 74 69 6e 61 74 69    this destinati
1c520 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45  on uses OP_OpenE
1c530 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61  phemeral to crea
1c540 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
1c550 20 20 20 20 20 20 20 20 20 20 74 68 65 20 74 61            the ta
1c560 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a  ble first..**.**
1c570 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69       SRT_Corouti
1c580 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20 61 20  ne   Generate a 
1c590 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20  co-routine that 
1c5a0 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f  returns a new ro
1c5b0 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  w of.**         
1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1c5d0 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20 69 74  lts each time it
1c5e0 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68   is invoked.  Th
1c5f0 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a  e entry point.**
1c600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c610 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72       of the co-r
1c620 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64  outine is stored
1c630 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65   in register pDe
1c640 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20  st->iSDParm.**  
1c650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c660 20 20 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c     and the resul
1c670 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20  t row is stored 
1c680 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20  in pDest->nDest 
1c690 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20  registers.**    
1c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6b0 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 70   starting with p
1c6c0 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a  Dest->iSdst..**.
1c6d0 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65  **     SRT_Table
1c6e0 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1c6f0 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72  ults in temporar
1c700 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1c710 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53  SDParm..**     S
1c720 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54  RT_Fifo        T
1c730 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f  his is like SRT_
1c740 45 70 68 65 6d 54 61 62 20 65 78 63 65 70 74 20  EphemTab except 
1c750 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a  that the table.*
1c760 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1c770 20 20 20 20 20 20 69 73 20 61 73 73 75 6d 65 64        is assumed
1c780 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f   to already be o
1c790 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68  pen.  SRT_Fifo h
1c7a0 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
1c7b0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 61 64            the ad
1c7c0 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74  ditional propert
1c7d0 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20  y of being able 
1c7e0 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20  to ignore.**    
1c7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c800 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1c810 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
1c820 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
1c830 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1c840 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62   a temporary tab
1c850 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1c860 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  m..**           
1c870 20 20 20 20 20 20 20 20 20 20 42 75 74 20 61 6c            But al
1c880 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79  so use temporary
1c890 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1c8a0 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20  DParm+1 as.**   
1c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8c0 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c    a record of al
1c8d0 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20  l prior results 
1c8e0 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64  and ignore any d
1c8f0 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20  uplicate.**     
1c900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c910 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e  rows.  Name mean
1c920 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46 69  s:  "Distinct Fi
1c930 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  fo"..**.**     S
1c940 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 53  RT_Queue       S
1c950 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1c960 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
1c970 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72  Dest->iSDParm (r
1c980 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20  eally.**        
1c990 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 20               an 
1c9a0 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20  index).  Append 
1c9b0 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  a sequence numbe
1c9c0 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e  r so that all en
1c9d0 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20  tries.**        
1c9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 65               are
1c9f0 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a   distinct..**.**
1ca00 20 20 20 20 20 53 52 54 5f 44 69 73 74 51 75 65       SRT_DistQue
1ca10 75 65 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c  ue   Store resul
1ca20 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71  ts in priority q
1ca30 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50  ueue pDest->iSDP
1ca40 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20  arm only if.**  
1ca50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca60 20 20 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f     the same reco
1ca70 72 64 20 68 61 73 20 6e 65 76 65 72 20 62 65 65  rd has never bee
1ca80 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e  n stored before.
1ca90 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20    The.**        
1caa0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
1cab0 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44  ex at pDest->iSD
1cac0 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20  Parm+1 hold all 
1cad0 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f  prior stores..*/
1cae0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69  .#define SRT_Uni
1caf0 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20  on        1  /* 
1cb00 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1cb10 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
1cb20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1cb30 45 78 63 65 70 74 20 20 20 20 20 20 20 32 20 20  Except       2  
1cb40 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74  /* Remove result
1cb50 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e   from a UNION in
1cb60 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1cb70 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 20  RT_Exists       
1cb80 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66  3  /* Store 1 if
1cb90 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e   the result is n
1cba0 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  ot empty */.#def
1cbb0 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20  ine SRT_Discard 
1cbc0 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f       4  /* Do no
1cbd0 74 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c  t save the resul
1cbe0 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23  ts anywhere */.#
1cbf0 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20  define SRT_Fifo 
1cc00 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74          5  /* St
1cc10 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
1cc20 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
1cc30 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64  atic rowid */.#d
1cc40 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69  efine SRT_DistFi
1cc50 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b  fo     6  /* Lik
1cc60 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20  e SRT_Fifo, but 
1cc70 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f  unique results o
1cc80 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nly */.#define S
1cc90 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 20  RT_Queue        
1cca0 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  7  /* Store resu
1ccb0 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a  lt in an queue *
1ccc0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
1ccd0 73 74 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a  stQueue    8  /*
1cce0 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c   Like SRT_Queue,
1ccf0 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75   but unique resu
1cd00 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20  lts only */../* 
1cd10 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
1cd20 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66  use is ignored f
1cd30 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62  or all of the ab
1cd40 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ove */.#define I
1cd50 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28  gnorableOrderby(
1cd60 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d  X) ((X->eDest)<=
1cd70 53 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a  SRT_DistQueue)..
1cd80 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70  #define SRT_Outp
1cd90 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f  ut       9  /* O
1cda0 75 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f  utput each row o
1cdb0 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
1cdc0 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20  ine SRT_Mem     
1cdd0 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65      10  /* Store
1cde0 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d   result in a mem
1cdf0 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66  ory cell */.#def
1ce00 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20  ine SRT_Set     
1ce10 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65      11  /* Store
1ce20 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73   results as keys
1ce30 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
1ce40 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65  #define SRT_Ephe
1ce50 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43  mTab    12  /* C
1ce60 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20  reate transient 
1ce70 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69  tab and store li
1ce80 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a  ke SRT_Table */.
1ce90 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f  #define SRT_Coro
1cea0 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47  utine   13  /* G
1ceb0 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65  enerate a single
1cec0 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
1ced0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61  /.#define SRT_Ta
1cee0 62 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a  ble       14  /*
1cef0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
1cf00 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
1cf10 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
1cf20 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1cf30 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65  nce of this obje
1cf40 63 74 20 64 65 73 63 72 69 62 65 73 20 77 68 65  ct describes whe
1cf50 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65  re to put of the
1cf60 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61   results of.** a
1cf70 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1cf80 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c  t..*/.struct Sel
1cf90 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65  ectDest {.  u8 e
1cfa0 44 65 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Dest;           
1cfb0 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f   /* How to dispo
1cfc0 73 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  se of the result
1cfd0 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20  s.  On of SRT_* 
1cfe0 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72  above. */.  char
1cff0 20 2a 7a 41 66 66 53 64 73 74 3b 20 20 20 20 20   *zAffSdst;     
1d000 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65   /* Affinity use
1d010 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52  d when eDest==SR
1d020 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69  T_Set */.  int i
1d030 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20  SDParm;         
1d040 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75  /* A parameter u
1d050 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74  sed by the eDest
1d060 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64   disposal method
1d070 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b   */.  int iSdst;
1d080 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61             /* Ba
1d090 73 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72  se register wher
1d0a0 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72  e results are wr
1d0b0 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  itten */.  int n
1d0c0 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Sdst;           
1d0d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
1d0e0 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
1d0f0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1d100 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65  pOrderBy;  /* Ke
1d110 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52  y columns for SR
1d120 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f  T_Queue and SRT_
1d130 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a  DistQueue */.};.
1d140 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f  ./*.** During co
1d150 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  de generation of
1d160 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74   statements that
1d170 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f   do inserts into
1d180 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a   AUTOINCREMENT.*
1d190 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f  * tables, the fo
1d1a0 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74  llowing informat
1d1b0 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20  ion is attached 
1d1c0 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61  to the Table.u.a
1d1d0 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e  utoInc.p.** poin
1d1e0 74 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f  ter of each auto
1d1f0 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20  increment table 
1d200 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73  to record some s
1d210 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ide information 
1d220 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65  that.** the code
1d230 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73   generator needs
1d240 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65  .  We have to ke
1d250 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74  ep per-table aut
1d260 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e  oincrement.** in
1d270 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73  formation in cas
1d280 65 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f  e inserts are do
1d290 6e 65 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ne within trigge
1d2a0 72 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f  rs.  Triggers do
1d2b0 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79   not.** normally
1d2c0 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69   coordinate thei
1d2d0 72 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75  r activities, bu
1d2e0 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20  t we do need to 
1d2f0 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a  coordinate the.*
1d300 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61  * loading and sa
1d310 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72  ving of autoincr
1d320 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f  ement informatio
1d330 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74  n..*/.struct Aut
1d340 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74  oincInfo {.  Aut
1d350 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b  oincInfo *pNext;
1d360 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20     /* Next info 
1d370 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20  block in a list 
1d380 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20  of them all */. 
1d390 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
1d3a0 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
1d3b0 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20  this info block 
1d3c0 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69  refers to */.  i
1d3d0 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  nt iDb;         
1d3e0 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
1d3f0 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f   sqlite3.aDb[] o
1d400 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69  f database holdi
1d410 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74  ng pTab */.  int
1d420 20 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20   regCtr;        
1d430 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
1d440 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68  ister holding th
1d450 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20  e rowid counter 
1d460 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a  */.};../*.** Siz
1d470 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  e of the column 
1d480 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  cache.*/.#ifndef
1d490 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43   SQLITE_N_COLCAC
1d4a0 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  HE.# define SQLI
1d4b0 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30  TE_N_COLCACHE 10
1d4c0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1d4d0 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74  t least one inst
1d4e0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1d4f0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1d500 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65  is created for e
1d510 61 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 74  ach.** trigger t
1d520 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64  hat may be fired
1d530 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61   while parsing a
1d540 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  n INSERT, UPDATE
1d550 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74   or DELETE.** st
1d560 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63  atement. All suc
1d570 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74  h objects are st
1d580 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b  ored in the link
1d590 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61  ed list headed a
1d5a0 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67  t.** Parse.pTrig
1d5b0 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74  gerPrg and delet
1d5c0 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e  ed once statemen
1d5d0 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61  t compilation ha
1d5e0 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65  s been.** comple
1d5f0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62  ted..**.** A Vdb
1d600 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
1d610 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  at implements th
1d620 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20  e body and WHEN 
1d630 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65  clause of trigge
1d640 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  r.** TriggerPrg.
1d650 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69  pTrigger, assumi
1d660 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20  ng a default ON 
1d670 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
1d680 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  of.** TriggerPrg
1d690 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72  .orconf, is stor
1d6a0 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65  ed in the Trigge
1d6b0 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61  rPrg.pProgram va
1d6c0 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50  riable..** The P
1d6d0 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1d6e0 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74   list never cont
1d6f0 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73  ains two entries
1d700 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a   with the same.*
1d710 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74  * values for bot
1d720 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f  h pTrigger and o
1d730 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rconf..**.** The
1d740 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
1d750 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65  mask[0] variable
1d760 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73   is set to a mas
1d770 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
1d780 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28  ns.** accessed (
1d790 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20  or set to 0 for 
1d7a0 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61  triggers fired a
1d7b0 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e  s a result of IN
1d7c0 53 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  SERT.** statemen
1d7d0 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20  ts). Similarly, 
1d7e0 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  the TriggerPrg.a
1d7f0 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61  Colmask[1] varia
1d800 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a  ble is set to.**
1d810 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a   a mask of new.*
1d820 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79   columns used by
1d830 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f   the program..*/
1d840 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50  .struct TriggerP
1d850 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a  rg {.  Trigger *
1d860 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f  pTrigger;      /
1d870 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70  * Trigger this p
1d880 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64  rogram was coded
1d890 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67   from */.  Trigg
1d8a0 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20  erPrg *pNext;   
1d8b0 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79     /* Next entry
1d8c0 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67   in Parse.pTrigg
1d8d0 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20  erPrg list */.  
1d8e0 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
1d8f0 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72  gram;   /* Progr
1d900 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  am implementing 
1d910 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20  pTrigger/orconf 
1d920 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b  */.  int orconf;
1d930 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d940 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
1d950 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20  ICT policy */.  
1d960 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b  u32 aColmask[2];
1d970 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73          /* Masks
1d980 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a   of old.*, new.*
1d990 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65   columns accesse
1d9a0 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  d */.};../*.** T
1d9b0 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74  he yDbMask datat
1d9c0 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d  ype for the bitm
1d9d0 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63  ask of all attac
1d9e0 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
1d9f0 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
1da00 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74  _ATTACHED>30.  t
1da10 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
1da20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51  char yDbMask[(SQ
1da30 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
1da40 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e  D+9)/8];.# defin
1da50 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49  e DbMaskTest(M,I
1da60 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38  )    (((M)[(I)/8
1da70 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21  ]&(1<<((I)&7)))!
1da80 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  =0).# define DbM
1da90 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20  askZero(M)      
1daa0 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a  memset((M),0,siz
1dab0 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65  eof(M)).# define
1dac0 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
1dad0 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d      (M)[(I)/8]|=
1dae0 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64  (1<<((I)&7)).# d
1daf0 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
1db00 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33  ero(M)   sqlite3
1db10 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1db20 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1db30 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71  NonZero(M)   (sq
1db40 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
1db50 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  ro(M)==0).#else.
1db60 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e    typedef unsign
1db70 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a  ed int yDbMask;.
1db80 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54  # define DbMaskT
1db90 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d  est(M,I)    (((M
1dba0 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  )&(((yDbMask)1)<
1dbb0 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66  <(I)))!=0).# def
1dbc0 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d  ine DbMaskZero(M
1dbd0 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64  )      (M)=0.# d
1dbe0 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28  efine DbMaskSet(
1dbf0 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28  M,I)     (M)|=((
1dc00 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29  (yDbMask)1)<<(I)
1dc10 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1dc20 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d  kAllZero(M)   (M
1dc30 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62  )==0.# define Db
1dc40 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20  MaskNonZero(M)  
1dc50 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a   (M)!=0.#endif..
1dc60 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72  /*.** An SQL par
1dc70 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20  ser context.  A 
1dc80 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72  copy of this str
1dc90 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
1dca0 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20   through.** the 
1dcb0 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20  parser and down 
1dcc0 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72  into all the par
1dcd0 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69  ser action routi
1dce0 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ne in order to.*
1dcf0 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69  * carry around i
1dd00 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  nformation that 
1dd10 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65  is global to the
1dd20 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a   entire parse..*
1dd30 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75  *.** The structu
1dd40 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e  re is divided in
1dd50 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57  to two parts.  W
1dd60 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61  hen the parser a
1dd70 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72  nd code.** gener
1dd80 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c  ate call themsel
1dd90 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c  ves recursively,
1dda0 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20   the first part 
1ddb0 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65  of the structure
1ddc0 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  .** is constant 
1ddd0 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70  but the second p
1dde0 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20  art is reset at 
1ddf0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e  the beginning an
1de00 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68  d end of.** each
1de10 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a   recursion..**.*
1de20 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b  * The nTableLock
1de30 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20   and aTableLock 
1de40 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e  variables are on
1de50 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73  ly used if the s
1de60 68 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66  hared-cache.** f
1de70 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65  eature is enable
1de80 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64  d (if sqlite3Tsd
1de90 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74  ()->useSharedDat
1dea0 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79  a is true). They
1deb0 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20   are.** used to 
1dec0 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66  store the set of
1ded0 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71   table-locks req
1dee0 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61  uired by the sta
1def0 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20  tement being.** 
1df00 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69  compiled. Functi
1df10 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  on sqlite3TableL
1df20 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f  ock() is used to
1df30 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20   add entries to 
1df40 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a  the.** list..*/.
1df50 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20  struct Parse {. 
1df60 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
1df70 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69        /* The mai
1df80 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63  n database struc
1df90 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ture */.  char *
1dfa0 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f  zErrMsg;       /
1dfb0 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  * An error messa
1dfc0 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56  ge */.  Vdbe *pV
1dfd0 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  dbe;         /* 
1dfe0 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78  An engine for ex
1dff0 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65  ecuting database
1e000 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69   bytecode */.  i
1e010 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
1e020 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f      /* Return co
1e030 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f  de from executio
1e040 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d  n */.  u8 colNam
1e050 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54  esSet;      /* T
1e060 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c  RUE after OP_Col
1e070 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e  umnName has been
1e080 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65   issued to pVdbe
1e090 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63   */.  u8 checkSc
1e0a0 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61  hema;      /* Ca
1e0b0 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b  uses schema cook
1e0c0 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61  ie check after a
1e0d0 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20  n error */.  u8 
1e0e0 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20  nested;         
1e0f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
1e100 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74  ested calls to t
1e110 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67  he parser/code g
1e120 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38  enerator */.  u8
1e130 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20   nTempReg;      
1e140 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1e150 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1e160 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b  ers in aTempReg[
1e170 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74  ] */.  u8 isMult
1e180 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54  iWrite;     /* T
1e190 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  rue if statement
1e1a0 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65   may modify/inse
1e1b0 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  rt multiple rows
1e1c0 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72   */.  u8 mayAbor
1e1d0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  t;         /* Tr
1e1e0 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
1e1f0 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  may throw an ABO
1e200 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a  RT exception */.
1e210 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64    u8 hasCompound
1e220 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74  ;      /* Need t
1e230 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74  o invoke convert
1e240 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
1e250 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20  Subquery() */.  
1e260 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72  u8 okConstFactor
1e270 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61  ;    /* OK to fa
1e280 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e  ctor out constan
1e290 74 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62  ts */.  u8 disab
1e2a0 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20  leLookaside; /* 
1e2b0 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20  Number of times 
1e2c0 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73 20 62 65  lookaside has be
1e2d0 65 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20  en disabled */. 
1e2e0 20 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20   u8 nColCache;  
1e2f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1e300 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  of entries in aC
1e310 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 69  olCache[] */.  i
1e320 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20  nt aTempReg[8]; 
1e330 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61      /* Holding a
1e340 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  rea for temporar
1e350 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20  y registers */. 
1e360 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20   int nRangeReg; 
1e370 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1e380 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72   the temporary r
1e390 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
1e3a0 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67  .  int iRangeReg
1e3b0 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74  ;       /* First
1e3c0 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d   register in tem
1e3d0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
1e3e0 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  block */.  int n
1e3f0 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
1e400 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
1e410 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  ors seen */.  in
1e420 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20  t nTab;         
1e430 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1e440 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63  previously alloc
1e450 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72  ated VDBE cursor
1e460 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  s */.  int nMem;
1e470 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1e480 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
1e490 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61  cells used so fa
1e4a0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b  r */.  int nSet;
1e4b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1e4c0 75 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75 73  umber of sets us
1e4d0 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
1e4e0 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20  nt nOnce;       
1e4f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1e500 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63   OP_Once instruc
1e510 74 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a  tions so far */.
1e520 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20    int nOpAlloc; 
1e530 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1e540 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61   of slots alloca
1e550 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70  ted for Vdbe.aOp
1e560 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70  [] */.  int szOp
1e570 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20  Alloc;       /* 
1e580 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  Bytes of memory 
1e590 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
1e5a0 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a  for Vdbe.aOp[] *
1e5b0 2f 0a 20 20 69 6e 74 20 69 46 69 78 65 64 4f 70  /.  int iFixedOp
1e5c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 76 65  ;        /* Neve
1e5d0 72 20 62 61 63 6b 20 6f 75 74 20 6f 70 63 6f 64  r back out opcod
1e5e0 65 73 20 69 46 69 78 65 64 4f 70 2d 31 20 6f 72  es iFixedOp-1 or
1e5f0 20 65 61 72 6c 69 65 72 20 2a 2f 0a 20 20 69 6e   earlier */.  in
1e600 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20  t ckBase;       
1e610 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73     /* Base regis
1e620 74 65 72 20 6f 66 20 64 61 74 61 20 64 75 72 69  ter of data duri
1e630 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61  ng check constra
1e640 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 53  ints */.  int iS
1e650 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20 2f  elfTab;        /
1e660 2a 20 54 61 62 6c 65 20 6f 66 20 61 6e 20 69 6e  * Table of an in
1e670 64 65 78 20 77 68 6f 73 65 20 65 78 70 72 73 20  dex whose exprs 
1e680 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20  are being coded 
1e690 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c  */.  int iCacheL
1e6a0 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  evel;     /* Col
1e6b0 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e  Cache valid when
1e6c0 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65   aColCache[].iLe
1e6d0 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c  vel<=iCacheLevel
1e6e0 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
1e6f0 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f  Cnt;       /* Co
1e700 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67 65  unter used to ge
1e710 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65  nerate aColCache
1e720 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f  [].lru values */
1e730 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20  .  int nLabel;  
1e740 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1e750 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64  r of labels used
1e760 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65   */.  int *aLabe
1e770 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70  l;         /* Sp
1e780 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ace to hold the 
1e790 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72 75  labels */.  stru
1e7a0 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20  ct yColCache {. 
1e7b0 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
1e7c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
1e7d0 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  e cursor number 
1e7e0 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c 75  */.    i16 iColu
1e7f0 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  mn;          /* 
1e800 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d  Table column num
1e810 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65  ber */.    u8 te
1e820 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 20  mpReg;          
1e830 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74 65   /* iReg is a te
1e840 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61 74  mp register that
1e850 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72 65   needs to be fre
1e860 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c  ed */.    int iL
1e870 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
1e880 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c  /* Nesting level
1e890 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67   */.    int iReg
1e8a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1e8b0 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65 20   Reg with value 
1e8c0 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20  of this column. 
1e8d0 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f  0 means none. */
1e8e0 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20  .    int lru;   
1e8f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
1e900 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65  ast recently use
1e910 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65 20  d entry has the 
1e920 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a  smallest value *
1e930 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b  /.  } aColCache[
1e940 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1e950 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20  E];  /* One for 
1e960 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68  each column cach
1e970 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78 70  e entry */.  Exp
1e980 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78 70  rList *pConstExp
1e990 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78  r;/* Constant ex
1e9a0 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54  pressions */.  T
1e9b0 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e  oken constraintN
1e9c0 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  ame;/* Name of t
1e9d0 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75  he constraint cu
1e9e0 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61  rrently being pa
1e9f0 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73  rsed */.  yDbMas
1ea00 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f  k writeMask;   /
1ea10 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20  * Start a write 
1ea20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74  transaction on t
1ea30 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a  hese databases *
1ea40 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b  /.  yDbMask cook
1ea50 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d  ieMask;  /* Bitm
1ea60 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65  ask of schema ve
1ea70 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73  rified databases
1ea80 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65   */.  int cookie
1ea90 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58  Value[SQLITE_MAX
1eaa0 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f  _ATTACHED+2];  /
1eab0 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b  * Values of cook
1eac0 69 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f  ies to verify */
1ead0 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b  .  int regRowid;
1eae0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
1eaf0 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69  ter holding rowi
1eb00 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c  d of CREATE TABL
1eb10 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  E entry */.  int
1eb20 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20   regRoot;       
1eb30 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1eb40 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20  lding root page 
1eb50 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f  number for new o
1eb60 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20  bjects */.  int 
1eb70 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20  nMaxArg;        
1eb80 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73   /* Max args pas
1eb90 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63  sed to user func
1eba0 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67  tion by sub-prog
1ebb0 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43  ram */.#if SELEC
1ebc0 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20  TTRACE_ENABLED. 
1ebd0 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20   int nSelect;   
1ebe0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1ebf0 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  of SELECT statem
1ec00 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69  ents seen */.  i
1ec10 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74  nt nSelectIndent
1ec20 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20 74  ;   /* How far t
1ec30 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54 54  o indent SELECTT
1ec40 52 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a 2f  RACE() output */
1ec50 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
1ec60 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
1ec70 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e  ED_CACHE.  int n
1ec80 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20  TableLock;      
1ec90 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
1eca0 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f  ocks in aTableLo
1ecb0 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63  ck */.  TableLoc
1ecc0 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f  k *aTableLock; /
1ecd0 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65  * Required table
1ece0 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65   locks for share
1ecf0 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
1ed00 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63  #endif.  Autoinc
1ed10 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a  Info *pAinc;  /*
1ed20 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
1ed30 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ut AUTOINCREMENT
1ed40 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20   counters */..  
1ed50 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
1ed60 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67  sed while coding
1ed70 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
1ed80 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  s. */.  Parse *p
1ed90 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20  Toplevel;    /* 
1eda0 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
1edb0 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d  for main program
1edc0 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20   (or NULL) */.  
1edd0 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54  Table *pTriggerT
1ede0 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72  ab;  /* Table tr
1edf0 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e 67  iggers are being
1ee00 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20   coded for */.  
1ee10 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20 20  int addrCrTab;  
1ee20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20       /* Address 
1ee30 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  of OP_CreateTabl
1ee40 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41  e opcode on CREA
1ee50 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33  TE TABLE */.  u3
1ee60 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20  2 nQueryLoop;   
1ee70 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72     /* Est number
1ee80 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f   of iterations o
1ee90 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f  f a query (10*lo
1eea0 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20  g2(N)) */.  u32 
1eeb0 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  oldmask;        
1eec0 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e   /* Mask of old.
1eed0 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
1eee0 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65  nced */.  u32 ne
1eef0 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  wmask;         /
1ef00 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  * Mask of new.* 
1ef10 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
1ef20 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67  ed */.  u8 eTrig
1ef30 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20  gerOp;       /* 
1ef40 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
1ef50 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54  SERT or TK_DELET
1ef60 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e  E */.  u8 eOrcon
1ef70 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  f;          /* D
1ef80 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1ef90 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72  CT policy for tr
1efa0 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20  igger steps */. 
1efb0 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67   u8 disableTrigg
1efc0 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f  ers;  /* True to
1efd0 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72   disable trigger
1efe0 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a  s */..  /*******
1eff0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f000 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f010 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f020 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f030 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20  *.  ** Above is 
1f040 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e  constant between
1f050 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65   recursions.  Be
1f060 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66  low is reset bef
1f070 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20  ore and after.  
1f080 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
1f090 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79  n.  The boundary
1f0a0 20 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74   between these t
1f0b0 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65  wo regions is de
1f0c0 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73  termined.  ** us
1f0d0 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72  ing offsetof(Par
1f0e0 73 65 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20  se,nVar) so the 
1f0f0 6e 56 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20  nVar field must 
1f100 62 65 20 74 68 65 20 66 69 72 73 74 20 66 69 65  be the first fie
1f110 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72  ld.  ** in the r
1f120 65 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e  ecursive region.
1f130 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
1f140 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f150 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f160 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f170 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
1f180 79 6e 56 61 72 20 6e 56 61 72 3b 20 20 20 20 20  ynVar nVar;     
1f190 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1f1a0 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61  ber of '?' varia
1f1b0 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65  bles seen in the
1f1c0 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20   SQL so far */. 
1f1d0 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20   int nzVar;     
1f1e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f1f0 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c  mber of availabl
1f200 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72  e slots in azVar
1f210 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f  [] */.  u8 iPkSo
1f220 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
1f230 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43    /* ASC or DESC
1f240 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49   for INTEGER PRI
1f250 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38  MARY KEY */.  u8
1f260 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20   explain;       
1f270 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1f280 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66  if the EXPLAIN f
1f290 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20  lag is found on 
1f2a0 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66  the query */.#if
1f2b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1f2c0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
1f2d0 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20  u8 declareVtab; 
1f2e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1f2f0 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69  e if inside sqli
1f300 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
1f310 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61  () */.  int nVta
1f320 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20  bLock;          
1f330 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76    /* Number of v
1f340 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f  irtual tables to
1f350 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a   lock */.#endif.
1f360 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20    int nAlias;   
1f370 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1f380 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64  umber of aliased
1f390 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75   result set colu
1f3a0 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65  mns */.  int nHe
1f3b0 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
1f3c0 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
1f3d0 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20   tree height of 
1f3e0 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65  current sub-sele
1f3f0 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ct */.#ifndef SQ
1f400 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
1f410 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49  N.  int iSelectI
1f420 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
1f430 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73   ID of current s
1f440 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49  elect for EXPLAI
1f450 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e  N output */.  in
1f460 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b  t iNextSelectId;
1f470 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
1f480 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74  available select
1f490 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20   ID for EXPLAIN 
1f4a0 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66  output */.#endif
1f4b0 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b  .  char **azVar;
1f4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f4d0 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65  Pointers to name
1f4e0 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20  s of parameters 
1f4f0 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72  */.  Vdbe *pRepr
1f500 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f  epare;         /
1f510 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65  * VM being repre
1f520 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65  pared (sqlite3Re
1f530 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20  prepare()) */.  
1f540 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69  const char *zTai
1f550 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  l;        /* All
1f560 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74   SQL text past t
1f570 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f  he last semicolo
1f580 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61  n parsed */.  Ta
1f590 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20  ble *pNewTable; 
1f5a0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62          /* A tab
1f5b0 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75  le being constru
1f5c0 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54  cted by CREATE T
1f5d0 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65  ABLE */.  Trigge
1f5e0 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20  r *pNewTrigger; 
1f5f0 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75      /* Trigger u
1f600 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62  nder construct b
1f610 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47  y a CREATE TRIGG
1f620 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ER */.  const ch
1f630 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
1f640 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72  ; /* The 6th par
1f650 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41  ameter to db->xA
1f660 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f  uth callbacks */
1f670 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f  .  Token sNameTo
1f680 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ken;         /* 
1f690 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61  Token with unqua
1f6a0 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62  lified schema ob
1f6b0 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  ject name */.  T
1f6c0 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b  oken sLastToken;
1f6d0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1f6e0 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65  last token parse
1f6f0 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  d */.#ifndef SQL
1f700 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1f710 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41  TABLE.  Token sA
1f720 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
1f730 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65    /* Complete te
1f740 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61  xt of a module a
1f750 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62  rgument */.  Tab
1f760 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b  le **apVtabLock;
1f770 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
1f780 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62  r to virtual tab
1f790 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b  les needing lock
1f7a0 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ing */.#endif.  
1f7b0 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61  Table *pZombieTa
1f7c0 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  b;        /* Lis
1f7d0 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63  t of Table objec
1f7e0 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74  ts to delete aft
1f7f0 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20  er code gen */. 
1f800 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72   TriggerPrg *pTr
1f810 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69  iggerPrg;  /* Li
1f820 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64  nked list of cod
1f830 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20  ed triggers */. 
1f840 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
1f850 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
1f860 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73  rrent WITH claus
1f870 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
1f880 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72 65  With *pWithToFre
1f890 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72 65  e;        /* Fre
1f8a0 65 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a 65  e this WITH obje
1f8b0 63 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ct at the end of
1f8c0 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 7d 3b   the parse */.};
1f8d0 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
1f8e0 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79  rue if currently
1f8f0 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74   inside an sqlit
1f900 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
1f910 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65  ) call..*/.#ifde
1f920 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
1f930 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65  RTUALTABLE.  #de
1f940 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
1f950 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23  VTAB 0.#else.  #
1f960 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
1f970 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e  E_VTAB (pParse->
1f980 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e  declareVtab).#en
1f990 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
1f9a0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
1f9b0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1f9c0 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65  e can be declare
1f9d0 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64  d on a stack and
1f9e0 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65   used.** to save
1f9f0 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68   the Parse.zAuth
1fa00 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f  Context value so
1fa10 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
1fa20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a  restored later..
1fa30 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f  */.struct AuthCo
1fa40 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20  ntext {.  const 
1fa50 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
1fa60 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76  xt;   /* Put sav
1fa70 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  ed Parse.zAuthCo
1fa80 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20  ntext here */.  
1fa90 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
1faa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1fab0 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75  he Parse structu
1fac0 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  re */.};../*.** 
1fad0 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66  Bitfield flags f
1fae0 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76  or P5 value in v
1faf0 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a  arious opcodes..
1fb00 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
1fb10 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
1fb20 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
1fb30 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45  .**    OPFLAG_LE
1fb40 4e 47 54 48 41 52 47 20 20 20 20 3d 3d 20 53 51  NGTHARG    == SQ
1fb50 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48  LITE_FUNC_LENGTH
1fb60 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 54 59  .**    OPFLAG_TY
1fb70 50 45 4f 46 41 52 47 20 20 20 20 3d 3d 20 53 51  PEOFARG    == SQ
1fb80 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
1fb90 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 42 55  .**    OPFLAG_BU
1fba0 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d 20 42 54  LKCSR      == BT
1fbb0 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20  REE_BULKLOAD.** 
1fbc0 20 20 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51     OPFLAG_SEEKEQ
1fbd0 20 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f         == BTREE_
1fbe0 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50  SEEK_EQ.**    OP
1fbf0 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20  FLAG_FORDELETE  
1fc00 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f 52 44 45    == BTREE_FORDE
1fc10 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  LETE.**    OPFLA
1fc20 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d  G_SAVEPOSITION =
1fc30 3d 20 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49  = BTREE_SAVEPOSI
1fc40 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  TION.**    OPFLA
1fc50 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20 3d  G_AUXDELETE    =
1fc60 3d 20 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54  = BTREE_AUXDELET
1fc70 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E.*/.#define OPF
1fc80 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20  LAG_NCHANGE     
1fc90 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1fca0 49 6e 73 65 72 74 3a 20 53 65 74 20 74 6f 20 75  Insert: Set to u
1fcb0 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67  pdate db->nChang
1fcc0 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
1fcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fce0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 73            /* Als
1fcf0 6f 20 75 73 65 64 20 69 6e 20 50 32 20 28 6e 6f  o used in P2 (no
1fd00 74 20 50 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65  t P5) of OP_Dele
1fd10 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  te */.#define OP
1fd20 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20  FLAG_EPHEM      
1fd30 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
1fd40 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72  _Column: Ephemer
1fd50 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20  al output is ok 
1fd60 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1fd70 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20  G_LASTROWID     
1fd80 30 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74  0x02    /* Set t
1fd90 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73  o update db->las
1fda0 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e  tRowid */.#defin
1fdb0 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
1fdc0 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f  E      0x04    /
1fdd0 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74  * This OP_Insert
1fde0 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54   is an sql UPDAT
1fdf0 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
1fe00 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20  LAG_APPEND      
1fe10 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69    0x08    /* Thi
1fe20 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62  s is likely to b
1fe30 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23  e an append */.#
1fe40 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53  define OPFLAG_US
1fe50 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30  ESEEKRESULT 0x10
1fe60 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76      /* Try to av
1fe70 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74  oid a seek in Bt
1fe80 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23  reeInsert() */.#
1fe90 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1fea0 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
1feb0 4f 4b 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  OK.#define OPFLA
1fec0 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20 20 20  G_ISNOOP        
1fed0 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65  0x40    /* OP_De
1fee0 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d 75 70  lete does pre-up
1fef0 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a  date-hook only *
1ff00 2f 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65  /.#endif.#define
1ff10 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
1ff20 47 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a  G     0x40    /*
1ff30 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20   OP_Column only 
1ff40 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28  used for length(
1ff50 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
1ff60 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20  LAG_TYPEOFARG   
1ff70 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f    0x80    /* OP_
1ff80 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64  Column only used
1ff90 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f   for typeof() */
1ffa0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1ffb0 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78  BULKCSR       0x
1ffc0 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  01    /* OP_Open
1ffd0 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20  ** used to open 
1ffe0 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23  bulk cursor */.#
1fff0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45  define OPFLAG_SE
20000 45 4b 45 51 20 20 20 20 20 20 20 20 30 78 30 32  EKEQ        0x02
20010 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a      /* OP_Open**
20020 20 63 75 72 73 6f 72 20 75 73 65 73 20 45 51 20   cursor uses EQ 
20030 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  seek only */.#de
20040 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f 52 44  fine OPFLAG_FORD
20050 45 4c 45 54 45 20 20 20 20 20 30 78 30 38 20 20  ELETE     0x08  
20060 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73 68 6f    /* OP_Open sho
20070 75 6c 64 20 75 73 65 20 42 54 52 45 45 5f 46 4f  uld use BTREE_FO
20080 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69  RDELETE */.#defi
20090 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45  ne OPFLAG_P2ISRE
200a0 47 20 20 20 20 20 20 20 30 78 31 30 20 20 20 20  G       0x10    
200b0 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e  /* P2 to OP_Open
200c0 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72  ** is a register
200d0 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69   number */.#defi
200e0 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  ne OPFLAG_PERMUT
200f0 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  E       0x01    
20100 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75  /* OP_Compare: u
20110 73 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69  se the permutati
20120 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  on */.#define OP
20130 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f  FLAG_SAVEPOSITIO
20140 4e 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50  N  0x02    /* OP
20150 5f 44 65 6c 65 74 65 3a 20 6b 65 65 70 20 63 75  _Delete: keep cu
20160 72 73 6f 72 20 70 6f 73 69 74 69 6f 6e 20 2a 2f  rsor position */
20170 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
20180 41 55 58 44 45 4c 45 54 45 20 20 20 20 20 30 78  AUXDELETE     0x
20190 30 34 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65  04    /* OP_Dele
201a0 74 65 3a 20 69 6e 64 65 78 20 69 6e 20 61 20 44  te: index in a D
201b0 45 4c 45 54 45 20 6f 70 20 2a 2f 0a 0a 2f 2a 0a  ELETE op */../*.
201c0 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20   * Each trigger 
201d0 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
201e0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
201f0 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69  s stored as an i
20200 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74  nstance of. * st
20210 72 75 63 74 20 54 72 69 67 67 65 72 2e 0a 20 2a  ruct Trigger.. *
20220 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20  . * Pointers to 
20230 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  instances of str
20240 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65 20  uct Trigger are 
20250 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61  stored in two wa
20260 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65  ys.. * 1. In the
20270 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73 68   "trigHash" hash
20280 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20   table (part of 
20290 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61  the sqlite3* tha
202a0 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65  t represents the
202b0 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73 65 29  . *    database)
202c0 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72  . This allows Tr
202d0 69 67 67 65 72 20 73 74 72 75 63 74 75 72 65 73  igger structures
202e0 20 74 6f 20 62 65 20 72 65 74 72 69 65 76 65 64   to be retrieved
202f0 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20   by name.. * 2. 
20300 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73 73  All triggers ass
20310 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 73  ociated with a s
20320 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d  ingle table form
20330 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20   a linked list, 
20340 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20  using the. *    
20350 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20  pNext member of 
20360 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20  struct Trigger. 
20370 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  A pointer to the
20380 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
20390 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b  f the. *    link
203a0 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65  ed list is store
203b0 64 20 61 73 20 74 68 65 20 22 70 54 72 69 67 67  d as the "pTrigg
203c0 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  er" member of th
203d0 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20  e associated. * 
203e0 20 20 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e     struct Table.
203f0 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70  . *. * The "step
20400 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f  _list" member po
20410 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73  ints to the firs
20420 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c  t element of a l
20430 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f  inked list. * co
20440 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c  ntaining the SQL
20450 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63   statements spec
20460 69 66 69 65 64 20 61 73 20 74 68 65 20 74 72 69  ified as the tri
20470 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger program.. *
20480 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
20490 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
204a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
204b0 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
204c0 74 72 69 67 67 65 72 20 20 20 20 20 20 20 20 20  trigger         
204d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
204e0 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b  /.  char *table;
204f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
20500 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77  he table or view
20510 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72   to which the tr
20520 69 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f  igger applies */
20530 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
20540 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
20550 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20  e of TK_DELETE, 
20560 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
20570 53 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a  SERT         */.
20580 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20    u8 tr_tm;     
20590 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
205a0 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f   of TRIGGER_BEFO
205b0 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45  RE, TRIGGER_AFTE
205c0 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  R */.  Expr *pWh
205d0 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  en;            /
205e0 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73  * The WHEN claus
205f0 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  e of the express
20600 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c  ion (may be NULL
20610 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  ) */.  IdList *p
20620 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f  Columns;       /
20630 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  * If this is an 
20640 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d  UPDATE OF <colum
20650 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c  n-list> trigger,
20660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
20680 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20  e <column-list> 
20690 69 73 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  is stored here *
206a0 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
206b0 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53  ema;        /* S
206c0 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
206d0 20 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a   the trigger */.
206e0 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63    Schema *pTabSc
206f0 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68  hema;     /* Sch
20700 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
20710 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72  he table */.  Tr
20720 69 67 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f  iggerStep *step_
20730 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69  list; /* Link li
20740 73 74 20 6f 66 20 74 72 69 67 67 65 72 20 70 72  st of trigger pr
20750 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20 20 20  ogram steps     
20760 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69          */.  Tri
20770 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20  gger *pNext;    
20780 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69       /* Next tri
20790 67 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  gger associated 
207a0 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a  with the table *
207b0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72  /.};../*.** A tr
207c0 69 67 67 65 72 20 69 73 20 65 69 74 68 65 72 20  igger is either 
207d0 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41  a BEFORE or an A
207e0 46 54 45 52 20 74 72 69 67 67 65 72 2e 20 20 54  FTER trigger.  T
207f0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e  he following con
20800 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d  stants.** determ
20810 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a  ine which..**.**
20820 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 75   If there are mu
20830 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c  ltiple triggers,
20840 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f   you might of so
20850 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f  me BEFORE and so
20860 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20  me AFTER..** In 
20870 74 68 61 74 20 63 61 73 65 73 2c 20 74 68 65 20  that cases, the 
20880 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20  constants below 
20890 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65  can be ORed toge
208a0 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ther..*/.#define
208b0 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20   TRIGGER_BEFORE 
208c0 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47   1.#define TRIGG
208d0 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a  ER_AFTER   2../*
208e0 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  . * An instance 
208f0 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
20900 72 53 74 65 70 20 69 73 20 75 73 65 64 20 74 6f  rStep is used to
20910 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20   store a single 
20920 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a  SQL statement. *
20930 20 74 68 61 74 20 69 73 20 61 20 70 61 72 74 20   that is a part 
20940 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f  of a trigger-pro
20950 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74  gram.. *. * Inst
20960 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
20970 54 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20  TriggerStep are 
20980 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67  stored in a sing
20990 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  ly linked list (
209a0 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20  linked. * using 
209b0 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62  the "pNext" memb
209c0 65 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62  er) referenced b
209d0 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74  y the "step_list
209e0 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a  " member of the.
209f0 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73 74   * associated st
20a00 72 75 63 74 20 54 72 69 67 67 65 72 20 69 6e 73  ruct Trigger ins
20a10 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74  tance. The first
20a20 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20   element of the 
20a30 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20  linked list is. 
20a40 2a 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70  * the first step
20a50 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2d   of the trigger-
20a60 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54  program.. *. * T
20a70 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69  he "op" member i
20a80 6e 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72  ndicates whether
20a90 20 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45   this is a "DELE
20aa0 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22  TE", "INSERT", "
20ab0 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53  UPDATE" or. * "S
20ac0 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74  ELECT" statement
20ad0 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  . The meanings o
20ae0 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62  f the other memb
20af0 65 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ers is determine
20b00 64 20 62 79 20 74 68 65 0a 20 2a 20 76 61 6c 75  d by the. * valu
20b10 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c  e of "op" as fol
20b20 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20  lows:. *. * (op 
20b30 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a  == TK_INSERT). *
20b40 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74   orconf    -> st
20b50 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46  ores the ON CONF
20b60 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20  LICT algorithm. 
20b70 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49  * pSelect   -> I
20b80 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
20b90 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c  ERT INTO ... SEL
20ba0 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  ECT ... statemen
20bb0 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
20bc0 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
20bd0 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  res a pointer to
20be0 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
20bf0 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65  ement. Otherwise
20c00 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65   NULL.. * zTarge
20c10 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20  t   -> Dequoted 
20c20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
20c30 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f  e to insert into
20c40 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
20c50 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
20c60 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
20c70 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65  VALUES ... state
20c80 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
20c90 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
20ca0 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f  stores values to
20cb0 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74   be inserted. Ot
20cc0 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
20cd0 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66   pIdList   -> If
20ce0 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
20cf0 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f  RT INTO ... (<co
20d00 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c  lumn-names>) VAL
20d10 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20 20 20  UES .... *      
20d20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e          statemen
20d30 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f  t, then this sto
20d40 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e  res the column-n
20d50 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20  ames to be. *   
20d60 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72             inser
20d70 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20  ted into.. *. * 
20d80 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45  (op == TK_DELETE
20d90 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d  ). * zTarget   -
20da0 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20  > Dequoted name 
20db0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
20dc0 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20  delete from.. * 
20dd0 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65  pWhere    -> The
20de0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
20df0 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74   the DELETE stat
20e00 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20  ement if one is 
20e10 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20  specified.. *   
20e20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72             Other
20e30 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a  wise NULL.. *. *
20e40 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54   (op == TK_UPDAT
20e50 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20  E). * zTarget   
20e60 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65  -> Dequoted name
20e70 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
20e80 20 75 70 64 61 74 65 2e 0a 20 2a 20 70 57 68 65   update.. * pWhe
20e90 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
20ea0 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
20eb0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
20ec0 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
20ed0 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
20ee0 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
20ef0 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c   NULL.. * pExprL
20f00 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66  ist -> A list of
20f10 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20   the columns to 
20f20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65  update and the e
20f30 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70  xpressions to up
20f40 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20  date. *         
20f50 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65       them to. Se
20f60 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28  e sqlite3Update(
20f70 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  ) documentation 
20f80 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a  of "pChanges". *
20f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
20fa0 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73  gument.. *. */.s
20fb0 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
20fc0 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  p {.  u8 op;    
20fd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
20fe0 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20  e of TK_DELETE, 
20ff0 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
21000 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20  SERT, TK_SELECT 
21010 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20  */.  u8 orconf; 
21020 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f            /* OE_
21030 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f  Rollback etc. */
21040 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
21050 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74  g;      /* The t
21060 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73  rigger that this
21070 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20   step is a part 
21080 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  of */.  Select *
21090 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
210a0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
210b0 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52   or RHS of INSER
210c0 54 20 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e  T INTO SELECT ..
210d0 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61  . */.  char *zTa
210e0 72 67 65 74 3b 20 20 20 20 20 20 20 2f 2a 20 54  rget;       /* T
210f0 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20  arget table for 
21100 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20  DELETE, UPDATE, 
21110 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72  INSERT */.  Expr
21120 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20   *pWhere;       
21130 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c   /* The WHERE cl
21140 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20  ause for DELETE 
21150 6f 72 20 55 50 44 41 54 45 20 73 74 65 70 73 20  or UPDATE steps 
21160 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
21170 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54  ExprList; /* SET
21180 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41   clause for UPDA
21190 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  TE. */.  IdList 
211a0 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a  *pIdList;     /*
211b0 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f   Column names fo
211c0 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72  r INSERT */.  Tr
211d0 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74  iggerStep *pNext
211e0 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68  ;  /* Next in th
211f0 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20  e link-list */. 
21200 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c   TriggerStep *pL
21210 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c  ast;  /* Last el
21220 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69  ement in link-li
21230 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73  st. Valid for 1s
21240 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d  t elem only */.}
21250 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
21260 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
21270 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
21280 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68  ation used by th
21290 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a  e sqliteFix....*
212a0 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68  * routines as th
212b0 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73  ey walk the pars
212c0 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64  e tree to make d
212d0 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63  atabase referenc
212e0 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a  es.** explicit..
212f0 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
21300 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65  t DbFixer DbFixe
21310 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65  r;.struct DbFixe
21320 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
21330 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rse;      /* The
21340 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74   parsing context
21350 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  .  Error message
21360 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a  s written here *
21370 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
21380 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69  ema;    /* Fix i
21390 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68  tems to this sch
213a0 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61  ema */.  int bVa
213b0 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20  rOnly;       /* 
213c0 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62  Check for variab
213d0 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e  le references on
213e0 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ly */.  const ch
213f0 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d  ar *zDb;    /* M
21400 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a  ake sure all obj
21410 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e  ects are contain
21420 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62  ed in this datab
21430 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ase */.  const c
21440 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20  har *zType;  /* 
21450 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Type of the cont
21460 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
21470 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
21480 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  */.  const Token
21490 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65   *pName; /* Name
214a0 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
214b0 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
214c0 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d  or messages */.}
214d0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  ;../*.** An obje
214e0 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63  cted used to acc
214f0 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74  umulate the text
21500 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65   of a string whe
21510 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20  re we.** do not 
21520 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77  necessarily know
21530 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72   how big the str
21540 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74  ing will be in t
21550 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63  he end..*/.struc
21560 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73  t StrAccum {.  s
21570 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
21580 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
21590 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f  database for loo
215a0 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20  kaside.  Can be 
215b0 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a  NULL */.  char *
215c0 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f  zBase;         /
215d0 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74  * A base allocat
215e0 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d  ion.  Not from m
215f0 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72  alloc. */.  char
21600 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20   *zText;        
21610 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63   /* The string c
21620 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20  ollected so far 
21630 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b  */.  u32  nChar;
21640 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
21650 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e  gth of the strin
21660 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33  g so far */.  u3
21670 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  2  nAlloc;      
21680 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20     /* Amount of 
21690 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
216a0 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75 33  in zText */.  u3
216b0 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20  2  mxAlloc;     
216c0 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c     /* Maximum al
216d0 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  lowed allocation
216e0 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c  .  0 for no mall
216f0 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 38  oc usage */.  u8
21700 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20     accError;    
21710 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e     /* STRACCUM_N
21720 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d  OMEM or STRACCUM
21730 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20  _TOOBIG */.  u8 
21740 20 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20    printfFlags;  
21750 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e    /* SQLITE_PRIN
21760 54 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a  TF flags below *
21770 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52  /.};.#define STR
21780 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a  ACCUM_NOMEM   1.
21790 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d  #define STRACCUM
217a0 5f 54 4f 4f 42 49 47 20 20 32 0a 23 64 65 66 69  _TOOBIG  2.#defi
217b0 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
217c0 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20 20  _INTERNAL 0x01  
217d0 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d  /* Internal-use-
217e0 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73 20  only converters 
217f0 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69  allowed */.#defi
21800 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
21810 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20 20  _SQLFUNC  0x02  
21820 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  /* SQL function 
21830 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58 50  arguments to VXP
21840 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65  rintf */.#define
21850 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d   SQLITE_PRINTF_M
21860 41 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f 2a  ALLOCED 0x04  /*
21870 20 54 72 75 65 20 69 66 20 78 54 65 78 74 20 69   True if xText i
21880 73 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63  s allocated spac
21890 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73  e */..#define is
218a0 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28 28  Malloced(X)  (((
218b0 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20  X)->printfFlags 
218c0 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  & SQLITE_PRINTF_
218d0 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a  MALLOCED)!=0)...
218e0 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20  /*.** A pointer 
218f0 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
21900 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  e is used to com
21910 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61  municate informa
21920 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c  tion.** from sql
21930 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f  ite3Init and OP_
21940 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f  ParseSchema into
21950 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74   the sqlite3Init
21960 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70  Callback..*/.typ
21970 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20  edef struct {.  
21980 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
21990 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
219a0 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61  ase being initia
219b0 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  lized */.  char 
219c0 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f  **pzErrMsg;    /
219d0 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
219e0 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
219f0 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
21a00 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61       /* 0 for ma
21a10 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20  in database.  1 
21a20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f  for TEMP, 2.. fo
21a30 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20  r ATTACHed */.  
21a40 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
21a50 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f      /* Result co
21a60 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  de stored here *
21a70 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f  /.} InitData;../
21a80 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63  *.** Structure c
21a90 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c  ontaining global
21aa0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64   configuration d
21ab0 61 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ata for the SQLi
21ac0 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a  te library..**.*
21ad0 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
21ae0 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73   also contains s
21af0 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d  ome state inform
21b00 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
21b10 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b   Sqlite3Config {
21b20 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b  .  int bMemstat;
21b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b40 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
21b50 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74  enable memory st
21b60 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43  atus */.  int bC
21b70 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20  oreMutex;       
21b80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
21b90 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f  rue to enable co
21ba0 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  re mutexing */. 
21bb0 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b   int bFullMutex;
21bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bd0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
21be0 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69  able full mutexi
21bf0 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65  ng */.  int bOpe
21c00 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20  nUri;           
21c10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
21c20 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66  e to interpret f
21c30 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73  ilenames as URIs
21c40 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69   */.  int bUseCi
21c50 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
21c60 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63          /* Use c
21c70 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20  overing indices 
21c80 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a  for full-scans *
21c90 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e  /.  int mxStrlen
21ca0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21cb0 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
21cc0 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a   string length *
21cd0 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72  /.  int neverCor
21ce0 72 75 70 74 3b 20 20 20 20 20 20 20 20 20 20 20  rupt;           
21cf0 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
21d00 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c  e is always well
21d10 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74  -formed */.  int
21d20 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20   szLookaside;   
21d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21d40 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73  * Default lookas
21d50 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65 20  ide buffer size 
21d60 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73  */.  int nLookas
21d70 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ide;            
21d80 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
21d90 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66  t lookaside buff
21da0 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e  er count */.  in
21db0 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20  t nStmtSpill;   
21dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21dd0 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20  /* Stmt-journal 
21de0 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68  spill-to-disk th
21df0 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c  reshold */.  sql
21e00 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
21e10 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   m;            /
21e20 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f  * Low-level memo
21e30 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ry allocation in
21e40 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
21e50 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
21e60 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f  ds mutex;      /
21e70 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65  * Low-level mute
21e80 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  x interface */. 
21e90 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f   sqlite3_pcache_
21ea0 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32  methods2 pcache2
21eb0 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20  ;  /* Low-level 
21ec0 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72  page-cache inter
21ed0 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  face */.  void *
21ee0 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20  pHeap;          
21ef0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
21f00 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63  eap storage spac
21f10 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70  e */.  int nHeap
21f20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21f30 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
21f40 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20   of pHeap[] */. 
21f50 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65   int mnReq, mxRe
21f60 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q;              
21f70 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61     /* Min and ma
21f80 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20  x heap requests 
21f90 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74  sizes */.  sqlit
21fa0 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b  e3_int64 szMmap;
21fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21fc0 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72  mmap() space per
21fd0 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20   open file */.  
21fe0 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78  sqlite3_int64 mx
21ff0 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
22000 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c    /* Maximum val
22010 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f  ue for szMmap */
22020 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63  .  void *pScratc
22030 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
22040 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20       /* Scratch 
22050 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
22060 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20 20  szScratch;      
22070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22080 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63   Size of each sc
22090 72 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a  ratch buffer */.
220a0 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20    int nScratch; 
220b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
220d0 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72 73   scratch buffers
220e0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67   */.  void *pPag
220f0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
22100 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20          /* Page 
22110 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a  cache memory */.
22120 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20    int szPage;   
22130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22140 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
22150 61 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67  ach page in pPag
22160 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61  e[] */.  int nPa
22170 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
22180 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
22190 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
221a0 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
221b0 74 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b  t mxParserStack;
221c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221d0 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68  /* maximum depth
221e0 20 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73   of the parser s
221f0 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68  tack */.  int sh
22200 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64  aredCacheEnabled
22210 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74  ;           /* t
22220 72 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61  rue if shared-ca
22230 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64  che mode enabled
22240 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b   */.  u32 szPma;
22250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22260 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
22270 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69  um Sorter PMA si
22280 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61  ze */.  /* The a
22290 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e  bove might be in
222a0 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e  itialized to non
222b0 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c  -zero.  The foll
222c0 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c  owing need to al
222d0 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61  ways.  ** initia
222e0 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77  lly be zero, how
222f0 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69  ever. */.  int i
22300 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  sInit;          
22310 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22320 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69  True after initi
22330 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69  alization has fi
22340 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20  nished */.  int 
22350 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20  inProgress;     
22360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22370 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74   True while init
22380 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72  ialization in pr
22390 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20  ogress */.  int 
223a0 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20  isMutexInit;    
223b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
223c0 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65   True after mute
223d0 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69  xes are initiali
223e0 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  zed */.  int isM
223f0 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20  allocInit;      
22400 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
22410 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
22420 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
22430 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65  /.  int isPCache
22440 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
22450 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
22460 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
22470 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
22480 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78  nt nRefInitMutex
22490 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
224a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
224b0 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65  ers of pInitMute
224c0 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  x */.  sqlite3_m
224d0 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78  utex *pInitMutex
224e0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65  ;        /* Mute
224f0 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  x used by sqlite
22500 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a  3_initialize() *
22510 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29  /.  void (*xLog)
22520 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
22530 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63   char*); /* Func
22540 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67  tion for logging
22550 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67   */.  void *pLog
22560 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
22570 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
22580 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
22590 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66  xLog() */.#ifdef
225a0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
225b0 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53  QLLOG.  void(*xS
225c0 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c  qllog)(void*,sql
225d0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
225e0 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
225f0 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e  *pSqllogArg;.#en
22600 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
22610 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a  E_VDBE_COVERAGE.
22620 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
22630 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20  ng callback (if 
22640 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76  not NULL) is inv
22650 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44  oked on every VD
22660 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f  BE branch.  ** o
22670 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74  peration.  Set t
22680 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e  he callback usin
22690 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  g SQLITE_TESTCTR
226a0 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e  L_VDBE_COVERAGE.
226b0 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  .  */.  void (*x
226c0 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64  VdbeBranch)(void
226d0 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75  *,int iSrcLine,u
226e0 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b  8 eThis,u8 eMx);
226f0 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f    /* Callback */
22700 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72  .  void *pVdbeBr
22710 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20  anchArg;        
22720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22730 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22740 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  1st argument */.
22750 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
22760 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
22770 49 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20 28 2a  IN_TEST.  int (*
22780 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69  xTestCallback)(i
22790 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49  nt);        /* I
227a0 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65  nvoked by sqlite
227b0 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23  3FaultSim() */.#
227c0 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63  endif.  int bLoc
227d0 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20  altimeFault;    
227e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
227f0 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74  e to fail localt
22800 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 7d  ime() calls */.}
22810 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61  ;../*.** This ma
22820 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69  cro is used insi
22830 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73  de of assert() s
22840 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64  tatements to ind
22850 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68  icate that.** th
22860 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79  e assert is only
22870 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c   valid on a well
22880 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  -formed database
22890 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a  .  Instead of:.*
228a0 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
228b0 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20   X );.**.** One 
228c0 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  writes:.**.**   
228d0 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43    assert( X || C
228e0 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a  ORRUPT_DB );.**.
228f0 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73  ** CORRUPT_DB is
22900 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72   true during nor
22910 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  mal operation.  
22920 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20  CORRUPT_DB does 
22930 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20  not indicate.** 
22940 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73  that the databas
22950 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20  e is definitely 
22960 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68  corrupt, only th
22970 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63  at it might be c
22980 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d  orrupt..** For m
22990 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20  ost test cases, 
229a0 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65  CORRUPT_DB is se
229b0 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67  t to false using
229c0 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71   a special.** sq
229d0 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
229e0 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62  ol().  This enab
229f0 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61  les assert() sta
22a00 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65  tements to prove
22a10 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20  .** things that 
22a20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20  are always true 
22a30 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  for well-formed 
22a40 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64  databases..*/.#d
22a50 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42  efine CORRUPT_DB
22a60 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67    (sqlite3Config
22a70 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30  .neverCorrupt==0
22a80 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74  )../*.** Context
22a90 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20   pointer passed 
22aa0 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65  down through the
22ab0 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73   tree-walk..*/.s
22ac0 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20  truct Walker {. 
22ad0 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
22ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22af0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
22b00 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a  rser context.  *
22b10 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43  /.  int (*xExprC
22b20 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
22b30 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a  , Expr*);     /*
22b40 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78   Callback for ex
22b50 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
22b60 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  nt (*xSelectCall
22b70 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65  back)(Walker*,Se
22b80 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c  lect*);  /* Call
22b90 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
22ba0 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65   */.  void (*xSe
22bb0 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57  lectCallback2)(W
22bc0 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b  alker*,Select*);
22bd0 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61  /* Second callba
22be0 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
22bf0 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65  /.  int walkerDe
22c00 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  pth;            
22c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22c20 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75   Number of subqu
22c30 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43  eries */.  u8 eC
22c40 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
22c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c60 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20       /* A small 
22c70 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20  processing code 
22c80 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20  */.  union {    
22c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22cb0 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72  * Extra data for
22cc0 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20   callback */.   
22cd0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
22ce0 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  C;              
22cf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
22d00 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f  aming context */
22d10 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  .    int n;     
22d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d40 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  /* A counter */.
22d50 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20      int iCur;   
22d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22d80 2a 20 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  * A cursor numbe
22d90 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74  r */.    SrcList
22da0 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20   *pSrcList;     
22db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22dc0 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75      /* FROM clau
22dd0 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  se */.    struct
22de0 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43   SrcCount *pSrcC
22df0 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ount;           
22e00 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67       /* Counting
22e10 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63   column referenc
22e20 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  es */.    struct
22e30 20 43 43 75 72 48 69 6e 74 20 2a 70 43 43 75 72   CCurHint *pCCur
22e40 48 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  Hint;           
22e50 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20       /* Used by 
22e60 63 6f 64 65 43 75 72 73 6f 72 48 69 6e 74 28 29  codeCursorHint()
22e70 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43   */.    int *aiC
22e80 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ol;             
22e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ea0 20 20 20 2f 2a 20 61 72 72 61 79 20 6f 66 20 63     /* array of c
22eb0 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 20 2a 2f  olumn indexes */
22ec0 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46  .  } u;.};../* F
22ed0 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69  orward declarati
22ee0 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ons */.int sqlit
22ef0 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65  e3WalkExpr(Walke
22f00 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
22f10 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c  sqlite3WalkExprL
22f20 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ist(Walker*, Exp
22f30 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
22f40 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57  ite3WalkSelect(W
22f50 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
22f60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
22f70 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b  kSelectExpr(Walk
22f80 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
22f90 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
22fa0 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a  lectFrom(Walker*
22fb0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
22fc0 73 71 6c 69 74 65 33 45 78 70 72 57 61 6c 6b 4e  sqlite3ExprWalkN
22fd0 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  oop(Walker*, Exp
22fe0 72 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  r*);../*.** Retu
22ff0 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65  rn code from the
23000 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b   parse-tree walk
23010 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61  ing primitives a
23020 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c  nd their.** call
23030 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  backs..*/.#defin
23040 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20  e WRC_Continue  
23050 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75    0   /* Continu
23060 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c  e down into chil
23070 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  dren */.#define 
23080 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20  WRC_Prune       
23090 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c  1   /* Omit chil
230a0 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75  dren but continu
230b0 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e  e walking siblin
230c0 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  gs */.#define WR
230d0 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20  C_Abort       2 
230e0 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65    /* Abandon the
230f0 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f   tree walk */../
23100 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
23110 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
23120 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  re represents a 
23130 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f  set of one or mo
23140 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d  re CTEs.** (comm
23150 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
23160 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79  ions) created by
23170 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63   a single WITH c
23180 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  lause..*/.struct
23190 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43   With {.  int nC
231a0 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
231b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
231c0 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74  ber of CTEs in t
231d0 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a  he WITH clause *
231e0 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72  /.  With *pOuter
231f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23200 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e      /* Containin
23210 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f  g WITH clause, o
23220 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75  r NULL */.  stru
23230 63 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20  ct Cte {        
23240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
23250 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74  or each CTE in t
23260 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e  he WITH clause..
23270 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  .. */.    char *
23280 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
23290 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
232a0 65 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f  e of this CTE */
232b0 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
232c0 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cols;           
232d0 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
232e0 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20  explicit column 
232f0 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a  names, or NULL *
23300 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
23310 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20  elect;          
23320 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
23330 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  inition of this 
23340 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74  CTE */.    const
23350 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20   char *zCteErr; 
23360 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72             /* Er
23370 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20  ror message for 
23380 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e  circular referen
23390 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  ces */.  } a[1];
233a0 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  .};..#ifdef SQLI
233b0 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41  TE_DEBUG./*.** A
233c0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
233d0 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63  e TreeView objec
233e0 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 70 72  t is used for pr
233f0 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65  inting the conte
23400 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74  nt of.** data st
23410 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69  ructures on sqli
23420 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 29  te3DebugPrintf()
23430 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69   using a tree-li
23440 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75  ke view..*/.stru
23450 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20  ct TreeView {.  
23460 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20  int iLevel;     
23470 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
23480 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72   level of the tr
23490 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a  ee we are on */.
234a0 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d    u8  bLine[100]
234b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61  ;         /* Dra
234c0 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f  w vertical in co
234d0 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b  lumn i if bLine[
234e0 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b  i] is true */.};
234f0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
23500 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a  E_DEBUG */../*.*
23510 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70  * Assuming zIn p
23520 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72  oints to the fir
23530 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46  st byte of a UTF
23540 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a  -8 character,.**
23550 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20   advance zIn to 
23560 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72  point to the fir
23570 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e  st byte of the n
23580 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63  ext UTF-8 charac
23590 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
235a0 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38  SQLITE_SKIP_UTF8
235b0 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20  (zIn) {         
235c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
235d0 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29  .  if( (*(zIn++)
235e0 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20  )>=0xc0 ){      
235f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23600 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68          \.    wh
23610 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63  ile( (*zIn & 0xc
23620 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b  0)==0x80 ){ zIn+
23630 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  +; }            
23640 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20   \.  }          
23650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23670 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f            \.}../
23680 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
23690 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72  *_BKPT macros ar
236a0 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f  e substitutes fo
236b0 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  r the error code
236c0 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61  s with.** the sa
236d0 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68  me name but with
236e0 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75  out the _BKPT su
236f0 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63  ffix.  These mac
23700 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f  ros invoke.** ro
23710 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f  utines that repo
23720 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62  rt the line-numb
23730 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  er on which the 
23740 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64  error originated
23750 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65  .** using sqlite
23760 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f  3_log().  The ro
23770 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76  utines also prov
23780 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74  ide a convenient
23790 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74   place.** to set
237a0 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61   a debugger brea
237b0 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  kpoint..*/.int s
237c0 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
237d0 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  or(int);.int sql
237e0 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28  ite3MisuseError(
237f0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
23800 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69  3CantopenError(i
23810 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  nt);.#define SQL
23820 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
23830 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
23840 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
23850 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49  define SQLITE_MI
23860 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65  SUSE_BKPT sqlite
23870 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c  3MisuseError(__L
23880 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53  INE__).#define S
23890 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42  QLITE_CANTOPEN_B
238a0 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  KPT sqlite3Canto
238b0 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  penError(__LINE_
238c0 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  _).#ifdef SQLITE
238d0 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73 71 6c  _DEBUG.  int sql
238e0 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 69  ite3NomemError(i
238f0 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
23900 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f  e3IoerrnomemErro
23910 72 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65  r(int);.# define
23920 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
23930 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45  PT sqlite3NomemE
23940 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
23950 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
23960 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  OERR_NOMEM_BKPT 
23970 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65  sqlite3Ioerrnome
23980 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  mError(__LINE__)
23990 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
239a0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50  SQLITE_NOMEM_BKP
239b0 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23  T SQLITE_NOMEM.#
239c0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
239d0 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  OERR_NOMEM_BKPT 
239e0 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
239f0 45 4d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  EM.#endif../*.**
23a00 20 46 54 53 33 20 61 6e 64 20 46 54 53 34 20 62   FTS3 and FTS4 b
23a10 6f 74 68 20 72 65 71 75 69 72 65 20 76 69 72 74  oth require virt
23a20 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70 6f 72  ual table suppor
23a30 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  t.*/.#if defined
23a40 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
23a50 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64  TUALTABLE).# und
23a60 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
23a70 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20 53 51  _FTS3.# undef SQ
23a80 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
23a90 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
23aa0 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e  TS4 is really an
23ab0 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46   extension for F
23ac0 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62  TS3.  It is enab
23ad0 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  led using the.**
23ae0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
23af0 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20  TS3 macro.  But 
23b00 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69  to avoid confusi
23b10 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a  on we also call.
23b20 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  ** the SQLITE_EN
23b30 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20  ABLE_FTS4 macro 
23b40 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61  to serve as an a
23b50 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f  lias for SQLITE_
23b60 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a  ENABLE_FTS3..*/.
23b70 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
23b80 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20  TE_ENABLE_FTS4) 
23b90 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
23ba0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a  TE_ENABLE_FTS3).
23bb0 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
23bc0 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65  ENABLE_FTS3 1.#e
23bd0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
23be0 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69  ctype.h header i
23bf0 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e  s needed for non
23c00 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20  -ASCII systems. 
23c10 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e   It is also.** n
23c20 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68  eeded by FTS3 wh
23c30 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75  en FTS3 is inclu
23c40 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67  ded in the amalg
23c50 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  amation..*/.#if 
23c60 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
23c70 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20  ASCII) || \.    
23c80 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  (defined(SQLITE_
23c90 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20  ENABLE_FTS3) && 
23ca0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
23cb0 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20  MALGAMATION)).# 
23cc0 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68  include <ctype.h
23cd0 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  >.#endif../*.** 
23ce0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
23cf0 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73  cros mimic the s
23d00 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20  tandard library 
23d10 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65  functions touppe
23d20 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28  r(),.** isspace(
23d30 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73  ), isalnum(), is
23d40 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64  digit() and isxd
23d50 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69  igit(), respecti
23d60 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c  vely. The.** sql
23d70 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c  ite versions onl
23d80 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49  y work for ASCII
23d90 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67   characters, reg
23da0 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c  ardless of local
23db0 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
23dc0 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69  ITE_ASCII.# defi
23dd0 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
23de0 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c  r(x)  ((x)&~(sql
23df0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
23e00 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
23e10 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65  &0x20)).# define
23e20 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
23e30 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
23e40 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
23e50 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a  char)(x)]&0x01).
23e60 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23e70 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71  Isalnum(x)   (sq
23e80 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
23e90 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
23ea0 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65  ]&0x06).# define
23eb0 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
23ec0 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
23ed0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
23ee0 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a  char)(x)]&0x02).
23ef0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23f00 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71  Isdigit(x)   (sq
23f10 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
23f20 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
23f30 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65  ]&0x04).# define
23f40 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
23f50 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79  (x)  (sqlite3Cty
23f60 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
23f70 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a  char)(x)]&0x08).
23f80 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23f90 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71  Tolower(x)   (sq
23fa0 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
23fb0 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r[(unsigned char
23fc0 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e 65 20  )(x)]).# define 
23fd0 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78  sqlite3Isquote(x
23fe0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
23ff0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
24000 68 61 72 29 28 78 29 5d 26 30 78 38 30 29 0a 23  har)(x)]&0x80).#
24010 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
24020 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20  lite3Toupper(x) 
24030 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67    toupper((unsig
24040 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
24050 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
24060 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61  space(x)   isspa
24070 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ce((unsigned cha
24080 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
24090 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
240a0 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73  )   isalnum((uns
240b0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
240c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
240d0 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61  Isalpha(x)   isa
240e0 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63  lpha((unsigned c
240f0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
24100 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
24110 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75  (x)   isdigit((u
24120 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
24130 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24140 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69  e3Isxdigit(x)  i
24150 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  sxdigit((unsigne
24160 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
24170 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f  fine sqlite3Tolo
24180 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72  wer(x)   tolower
24190 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
241a0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
241b0 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29 20  lite3Isquote(x) 
241c0 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78 29    ((x)=='"'||(x)
241d0 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b 27  =='\''||(x)=='['
241e0 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e 64  ||(x)=='`').#end
241f0 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
24200 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50  E_OMIT_COMPILEOP
24210 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73  TION_DIAGS.int s
24220 71 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75  qlite3IsIdChar(u
24230 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  8);.#endif../*.*
24240 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74  * Internal funct
24250 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a  ion prototypes.*
24260 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  /.int sqlite3Str
24270 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 2a  ICmp(const char*
24280 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  ,const char*);.i
24290 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  nt sqlite3Strlen
242a0 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  30(const char*);
242b0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 43 6f  .char *sqlite3Co
242c0 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 2a  lumnType(Column*
242d0 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65  ,char*);.#define
242e0 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
242f0 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
24300 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  p..int sqlite3Ma
24310 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a  llocInit(void);.
24320 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c  void sqlite3Mall
24330 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69  ocEnd(void);.voi
24340 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
24350 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (u64);.void *sql
24360 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75  ite3MallocZero(u
24370 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
24380 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73  e3DbMallocZero(s
24390 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76  qlite3*, u64);.v
243a0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
243b0 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a  llocRaw(sqlite3*
243c0 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
243d0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
243e0 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  NN(sqlite3*, u64
243f0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
24400 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33  DbStrDup(sqlite3
24410 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
24420 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
24430 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  trNDup(sqlite3*,
24440 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34  const char*, u64
24450 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
24460 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75  Realloc(void*, u
24470 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
24480 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65  e3DbReallocOrFre
24490 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  e(sqlite3 *, voi
244a0 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  d *, u64);.void 
244b0 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
244c0 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  c(sqlite3 *, voi
244d0 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  d *, u64);.void 
244e0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71  sqlite3DbFree(sq
244f0 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
24500 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
24510 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e  cSize(void*);.in
24520 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  t sqlite3DbMallo
24530 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20  cSize(sqlite3*, 
24540 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  void*);.void *sq
24550 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c  lite3ScratchMall
24560 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  oc(int);.void sq
24570 6c 69 74 65 33 53 63 72 61 74 63 68 46 72 65 65  lite3ScratchFree
24580 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73  (void*);.void *s
24590 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63  qlite3PageMalloc
245a0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
245b0 74 65 33 50 61 67 65 46 72 65 65 28 76 6f 69 64  te3PageFree(void
245c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
245d0 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f  MemSetDefault(vo
245e0 69 64 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  id);.#ifndef SQL
245f0 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
24600 5f 54 45 53 54 0a 76 6f 69 64 20 73 71 6c 69 74  _TEST.void sqlit
24610 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f  e3BenignMallocHo
24620 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69  oks(void (*)(voi
24630 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69  d), void (*)(voi
24640 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  d));.#endif.int 
24650 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c  sqlite3HeapNearl
24660 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a  yFull(void);../*
24670 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77  .** On systems w
24680 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20  ith ample stack 
24690 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73  space and that s
246a0 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c  upport alloca(),
246b0 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20   make.** use of 
246c0 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61  alloca() to obta
246d0 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72  in space for lar
246e0 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a  ge automatic obj
246f0 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c  ects.  By defaul
24700 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61  t,.** obtain spa
24710 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ce from malloc()
24720 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f  ..**.** The allo
24730 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76  ca() routine nev
24740 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e  er returns NULL.
24750 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
24760 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20  e code paths.** 
24770 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73  that deal with s
24780 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
24790 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62  () failures to b
247a0 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a  e unreachable..*
247b0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
247c0 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66  USE_ALLOCA.# def
247d0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
247e0 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
247f0 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69  alloca(N).# defi
24800 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
24810 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d  llocZero(D,N)  m
24820 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c  emset(alloca(N),
24830 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20   0, N).# define 
24840 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
24850 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  (D,P).#else.# de
24860 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
24870 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
24880 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
24890 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  Raw(D,N).# defin
248a0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
248b0 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71  locZero(D,N)  sq
248c0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
248d0 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  o(D,N).# define 
248e0 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
248f0 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69  (D,P)       sqli
24900 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23  te3DbFree(D,P).#
24910 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74  endif../* Do not
24920 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53   allow both MEMS
24930 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33 20  YS5 and MEMSYS3 
24940 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74 6f  to be defined to
24950 67 65 74 68 65 72 2e 20 20 49 66 20 74 68 65 79  gether.  If they
24960 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c 65  .** are, disable
24970 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64   MEMSYS3.*/.#ifd
24980 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
24990 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73  _MEMSYS5.const s
249a0 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
249b0 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
249c0 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a  tMemsys5(void);.
249d0 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #undef SQLITE_EN
249e0 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e  ABLE_MEMSYS3.#en
249f0 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
24a00 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33  E_ENABLE_MEMSYS3
24a10 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
24a20 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
24a30 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33  te3MemGetMemsys3
24a40 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
24a50 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
24a60 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c  MUTEX_OMIT.  sql
24a70 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
24a80 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
24a90 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f  3DefaultMutex(vo
24aa0 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
24ab0 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e  utex_methods con
24ac0 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d  st *sqlite3NoopM
24ad0 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
24ae0 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
24af0 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69  ite3MutexAlloc(i
24b00 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
24b10 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64  e3MutexInit(void
24b20 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
24b30 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a  MutexEnd(void);.
24b40 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
24b50 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
24b60 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e  _OMIT) && !defin
24b70 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
24b80 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c  NOOP).  void sql
24b90 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65  ite3MemoryBarrie
24ba0 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23  r(void);.#else.#
24bb0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
24bc0 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23  emoryBarrier().#
24bd0 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69  endif..sqlite3_i
24be0 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74  nt64 sqlite3Stat
24bf0 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f  usValue(int);.vo
24c00 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
24c10 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  Up(int, int);.vo
24c20 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
24c30 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  Down(int, int);.
24c40 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
24c50 75 73 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c  usHighwater(int,
24c60 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63 63 65 73   int);../* Acces
24c70 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65  s to mutexes use
24c80 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61  d by sqlite3_sta
24c90 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33  tus() */.sqlite3
24ca0 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50  _mutex *sqlite3P
24cb0 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64  cache1Mutex(void
24cc0 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  );.sqlite3_mutex
24cd0 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d   *sqlite3MallocM
24ce0 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66  utex(void);..#if
24cf0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
24d00 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
24d10 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e    int sqlite3IsN
24d20 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73  aN(double);.#els
24d30 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
24d40 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65  e3IsNaN(X)  0.#e
24d50 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
24d60 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
24d70 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
24d80 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61  re holds informa
24d90 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a  tion about SQL.*
24da0 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75  * functions argu
24db0 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74  ments that are t
24dc0 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  he parameters to
24dd0 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75   the printf() fu
24de0 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  nction..*/.struc
24df0 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
24e00 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20  s {.  int nArg; 
24e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24e20 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  * Total number o
24e30 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
24e40 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20   int nUsed;     
24e50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
24e60 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
24e70 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
24e80 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
24e90 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68  **apArg;   /* Th
24ea0 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65  e argument value
24eb0 73 20 2a 2f 0a 7d 3b 0a 0a 76 6f 69 64 20 73 71  s */.};..void sq
24ec0 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28 53 74  lite3VXPrintf(St
24ed0 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63  rAccum*, const c
24ee0 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a  har*, va_list);.
24ef0 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69  void sqlite3XPri
24f00 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 63  ntf(StrAccum*, c
24f10 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
24f20 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  ;.char *sqlite3M
24f30 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c  Printf(sqlite3*,
24f40 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
24f50 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
24f60 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  VMPrintf(sqlite3
24f70 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76  *,const char*, v
24f80 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64 65 66  a_list);.#if def
24f90 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
24fa0 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
24fb0 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
24fc0 43 45 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CE).  void sqlit
24fd0 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f  e3DebugPrintf(co
24fe0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
24ff0 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
25000 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
25010 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
25020 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f  TestTextToPtr(co
25030 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
25040 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
25050 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
25060 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
25070 56 69 65 77 45 78 70 72 28 54 72 65 65 56 69 65  ViewExpr(TreeVie
25080 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c  w*, const Expr*,
25090 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c   u8);.  void sql
250a0 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
250b0 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20  List(TreeView*, 
250c0 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c  const ExprList*,
250d0 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a   u8, const char*
250e0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
250f0 33 54 72 65 65 56 69 65 77 53 65 6c 65 63 74 28  3TreeViewSelect(
25100 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
25110 20 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20   Select*, u8);. 
25120 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
25130 65 56 69 65 77 57 69 74 68 28 54 72 65 65 56 69  eViewWith(TreeVi
25140 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a  ew*, const With*
25150 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  , u8);.#endif...
25160 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53  void sqlite3SetS
25170 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73  tring(char **, s
25180 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
25190 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
251a0 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73  te3ErrorMsg(Pars
251b0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
251c0 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69   ...);.void sqli
251d0 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a  te3Dequote(char*
251e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
251f0 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c  okenInit(Token*,
25200 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
25210 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63  te3KeywordCode(c
25220 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
25230 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
25240 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28  qlite3RunParser(
25250 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
25260 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76  ar*, char **);.v
25270 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
25280 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b  hCoding(Parse*);
25290 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
252a0 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a  empReg(Parse*);.
252b0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
252c0 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65  aseTempReg(Parse
252d0 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
252e0 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28  te3GetTempRange(
252f0 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
25300 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
25310 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
25320 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
25330 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70  sqlite3ClearTemp
25340 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29  RegCache(Parse*)
25350 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
25360 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65  DEBUG.int sqlite
25370 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65 28  3NoTempsInRange(
25380 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b  Parse*,int,int);
25390 0a 23 65 6e 64 69 66 0a 45 78 70 72 20 2a 73 71  .#endif.Expr *sq
253a0 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73  lite3ExprAlloc(s
253b0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
253c0 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45  t Token*,int);.E
253d0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
253e0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
253f0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
25400 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74 61   sqlite3ExprAtta
25410 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69 74  chSubtrees(sqlit
25420 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  e3*,Expr*,Expr*,
25430 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
25440 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73 65  lite3PExpr(Parse
25450 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45  *, int, Expr*, E
25460 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  xpr*, const Toke
25470 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
25480 33 50 45 78 70 72 41 64 64 53 65 6c 65 63 74 28  3PExprAddSelect(
25490 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 53  Parse*, Expr*, S
254a0 65 6c 65 63 74 2a 29 3b 0a 45 78 70 72 20 2a 73  elect*);.Expr *s
254b0 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73 71  qlite3ExprAnd(sq
254c0 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78  lite3*,Expr*, Ex
254d0 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
254e0 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28  te3ExprFunction(
254f0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
25500 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
25510 73 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67  sqlite3ExprAssig
25520 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65  nVarNumber(Parse
25530 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
25540 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74  sqlite3ExprDelet
25550 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
25560 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  *);.ExprList *sq
25570 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70  lite3ExprListApp
25580 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  end(Parse*,ExprL
25590 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  ist*,Expr*);.voi
255a0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
255b0 74 53 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78  tSetSortOrder(Ex
255c0 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f  prList*,int);.vo
255d0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
255e0 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a  stSetName(Parse*
255f0 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e  ,ExprList*,Token
25600 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
25610 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53  ite3ExprListSetS
25620 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  pan(Parse*,ExprL
25630 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b  ist*,ExprSpan*);
25640 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
25650 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  rListDelete(sqli
25660 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  te3*, ExprList*)
25670 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78 70  ;.u32 sqlite3Exp
25680 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74  rListFlags(const
25690 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
256a0 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c   sqlite3Init(sql
256b0 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  ite3*, char**);.
256c0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43  int sqlite3InitC
256d0 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69  allback(void*, i
256e0 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72  nt, char**, char
256f0 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
25700 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54  3Pragma(Parse*,T
25710 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
25720 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  en*,int);.void s
25730 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
25740 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
25750 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  n(sqlite3*);.voi
25760 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e  d sqlite3ResetOn
25770 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a  eSchema(sqlite3*
25780 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
25790 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62  te3CollapseDatab
257a0 61 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33  aseArray(sqlite3
257b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
257c0 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68  CommitInternalCh
257d0 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b  anges(sqlite3*);
257e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
257f0 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73  eteColumnNames(s
25800 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b  qlite3*,Table*);
25810 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c 75  .int sqlite3Colu
25820 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69 73 74 28  mnsFromExprList(
25830 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
25840 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b  ,i16*,Column**);
25850 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
25860 65 63 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65  ectAddColumnType
25870 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72  AndCollation(Par
25880 73 65 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63  se*,Table*,Selec
25890 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  t*);.Table *sqli
258a0 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65  te3ResultSetOfSe
258b0 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65  lect(Parse*,Sele
258c0 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ct*);.void sqlit
258d0 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c  e3OpenMasterTabl
258e0 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b  e(Parse *, int);
258f0 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50  .Index *sqlite3P
25900 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54  rimaryKeyIndex(T
25910 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69  able*);.i16 sqli
25920 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78  te3ColumnOfIndex
25930 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76  (Index*, i16);.v
25940 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74  oid sqlite3Start
25950 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
25960 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
25970 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66  nt,int,int);.#if
25980 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48   SQLITE_ENABLE_H
25990 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20  IDDEN_COLUMNS.  
259a0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75  void sqlite3Colu
259b0 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d  mnPropertiesFrom
259c0 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c  Name(Table*, Col
259d0 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  umn*);.#else.# d
259e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c  efine sqlite3Col
259f0 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f  umnPropertiesFro
25a00 6d 4e 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f  mName(T,C) /* no
25a10 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f  -op */.#endif.vo
25a20 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
25a30 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  umn(Parse*,Token
25a40 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
25a50 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c  sqlite3AddNotNul
25a60 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  l(Parse*, int);.
25a70 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50  void sqlite3AddP
25a80 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a  rimaryKey(Parse*
25a90 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
25aa0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
25ab0 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63  d sqlite3AddChec
25ac0 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  kConstraint(Pars
25ad0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
25ae0 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75   sqlite3AddDefau
25af0 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45  ltValue(Parse*,E
25b00 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20  xprSpan*);.void 
25b10 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74  sqlite3AddCollat
25b20 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  eType(Parse*, To
25b30 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
25b40 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73  te3EndTable(Pars
25b50 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
25b60 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  ,u8,Select*);.in
25b70 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72  t sqlite3ParseUr
25b80 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  i(const char*,co
25b90 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e  nst char*,unsign
25ba0 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20  ed int*,.       
25bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
25bc0 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a  ite3_vfs**,char*
25bd0 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65  *,char **);.Btre
25be0 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65  e *sqlite3DbName
25bf0 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a  ToBtree(sqlite3*
25c00 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  ,const char*);.i
25c10 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e  nt sqlite3CodeOn
25c20 63 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69  ce(Parse *);..#i
25c30 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
25c40 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20  _BUILTIN_TEST.# 
25c50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61  define sqlite3Fa
25c60 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45  ultSim(X) SQLITE
25c70 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20  _OK.#else.  int 
25c80 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
25c90 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69  int);.#endif..Bi
25ca0 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74  tvec *sqlite3Bit
25cb0 76 65 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a  vecCreate(u32);.
25cc0 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
25cd0 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75  cTest(Bitvec*, u
25ce0 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
25cf0 42 69 74 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c  BitvecTestNotNul
25d00 6c 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  l(Bitvec*, u32);
25d10 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
25d20 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75  ecSet(Bitvec*, u
25d30 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  32);.void sqlite
25d40 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74  3BitvecClear(Bit
25d50 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a  vec*, u32, void*
25d60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
25d70 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74  itvecDestroy(Bit
25d80 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74  vec*);.u32 sqlit
25d90 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74  e3BitvecSize(Bit
25da0 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  vec*);.#ifndef S
25db0 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
25dc0 49 4e 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69  IN_TEST.int sqli
25dd0 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e  te3BitvecBuiltin
25de0 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a  Test(int,int*);.
25df0 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a  #endif..RowSet *
25e00 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69  sqlite3RowSetIni
25e10 74 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  t(sqlite3*, void
25e20 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29  *, unsigned int)
25e30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
25e40 77 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74  wSetClear(RowSet
25e50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25e60 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77  RowSetInsert(Row
25e70 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20  Set*, i64);.int 
25e80 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73  sqlite3RowSetTes
25e90 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69  t(RowSet*, int i
25ea0 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74  Batch, i64);.int
25eb0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
25ec0 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a  xt(RowSet*, i64*
25ed0 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
25ee0 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65  CreateView(Parse
25ef0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
25f00 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
25f10 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74  ,Select*,int,int
25f20 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
25f30 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
25f40 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53  W) || !defined(S
25f50 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
25f60 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73  ALTABLE).  int s
25f70 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
25f80 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  umnNames(Parse*,
25f90 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23  Table*);.#else.#
25fa0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
25fb0 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65  iewGetColumnName
25fc0 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a  s(A,B) 0.#endif.
25fd0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
25fe0 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e  ATTACHED>30.  in
25ff0 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41  t sqlite3DbMaskA
26000 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b  llZero(yDbMask);
26010 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
26020 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61  ite3DropTable(Pa
26030 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
26040 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
26050 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54  sqlite3CodeDropT
26060 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62  able(Parse*, Tab
26070 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  le*, int, int);.
26080 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
26090 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
260a0 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64  , Table*);.#ifnd
260b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
260c0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76  UTOINCREMENT.  v
260d0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
260e0 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61  ncrementBegin(Pa
260f0 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20  rse *pParse);.  
26100 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
26110 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72  incrementEnd(Par
26120 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c  se *pParse);.#el
26130 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
26140 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
26150 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e  Begin(X).# defin
26160 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
26170 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e  rementEnd(X).#en
26180 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
26190 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53  Insert(Parse*, S
261a0 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a  rcList*, Select*
261b0 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  , IdList*, int);
261c0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72  .void *sqlite3Ar
261d0 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69  rayAllocate(sqli
261e0 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69  te3*,void*,int,i
261f0 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73  nt*,int*);.IdLis
26200 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
26210 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c  Append(sqlite3*,
26220 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a   IdList*, Token*
26230 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64  );.int sqlite3Id
26240 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74  ListIndex(IdList
26250 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
26260 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
26270 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73  SrcListEnlarge(s
26280 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
26290 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72  *, int, int);.Sr
262a0 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
262b0 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  cListAppend(sqli
262c0 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  te3*, SrcList*, 
262d0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
262e0 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
262f0 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72  3SrcListAppendFr
26300 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53  omTerm(Parse*, S
26310 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
26320 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20   Token*,.       
26330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
26350 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  oken*, Select*, 
26360 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  Expr*, IdList*);
26370 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
26380 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61  ListIndexedBy(Pa
26390 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
263a0 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
263b0 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46   sqlite3SrcListF
263c0 75 6e 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20  uncArgs(Parse*, 
263d0 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
263e0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
263f0 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70  3IndexedByLookup
26400 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74  (Parse *, struct
26410 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
26420 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
26430 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
26440 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  pe(SrcList*);.vo
26450 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
26460 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50  tAssignCursors(P
26470 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
26480 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64  ;.void sqlite3Id
26490 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
264a0 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  e3*, IdList*);.v
264b0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
264c0 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
264d0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e  *, SrcList*);.In
264e0 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f  dex *sqlite3Allo
264f0 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  cateIndexObject(
26500 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74  sqlite3*,i16,int
26510 2c 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73  ,char**);.void s
26520 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64 65  qlite3CreateInde
26530 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  x(Parse*,Token*,
26540 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c  Token*,SrcList*,
26550 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f  ExprList*,int,To
26560 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
26570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26580 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  Expr*, int, int,
26590 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
265a0 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73  e3DropIndex(Pars
265b0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
265c0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  t);.int sqlite3S
265d0 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65  elect(Parse*, Se
265e0 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73  lect*, SelectDes
265f0 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
26600 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61  ite3SelectNew(Pa
26610 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  rse*,ExprList*,S
26620 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
26630 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  prList*,.       
26640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26650 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74    Expr*,ExprList
26660 2a 2c 75 33 32 2c 45 78 70 72 2a 2c 45 78 70 72  *,u32,Expr*,Expr
26670 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26680 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c  SelectDelete(sql
26690 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ite3*, Select*);
266a0 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53  .Table *sqlite3S
266b0 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72  rcListLookup(Par
266c0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
266d0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61  int sqlite3IsRea
266e0 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61  dOnly(Parse*, Ta
266f0 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ble*, int);.void
26700 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
26710 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43  e(Parse*, int iC
26720 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62  ur, int iDb, Tab
26730 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64  le*, int);.#if d
26740 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
26750 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
26760 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65  TE_LIMIT) && !de
26770 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
26780 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72  T_SUBQUERY).Expr
26790 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68   *sqlite3LimitWh
267a0 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  ere(Parse*,SrcLi
267b0 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
267c0 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  st*,Expr*,Expr*,
267d0 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76  char*);.#endif.v
267e0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
267f0 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72  eFrom(Parse*, Sr
26800 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  cList*, Expr*);.
26810 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61  void sqlite3Upda
26820 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  te(Parse*, SrcLi
26830 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
26840 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65  Expr*, int);.Whe
26850 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57  reInfo *sqlite3W
26860 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a  hereBegin(Parse*
26870 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
26880 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ExprList*,ExprLi
26890 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f  st*,u16,int);.vo
268a0 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45  id sqlite3WhereE
268b0 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nd(WhereInfo*);.
268c0 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 57 68  LogEst sqlite3Wh
268d0 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e  ereOutputRowCoun
268e0 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
268f0 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
26900 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65 49  sDistinct(WhereI
26910 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
26920 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65 64  e3WhereIsOrdered
26930 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
26940 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 72  t sqlite3WhereOr
26950 64 65 72 65 64 49 6e 6e 65 72 4c 6f 6f 70 28 57  deredInnerLoop(W
26960 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
26970 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
26980 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  rted(WhereInfo*)
26990 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
269a0 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28  reContinueLabel(
269b0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
269c0 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65   sqlite3WhereBre
269d0 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  akLabel(WhereInf
269e0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
269f0 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57  WhereOkOnePass(W
26a00 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29  hereInfo*, int*)
26a10 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53  ;.#define ONEPAS
26a20 53 5f 4f 46 46 20 20 20 20 20 20 30 20 20 20 20  S_OFF      0    
26a30 20 20 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e      /* Use of ON
26a40 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65  EPASS not allowe
26a50 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45  d */.#define ONE
26a60 50 41 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20  PASS_SINGLE   1 
26a70 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53         /* ONEPAS
26a80 53 20 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69  S valid for a si
26a90 6e 67 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20  ngle row update 
26aa0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  */.#define ONEPA
26ab0 53 53 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20  SS_MULTI    2   
26ac0 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20       /* ONEPASS 
26ad0 69 73 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c  is valid for mul
26ae0 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f  tiple rows */.vo
26af0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
26b00 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d  deLoadIndexColum
26b10 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  n(Parse*, Index*
26b20 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
26b30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
26b40 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50  rCodeGetColumn(P
26b50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
26b60 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  nt, int, int, u8
26b70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
26b80 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
26b90 54 6f 52 65 67 28 50 61 72 73 65 2a 2c 20 54 61  ToReg(Parse*, Ta
26ba0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
26bb0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26bc0 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
26bd0 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a  umnOfTable(Vdbe*
26be0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
26bf0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
26c00 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f  qlite3ExprCodeMo
26c10 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
26c20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
26c30 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
26c40 53 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e  Store(Parse*, in
26c50 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
26c60 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
26c70 63 68 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b  chePush(Parse*);
26c80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
26c90 72 43 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a  rCachePop(Parse*
26ca0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
26cb0 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50  xprCacheRemove(P
26cc0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
26cd0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
26ce0 70 72 43 61 63 68 65 43 6c 65 61 72 28 50 61 72  prCacheClear(Par
26cf0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
26d00 65 33 45 78 70 72 43 61 63 68 65 41 66 66 69 6e  e3ExprCacheAffin
26d10 69 74 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a  ityChange(Parse*
26d20 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
26d30 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
26d40 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
26d50 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26d60 74 65 33 45 78 70 72 43 6f 64 65 43 6f 70 79 28  te3ExprCodeCopy(
26d70 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
26d80 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26d90 33 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61  3ExprCodeFactora
26da0 62 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ble(Parse*, Expr
26db0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
26dc0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 74 49  lite3ExprCodeAtI
26dd0 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  nit(Parse*, Expr
26de0 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
26df0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
26e00 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70  Temp(Parse*, Exp
26e10 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
26e20 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61  qlite3ExprCodeTa
26e30 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70  rget(Parse*, Exp
26e40 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
26e50 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e  qlite3ExprCodeAn
26e60 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45  dCache(Parse*, E
26e70 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
26e80 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45  sqlite3ExprCodeE
26e90 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20  xprList(Parse*, 
26ea0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
26eb0 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e  int, u8);.#defin
26ec0 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55  e SQLITE_ECEL_DU
26ed0 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20  P      0x01  /* 
26ee0 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f  Deep, not shallo
26ef0 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66  w copies */.#def
26f00 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
26f10 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f  FACTOR   0x02  /
26f20 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  * Factor out con
26f30 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23  stant terms */.#
26f40 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
26f50 45 4c 5f 52 45 46 20 20 20 20 20 20 30 78 30 34  EL_REF      0x04
26f60 20 20 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73    /* Use ExprLis
26f70 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f  t.u.x.iOrderByCo
26f80 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  l */.void sqlite
26f90 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73  3ExprIfTrue(Pars
26fa0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
26fb0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26fc0 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61  e3ExprIfFalse(Pa
26fd0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
26fe0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
26ff0 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 44  ite3ExprIfFalseD
27000 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  up(Parse*, Expr*
27010 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62  , int, int);.Tab
27020 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54  le *sqlite3FindT
27030 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  able(sqlite3*,co
27040 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
27050 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65   char*);.#define
27060 20 4c 4f 43 41 54 45 5f 56 49 45 57 20 20 20 20   LOCATE_VIEW    
27070 30 78 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f 43  0x01.#define LOC
27080 41 54 45 5f 4e 4f 45 52 52 20 20 20 30 78 30 32  ATE_NOERR   0x02
27090 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
270a0 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65  ocateTable(Parse
270b0 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e 73  *,u32 flags,cons
270c0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
270d0 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
270e0 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
270f0 49 74 65 6d 28 50 61 72 73 65 2a 2c 75 33 32 20  Item(Parse*,u32 
27100 66 6c 61 67 73 2c 73 74 72 75 63 74 20 53 72 63  flags,struct Src
27110 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e  List_item *);.In
27120 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  dex *sqlite3Find
27130 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63  Index(sqlite3*,c
27140 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
27150 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
27160 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
27170 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
27180 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
27190 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
271a0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
271b0 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  eIndex(sqlite3*,
271c0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
271d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
271e0 63 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e  cuum(Parse*);.in
271f0 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  t sqlite3RunVacu
27200 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74  um(char**, sqlit
27210 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  e3*);.char *sqli
27220 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e  te3NameFromToken
27230 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
27240 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
27250 78 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a  xprCompare(Expr*
27260 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
27270 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  nt sqlite3ExprLi
27280 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69  stCompare(ExprLi
27290 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
272a0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
272b0 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72  3ExprImpliesExpr
272c0 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  (Expr*, Expr*, i
272d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
272e0 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72  3ExprAnalyzeAggr
272f0 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65  egates(NameConte
27300 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
27310 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
27320 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65  lyzeAggList(Name
27330 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73  Context*,ExprLis
27340 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
27350 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73  FunctionUsesThis
27360 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69  Src(Expr*, SrcLi
27370 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69  st*);.Vdbe *sqli
27380 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65  te3GetVdbe(Parse
27390 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
273a0 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
273b0 54 45 53 54 0a 76 6f 69 64 20 73 71 6c 69 74 65  TEST.void sqlite
273c0 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76  3PrngSaveState(v
273d0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
273e0 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61  e3PrngRestoreSta
273f0 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  te(void);.#endif
27400 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
27410 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33  lbackAll(sqlite3
27420 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
27430 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
27440 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74  hema(Parse*, int
27450 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
27460 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63  odeVerifyNamedSc
27470 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e  hema(Parse*, con
27480 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76  st char *zDb);.v
27490 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
274a0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
274b0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
274c0 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e  qlite3CommitTran
274d0 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b  saction(Parse*);
274e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
274f0 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e  lbackTransaction
27500 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
27510 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28  qlite3Savepoint(
27520 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b  Parse*, int, Tok
27530 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
27540 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
27550 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f  s(sqlite3 *);.vo
27560 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d  id sqlite3LeaveM
27570 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62  utexAndCloseZomb
27580 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ie(sqlite3*);.in
27590 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
275a0 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a  onstant(Expr*);.
275b0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
275c0 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e  sConstantNotJoin
275d0 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
275e0 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
275f0 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70  ntOrFunction(Exp
27600 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  r*, u8);.int sql
27610 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43  ite3ExprIsTableC
27620 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e  onstant(Expr*,in
27630 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
27640 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f  E_ENABLE_CURSOR_
27650 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65  HINTS.int sqlite
27660 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62  3ExprContainsSub
27670 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65  query(Expr*);.#e
27680 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
27690 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78  ExprIsInteger(Ex
276a0 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
276b0 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65  sqlite3ExprCanBe
276c0 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a  Null(const Expr*
276d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
276e0 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74  prNeedsNoAffinit
276f0 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78  yChange(const Ex
27700 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20  pr*, char);.int 
27710 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63  sqlite3IsRowid(c
27720 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
27730 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
27740 65 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20  eRowDelete(.    
27750 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72  Parse*,Table*,Tr
27760 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  igger*,int,int,i
27770 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c  nt,i16,u8,u8,u8,
27780 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27790 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64  e3GenerateRowInd
277a0 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  exDelete(Parse*,
277b0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
277c0 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69  t, int*, int);.i
277d0 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  nt sqlite3Genera
277e0 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65  teIndexKey(Parse
277f0 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20  *, Index*, int, 
27800 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49  int, int, int*,I
27810 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ndex*,int);.void
27820 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50   sqlite3ResolveP
27830 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73  artIdxLabel(Pars
27840 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
27850 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e  lite3GenerateCon
27860 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61  straintChecks(Pa
27870 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a  rse*,Table*,int*
27880 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
27890 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
278a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278b0 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74         u8,u8,int
278c0 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 76 6f 69  ,int*,int*);.voi
278d0 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74  d sqlite3Complet
278e0 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65  eInsertion(Parse
278f0 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74  *,Table*,int,int
27900 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ,int,int*,int,in
27910 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  t,int);.int sqli
27920 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
27930 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54  ndices(Parse*, T
27940 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20  able*, int, u8, 
27950 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20  int, u8*, int*, 
27960 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
27970 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
27980 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  ration(Parse*, i
27990 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
279a0 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65  qlite3MultiWrite
279b0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
279c0 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50  qlite3MayAbort(P
279d0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
279e0 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69  ite3HaltConstrai
279f0 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
27a00 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20  int, char*, i8, 
27a10 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
27a20 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e  3UniqueConstrain
27a30 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49  t(Parse*, int, I
27a40 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
27a50 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61  ite3RowidConstra
27a60 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
27a70 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a   Table*);.Expr *
27a80 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73  sqlite3ExprDup(s
27a90 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
27aa0 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  t);.ExprList *sq
27ab0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70  lite3ExprListDup
27ac0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69  (sqlite3*,ExprLi
27ad0 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73  st*,int);.SrcLis
27ae0 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
27af0 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72  tDup(sqlite3*,Sr
27b00 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c  cList*,int);.IdL
27b10 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
27b20 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49  stDup(sqlite3*,I
27b30 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  dList*);.Select 
27b40 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75  *sqlite3SelectDu
27b50 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
27b60 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c  t*,int);.#if SEL
27b70 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
27b80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
27b90 65 63 74 53 65 74 4e 61 6d 65 28 53 65 6c 65 63  ectSetName(Selec
27ba0 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
27bb0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
27bc0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74  sqlite3SelectSet
27bd0 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69 66  Name(A,B).#endif
27be0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
27bf0 65 72 74 42 75 69 6c 74 69 6e 46 75 6e 63 73 28  ertBuiltinFuncs(
27c00 46 75 6e 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46  FuncDef*,int);.F
27c10 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46  uncDef *sqlite3F
27c20 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  indFunction(sqli
27c30 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
27c40 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69  ,int,u8,u8);.voi
27c50 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
27c60 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  rBuiltinFunction
27c70 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
27c80 6c 69 74 65 33 52 65 67 69 73 74 65 72 44 61 74  lite3RegisterDat
27c90 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76  eTimeFunctions(v
27ca0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
27cb0 65 33 52 65 67 69 73 74 65 72 50 65 72 43 6f 6e  e3RegisterPerCon
27cc0 6e 65 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75  nectionBuiltinFu
27cd0 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
27ce0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
27cf0 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69  fetyCheckOk(sqli
27d00 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
27d10 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69 63  e3SafetyCheckSic
27d20 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  kOrOk(sqlite3*);
27d30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61  .void sqlite3Cha
27d40 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a  ngeCookie(Parse*
27d50 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  , int);..#if !de
27d60 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
27d70 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66 69  T_VIEW) && !defi
27d80 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
27d90 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71  TRIGGER).void sq
27da0 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65  lite3Materialize
27db0 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62  View(Parse*, Tab
27dc0 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  le*, Expr*, int)
27dd0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ;.#endif..#ifnde
27de0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
27df0 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c  IGGER.  void sql
27e00 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65 72  ite3BeginTrigger
27e10 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
27e20 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49  Token*,int,int,I
27e30 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  dList*,SrcList*,
27e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27e50 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
27e60 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  *,int, int);.  v
27e70 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
27e80 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  hTrigger(Parse*,
27e90 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54   TriggerStep*, T
27ea0 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73  oken*);.  void s
27eb0 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
27ec0 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  r(Parse*, SrcLis
27ed0 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  t*, int);.  void
27ee0 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
27ef0 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54  gerPtr(Parse*, T
27f00 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67  rigger*);.  Trig
27f10 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
27f20 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65 20  gersExist(Parse 
27f30 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
27f40 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a  ExprList*, int *
27f50 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65  pMask);.  Trigge
27f60 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  r *sqlite3Trigge
27f70 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  rList(Parse *, T
27f80 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20  able *);.  void 
27f90 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
27fa0 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
27fb0 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78  igger *, int, Ex
27fc0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61  prList*, int, Ta
27fd0 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20  ble *,.         
27fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ff0 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74     int, int, int
28000 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
28010 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
28020 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54  irect(Parse *, T
28030 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20  rigger *, Table 
28040 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
28050 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
28060 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61 72  ViewTriggers(Par
28070 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
28080 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  r*, int, ExprLis
28090 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
280a0 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
280b0 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54  Step(sqlite3*, T
280c0 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20  riggerStep*);.  
280d0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
280e0 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65 63  ite3TriggerSelec
280f0 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53  tStep(sqlite3*,S
28100 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67 67  elect*);.  Trigg
28110 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
28120 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65 70  riggerInsertStep
28130 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
28140 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20  , IdList*,.     
28150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28170 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a     Select*,u8);.
28180 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
28190 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64  qlite3TriggerUpd
281a0 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ateStep(sqlite3*
281b0 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
281c0 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  *, Expr*, u8);. 
281d0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
281e0 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65  lite3TriggerDele
281f0 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  teStep(sqlite3*,
28200 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a  Token*, Expr*);.
28210 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
28220 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
28230 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  te3*, Trigger*);
28240 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
28250 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
28260 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69  igger(sqlite3*,i
28270 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
28280 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72  .  u32 sqlite3Tr
28290 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72  iggerColmask(Par
282a0 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70  se*,Trigger*,Exp
282b0 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54  rList*,int,int,T
282c0 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65  able*,int);.# de
282d0 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
282e0 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  eToplevel(p) ((p
282f0 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28  )->pToplevel ? (
28300 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20  p)->pToplevel : 
28310 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (p)).# define sq
28320 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
28330 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
28340 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64  el==0).#else.# d
28350 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
28360 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44  ggersExist(B,C,D
28370 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65  ,E,F) 0.# define
28380 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
28390 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66  igger(A,B).# def
283a0 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54  ine sqlite3DropT
283b0 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23  riggerPtr(A,B).#
283c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55   define sqlite3U
283d0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
283e0 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64  igger(A,B,C).# d
283f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
28400 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c  eRowTrigger(A,B,
28410 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23  C,D,E,F,G,H,I).#
28420 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
28430 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
28440 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29  ect(A,B,C,D,E,F)
28450 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28460 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20  3TriggerList(X, 
28470 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  Y) 0.# define sq
28480 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
28490 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65  el(p) p.# define
284a0 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76   sqlite3IsToplev
284b0 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65  el(p) 1.# define
284c0 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
284d0 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45  olmask(A,B,C,D,E
284e0 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a  ,F,G) 0.#endif..
284f0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54  int sqlite3JoinT
28500 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
28510 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
28520 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
28530 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65  3CreateForeignKe
28540 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
28550 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70  st*, Token*, Exp
28560 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  rList*, int);.vo
28570 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46  id sqlite3DeferF
28580 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
28590 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  , int);.#ifndef 
285a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
285b0 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64  ORIZATION.  void
285c0 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
285d0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63  (Parse*,Expr*,Sc
285e0 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b  hema*,SrcList*);
285f0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
28600 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69  thCheck(Parse*,i
28610 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
28620 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
28630 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
28640 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
28650 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a  ntextPush(Parse*
28660 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20  , AuthContext*, 
28670 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
28680 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
28690 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43  ContextPop(AuthC
286a0 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20  ontext*);.  int 
286b0 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43  sqlite3AuthReadC
286c0 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ol(Parse*, const
286d0 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
286e0 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  har *, int);.#el
286f0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
28700 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c  te3AuthRead(a,b,
28710 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71  c,d).# define sq
28720 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61  lite3AuthCheck(a
28730 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c  ,b,c,d,e)    SQL
28740 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20  ITE_OK.# define 
28750 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
28760 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20  xtPush(a,b,c).# 
28770 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
28780 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20  thContextPop(a) 
28790 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e   ((void)(a)).#en
287a0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
287b0 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
287c0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  xpr*, Expr*, Exp
287d0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
287e0 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Detach(Parse*, 
287f0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
28800 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69  ite3FixInit(DbFi
28810 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e  xer*, Parse*, in
28820 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
28830 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69  const Token*);.i
28840 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63  nt sqlite3FixSrc
28850 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53  List(DbFixer*, S
28860 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
28870 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44  lite3FixSelect(D
28880 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a  bFixer*, Select*
28890 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
288a0 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20  xExpr(DbFixer*, 
288b0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
288c0 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44  te3FixExprList(D
288d0 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73  bFixer*, ExprLis
288e0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
288f0 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44  FixTriggerStep(D
28900 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72  bFixer*, Trigger
28910 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Step*);.int sqli
28920 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68  te3AtoF(const ch
28930 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20  ar *z, double*, 
28940 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
28950 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f  lite3GetInt32(co
28960 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a  nst char *, int*
28970 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
28980 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  oi(const char*);
28990 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31  .int sqlite3Utf1
289a0 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76  6ByteLen(const v
289b0 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  oid *pData, int 
289c0 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69  nChar);.int sqli
289d0 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63  te3Utf8CharLen(c
289e0 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61  onst char *pData
289f0 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33  , int nByte);.u3
28a00 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61  2 sqlite3Utf8Rea
28a10 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c  d(const u8**);.L
28a20 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
28a30 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74  Est(u64);.LogEst
28a40 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64   sqlite3LogEstAd
28a50 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29  d(LogEst,LogEst)
28a60 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
28a70 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
28a80 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  LE.LogEst sqlite
28a90 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c  3LogEstFromDoubl
28aa0 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69  e(double);.#endi
28ab0 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
28ac0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
28ad0 5f 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20  _SCANSTATUS) || 
28ae0 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51  \.    defined(SQ
28af0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
28b00 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c  3_OR_STAT4) || \
28b10 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c  .    defined(SQL
28b20 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49  ITE_EXPLAIN_ESTI
28b30 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20  MATED_ROWS).u64 
28b40 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
28b50 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64  nt(LogEst);.#end
28b60 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e  if../*.** Routin
28b70 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77  es to read and w
28b80 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65  rite variable-le
28b90 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20  ngth integers.  
28ba0 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a  These used to.**
28bb0 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61   be defined loca
28bc0 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20  lly, but now we 
28bd0 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72  use the varint r
28be0 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75  outines in the u
28bf0 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  til.c.** file..*
28c00 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74  /.int sqlite3Put
28c10 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20  Varint(unsigned 
28c20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20  char*, u64);.u8 
28c30 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
28c40 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
28c50 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a  char *, u64 *);.
28c60 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
28c70 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69  int32(const unsi
28c80 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32  gned char *, u32
28c90 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
28ca0 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29  VarintLen(u64 v)
28cb0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  ;../*.** The com
28cc0 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20  mon case is for 
28cd0 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61  a varint to be a
28ce0 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54   single byte.  T
28cf0 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  hey following.**
28d00 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74   macros handle t
28d10 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77  he common case w
28d20 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75  ithout a procedu
28d30 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65  re call, but the
28d40 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72  n call.** the pr
28d50 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67  ocedure for larg
28d60 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23  er varints..*/.#
28d70 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
28d80 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
28d90 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30  )((*(A)<(u8)0x80
28da0 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29  )?((B)=(u32)*(A)
28db0 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61  ),1:sqlite3GetVa
28dc0 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20  rint32((A),(u32 
28dd0 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65  *)&(B))).#define
28de0 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42   putVarint32(A,B
28df0 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33  )  \.  (u8)(((u3
28e00 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29  2)(B)<(u32)0x80)
28e10 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64  ?(*(A)=(unsigned
28e20 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20   char)(B)),1:\. 
28e30 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
28e40 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66  t((A),(B))).#def
28e50 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20  ine getVarint   
28e60 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
28e70 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  t.#define putVar
28e80 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75  int    sqlite3Pu
28e90 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20  tVarint...const 
28ea0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64  char *sqlite3Ind
28eb0 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 73 71  exAffinityStr(sq
28ec0 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b  lite3*, Index*);
28ed0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62  .void sqlite3Tab
28ee0 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a  leAffinity(Vdbe*
28ef0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
28f00 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70  char sqlite3Comp
28f10 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72  areAffinity(Expr
28f20 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66   *pExpr, char af
28f30 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  f2);.int sqlite3
28f40 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28  IndexAffinityOk(
28f50 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
28f60 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b  r idx_affinity);
28f70 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70  .char sqlite3Exp
28f80 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  rAffinity(Expr *
28f90 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69  pExpr);.int sqli
28fa0 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20  te3Atoi64(const 
28fb0 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74  char*, i64*, int
28fc0 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
28fd0 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28  e3DecOrHexToI64(
28fe0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34  const char*, i64
28ff0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29000 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c  ErrorWithMsg(sql
29010 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
29020 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f  t char*,...);.vo
29030 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  id sqlite3Error(
29040 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
29050 6f 69 64 20 73 71 6c 69 74 65 33 53 79 73 74 65  oid sqlite3Syste
29060 6d 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c  mError(sqlite3*,
29070 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
29080 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c  te3HexToBlob(sql
29090 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
290a0 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38  r *z, int n);.u8
290b0 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74   sqlite3HexToInt
290c0 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c  (int h);.int sql
290d0 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28  ite3TwoPartName(
290e0 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
290f0 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
29100 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e   **);..#if defin
29110 65 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45  ed(SQLITE_NEED_E
29120 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63  RR_NAME).const c
29130 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e  har *sqlite3ErrN
29140 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66  ame(int);.#endif
29150 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
29160 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29  lite3ErrStr(int)
29170 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61  ;.int sqlite3Rea
29180 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70  dSchema(Parse *p
29190 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  Parse);.CollSeq 
291a0 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c  *sqlite3FindColl
291b0 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20  Seq(sqlite3*,u8 
291c0 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  enc, const char*
291d0 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  ,int);.CollSeq *
291e0 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c  sqlite3LocateCol
291f0 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
29200 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a  se, const char*z
29210 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  Name);.CollSeq *
29220 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53  sqlite3ExprCollS
29230 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
29240 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  , Expr *pExpr);.
29250 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
29260 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e  rAddCollateToken
29270 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
29280 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  Expr*, const Tok
29290 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20  en*, int);.Expr 
292a0 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43  *sqlite3ExprAddC
292b0 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72  ollateString(Par
292c0 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20  se*,Expr*,const 
292d0 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  char*);.Expr *sq
292e0 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c  lite3ExprSkipCol
292f0 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74  late(Expr*);.int
29300 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c   sqlite3CheckCol
29310 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f  lSeq(Parse *, Co
29320 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71  llSeq *);.int sq
29330 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74  lite3CheckObject
29340 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f  Name(Parse *, co
29350 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69  nst char *);.voi
29360 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74  d sqlite3VdbeSet
29370 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20  Changes(sqlite3 
29380 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
29390 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36 34  ite3AddInt64(i64
293a0 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
293b0 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a  te3SubInt64(i64*
293c0 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
293d0 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c  e3MulInt64(i64*,
293e0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
293f0 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a  3AbsInt32(int);.
29400 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
29410 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76  ABLE_8_3_NAMES.v
29420 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53  oid sqlite3FileS
29430 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61  uffix3(const cha
29440 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  r*, char*);.#els
29450 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
29460 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c  e3FileSuffix3(X,
29470 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c  Y).#endif.u8 sql
29480 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63  ite3GetBoolean(c
29490 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29  onst char *z,u8)
294a0 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73  ;..const void *s
294b0 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28  qlite3ValueText(
294c0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
294d0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
294e0 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74  ValueBytes(sqlit
294f0 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a  e3_value*, u8);.
29500 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
29510 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f  eSetStr(sqlite3_
29520 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e  value*, int, con
29530 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 0a 20 20  st void *,u8,.  
29540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29550 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f        void(*)(vo
29560 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  id*));.void sqli
29570 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28  te3ValueSetNull(
29580 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b  sqlite3_value*);
29590 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
295a0 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76  ueFree(sqlite3_v
295b0 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f  alue*);.sqlite3_
295c0 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61  value *sqlite3Va
295d0 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a  lueNew(sqlite3 *
295e0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
295f0 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33  Utf16to8(sqlite3
29600 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c   *, const void*,
29610 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
29620 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45  qlite3ValueFromE
29630 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45  xpr(sqlite3 *, E
29640 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73  xpr *, u8, u8, s
29650 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
29660 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
29670 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79  lueApplyAffinity
29680 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
29690 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64  , u8, u8);.#ifnd
296a0 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
296b0 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f  MATION.extern co
296c0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
296d0 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  r sqlite3OpcodeP
296e0 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72  roperty[];.exter
296f0 6e 20 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c  n const char sql
29700 69 74 65 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b  ite3StrBINARY[];
29710 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
29720 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
29730 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
29740 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
29750 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
29760 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b  lite3CtypeMap[];
29770 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f  .extern const To
29780 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f  ken sqlite3IntTo
29790 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53  kens[];.extern S
297a0 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74  QLITE_WSD struct
297b0 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73   Sqlite3Config s
297c0 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78  qlite3Config;.ex
297d0 74 65 72 6e 20 46 75 6e 63 44 65 66 48 61 73 68  tern FuncDefHash
297e0 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46   sqlite3BuiltinF
297f0 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65  unctions;.#ifnde
29800 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
29810 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c  D.extern int sql
29820 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b  ite3PendingByte;
29830 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76  .#endif.#endif.v
29840 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50  oid sqlite3RootP
29850 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33  ageMoved(sqlite3
29860 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
29870 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
29880 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54  eindex(Parse*, T
29890 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
298a0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
298b0 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  rFunctions(void)
298c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
298d0 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50  terRenameTable(P
298e0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
298f0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
29900 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f  lite3GetToken(co
29910 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
29920 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69  r *, int *);.voi
29930 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50  d sqlite3NestedP
29940 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e  arse(Parse*, con
29950 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
29960 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69  void sqlite3Expi
29970 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
29980 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ents(sqlite3*);.
29990 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53  int sqlite3CodeS
299a0 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a  ubselect(Parse *
299b0 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69  , Expr *, int, i
299c0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
299d0 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72 73  3SelectPrep(Pars
299e0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
299f0 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64  eContext*);.void
29a00 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 72   sqlite3SelectWr
29a10 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72  ongNumTermsError
29a20 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
29a30 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20  Select *p);.int 
29a40 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e  sqlite3MatchSpan
29a50 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Name(const char*
29a60 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
29a70 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
29a80 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
29a90 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72  lite3ResolveExpr
29aa0 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
29ab0 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  t*, Expr*);.int 
29ac0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78  sqlite3ResolveEx
29ad0 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65  prListNames(Name
29ae0 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c 69  Context*, ExprLi
29af0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
29b00 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e  e3ResolveSelectN
29b10 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c  ames(Parse*, Sel
29b20 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
29b30 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
29b40 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65  3ResolveSelfRefe
29b50 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62  rence(Parse*,Tab
29b60 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78  le*,int,Expr*,Ex
29b70 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
29b80 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65  lite3ResolveOrde
29b90 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c  rGroupBy(Parse*,
29ba0 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69   Select*, ExprLi
29bb0 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
29bc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
29bd0 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62  olumnDefault(Vdb
29be0 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  e *, Table *, in
29bf0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
29c00 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68  lite3AlterFinish
29c10 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
29c20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69  *, Token *);.voi
29c30 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65  d sqlite3AlterBe
29c40 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ginAddColumn(Par
29c50 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29  se *, SrcList *)
29c60 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
29c70 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72  e3GetCollSeq(Par
29c80 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71  se*, u8, CollSeq
29c90 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29   *, const char*)
29ca0 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66  ;.char sqlite3Af
29cb0 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74  finityType(const
29cc0 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f   char*, u8*);.vo
29cd0 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
29ce0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
29cf0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
29d00 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79  qlite3InvokeBusy
29d10 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64  Handler(BusyHand
29d20 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ler*);.int sqlit
29d30 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33  e3FindDb(sqlite3
29d40 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
29d50 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d  sqlite3FindDbNam
29d60 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  e(sqlite3 *, con
29d70 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20  st char *);.int 
29d80 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c  sqlite3AnalysisL
29d90 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  oad(sqlite3*,int
29da0 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69   iDB);.void sqli
29db0 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61  te3DeleteIndexSa
29dc0 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49  mples(sqlite3*,I
29dd0 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
29de0 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73  ite3DefaultRowEs
29df0 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  t(Index*);.void 
29e00 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c  sqlite3RegisterL
29e10 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c  ikeFunctions(sql
29e20 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  ite3*, int);.int
29e30 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75   sqlite3IsLikeFu
29e40 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
29e50 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a  Expr*,int*,char*
29e60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
29e70 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20  chemaClear(void 
29e80 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69  *);.Schema *sqli
29e90 74 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c  te3SchemaGet(sql
29ea0 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29  ite3 *, Btree *)
29eb0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68  ;.int sqlite3Sch
29ec0 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74  emaToIndex(sqlit
29ed0 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a  e3 *db, Schema *
29ee0 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
29ef0 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28  te3KeyInfoAlloc(
29f00 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74  sqlite3*,int,int
29f10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b  );.void sqlite3K
29f20 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49  eyInfoUnref(KeyI
29f30 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  nfo*);.KeyInfo *
29f40 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65  sqlite3KeyInfoRe
29f50 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79  f(KeyInfo*);.Key
29f60 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
29f70 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73  InfoOfIndex(Pars
29f80 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66  e*, Index*);.#if
29f90 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
29fa0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49  .int sqlite3KeyI
29fb0 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b  nfoIsWriteable(K
29fc0 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66  eyInfo*);.#endif
29fd0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61  .int sqlite3Crea
29fe0 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a  teFunc(sqlite3 *
29ff0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
2a000 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a  int, int, void *
2a010 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  ,.  void (*)(sql
2a020 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
2a030 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
2a040 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28  **),.  void (*)(
2a050 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
2a060 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
2a070 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29  ue **), void (*)
2a080 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2a090 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75  *),.  FuncDestru
2a0a0 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f  ctor *pDestructo
2a0b0 72 0a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r.);.void sqlite
2a0c0 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c 69 74 65  3OomFault(sqlite
2a0d0 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
2a0e0 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c 69 74 65  3OomClear(sqlite
2a0f0 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
2a100 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20  ApiExit(sqlite3 
2a110 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  *db, int);.int s
2a120 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61  qlite3OpenTempDa
2a130 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b  tabase(Parse *);
2a140 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ..void sqlite3St
2a150 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63  rAccumInit(StrAc
2a160 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20  cum*, sqlite3*, 
2a170 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  char*, int, int)
2a180 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
2a190 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72  rAccumAppend(Str
2a1a0 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61  Accum*,const cha
2a1b0 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  r*,int);.void sq
2a1c0 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70  lite3StrAccumApp
2a1d0 65 6e 64 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a  endAll(StrAccum*
2a1e0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
2a1f0 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e  oid sqlite3Appen
2a200 64 43 68 61 72 28 53 74 72 41 63 63 75 6d 2a 2c  dChar(StrAccum*,
2a210 69 6e 74 2c 63 68 61 72 29 3b 0a 63 68 61 72 20  int,char);.char 
2a220 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d  *sqlite3StrAccum
2a230 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a  Finish(StrAccum*
2a240 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2a250 74 72 41 63 63 75 6d 52 65 73 65 74 28 53 74 72  trAccumReset(Str
2a260 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71  Accum*);.void sq
2a270 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73 74 49  lite3SelectDestI
2a280 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c  nit(SelectDest*,
2a290 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  int,int);.Expr *
2a2a0 73 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c  sqlite3CreateCol
2a2b0 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20  umnExpr(sqlite3 
2a2c0 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e  *, SrcList *, in
2a2d0 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73  t, int);..void s
2a2e0 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73 74  qlite3BackupRest
2a2f0 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  art(sqlite3_back
2a300 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  up *);.void sqli
2a310 74 65 33 42 61 63 6b 75 70 55 70 64 61 74 65 28  te3BackupUpdate(
2a320 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a  sqlite3_backup *
2a330 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38  , Pgno, const u8
2a340 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c   *);..#ifdef SQL
2a350 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
2a360 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73  _OR_STAT4.void s
2a370 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e  qlite3AnalyzeFun
2a380 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e  ctions(void);.in
2a390 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  t sqlite3Stat4Pr
2a3a0 6f 62 65 53 65 74 56 61 6c 75 65 28 50 61 72 73  obeSetValue(Pars
2a3b0 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b  e*,Index*,Unpack
2a3c0 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a  edRecord**,Expr*
2a3d0 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69  ,u8,int,int*);.i
2a3e0 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 56  nt sqlite3Stat4V
2a3f0 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72  alueFromExpr(Par
2a400 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20  se*, Expr*, u8, 
2a410 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
2a420 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
2a430 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70  at4ProbeFree(Unp
2a440 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69  ackedRecord*);.i
2a450 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 43  nt sqlite3Stat4C
2a460 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20  olumn(sqlite3*, 
2a470 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
2a480 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76  , int, sqlite3_v
2a490 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a  alue**);.#endif.
2a4a0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
2a4b0 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f  face to the LEMO
2a4c0 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73  N-generated pars
2a4d0 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  er.*/.void *sqli
2a4e0 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76  te3ParserAlloc(v
2a4f0 6f 69 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a 76  oid*(*)(u64));.v
2a500 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
2a510 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69  rFree(void*, voi
2a520 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f  d(*)(void*));.vo
2a530 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
2a540 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b  (void*, int, Tok
2a550 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66  en, Parse*);.#if
2a560 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54  def YYTRACKMAXST
2a570 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73  ACKDEPTH.  int s
2a580 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63  qlite3ParserStac
2a590 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65  kPeak(void*);.#e
2a5a0 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74  ndif..void sqlit
2a5b0 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73  e3AutoLoadExtens
2a5c0 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
2a5d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2a5e0 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49  MIT_LOAD_EXTENSI
2a5f0 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
2a600 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
2a610 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73  (sqlite3*);.#els
2a620 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2a630 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
2a640 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  s(X).#endif..#if
2a650 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2a660 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
2a670 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
2a680 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69  eLock(Parse *, i
2a690 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e  nt, int, u8, con
2a6a0 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73  st char *);.#els
2a6b0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
2a6c0 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77  te3TableLock(v,w
2a6d0 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a  ,x,y,z).#endif..
2a6e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
2a6f0 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ST.  int sqlite3
2a700 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64  Utf8To8(unsigned
2a710 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
2a720 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
2a730 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2a740 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2a750 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23  e3VtabClear(Y).#
2a760 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2a770 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51  VtabSync(X,Y) SQ
2a780 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
2a790 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  e sqlite3VtabRol
2a7a0 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69  lback(X).#  defi
2a7b0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  ne sqlite3VtabCo
2a7c0 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e  mmit(X).#  defin
2a7d0 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
2a7e0 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66  ync(db) 0.#  def
2a7f0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c  ine sqlite3VtabL
2a800 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ock(X).#  define
2a810 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2a820 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
2a830 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2a840 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69  kList(X).#  defi
2a850 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  ne sqlite3VtabSa
2a860 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29  vepoint(X, Y, Z)
2a870 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
2a880 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56  fine sqlite3GetV
2a890 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54  Table(X,Y)  ((VT
2a8a0 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20  able*)0).#else. 
2a8b0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2a8c0 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20  abClear(sqlite3 
2a8d0 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  *db, Table*);.  
2a8e0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2a8f0 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69  bDisconnect(sqli
2a900 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a  te3 *db, Table *
2a910 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  p);.   int sqlit
2a920 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74  e3VtabSync(sqlit
2a930 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a  e3 *db, Vdbe*);.
2a940 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2a950 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74  abRollback(sqlit
2a960 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20  e3 *db);.   int 
2a970 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
2a980 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  t(sqlite3 *db);.
2a990 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2a9a0 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  tabLock(VTable *
2a9b0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2a9c0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61  e3VtabUnlock(VTa
2a9d0 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
2a9e0 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2a9f0 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b  kList(sqlite3*);
2aa00 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
2aa10 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c  tabSavepoint(sql
2aa20 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  ite3 *, int, int
2aa30 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2aa40 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
2aa50 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65  sg(Vdbe*, sqlite
2aa60 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61  3_vtab*);.   VTa
2aa70 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  ble *sqlite3GetV
2aa80 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
2aa90 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69  Table*);.#  defi
2aaa0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e  ne sqlite3VtabIn
2aab0 53 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e  Sync(db) ((db)->
2aac0 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62  nVTrans>0 && (db
2aad0 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23  )->aVTrans==0).#
2aae0 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2aaf0 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61  3VtabEponymousTa
2ab00 62 6c 65 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d  bleInit(Parse*,M
2ab10 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  odule*);.void sq
2ab20 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f  lite3VtabEponymo
2ab30 75 73 54 61 62 6c 65 43 6c 65 61 72 28 73 71 6c  usTableClear(sql
2ab40 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a  ite3*,Module*);.
2ab50 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2ab60 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72  MakeWritable(Par
2ab70 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69  se*,Table*);.voi
2ab80 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  d sqlite3VtabBeg
2ab90 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  inParse(Parse*, 
2aba0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
2abb0 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Token*, int);.vo
2abc0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69  id sqlite3VtabFi
2abd0 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a  nishParse(Parse*
2abe0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
2abf0 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e  sqlite3VtabArgIn
2ac00 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  it(Parse*);.void
2ac10 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45   sqlite3VtabArgE
2ac20 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f  xtend(Parse*, To
2ac30 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2ac40 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
2ac50 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
2ac60 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68  const char *, ch
2ac70 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ar **);.int sqli
2ac80 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65  te3VtabCallConne
2ac90 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ct(Parse*, Table
2aca0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2acb0 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73  tabCallDestroy(s
2acc0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
2acd0 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
2ace0 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
2acf0 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61  n(sqlite3 *, VTa
2ad00 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20  ble *);.FuncDef 
2ad10 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72  *sqlite3VtabOver
2ad20 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  loadFunction(sql
2ad30 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c  ite3 *,FuncDef*,
2ad40 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a   int nArg, Expr*
2ad50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
2ad60 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73  nvalidFunction(s
2ad70 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
2ad80 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
2ad90 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e  e**);.sqlite3_in
2ada0 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43  t64 sqlite3StmtC
2adb0 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74  urrentTime(sqlit
2adc0 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  e3_context*);.in
2add0 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72  t sqlite3VdbePar
2ade0 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65  ameterIndex(Vdbe
2adf0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2ae00 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2ae10 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67  3TransferBinding
2ae20 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  s(sqlite3_stmt *
2ae30 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  , sqlite3_stmt *
2ae40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
2ae50 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65  arserReset(Parse
2ae60 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2ae70 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b  eprepare(Vdbe*);
2ae80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2ae90 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68  rListCheckLength
2aea0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
2aeb0 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
2aec0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2aed0 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43  e3BinaryCompareC
2aee0 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
2aef0 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b  Expr *, Expr *);
2af00 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70  .int sqlite3Temp
2af10 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73  InMemory(const s
2af20 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20  qlite3*);.const 
2af30 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
2af40 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
2af50 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2af60 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
2af70 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
2af80 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  nt(sqlite3*, int
2af90 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
2afa0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
2afb0 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28  3WalDefaultHook(
2afc0 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
2afd0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
2afe0 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
2aff0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a  SQLITE_OMIT_CTE.
2b000 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57    With *sqlite3W
2b010 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69  ithAdd(Parse*,Wi
2b020 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  th*,Token*,ExprL
2b030 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  ist*,Select*);. 
2b040 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
2b050 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  hDelete(sqlite3*
2b060 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20  ,With*);.  void 
2b070 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28  sqlite3WithPush(
2b080 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75  Parse*, With*, u
2b090 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  8);.#else.#defin
2b0a0 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  e sqlite3WithPus
2b0b0 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65  h(x,y,z).#define
2b0c0 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
2b0d0 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a  te(x,y).#endif..
2b0e0 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20  /* Declarations 
2b0f0 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e  for functions in
2b100 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20   fkey.c. All of 
2b110 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63  these are replac
2b120 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d  ed by.** no-op m
2b130 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f  acros if OMIT_FO
2b140 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66  REIGN_KEY is def
2b150 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ined. In this ca
2b160 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a  se no foreign.**
2b170 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69   key functionali
2b180 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  ty is available.
2b190 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52   If OMIT_TRIGGER
2b1a0 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a   is defined but.
2b1b0 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  ** OMIT_FOREIGN_
2b1c0 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79  KEY is not, only
2b1d0 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   some of the fun
2b1e0 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70  ctions are no-op
2b1f0 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63  ed. In.** this c
2b200 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ase foreign keys
2b210 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74   are parsed, but
2b220 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69   no other functi
2b230 6f 6e 61 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72  onality is.** pr
2b240 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d  ovided (enforcem
2b250 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72  ent of FK constr
2b260 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20 74  aints requires t
2b270 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62 2d  he triggers sub-
2b280 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20  system)..*/.#if 
2b290 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2b2a0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2b2b0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
2b2c0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
2b2d0 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  R).  void sqlite
2b2e0 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  3FkCheck(Parse*,
2b2f0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
2b300 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  t, int*, int);. 
2b310 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
2b320 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
2b330 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c   SrcList *, Tabl
2b340 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
2b350 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72  te3FkActions(Par
2b360 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
2b370 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
2b380 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  *, int);.  int s
2b390 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
2b3a0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2b3b0 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75   int*, int);.  u
2b3c0 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  32 sqlite3FkOldm
2b3d0 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ask(Parse*, Tabl
2b3e0 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c  e*);.  FKey *sql
2b3f0 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
2b400 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65  (Table *);.#else
2b410 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2b420 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c  e3FkActions(a,b,
2b430 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69  c,d,e,f).  #defi
2b440 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63  ne sqlite3FkChec
2b450 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20  k(a,b,c,d,e,f). 
2b460 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2b470 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c  FkDropTable(a,b,
2b480 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  c).  #define sql
2b490 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c  ite3FkOldmask(a,
2b4a0 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20 23  b)         0.  #
2b4b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2b4c0 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64  Required(a,b,c,d
2b4d0 29 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69  )    0.#endif.#i
2b4e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2b4f0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20  T_FOREIGN_KEY.  
2b500 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65  void sqlite3FkDe
2b510 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  lete(sqlite3 *, 
2b520 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73  Table*);.  int s
2b530 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
2b540 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  dex(Parse*,Table
2b550 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c  *,FKey*,Index**,
2b560 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  int**);.#else.  
2b570 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2b580 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23  kDelete(a,b).  #
2b590 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2b5a0 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c  LocateIndex(a,b,
2b5b0 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a  c,d,e).#endif...
2b5c0 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20  /*.** Available 
2b5d0 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e  fault injectors.
2b5e0 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62    Should be numb
2b5f0 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77  ered beginning w
2b600 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ith 0..*/.#defin
2b610 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
2b620 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20  JECTOR_MALLOC   
2b630 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49    0.#define SQLI
2b640 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52  TE_FAULTINJECTOR
2b650 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f  _COUNT      1../
2b660 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
2b670 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69  ce to the code i
2b680 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66  n fault.c used f
2b690 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22  or identifying "
2b6a0 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f  benign".** mallo
2b6b0 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73  c failures. This
2b6c0 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74   is only present
2b6d0 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   if SQLITE_OMIT_
2b6e0 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20  BUILTIN_TEST.** 
2b6f0 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a  is not defined..
2b700 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2b710 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
2b720 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
2b730 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
2b740 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69  loc(void);.  voi
2b750 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  d sqlite3EndBeni
2b760 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
2b770 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2b780 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
2b790 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65  gnMalloc().  #de
2b7a0 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42  fine sqlite3EndB
2b7b0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65  enignMalloc().#e
2b7c0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
2b7d0 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
2b7e0 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69  s from sqlite3Fi
2b7f0 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23  ndInIndex().*/.#
2b800 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2b810 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20  ROWID        1  
2b820 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72   /* Search the r
2b830 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
2b840 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  e */.#define IN_
2b850 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20  INDEX_EPH       
2b860 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68     2   /* Search
2b870 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d   an ephemeral b-
2b880 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tree */.#define 
2b890 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41  IN_INDEX_INDEX_A
2b8a0 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69  SC    3   /* Exi
2b8b0 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45  sting index ASCE
2b8c0 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
2b8d0 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
2b8e0 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78  DESC   4   /* Ex
2b8f0 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53  isting index DES
2b900 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
2b910 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
2b920 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20           5   /* 
2b930 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62  No table availab
2b940 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73  le. Use comparis
2b950 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ons */./*.** All
2b960 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74  owed flags for t
2b970 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72  he 3rd parameter
2b980 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49   to sqlite3FindI
2b990 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65  nIndex()..*/.#de
2b9a0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
2b9b0 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31  OP_OK     0x0001
2b9c0 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72    /* OK to retur
2b9d0 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  n IN_INDEX_NOOP 
2b9e0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2b9f0 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20  DEX_MEMBERSHIP  
2ba00 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70  0x0002  /* IN op
2ba10 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20  erator used for 
2ba20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20  membership test 
2ba30 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2ba40 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20  DEX_LOOP        
2ba50 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70  0x0004  /* IN op
2ba60 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61  erator used as a
2ba70 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c   loop */.int sql
2ba80 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
2ba90 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
2baa0 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   u32, int*, int*
2bab0 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  );..int sqlite3J
2bac0 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
2bad0 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20  e3_vfs *, const 
2bae0 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f  char *, sqlite3_
2baf0 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  file *, int, int
2bb00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  );.int sqlite3Jo
2bb10 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65  urnalSize(sqlite
2bb20 33 5f 76 66 73 20 2a 29 3b 0a 23 69 66 64 65 66  3_vfs *);.#ifdef
2bb30 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41   SQLITE_ENABLE_A
2bb40 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e  TOMIC_WRITE.  in
2bb50 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
2bb60 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66  Create(sqlite3_f
2bb70 69 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  ile *);.#endif..
2bb80 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
2bb90 61 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c  alIsInMemory(sql
2bba0 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76  ite3_file *p);.v
2bbb0 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f  oid sqlite3MemJo
2bbc0 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
2bbd0 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64  3_file *);..void
2bbe0 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48   sqlite3ExprSetH
2bbf0 65 69 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61  eightAndFlags(Pa
2bc00 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
2bc10 72 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54  r *p);.#if SQLIT
2bc20 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
2bc30 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  >0.  int sqlite3
2bc40 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
2bc50 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e  (Select *);.  in
2bc60 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  t sqlite3ExprChe
2bc70 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c  ckHeight(Parse*,
2bc80 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23   int);.#else.  #
2bc90 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
2bca0 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78  lectExprHeight(x
2bcb0 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ) 0.  #define sq
2bcc0 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
2bcd0 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66  ight(x,y).#endif
2bce0 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74  ..u32 sqlite3Get
2bcf0 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29  4byte(const u8*)
2bd00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75  ;.void sqlite3Pu
2bd10 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29  t4byte(u8*, u32)
2bd20 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
2bd30 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e  _ENABLE_UNLOCK_N
2bd40 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c  OTIFY.  void sql
2bd50 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
2bd60 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c  ocked(sqlite3 *,
2bd70 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76   sqlite3 *);.  v
2bd80 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
2bd90 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71  ctionUnlocked(sq
2bda0 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f  lite3 *db);.  vo
2bdb0 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
2bdc0 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74  tionClosed(sqlit
2bdd0 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20  e3 *db);.#else. 
2bde0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2bdf0 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65  ConnectionBlocke
2be00 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65  d(x,y).  #define
2be10 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
2be20 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20  onUnlocked(x).  
2be30 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
2be40 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28  onnectionClosed(
2be50 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  x).#endif..#ifde
2be60 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
2be70 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72   void sqlite3Par
2be80 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20  serTrace(FILE*, 
2be90 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a  char *);.#endif.
2bea0 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  ./*.** If the SQ
2beb0 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52  LITE_ENABLE IOTR
2bec0 41 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20  ACE exists then 
2bed0 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
2bee0 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f  ble.** sqlite3Io
2bef0 54 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74  Trace is a point
2bf00 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c  er to a printf-l
2bf10 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64  ike routine used
2bf20 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f   to.** print I/O
2bf30 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65   tracing message
2bf40 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  s..*/.#ifdef SQL
2bf50 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41  ITE_ENABLE_IOTRA
2bf60 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  CE.# define IOTR
2bf70 41 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69  ACE(A)  if( sqli
2bf80 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71  te3IoTrace ){ sq
2bf90 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20  lite3IoTrace A; 
2bfa0 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  }.  void sqlite3
2bfb0 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56  VdbeIOTraceSql(V
2bfc0 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50  dbe*);.SQLITE_AP
2bfd0 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20  I SQLITE_EXTERN 
2bfe0 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45  void (SQLITE_CDE
2bff0 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61  CL *sqlite3IoTra
2c000 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ce)(const char*,
2c010 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ...);.#else.# de
2c020 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a  fine IOTRACE(A).
2c030 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2c040 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58  VdbeIOTraceSql(X
2c050 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
2c060 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61  These routines a
2c070 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  re available for
2c080 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75   the mem2.c debu
2c090 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c  gging memory all
2c0a0 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20  ocator.** only. 
2c0b0 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74   They are used t
2c0c0 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69  o verify that di
2c0d0 66 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20  fferent "types" 
2c0e0 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c  of memory.** all
2c0f0 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f  ocations are pro
2c100 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79  perly tracked by
2c110 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a   the system..**.
2c120 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
2c130 75 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73  ugSetType() sets
2c140 20 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61   the "type" of a
2c150 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20  n allocation to 
2c160 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45  one of.** the ME
2c170 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64  MTYPE_* macros d
2c180 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54  efined below.  T
2c190 68 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20  he type must be 
2c1a0 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a  a bitmask with.*
2c1b0 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73  * a single bit s
2c1c0 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  et..**.** sqlite
2c1d0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
2c1e0 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
2c1f0 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69  if any of the bi
2c200 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
2c210 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
2c220 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
2c230 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
2c240 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2c250 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c  etType()..** sql
2c260 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
2c270 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65  ype() is intende
2c280 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65  d for use inside
2c290 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
2c2a0 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  ents..**.** sqli
2c2b0 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
2c2c0 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65  e() returns true
2c2d0 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20   if none of the 
2c2e0 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
2c2f0 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
2c300 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
2c310 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
2c320 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
2c330 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a  gSetType()..**.*
2c340 2a 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f  * Perhaps the mo
2c350 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69  st important poi
2c360 6e 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72  nt is the differ
2c370 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d  ence between MEM
2c380 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64  TYPE_HEAP.** and
2c390 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
2c3a0 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63  DE.  If an alloc
2c3b0 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45  ation is MEMTYPE
2c3c0 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74  _LOOKASIDE, that
2c3d0 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67   means.** it mig
2c3e0 68 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c  ht have been all
2c3f0 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73  ocated by lookas
2c400 69 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20  ide, except the 
2c410 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a  allocation was.*
2c420 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c  * too large or l
2c430 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72  ookaside was alr
2c440 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69  eady full.  It i
2c450 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76  s important to v
2c460 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c  erify.** that al
2c470 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d  locations that m
2c480 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73  ight have been s
2c490 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b  atisfied by look
2c4a0 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a  aside are not.**
2c4b0 20 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20   passed back to 
2c4c0 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
2c4d0 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20  ee() routines.  
2c4e0 41 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20  Asserts such as 
2c4f0 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61  the.** example a
2c500 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20  bove are placed 
2c510 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61  on the non-looka
2c520 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
2c530 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a  ines to verify.*
2c540 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e  * this constrain
2c550 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  t..**.** All of 
2c560 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f  this is no-op fo
2c570 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62  r a production b
2c580 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63  uild.  It only c
2c590 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61  omes into.** pla
2c5a0 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54  y when the SQLIT
2c5b0 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69  E_MEMDEBUG compi
2c5c0 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
2c5d0 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  s used..*/.#ifde
2c5e0 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
2c5f0 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  G.  void sqlite3
2c600 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
2c610 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74  void*,u8);.  int
2c620 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2c630 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  HasType(void*,u8
2c640 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2c650 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76  MemdebugNoType(v
2c660 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a  oid*,u8);.#else.
2c670 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2c680 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
2c690 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  X,Y)  /* no-op *
2c6a0 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  /.# define sqlit
2c6b0 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
2c6c0 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69  e(X,Y)  1.# defi
2c6d0 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
2c6e0 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20  ugNoType(X,Y)   
2c6f0 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65  1.#endif.#define
2c700 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20   MEMTYPE_HEAP   
2c710 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e      0x01  /* Gen
2c720 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61  eral heap alloca
2c730 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
2c740 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
2c750 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61  DE  0x02  /* Hea
2c760 70 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  p that might hav
2c770 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65  e been lookaside
2c780 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
2c790 59 50 45 5f 53 43 52 41 54 43 48 20 20 20 20 30  YPE_SCRATCH    0
2c7a0 78 30 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20  x04  /* Scratch 
2c7b0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23  allocations */.#
2c7c0 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50  define MEMTYPE_P
2c7d0 43 41 43 48 45 20 20 20 20 20 30 78 30 38 20 20  CACHE     0x08  
2c7e0 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 61 6c  /* Page cache al
2c7f0 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a  locations */../*
2c800 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e  .** Threading in
2c810 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53  terface.*/.#if S
2c820 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
2c830 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73  _THREADS>0.int s
2c840 71 6c 69 74 65 33 54 68 72 65 61 64 43 72 65 61  qlite3ThreadCrea
2c850 74 65 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a  te(SQLiteThread*
2c860 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a  *,void*(*)(void*
2c870 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  ),void*);.int sq
2c880 6c 69 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28  lite3ThreadJoin(
2c890 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76  SQLiteThread*, v
2c8a0 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  oid**);.#endif..
2c8b0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2c8c0 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54  TE_ENABLE_DBSTAT
2c8d0 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65  _VTAB) || define
2c8e0 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69  d(SQLITE_TEST).i
2c8f0 6e 74 20 73 71 6c 69 74 65 33 44 62 73 74 61 74  nt sqlite3Dbstat
2c900 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33  Register(sqlite3
2c910 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  *);.#endif..int 
2c920 73 71 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f  sqlite3ExprVecto
2c930 72 53 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70  rSize(Expr *pExp
2c940 72 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  r);..#endif /* S
2c950 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a        QLITEINT_H */.