/ Hex Artifact Content
Login

Artifact c4877fb0519c13558d18d08775bc8e79476cb56c:


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 0a 2f 2a 0a 2a 2a 20  .#endif.../*.** 
a940: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  Each database co
a950: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69  nnection is an i
a960: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
a970: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
a980: 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71  re..*/.struct sq
a990: 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65  lite3 {.  sqlite
a9a0: 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20  3_vfs *pVfs;    
a9b0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e          /* OS In
a9c0: 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72  terface */.  str
a9d0: 75 63 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b  uct Vdbe *pVdbe;
a9e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69             /* Li
a9f0: 73 74 20 6f 66 20 61 63 74 69 76 65 20 76 69 72  st of active vir
aa00: 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f  tual machines */
aa10: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c  .  CollSeq *pDfl
aa20: 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  tColl;          
aa30: 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20   /* The default 
aa40: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
aa50: 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20  ce (BINARY) */. 
aa60: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
aa70: 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f  mutex;         /
aa80: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74  * Connection mut
aa90: 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b  ex */.  Db *aDb;
aaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aab0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63        /* All bac
aac0: 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  kends */.  int n
aad0: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
aae0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
aaf0: 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63  er of backends c
ab00: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20  urrently in use 
ab10: 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 20  */.  int flags; 
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab30: 20 20 20 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e 65     /* Miscellane
ab40: 6f 75 73 20 66 6c 61 67 73 2e 20 53 65 65 20 62  ous flags. See b
ab50: 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c 61  elow */.  i64 la
ab60: 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20  stRowid;        
ab70: 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49 44          /* ROWID
ab80: 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74 20   of most recent 
ab90: 69 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f 76  insert (see abov
aba0: 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d 6d  e) */.  i64 szMm
abb0: 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
abc0: 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
abd0: 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74 74 69   mmap_size setti
abe0: 6e 67 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ng */.  unsigned
abf0: 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20   int openFlags; 
ac00: 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70        /* Flags p
ac10: 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33  assed to sqlite3
ac20: 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a  _vfs.xOpen() */.
ac30: 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20    int errCode;  
ac40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac50: 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65  /* Most recent e
ac60: 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54  rror code (SQLIT
ac70: 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72  E_*) */.  int er
ac80: 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20  rMask;          
ac90: 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73          /* & res
aca0: 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20 74  ult codes with t
acb0: 68 69 73 20 62 65 66 6f 72 65 20 72 65 74 75 72  his before retur
acc0: 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53  ning */.  int iS
acd0: 79 73 45 72 72 6e 6f 3b 20 20 20 20 20 20 20 20  ysErrno;        
ace0: 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f          /* Errno
acf0: 20 76 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74   value from last
ad00: 20 73 79 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f   system error */
ad10: 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67  .  u16 dbOptFlag
ad20: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
ad30: 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61   /* Flags to ena
ad40: 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69  ble/disable opti
ad50: 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75  mizations */.  u
ad60: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
ad70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ad80: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f  Text encoding */
ad90: 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74  .  u8 autoCommit
ada0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
adb0: 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d   /* The auto-com
adc0: 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75  mit flag. */.  u
add0: 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20  8 temp_store;   
ade0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
adf0: 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72  1: file 2: memor
ae00: 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a  y 0: default */.
ae10: 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65    u8 mallocFaile
ae20: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
ae30: 2f 2a 20 54 72 75 65 20 69 66 20 77 65 20 68 61  /* True if we ha
ae40: 76 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63  ve seen a malloc
ae50: 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38   failure */.  u8
ae60: 20 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20   bBenignMalloc; 
ae70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
ae80: 6f 20 6e 6f 74 20 72 65 71 75 69 72 65 20 4f 4f  o not require OO
ae90: 4d 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20  Ms if true */.  
aea0: 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b  u8 dfltLockMode;
aeb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
aec0: 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67   Default locking
aed0: 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68  -mode for attach
aee0: 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e  ed dbs */.  sign
aef0: 65 64 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f  ed char nextAuto
af00: 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74  vac;      /* Aut
af10: 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61 66 74  ovac setting aft
af20: 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30  er VACUUM if >=0
af30: 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73   */.  u8 suppres
af40: 73 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  sErr;           
af50: 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73      /* Do not is
af60: 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  sue error messag
af70: 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20  es if true */.  
af80: 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  u8 vtabOnConflic
af90: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
afa0: 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
afb0: 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f   for s3_vtab_on_
afc0: 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20  conflict() */.  
afd0: 75 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  u8 isTransaction
afe0: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a  Savepoint;    /*
aff0: 20 54 72 75 65 20 69 66 20 74 68 65 20 6f 75 74   True if the out
b000: 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74  ermost savepoint
b010: 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 69 6e   is a TS */.  in
b020: 74 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20  t nextPagesize; 
b030: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
b040: 61 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41  agesize after VA
b050: 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20  CUUM if >0 */.  
b060: 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20  u32 magic;      
b070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b080: 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f   Magic number fo
b090: 72 20 64 65 74 65 63 74 20 6c 69 62 72 61 72 79  r detect library
b0a0: 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74   misuse */.  int
b0b0: 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20   nChange;       
b0c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
b0d0: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
b0e0: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
b0f0: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61  ) */.  int nTota
b100: 6c 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  lChange;        
b110: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
b120: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
b130: 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  3_total_changes(
b140: 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69  ) */.  int aLimi
b150: 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54  t[SQLITE_N_LIMIT
b160: 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a  ];   /* Limits *
b170: 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74  /.  int nMaxSort
b180: 65 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  erMmap;         
b190: 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a    /* Maximum siz
b1a0: 65 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70  e of regions map
b1b0: 70 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f  ped by sorter */
b1c0: 0a 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  .  struct sqlite
b1d0: 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20  3InitInfo {     
b1e0: 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
b1f0: 75 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74  used during init
b200: 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20  ialization */.  
b210: 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20    int newTnum;  
b220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b230: 20 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62   Rootpage of tab
b240: 6c 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  le being initial
b250: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69  ized */.    u8 i
b260: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
b270: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
b280: 20 64 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e   db file is bein
b290: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
b2a0: 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20  .    u8 busy;   
b2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2c0: 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72 72   /* TRUE if curr
b2d0: 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69  ently initializi
b2e0: 6e 67 20 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70  ng */.    u8 orp
b2f0: 68 61 6e 54 72 69 67 67 65 72 3b 20 20 20 20 20  hanTrigger;     
b300: 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 73 74        /* Last st
b310: 61 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61  atement is orpha
b320: 6e 65 64 20 54 45 4d 50 20 74 72 69 67 67 65 72  ned TEMP trigger
b330: 20 2a 2f 0a 20 20 20 20 75 38 20 69 6d 70 6f 73   */.    u8 impos
b340: 74 65 72 54 61 62 6c 65 3b 20 20 20 20 20 20 20  terTable;       
b350: 20 20 20 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20      /* Building 
b360: 61 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c  an imposter tabl
b370: 65 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20  e */.  } init;. 
b380: 20 69 6e 74 20 6e 56 64 62 65 41 63 74 69 76 65   int nVdbeActive
b390: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
b3a0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56 44 42 45  * Number of VDBE
b3b0: 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e  s currently runn
b3c0: 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64  ing */.  int nVd
b3d0: 62 65 52 65 61 64 3b 20 20 20 20 20 20 20 20 20  beRead;         
b3e0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
b3f0: 20 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73   of active VDBEs
b400: 20 74 68 61 74 20 72 65 61 64 20 6f 72 20 77 72   that read or wr
b410: 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64  ite */.  int nVd
b420: 62 65 57 72 69 74 65 3b 20 20 20 20 20 20 20 20  beWrite;        
b430: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
b440: 20 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73   of active VDBEs
b450: 20 74 68 61 74 20 72 65 61 64 20 61 6e 64 20 77   that read and w
b460: 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  rite */.  int nV
b470: 64 62 65 45 78 65 63 3b 20 20 20 20 20 20 20 20  dbeExec;        
b480: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
b490: 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c  r of nested call
b4a0: 73 20 74 6f 20 56 64 62 65 45 78 65 63 28 29 20  s to VdbeExec() 
b4b0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73 74 72  */.  int nVDestr
b4c0: 6f 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  oy;             
b4d0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
b4e0: 61 63 74 69 76 65 20 4f 50 5f 56 44 65 73 74 72  active OP_VDestr
b4f0: 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 2a 2f  oy operations */
b500: 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f  .  int nExtensio
b510: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
b520: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f   /* Number of lo
b530: 61 64 65 64 20 65 78 74 65 6e 73 69 6f 6e 73 20  aded extensions 
b540: 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78 74  */.  void **aExt
b550: 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ension;         
b560: 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73     /* Array of s
b570: 68 61 72 65 64 20 6c 69 62 72 61 72 79 20 68 61  hared library ha
b580: 6e 64 6c 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20  ndles */.  void 
b590: 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64 2a 2c  (*xTrace)(void*,
b5a0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 20 20  const char*);   
b5b0: 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20 66 75       /* Trace fu
b5c0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
b5d0: 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20 20 20   *pTraceArg;    
b5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5f0: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
b600: 74 20 74 6f 20 74 68 65 20 74 72 61 63 65 20 66  t to the trace f
b610: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
b620: 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f  d (*xProfile)(vo
b630: 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  id*,const char*,
b640: 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c  u64);  /* Profil
b650: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ing function */.
b660: 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65    void *pProfile
b670: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
b680: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
b690: 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69  rgument to profi
b6a0: 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  le function */. 
b6b0: 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72   void *pCommitAr
b6c0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
b6d0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
b6e0: 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63  o xCommitCallbac
b6f0: 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  k() */.  int (*x
b700: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28  CommitCallback)(
b710: 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e  void*);    /* In
b720: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
b730: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
b740: 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20   *pRollbackArg; 
b750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b760: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f   Argument to xRo
b770: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29  llbackCallback()
b780: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f   */.  void (*xRo
b790: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28  llbackCallback)(
b7a0: 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b  void*); /* Invok
b7b0: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
b7c0: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
b7d0: 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69  UpdateArg;.  voi
b7e0: 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62  d (*xUpdateCallb
b7f0: 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  ack)(void*,int, 
b800: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
b810: 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69  t char*,sqlite_i
b820: 6e 74 36 34 29 3b 0a 23 69 66 64 65 66 20 53 51  nt64);.#ifdef SQ
b830: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
b840: 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69  PDATE_HOOK.  voi
b850: 64 20 2a 70 50 72 65 55 70 64 61 74 65 41 72 67  d *pPreUpdateArg
b860: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69  ;          /* Fi
b870: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
b880: 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
b890: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  ck */.  void (*x
b8a0: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
b8b0: 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73 74 65  k)(   /* Registe
b8c0: 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65  red using sqlite
b8d0: 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b  3_preupdate_hook
b8e0: 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 2c  () */.    void*,
b8f0: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68 61  sqlite3*,int,cha
b900: 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63 6f  r const*,char co
b910: 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e 74  nst*,sqlite3_int
b920: 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  64,sqlite3_int64
b930: 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64 61 74  .  );.  PreUpdat
b940: 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b 20 20  e *pPreUpdate;  
b950: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
b960: 20 66 6f 72 20 61 63 74 69 76 65 20 70 72 65 2d   for active pre-
b970: 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63 6b 20  update callback 
b980: 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  */.#endif /* SQL
b990: 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
b9a0: 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66  DATE_HOOK */.#if
b9b0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
b9c0: 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61  _WAL.  int (*xWa
b9d0: 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20  lCallback)(void 
b9e0: 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  *, sqlite3 *, co
b9f0: 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29  nst char *, int)
ba00: 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41 72  ;.  void *pWalAr
ba10: 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64  g;.#endif.  void
ba20: 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76  (*xCollNeeded)(v
ba30: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
ba40: 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74  t eTextRep,const
ba50: 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28   char*);.  void(
ba60: 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28  *xCollNeeded16)(
ba70: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
ba80: 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73  nt eTextRep,cons
ba90: 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64  t void*);.  void
baa0: 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67   *pCollNeededArg
bab0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
bac0: 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20  e *pErr;        
bad0: 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74    /* Most recent
bae0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a   error message *
baf0: 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
bb00: 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73 49  volatile int isI
bb10: 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20 54  nterrupted; /* T
bb20: 72 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69  rue if sqlite3_i
bb30: 6e 74 65 72 72 75 70 74 20 68 61 73 20 62 65 65  nterrupt has bee
bb40: 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20  n called */.    
bb50: 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b  double notUsed1;
bb60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
bb70: 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b  pacer */.  } u1;
bb80: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f  .  Lookaside loo
bb90: 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
bba0: 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61   /* Lookaside ma
bbb0: 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74 69  lloc configurati
bbc0: 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  on */.#ifndef SQ
bbd0: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
bbe0: 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65  IZATION.  sqlite
bbf0: 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b 20 20  3_xauth xAuth;  
bc00: 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73          /* Acces
bc10: 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20  s authorization 
bc20: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
bc30: 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20  id *pAuthArg;   
bc40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
bc50: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  st argument to t
bc60: 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20 66  he access auth f
bc70: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69  unction */.#endi
bc80: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
bc90: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
bca0: 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a  ALLBACK.  int (*
bcb0: 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20  xProgress)(void 
bcc0: 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70  *);     /* The p
bcd0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
bce0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
bcf0: 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20 20  gressArg;       
bd00: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
bd10: 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  to the progress 
bd20: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e  callback */.  un
bd30: 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73  signed nProgress
bd40: 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  Ops;        /* N
bd50: 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73  umber of opcodes
bd60: 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61   for progress ca
bd70: 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  llback */.#endif
bd80: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
bd90: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
bda0: 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b  E.  int nVTrans;
bdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bdc0: 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73    /* Allocated s
bdd0: 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20 2a  ize of aVTrans *
bde0: 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65  /.  Hash aModule
bdf0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
be00: 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62    /* populated b
be10: 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  y sqlite3_create
be20: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56  _module() */.  V
be30: 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74 78  tabCtx *pVtabCtx
be40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
be50: 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69  Context for acti
be60: 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f  ve vtab connect/
be70: 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61 62  create */.  VTab
be80: 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20  le **aVTrans;   
be90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69 72            /* Vir
bea0: 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68  tual tables with
beb0: 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
bec0: 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ns */.  VTable *
bed0: 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20  pDisconnect;    
bee0: 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68  /* Disconnect th
bef0: 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69  ese in next sqli
bf00: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f  te3_prepare() */
bf10: 0a 23 65 6e 64 69 66 0a 20 20 48 61 73 68 20 61  .#endif.  Hash a
bf20: 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
bf30: 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20          /* Hash 
bf40: 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74  table of connect
bf50: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ion functions */
bf60: 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71  .  Hash aCollSeq
bf70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bf80: 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e   /* All collatin
bf90: 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20  g sequences */. 
bfa0: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73   BusyHandler bus
bfb0: 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f  yHandler;      /
bfc0: 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  * Busy callback 
bfd0: 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74 69  */.  Db aDbStati
bfe0: 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20  c[2];           
bff0: 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61     /* Static spa
c000: 63 65 20 66 6f 72 20 74 68 65 20 32 20 64 65 66  ce for the 2 def
c010: 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f  ault backends */
c020: 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53  .  Savepoint *pS
c030: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
c040: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
c050: 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f  ve savepoints */
c060: 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f  .  int busyTimeo
c070: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
c080: 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72   /* Busy handler
c090: 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65   timeout, in mse
c0a0: 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65  c */.  int nSave
c0b0: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
c0c0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
c0d0: 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f  f non-transactio
c0e0: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a  n savepoints */.
c0f0: 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74    int nStatement
c100: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c110: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
c120: 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  ted statement-tr
c130: 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20  ansactions  */. 
c140: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
c150: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ns;            /
c160: 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 63  * Net deferred c
c170: 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73 20  onstraints this 
c180: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a  transaction. */.
c190: 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49    i64 nDeferredI
c1a0: 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  mmCons;         
c1b0: 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20  /* Net deferred 
c1c0: 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73 74 72  immediate constr
c1d0: 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a  aints */.  int *
c1e0: 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20 20 20  pnBytesFreed;   
c1f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e           /* If n
c200: 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65  ot NULL, increme
c210: 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46 72 65  nt this in DbFre
c220: 65 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  e() */.#ifdef SQ
c230: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f  LITE_ENABLE_UNLO
c240: 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54  CK_NOTIFY.  /* T
c250: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72  he following var
c260: 69 61 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70  iables are all p
c270: 72 6f 74 65 63 74 65 64 20 62 79 20 74 68 65 20  rotected by the 
c280: 53 54 41 54 49 43 5f 4d 41 53 54 45 52 0a 20 20  STATIC_MASTER.  
c290: 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79  ** mutex, not by
c2a0: 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20   sqlite3.mutex. 
c2b0: 54 68 65 79 20 61 72 65 20 75 73 65 64 20 62 79  They are used by
c2c0: 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e   code in notify.
c2d0: 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65  c..  **.  ** Whe
c2e0: 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  n X.pUnlockConne
c2f0: 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d  ction==Y, that m
c300: 65 61 6e 73 20 74 68 61 74 20 58 20 69 73 20 77  eans that X is w
c310: 61 69 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a  aiting for Y to.
c320: 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74    ** unlock so t
c330: 68 61 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65  hat it can proce
c340: 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68  ed..  **.  ** Wh
c350: 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f  en X.pBlockingCo
c360: 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61  nnection==Y, tha
c370: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d  t means that som
c380: 65 74 68 69 6e 67 20 74 68 61 74 20 58 20 74 72  ething that X tr
c390: 69 65 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74  ied.  ** tried t
c3a0: 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61  o do recently fa
c3b0: 69 6c 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c  iled with an SQL
c3c0: 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72  ITE_LOCKED error
c3d0: 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20   due to locks.  
c3e0: 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20  ** held by Y..  
c3f0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42  */.  sqlite3 *pB
c400: 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f  lockingConnectio
c410: 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e  n; /* Connection
c420: 20 74 68 61 74 20 63 61 75 73 65 64 20 53 51 4c   that caused SQL
c430: 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20  ITE_LOCKED */.  
c440: 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b  sqlite3 *pUnlock
c450: 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20  Connection;     
c460: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74        /* Connect
c470: 69 6f 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72  ion to watch for
c480: 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69   unlock */.  voi
c490: 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20  d *pUnlockArg;  
c4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4b0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
c4c0: 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20  o xUnlockNotify 
c4d0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c  */.  void (*xUnl
c4e0: 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20  ockNotify)(void 
c4f0: 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e  **, int);  /* Un
c500: 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c  lock notify call
c510: 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65  back */.  sqlite
c520: 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b  3 *pNextBlocked;
c530: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
c540: 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62  in list of all b
c550: 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f  locked connectio
c560: 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  ns */.#endif.#if
c570: 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f  def SQLITE_USER_
c580: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20  AUTHENTICATION. 
c590: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
c5a0: 68 20 61 75 74 68 3b 20 20 20 20 20 20 20 20 2f  h auth;        /
c5b0: 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63  * User authentic
c5c0: 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  ation informatio
c5d0: 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a  n */.#endif.};..
c5e0: 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f  /*.** A macro to
c5f0: 20 64 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e   discover the en
c600: 63 6f 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61  coding of a data
c610: 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  base..*/.#define
c620: 20 53 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20   SCHEMA_ENC(db) 
c630: 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53  ((db)->aDb[0].pS
c640: 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66  chema->enc).#def
c650: 69 6e 65 20 45 4e 43 28 64 62 29 20 20 20 20 20  ine ENC(db)     
c660: 20 20 20 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a     ((db)->enc)..
c670: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
c680: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71  alues for the sq
c690: 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2a 0a  lite3.flags..**.
c6a0: 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
c6b0: 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76  ints (enforced v
c6c0: 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
c6d0: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 46 75 6c        SQLITE_Ful
c6e0: 6c 46 53 79 6e 63 20 20 20 20 20 3d 3d 20 50 41  lFSync     == PA
c6f0: 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a  GER_FULLFSYNC.**
c700: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43 6b 70        SQLITE_Ckp
c710: 74 46 75 6c 6c 46 53 79 6e 63 20 3d 3d 20 50 41  tFullFSync == PA
c720: 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59  GER_CKPT_FULLFSY
c730: 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54  NC.**      SQLIT
c740: 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20  E_CacheSpill    
c750: 3d 3d 20 50 41 47 45 52 5f 43 41 43 48 45 5f 53  == PAGER_CACHE_S
c760: 50 49 4c 4c 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  PILL.*/.#define 
c770: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
c780: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30 31        0x00000001
c790: 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61    /* True to tra
c7a0: 63 65 20 56 44 42 45 20 65 78 65 63 75 74 69 6f  ce VDBE executio
c7b0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
c7c0: 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
c7d0: 73 20 20 30 78 30 30 30 30 30 30 30 32 20 20 2f  s  0x00000002  /
c7e0: 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61  * Uncommitted Ha
c7f0: 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73  sh table changes
c800: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c810: 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20  TE_FullColNames 
c820: 20 20 30 78 30 30 30 30 30 30 30 34 20 20 2f 2a    0x00000004  /*
c830: 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d   Show full colum
c840: 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43  n names on SELEC
c850: 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  T */.#define SQL
c860: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20  ITE_FullFSync   
c870: 20 20 20 30 78 30 30 30 30 30 30 30 38 20 20 2f     0x00000008  /
c880: 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63  * Use full fsync
c890: 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20   on the backend 
c8a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c8b0: 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20  E_CkptFullFSync 
c8c0: 20 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20   0x00000010  /* 
c8d0: 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66  Use full fsync f
c8e0: 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f  or checkpoint */
c8f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c900: 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20 20 30  CacheSpill     0
c910: 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20 4f 4b  x00000020  /* OK
c920: 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65 72 20   to spill pager 
c930: 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65  cache */.#define
c940: 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c   SQLITE_ShortCol
c950: 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30 30 34  Names  0x0000004
c960: 30 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74  0  /* Show short
c970: 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a   columns names *
c980: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c990: 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20  _CountRows      
c9a0: 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20 43  0x00000080  /* C
c9b0: 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65  ount rows change
c9c0: 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a  d by INSERT, */.
c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44            /*   D
ca00: 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
ca10: 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20   and return */. 
ca20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca40: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68           /*   th
ca50: 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20  e count using a 
ca60: 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65  callback. */.#de
ca70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c  fine SQLITE_Null
ca80: 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30  Callback   0x000
ca90: 30 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65  00100  /* Invoke
caa0: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e   the callback on
cab0: 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20  ce if the */.   
cac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cae0: 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75         /*   resu
caf0: 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 20  lt set is empty 
cb00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
cb10: 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20  E_SqlTrace      
cb20: 20 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20   0x00000200  /* 
cb30: 44 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20  Debug print SQL 
cb40: 61 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a  as it executes *
cb50: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
cb60: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20  _VdbeListing    
cb70: 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 44  0x00000400  /* D
cb80: 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66  ebug listings of
cb90: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a   VDBE programs *
cba0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
cbb0: 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20  _WriteSchema    
cbc0: 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4f  0x00000800  /* O
cbd0: 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49  K to update SQLI
cbe0: 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65  TE_MASTER */.#de
cbf0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
cc00: 41 64 64 6f 70 54 72 61 63 65 20 30 78 30 30 30  AddopTrace 0x000
cc10: 30 31 30 30 30 20 20 2f 2a 20 54 72 61 63 65 20  01000  /* Trace 
cc20: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
cc30: 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66  () calls */.#def
cc40: 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72  ine SQLITE_Ignor
cc50: 65 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30  eChecks   0x0000
cc60: 32 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  2000  /* Do not 
cc70: 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f  enforce check co
cc80: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
cc90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64  fine SQLITE_Read
cca0: 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78 30 30  Uncommitted 0x00
ccb0: 30 34 30 30 30 20 20 2f 2a 20 46 6f 72 20 73 68  04000  /* For sh
ccc0: 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
ccd0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
cce0: 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20  E_LegacyFileFmt 
ccf0: 20 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20   0x00008000  /* 
cd00: 43 72 65 61 74 65 20 6e 65 77 20 64 61 74 61 62  Create new datab
cd10: 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31  ases in format 1
cd20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
cd30: 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64 65 20  TE_RecoveryMode 
cd40: 20 20 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a    0x00010000  /*
cd50: 20 49 67 6e 6f 72 65 20 73 63 68 65 6d 61 20 65   Ignore schema e
cd60: 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  rrors */.#define
cd70: 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f   SQLITE_ReverseO
cd80: 72 64 65 72 20 20 20 30 78 30 30 30 32 30 30 30  rder   0x0002000
cd90: 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75 6e  0  /* Reverse un
cda0: 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54 73 20  ordered SELECTs 
cdb0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
cdc0: 45 5f 52 65 63 54 72 69 67 67 65 72 73 20 20 20  E_RecTriggers   
cdd0: 20 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20   0x00040000  /* 
cde0: 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76 65  Enable recursive
cdf0: 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65   triggers */.#de
ce00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72 65  fine SQLITE_Fore
ce10: 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30 30  ignKeys    0x000
ce20: 38 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63  80000  /* Enforc
ce30: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
ce40: 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64  nstraints  */.#d
ce50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75 74  efine SQLITE_Aut
ce60: 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78 30 30  oIndex      0x00
ce70: 31 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  100000  /* Enabl
ce80: 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65  e automatic inde
ce90: 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  xes */.#define S
cea0: 51 4c 49 54 45 5f 50 72 65 66 65 72 42 75 69 6c  QLITE_PreferBuil
ceb0: 74 69 6e 20 20 30 78 30 30 32 30 30 30 30 30 20  tin  0x00200000 
cec0: 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74   /* Preference t
ced0: 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73  o built-in funcs
cee0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
cef0: 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  TE_LoadExtension
cf00: 20 20 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a    0x00400000  /*
cf10: 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74   Enable load_ext
cf20: 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  ension */.#defin
cf30: 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74  e SQLITE_LoadExt
cf40: 46 75 6e 63 20 20 20 20 30 78 30 30 38 30 30 30  Func    0x008000
cf50: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f  00  /* Enable lo
cf60: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 53  ad_extension() S
cf70: 51 4c 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  QL func */.#defi
cf80: 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65  ne SQLITE_Enable
cf90: 54 72 69 67 67 65 72 20 20 30 78 30 31 30 30 30  Trigger  0x01000
cfa0: 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  000  /* True to 
cfb0: 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  enable triggers 
cfc0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
cfd0: 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20 20 20  E_DeferFKs      
cfe0: 20 30 78 30 32 30 30 30 30 30 30 20 20 2f 2a 20   0x02000000  /* 
cff0: 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e  Defer all FK con
d000: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
d010: 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79  ine SQLITE_Query
d020: 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 34 30 30  Only      0x0400
d030: 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62 6c 65  0000  /* Disable
d040: 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67 65   database change
d050: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
d060: 49 54 45 5f 56 64 62 65 45 51 50 20 20 20 20 20  ITE_VdbeEQP     
d070: 20 20 20 30 78 30 38 30 30 30 30 30 30 20 20 2f     0x08000000  /
d080: 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20  * Debug EXPLAIN 
d090: 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64  QUERY PLAN */.#d
d0a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 61 63  efine SQLITE_Vac
d0b0: 75 75 6d 20 20 20 20 20 20 20 20 20 30 78 31 30  uum         0x10
d0c0: 30 30 30 30 30 30 20 20 2f 2a 20 43 75 72 72 65  000000  /* Curre
d0d0: 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55 55 4d  ntly in a VACUUM
d0e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d0f0: 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20  TE_CellSizeCk   
d100: 20 20 30 78 32 30 30 30 30 30 30 30 20 20 2f 2a    0x20000000  /*
d110: 20 43 68 65 63 6b 20 62 74 72 65 65 20 63 65 6c   Check btree cel
d120: 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20  l sizes on load 
d130: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d140: 45 5f 46 74 73 33 54 6f 6b 65 6e 69 7a 65 72 20  E_Fts3Tokenizer 
d150: 20 30 78 34 30 30 30 30 30 30 30 20 20 2f 2a 20   0x40000000  /* 
d160: 45 6e 61 62 6c 65 20 66 74 73 33 5f 74 6f 6b 65  Enable fts3_toke
d170: 6e 69 7a 65 72 28 32 29 20 2a 2f 0a 0a 0a 2f 2a  nizer(2) */.../*
d180: 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20  .** Bits of the 
d190: 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61  sqlite3.dbOptFla
d1a0: 67 73 20 66 69 65 6c 64 20 74 68 61 74 20 61 72  gs field that ar
d1b0: 65 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a  e used by the.**
d1c0: 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
d1d0: 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
d1e0: 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49  TCTRL_OPTIMIZATI
d1f0: 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61  ONS,...) interfa
d200: 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69  ce to.** selecti
d210: 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72  vely disable var
d220: 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
d230: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ns..*/.#define S
d240: 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74  QLITE_QueryFlatt
d250: 65 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a  ener 0x0001   /*
d260: 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e   Query flattenin
d270: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  g */.#define SQL
d280: 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20  ITE_ColumnCache 
d290: 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43     0x0002   /* C
d2a0: 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23  olumn cache */.#
d2b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72  define SQLITE_Gr
d2c0: 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30 78 30  oupByOrder   0x0
d2d0: 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59  004   /* GROUPBY
d2e0: 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42   cover of ORDERB
d2f0: 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  Y */.#define SQL
d300: 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e  ITE_FactorOutCon
d310: 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43  st 0x0008   /* C
d320: 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e  onstant factorin
d330: 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20 20 20  g */./*         
d340: 20 20 20 20 20 20 20 6e 6f 74 20 75 73 65 64 20         not used 
d350: 20 20 20 30 78 30 30 31 30 20 20 20 2f 2f 20 57     0x0010   // W
d360: 61 73 3a 20 53 51 4c 49 54 45 5f 49 64 78 52 65  as: SQLITE_IdxRe
d370: 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65 66 69  alAsInt */.#defi
d380: 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e  ne SQLITE_Distin
d390: 63 74 4f 70 74 20 20 20 20 30 78 30 30 32 30 20  ctOpt    0x0020 
d3a0: 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73    /* DISTINCT us
d3b0: 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23  ing indexes */.#
d3c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
d3d0: 76 65 72 49 64 78 53 63 61 6e 20 20 20 30 78 30  verIdxScan   0x0
d3e0: 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e  040   /* Coverin
d3f0: 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f  g index scans */
d400: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d410: 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30  OrderByIdxJoin 0
d420: 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44 45 52  x0080   /* ORDER
d430: 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61   BY of joins via
d440: 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
d450: 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43 6f 72  e SQLITE_SubqCor
d460: 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30 20 20  outine  0x0100  
d470: 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73 75 62   /* Evaluate sub
d480: 71 75 65 72 69 65 73 20 61 73 20 63 6f 72 6f 75  queries as corou
d490: 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tines */.#define
d4a0: 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69   SQLITE_Transiti
d4b0: 76 65 20 20 20 20 20 30 78 30 32 30 30 20 20 20  ve     0x0200   
d4c0: 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f  /* Transitive co
d4d0: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
d4e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74  fine SQLITE_Omit
d4f0: 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 34 30  NoopJoin   0x040
d500: 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73  0   /* Omit unus
d510: 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69  ed tables in joi
d520: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
d530: 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20 20 20  LITE_Stat34     
d540: 20 20 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20      0x0800   /* 
d550: 55 73 65 20 53 54 41 54 33 20 6f 72 20 53 54 41  Use STAT3 or STA
d560: 54 34 20 64 61 74 61 20 2a 2f 0a 23 64 65 66 69  T4 data */.#defi
d570: 6e 65 20 53 51 4c 49 54 45 5f 43 75 72 73 6f 72  ne SQLITE_Cursor
d580: 48 69 6e 74 73 20 20 20 20 30 78 32 30 30 30 20  Hints    0x2000 
d590: 20 20 2f 2a 20 41 64 64 20 4f 50 5f 43 75 72 73    /* Add OP_Curs
d5a0: 6f 72 48 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a  orHint opcodes *
d5b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d5c0: 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20  _AllOpts        
d5d0: 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20  0xffff   /* All 
d5e0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f  optimizations */
d5f0: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66  ../*.** Macros f
d600: 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65 74 68  or testing wheth
d610: 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69  er or not optimi
d620: 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62  zations are enab
d630: 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e  led or disabled.
d640: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
d650: 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
d660: 54 45 53 54 0a 23 64 65 66 69 6e 65 20 4f 70 74  TEST.#define Opt
d670: 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65  imizationDisable
d680: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28  d(db, mask)  (((
d690: 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26  db)->dbOptFlags&
d6a0: 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66  (mask))!=0).#def
d6b0: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
d6c0: 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  Enabled(db, mask
d6d0: 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70  )   (((db)->dbOp
d6e0: 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d  tFlags&(mask))==
d6f0: 30 29 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65  0).#else.#define
d700: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73   OptimizationDis
d710: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
d720: 20 30 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d   0.#define Optim
d730: 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64  izationEnabled(d
d740: 62 2c 20 6d 61 73 6b 29 20 20 20 31 0a 23 65 6e  b, mask)   1.#en
d750: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
d760: 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20  n true if it OK 
d770: 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61  to factor consta
d780: 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  nt expressions i
d790: 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  nto the initiali
d7a0: 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20  zation.** code. 
d7b0: 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  The argument is 
d7c0: 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66  a Parse object f
d7d0: 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  or the code gene
d7e0: 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rator..*/.#defin
d7f0: 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28  e ConstFactorOk(
d800: 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74  P) ((P)->okConst
d810: 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50  Factor)../*.** P
d820: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
d830: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61  or the sqlite.ma
d840: 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68  gic field..** Th
d850: 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62  e numbers are ob
d860: 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d  tained at random
d870: 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65   and have no spe
d880: 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74  cial meaning, ot
d890: 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e  her.** than bein
d8a0: 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20  g distinct from 
d8b0: 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a  one another..*/.
d8c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
d8d0: 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78  AGIC_OPEN     0x
d8e0: 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74  a029a697  /* Dat
d8f0: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f  abase is open */
d900: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d910: 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30  MAGIC_CLOSED   0
d920: 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61  x9f3c2d33  /* Da
d930: 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64  tabase is closed
d940: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d950: 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20  TE_MAGIC_SICK   
d960: 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a    0x4b771290  /*
d970: 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74   Error and await
d980: 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65  ing close */.#de
d990: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
d9a0: 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30 33  C_BUSY     0xf03
d9b0: 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61  b7906  /* Databa
d9c0: 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  se currently in 
d9d0: 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
d9e0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f  QLITE_MAGIC_ERRO
d9f0: 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30 20  R    0xb5357930 
da00: 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49   /* An SQLITE_MI
da10: 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72  SUSE error occur
da20: 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  red */.#define S
da30: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42  QLITE_MAGIC_ZOMB
da40: 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66 20  IE   0x64cffc7f 
da50: 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c   /* Close with l
da60: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c  ast statement cl
da70: 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61  ose */../*.** Ea
da80: 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  ch SQL function 
da90: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
daa0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
dab0: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
dac0: 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 67 6c  ructure.  For gl
dad0: 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75  obal built-in fu
dae0: 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20 73 75 62  nctions (ex: sub
daf0: 73 74 72 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f  str(), max(), co
db00: 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e  unt()).** a poin
db10: 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
db20: 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e  cture is held in
db30: 20 74 68 65 20 73 71 6c 69 74 65 33 42 75 69 6c   the sqlite3Buil
db40: 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a  tinFunctions obj
db50: 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d  ect..** For per-
db60: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69  connection appli
db70: 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66  cation-defined f
db80: 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e  unctions, a poin
db90: 74 65 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73  ter to this.** s
dba0: 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c 64  tructure is held
dbb0: 20 69 6e 20 74 68 65 20 64 62 2d 3e 61 48 61 73   in the db->aHas
dbc0: 68 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a  h hash table..**
dbd0: 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61 73 68 20  .** The u.pHash 
dbe0: 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62 79  field is used by
dbf0: 20 74 68 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c   the global buil
dc00: 74 2d 69 6e 73 2e 20 20 54 68 65 20 75 2e 70 44  t-ins.  The u.pD
dc10: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65  estructor.** fie
dc20: 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 70 65  ld is used by pe
dc30: 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70  r-connection app
dc40: 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  -def functions..
dc50: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
dc60: 66 20 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20 20  f {.  i8 nArg;  
dc70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
dc80: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
dc90: 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c  s.  -1 means unl
dca0: 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31 36 20  imited */.  u16 
dcb0: 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  funcFlags;      
dcc0: 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61   /* Some combina
dcd0: 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46  tion of SQLITE_F
dce0: 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20  UNC_* */.  void 
dcf0: 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20  *pUserData;     
dd00: 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72  /* User data par
dd10: 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63  ameter */.  Func
dd20: 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  Def *pNext;     
dd30: 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f   /* Next functio
dd40: 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65  n with same name
dd50: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 46   */.  void (*xSF
dd60: 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  unc)(sqlite3_con
dd70: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
dd80: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66  3_value**); /* f
dd90: 75 6e 63 20 6f 72 20 61 67 67 2d 73 74 65 70 20  unc or agg-step 
dda0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e  */.  void (*xFin
ddb0: 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63  alize)(sqlite3_c
ddc0: 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20  ontext*);       
ddd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67             /* Ag
dde0: 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20  g finalizer */. 
ddf0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
de00: 6d 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d  me;   /* SQL nam
de10: 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
de20: 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  n. */.  union {.
de30: 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61      FuncDef *pHa
de40: 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  sh;      /* Next
de50: 20 77 69 74 68 20 61 20 64 69 66 66 65 72 65 6e   with a differen
de60: 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73  t name but the s
de70: 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 20 20  ame hash */.    
de80: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
de90: 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f  pDestructor;   /
dea0: 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  * Reference coun
deb0: 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20 66  ted destructor f
dec0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75  unction */.  } u
ded0: 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  ;.};../*.** This
dee0: 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61 70   structure encap
def0: 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66  sulates a user-f
df00: 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74  unction destruct
df10: 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a  or callback (as.
df20: 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73  ** configured us
df30: 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74  ing create_funct
df40: 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20  ion_v2()) and a 
df50: 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65  reference counte
df60: 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74  r. When.** creat
df70: 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20  e_function_v2() 
df80: 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65  is called to cre
df90: 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77  ate a function w
dfa0: 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f 72  ith a destructor
dfb0: 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62  ,.** a single ob
dfc0: 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70  ject of this typ
dfd0: 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20  e is allocated. 
dfe0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e  FuncDestructor.n
dff0: 52 65 66 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a  Ref is set to.**
e000: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46   the number of F
e010: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63  uncDef objects c
e020: 72 65 61 74 65 64 20 28 65 69 74 68 65 72 20 31  reated (either 1
e030: 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67   or 3, depending
e040: 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f   on whether.** o
e050: 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66  r not the specif
e060: 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20  ied encoding is 
e070: 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65  SQLITE_ANY). The
e080: 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75   FuncDef.pDestru
e090: 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f  ctor.** member o
e0a0: 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65  f each of the ne
e0b0: 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  w FuncDef object
e0c0: 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e  s is set to poin
e0d0: 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74  t to the allocat
e0e0: 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75  ed.** FuncDestru
e0f0: 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  ctor..**.** Ther
e100: 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65  eafter, when one
e110: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 20   of the FuncDef 
e120: 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74  objects is delet
e130: 65 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63  ed, the referenc
e140: 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68  e.** count on th
e150: 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63  is object is dec
e160: 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69  remented. When i
e170: 74 20 72 65 61 63 68 65 73 20 30 2c 20 74 68 65  t reaches 0, the
e180: 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69   destructor.** i
e190: 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68  s invoked and th
e1a0: 65 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  e FuncDestructor
e1b0: 20 73 74 72 75 63 74 75 72 65 20 66 72 65 65 64   structure freed
e1c0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
e1d0: 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69  Destructor {.  i
e1e0: 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20  nt nRef;.  void 
e1f0: 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64  (*xDestroy)(void
e200: 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73   *);.  void *pUs
e210: 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a  erData;.};../*.*
e220: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
e230: 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c  s for FuncDef.fl
e240: 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20  ags.  Note that 
e250: 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20  the _LENGTH and 
e260: 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65  _TYPEOF.** value
e270: 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e  s must correspon
e280: 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  d to OPFLAG_LENG
e290: 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47  THARG and OPFLAG
e2a0: 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 41 6e 64  _TYPEOFARG.  And
e2b0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  .** SQLITE_FUNC_
e2c0: 43 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20 62 65  CONSTANT must be
e2d0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 53 51 4c   the same as SQL
e2e0: 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49  ITE_DETERMINISTI
e2f0: 43 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65  C.  There.** are
e300: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
e310: 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65  ents in the code
e320: 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e   to verify this.
e330: 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
e340: 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63  straints (enforc
e350: 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
e360: 3a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  :.**     SQLITE_
e370: 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20 3d  FUNC_MINMAX    =
e380: 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20  =  NC_MinMaxAgg 
e390: 20 20 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61       == SF_MinMa
e3a0: 78 41 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c 49  xAgg.**     SQLI
e3b0: 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20  TE_FUNC_LENGTH  
e3c0: 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45 4e    ==  OPFLAG_LEN
e3d0: 47 54 48 41 52 47 0a 2a 2a 20 20 20 20 20 53 51  GTHARG.**     SQ
e3e0: 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
e3f0: 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 54      ==  OPFLAG_T
e400: 59 50 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20 20  YPEOFARG.**     
e410: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
e420: 54 41 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54 45  TANT  ==  SQLITE
e430: 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 20 66  _DETERMINISTIC f
e440: 72 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20 20  rom the API.**  
e450: 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45     SQLITE_FUNC_E
e460: 4e 43 4d 41 53 4b 20 20 20 64 65 70 65 6e 64 73  NCMASK   depends
e470: 20 6f 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a 20   on SQLITE_UTF* 
e480: 6d 61 63 72 6f 73 20 69 6e 20 74 68 65 20 41 50  macros in the AP
e490: 49 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  I.*/.#define SQL
e4a0: 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b  ITE_FUNC_ENCMASK
e4b0: 20 20 30 78 30 30 30 33 20 2f 2a 20 53 51 4c 49    0x0003 /* SQLI
e4c0: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
e4d0: 55 54 46 31 36 42 45 20 6f 72 20 55 54 46 31 36  UTF16BE or UTF16
e4e0: 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LE */.#define SQ
e4f0: 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20  LITE_FUNC_LIKE  
e500: 20 20 20 30 78 30 30 30 34 20 2f 2a 20 43 61 6e     0x0004 /* Can
e510: 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c  didate for the L
e520: 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  IKE optimization
e530: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e540: 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20  TE_FUNC_CASE    
e550: 20 30 78 30 30 30 38 20 2f 2a 20 43 61 73 65 2d   0x0008 /* Case-
e560: 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74  sensitive LIKE-t
e570: 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ype function */.
e580: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
e590: 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30  UNC_EPHEM    0x0
e5a0: 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c  010 /* Ephemeral
e5b0: 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20 56  .  Delete with V
e5c0: 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  DBE */.#define S
e5d0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
e5e0: 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20 73 71  OLL 0x0020 /* sq
e5f0: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
e600: 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20 63  Seq() might be c
e610: 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20  alled*/.#define 
e620: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
e630: 54 48 20 20 20 30 78 30 30 34 30 20 2f 2a 20 42  TH   0x0040 /* B
e640: 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29  uilt-in length()
e650: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
e660: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
e670: 5f 54 59 50 45 4f 46 20 20 20 30 78 30 30 38 30  _TYPEOF   0x0080
e680: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70   /* Built-in typ
e690: 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  eof() function *
e6a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e6b0: 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30  _FUNC_COUNT    0
e6c0: 78 30 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0100 /* Built-i
e6d0: 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65  n count(*) aggre
e6e0: 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gate */.#define 
e6f0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c  SQLITE_FUNC_COAL
e700: 45 53 43 45 20 30 78 30 32 30 30 20 2f 2a 20 42  ESCE 0x0200 /* B
e710: 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65  uilt-in coalesce
e720: 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a  () or ifnull() *
e730: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e740: 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30  _FUNC_UNLIKELY 0
e750: 78 30 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0400 /* Built-i
e760: 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e  n unlikely() fun
e770: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
e780: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
e790: 53 54 41 4e 54 20 30 78 30 38 30 30 20 2f 2a 20  STANT 0x0800 /* 
e7a0: 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20  Constant inputs 
e7b0: 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20  give a constant 
e7c0: 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e  output */.#defin
e7d0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49  e SQLITE_FUNC_MI
e7e0: 4e 4d 41 58 20 20 20 30 78 31 30 30 30 20 2f 2a  NMAX   0x1000 /*
e7f0: 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29 20   True for min() 
e800: 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65 67  and max() aggreg
e810: 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ates */.#define 
e820: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
e830: 48 4e 47 20 20 30 78 32 30 30 30 20 2f 2a 20 22  HNG  0x2000 /* "
e840: 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20 56 61  Slow Change". Va
e850: 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20 64 75 72  lue constant dur
e860: 69 6e 67 20 61 0a 20 20 20 20 20 20 20 20 20 20  ing a.          
e870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e880: 20 20 20 20 20 20 20 20 20 20 2a 2a 20 73 69 6e            ** sin
e890: 67 6c 65 20 71 75 65 72 79 20 2d 20 6d 69 67 68  gle query - migh
e8a0: 74 20 63 68 61 6e 67 65 20 6f 76 65 72 20 74 69  t change over ti
e8b0: 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  me */../*.** The
e8c0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65   following three
e8d0: 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f   macros, FUNCTIO
e8e0: 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20  N(), LIKEFUNC() 
e8f0: 61 6e 64 20 41 47 47 52 45 47 41 54 45 28 29 20  and AGGREGATE() 
e900: 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63  are.** used to c
e910: 72 65 61 74 65 20 74 68 65 20 69 6e 69 74 69 61  reate the initia
e920: 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46  lizers for the F
e930: 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
e940: 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54  s..**.**   FUNCT
e950: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
e960: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
e970: 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  c).**     Used t
e980: 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
e990: 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
e9a0: 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
e9b0: 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20  ion zName.**    
e9c0: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
e9d0: 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63  C function xFunc
e9e0: 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
e9f0: 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68  rg arguments. Th
ea00: 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70  e.**     value p
ea10: 61 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73  assed as iArg is
ea20: 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64   cast to a (void
ea30: 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69  *) and made avai
ea40: 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20  lable.**     as 
ea50: 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73  the user-data (s
ea60: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
ea70: 28 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63  ()) for the func
ea80: 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20  tion. If.**     
ea90: 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20  argument bNC is 
eaa0: 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53  true, then the S
eab0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
eac0: 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e  OLL flag is set.
ead0: 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49  .**.**   VFUNCTI
eae0: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
eaf0: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
eb00: 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55  ).**     Like FU
eb10: 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74  NCTION except it
eb20: 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54   omits the SQLIT
eb30: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
eb40: 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46  flag..**.**   DF
eb50: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
eb60: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
eb70: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69  xFunc).**     Li
eb80: 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65  ke FUNCTION exce
eb90: 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20  pt it omits the 
eba0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
ebb0: 54 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a  TANT flag and.**
ebc0: 20 20 20 20 20 61 64 64 73 20 74 68 65 20 53 51       adds the SQ
ebd0: 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
ebe0: 47 20 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f  G flag.  Used fo
ebf0: 72 20 64 61 74 65 20 26 20 74 69 6d 65 20 66 75  r date & time fu
ec00: 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61  nctions.**     a
ec10: 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b  nd functions lik
ec20: 65 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e  e sqlite_version
ec30: 28 29 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e  () that can chan
ec40: 67 65 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69  ge, but not duri
ec50: 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67  ng.**     a sing
ec60: 6c 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20  le query..**.** 
ec70: 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d    AGGREGATE(zNam
ec80: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
ec90: 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  NC, xStep, xFina
eca0: 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  l).**     Used t
ecb0: 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72  o create an aggr
ecc0: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64  egate function d
ecd0: 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d  efinition implem
ece0: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20  ented by.**     
ecf0: 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20  the C functions 
ed00: 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c  xStep and xFinal
ed10: 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72  . The first four
ed20: 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20   parameters.**  
ed30: 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74     are interpret
ed40: 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
ed50: 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ay as the first 
ed60: 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  4 parameters to.
ed70: 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28  **     FUNCTION(
ed80: 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46  )..**.**   LIKEF
ed90: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
eda0: 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a   pArg, flags).**
edb0: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
edc0: 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e  ate a scalar fun
edd0: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
ede0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a   of a function z
edf0: 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68 61 74  Name.**     that
ee00: 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72   accepts nArg ar
ee10: 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69  guments and is i
ee20: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20  mplemented by a 
ee30: 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20 20 20  call to C.**    
ee40: 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75   function likeFu
ee50: 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72  nc. Argument pAr
ee60: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
ee70: 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65  void *) and made
ee80: 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c  .**     availabl
ee90: 65 20 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f  e as the functio
eea0: 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c  n user-data (sql
eeb0: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29  ite3_user_data()
eec0: 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75  ). The.**     Fu
eed0: 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69  ncDef.flags vari
eee0: 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74  able is set to t
eef0: 68 65 20 76 61 6c 75 65 20 70 61 73 73 65 64 20  he value passed 
ef00: 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20  as the flags.** 
ef10: 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a      parameter..*
ef20: 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49  /.#define FUNCTI
ef30: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
ef40: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
ef50: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
ef60: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
ef70: 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  T|SQLITE_UTF8|(b
ef80: 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
ef90: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
efa0: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
efb0: 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63  (iArg), 0, xFunc
efc0: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
efd0: 20 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43   }.#define VFUNC
efe0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
eff0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
f000: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
f010: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
f020: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
f030: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
f040: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
f050: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
f060: 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
f070: 23 64 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f  #define DFUNCTIO
f080: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
f090: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
f0a0: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
f0b0: 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c  TE_FUNC_SLOCHNG|
f0c0: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
f0d0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
f0e0: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
f0f0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
f100: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
f110: 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
f120: 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f  .#define FUNCTIO
f130: 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  N2(zName, nArg, 
f140: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
f150: 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a  , extraFlags) \.
f160: 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46    {nArg,SQLITE_F
f170: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
f180: 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
f190: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
f1a0: 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c  LL)|extraFlags,\
f1b0: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
f1c0: 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
f1d0: 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65  xFunc, 0, #zName
f1e0: 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
f1f0: 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  STR_FUNCTION(zNa
f200: 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20  me, nArg, pArg, 
f210: 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
f220: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
f230: 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54  NC_SLOCHNG|SQLIT
f240: 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
f250: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
f260: 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c  ), \.   pArg, 0,
f270: 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d   xFunc, 0, #zNam
f280: 65 2c 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b  e, }.#define LIK
f290: 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
f2a0: 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c  g, arg, flags) \
f2b0: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
f2c0: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
f2d0: 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73  QLITE_UTF8|flags
f2e0: 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61  , \.   (void *)a
f2f0: 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c  rg, 0, likeFunc,
f300: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
f310: 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
f320: 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
f330: 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
f340: 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41   xFinal) \.  {nA
f350: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
f360: 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  (nc*SQLITE_FUNC_
f370: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
f380: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
f390: 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70  R(arg), 0, xStep
f3a0: 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20  ,xFinal,#zName, 
f3b0: 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47 47  {0}}.#define AGG
f3c0: 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e  REGATE2(zName, n
f3d0: 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
f3e0: 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74  tep, xFinal, ext
f3f0: 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  raFlags) \.  {nA
f400: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
f410: 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  (nc*SQLITE_FUNC_
f420: 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46  NEEDCOLL)|extraF
f430: 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54  lags, \.   SQLIT
f440: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67  E_INT_TO_PTR(arg
f450: 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e  ), 0, xStep,xFin
f460: 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a  al,#zName, {0}}.
f470: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65  ./*.** All curre
f480: 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72  nt savepoints ar
f490: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69  e stored in a li
f4a0: 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69  nked list starti
f4b0: 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33  ng at.** sqlite3
f4c0: 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65  .pSavepoint. The
f4d0: 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69   first element i
f4e0: 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20 74 68  n the list is th
f4f0: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a  e most recently.
f500: 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f  ** opened savepo
f510: 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20  int. Savepoints 
f520: 61 72 65 20 61 64 64 65 64 20 74 6f 20 74 68 65  are added to the
f530: 20 6c 69 73 74 20 62 79 20 74 68 65 20 76 64 62   list by the vdb
f540: 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e  e.** OP_Savepoin
f550: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
f560: 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f 69  /.struct Savepoi
f570: 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  nt {.  char *zNa
f580: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
f590: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61             /* Sa
f5a0: 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75  vepoint name (nu
f5b0: 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f  l-terminated) */
f5c0: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
f5d0: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
f5e0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
f5f0: 20 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b 20   of deferred fk 
f600: 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  violations */.  
f610: 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d  i64 nDeferredImm
f620: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
f630: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
f640: 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b   deferred imm fk
f650: 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74  . */.  Savepoint
f660: 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
f670: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
f680: 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28  rent savepoint (
f690: 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f  if any) */.};../
f6a0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
f6b0: 6e 67 20 61 72 65 20 75 73 65 64 20 61 73 20 74  ng are used as t
f6c0: 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65  he second parame
f6d0: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61  ter to sqlite3Sa
f6e0: 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e  vepoint(),.** an
f6f0: 64 20 61 73 20 74 68 65 20 50 31 20 61 72 67 75  d as the P1 argu
f700: 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53  ment to the OP_S
f710: 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63  avepoint instruc
f720: 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  tion..*/.#define
f730: 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e   SAVEPOINT_BEGIN
f740: 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20        0.#define 
f750: 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
f760: 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53  E    1.#define S
f770: 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
f780: 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  K   2.../*.** Ea
f790: 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65  ch SQLite module
f7a0: 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20   (virtual table 
f7b0: 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64  definition) is d
f7c0: 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20  efined by an.** 
f7d0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
f7e0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
f7f0: 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74  ure, stored in t
f800: 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75  he sqlite3.aModu
f810: 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65  le.** hash table
f820: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75  ..*/.struct Modu
f830: 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  le {.  const sql
f840: 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
f850: 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43  dule;       /* C
f860: 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73  allback pointers
f870: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
f880: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
f890: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
f8a0: 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  me passed to cre
f8b0: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
f8c0: 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20    void *pAux;   
f8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8e0: 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70         /* pAux p
f8f0: 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f  assed to create_
f900: 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f  module() */.  vo
f910: 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76  id (*xDestroy)(v
f920: 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20  oid *);         
f930: 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73     /* Module des
f940: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
f950: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45 70   */.  Table *pEp
f960: 6f 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  oTab;           
f970: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70             /* Ep
f980: 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20 66 6f  onymous table fo
f990: 72 20 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a 2f  r this module */
f9a0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72  .};../*.** infor
f9b0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
f9c0: 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53  h column of an S
f9d0: 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64  QL table is held
f9e0: 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   in an instance.
f9f0: 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
fa00: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
fa10: 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20  Column {.  char 
fa20: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e  *zName;     /* N
fa30: 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  ame of this colu
fa40: 6d 6e 2c 20 5c 30 30 30 2c 20 74 68 65 6e 20 74  mn, \000, then t
fa50: 68 65 20 74 79 70 65 20 2a 2f 0a 20 20 45 78 70  he type */.  Exp
fa60: 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a  r *pDflt;     /*
fa70: 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   Default value o
fa80: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  f this column */
fa90: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20  .  char *zColl; 
faa0: 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
fab0: 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e   sequence.  If N
fac0: 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66  ULL, use the def
fad0: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74  ault */.  u8 not
fae0: 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e  Null;      /* An
faf0: 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61   OE_ code for ha
fb00: 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c  ndling a NOT NUL
fb10: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
fb20: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
fb30: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65     /* One of the
fb40: 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20   SQLITE_AFF_... 
fb50: 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73  values */.  u8 s
fb60: 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  zEst;        /* 
fb70: 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f  Estimated size o
fb80: 66 20 76 61 6c 75 65 20 69 6e 20 74 68 69 73 20  f value in this 
fb90: 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66 28 49  column. sizeof(I
fba0: 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63  NT)==1 */.  u8 c
fbb0: 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  olFlags;     /* 
fbc0: 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69  Boolean properti
fbd0: 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47  es.  See COLFLAG
fbe0: 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20  _ defines below 
fbf0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
fc00: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c  d values for Col
fc10: 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f  umn.colFlags:.*/
fc20: 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
fc30: 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31  _PRIMKEY  0x0001
fc40: 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73      /* Column is
fc50: 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69   part of the pri
fc60: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66  mary key */.#def
fc70: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  ine COLFLAG_HIDD
fc80: 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f  EN   0x0002    /
fc90: 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  * A hidden colum
fca0: 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74  n in a virtual t
fcb0: 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
fcc0: 43 4f 4c 46 4c 41 47 5f 48 41 53 54 59 50 45 20  COLFLAG_HASTYPE 
fcd0: 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 79   0x0004    /* Ty
fce0: 70 65 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77 73 20  pe name follows 
fcf0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 0a  column name */..
fd00: 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69  /*.** A "Collati
fd10: 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20  ng Sequence" is 
fd20: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e  defined by an in
fd30: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
fd40: 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63  llowing.** struc
fd50: 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c  ture. Conceptual
fd60: 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  ly, a collating 
fd70: 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74  sequence consist
fd80: 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a  s of a name and.
fd90: 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20  ** a comparison 
fda0: 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66  routine that def
fdb0: 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f  ines the order o
fdc0: 66 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e  f that sequence.
fdd0: 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65  .**.** If CollSe
fde0: 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20  q.xCmp is NULL, 
fdf0: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
fe00: 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  e.** collating s
fe10: 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66  equence is undef
fe20: 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62  ined.  Indices b
fe30: 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66  uilt on an undef
fe40: 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e  ined.** collatin
fe50: 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e  g sequence may n
fe60: 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72  ot be read or wr
fe70: 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  itten..*/.struct
fe80: 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61   CollSeq {.  cha
fe90: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
fea0: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
feb0: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
fec0: 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f  ence, UTF-8 enco
fed0: 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ded */.  u8 enc;
fee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fef0: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
ff00: 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28  handled by xCmp(
ff10: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73  ) */.  void *pUs
ff20: 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
ff30: 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
ff40: 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e  o xCmp() */.  in
ff50: 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c  t (*xCmp)(void*,
ff60: 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
ff70: 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
ff80: 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44  d*);.  void (*xD
ff90: 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20  el)(void*);  /* 
ffa0: 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70  Destructor for p
ffb0: 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  User */.};../*.*
ffc0: 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63  * A sort order c
ffd0: 61 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43  an be either ASC
ffe0: 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65   or DESC..*/.#de
fff0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41  fine SQLITE_SO_A
10000 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53  SC       0  /* S
10010 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
10020 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e   order */.#defin
10030 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43  e SQLITE_SO_DESC
10040 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74        1  /* Sort
10050 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72   in ascending or
10060 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  der */.#define S
10070 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e  QLITE_SO_UNDEFIN
10080 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74  ED -1 /* No sort
10090 20 6f 72 64 65 72 20 73 70 65 63 69 66 69 65 64   order specified
100a0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d   */../*.** Colum
100b0 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73  n affinity types
100c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73  ..**.** These us
100d0 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f  ed to have mnemo
100e0 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69  nic name like 'i
100f0 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
10100 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20  _INTEGER and.** 
10110 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  't' for SQLITE_A
10120 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65  FF_TEXT.  But we
10130 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74   can save a litt
10140 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70  le space and imp
10150 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65  rove.** the spee
10160 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75  d a little by nu
10170 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75  mbering the valu
10180 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79  es consecutively
10190 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68  ..**.** But rath
101a0 65 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69  er than start wi
101b0 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65  th 0 or 1, we be
101c0 67 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54  gin with 'A'.  T
101d0 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e  hat way,.** when
101e0 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69   multiple affini
101f0 74 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e  ty types are con
10200 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61  catenated into a
10210 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75   string and.** u
10220 73 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70  sed as the P4 op
10230 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c  erand, they will
10240 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c   be more readabl
10250 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c  e..**.** Note al
10260 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65  so that the nume
10270 72 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72  ric types are gr
10280 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73  ouped together s
10290 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a  o that testing.*
102a0 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20  * for a numeric 
102b0 74 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65  type is a single
102c0 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e   comparison.  An
102d0 64 20 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20  d the BLOB type 
102e0 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65  is first..*/.#de
102f0 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
10300 42 4c 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65  BLOB     'A'.#de
10310 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
10320 54 45 58 54 20 20 20 20 20 27 42 27 0a 23 64 65  TEXT     'B'.#de
10330 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
10340 4e 55 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65  NUMERIC  'C'.#de
10350 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
10360 49 4e 54 45 47 45 52 20 20 27 44 27 0a 23 64 65  INTEGER  'D'.#de
10370 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
10380 52 45 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64  REAL     'E'..#d
10390 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
103a0 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58  umericAffinity(X
103b0 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f  )  ((X)>=SQLITE_
103c0 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a  AFF_NUMERIC)../*
103d0 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
103e0 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d  FF_MASK values m
103f0 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67  asks off the sig
10400 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66  nificant bits of
10410 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20   an.** affinity 
10420 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  value..*/.#defin
10430 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
10440 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a  K     0x47../*.*
10450 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74  * Additional bit
10460 20 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e   values that can
10470 20 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e   be ORed with an
10480 20 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75   affinity withou
10490 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68  t.** changing th
104a0 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a  e affinity..**.*
104b0 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54  * The SQLITE_NOT
104c0 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63  NULL flag is a c
104d0 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55  ombination of NU
104e0 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e  LLEQ and JUMPIFN
104f0 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65  ULL..** It cause
10500 73 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f  s an assert() to
10510 20 66 69 72 65 20 69 66 20 65 69 74 68 65 72 20   fire if either 
10520 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d  operand to a com
10530 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61  parison.** opera
10540 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74  tor is NULL.  It
10550 20 69 73 20 61 64 64 65 64 20 74 6f 20 63 65 72   is added to cer
10560 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20  tain comparison 
10570 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20  operators to.** 
10580 70 72 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f  prove that the o
10590 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61  perands are alwa
105a0 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ys NOT NULL..*/.
105b0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a  #define SQLITE_J
105c0 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30  UMPIFNULL   0x10
105d0 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69    /* jumps if ei
105e0 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
105f0 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
10600 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20  SQLITE_STOREP2  
10610 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f      0x20  /* Sto
10620 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  re result in reg
10630 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e  [P2] rather than
10640 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65   jump */.#define
10650 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20   SQLITE_NULLEQ  
10660 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55       0x80  /* NU
10670 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  LL=NULL */.#defi
10680 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  ne SQLITE_NOTNUL
10690 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20  L      0x90  /* 
106a0 41 73 73 65 72 74 20 74 68 61 74 20 6f 70 65 72  Assert that oper
106b0 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e  ands are never N
106c0 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  ULL */../*.** An
106d0 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20   object of this 
106e0 74 79 70 65 20 69 73 20 63 72 65 61 74 65 64 20  type is created 
106f0 66 6f 72 20 65 61 63 68 20 76 69 72 74 75 61 6c  for each virtual
10700 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69   table present i
10710 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73  n.** the databas
10720 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20  e schema..**.** 
10730 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
10740 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64  schema is shared
10750 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20  , then there is 
10760 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
10770 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72  this.** structur
10780 65 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62  e for each datab
10790 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28  ase connection (
107a0 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75  sqlite3*) that u
107b0 73 65 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a  ses the shared.*
107c0 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69  * schema. This i
107d0 73 20 62 65 63 61 75 73 65 20 65 61 63 68 20 64  s because each d
107e0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
107f0 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74 73 20  on requires its 
10800 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e  own unique.** in
10810 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71  stance of the sq
10820 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
10830 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  le used to acces
10840 73 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  s the virtual ta
10850 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74  ble.** implement
10860 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76  ation. sqlite3_v
10870 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e  tab* handles can
10880 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20 62   not be shared b
10890 65 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61  etween.** databa
108a0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20  se connections, 
108b0 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65  even when the re
108c0 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d  st of the in-mem
108d0 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ory database.** 
108e0 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64  schema is shared
108f0 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65  , as the impleme
10900 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74  ntation often st
10910 6f 72 65 73 20 74 68 65 20 64 61 74 61 62 61 73  ores the databas
10920 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
10930 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f  handle passed to
10940 20 69 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e   it via the xCon
10950 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65 61 74  nect() or xCreat
10960 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75  e() method.** du
10970 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
10980 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20  ion internally. 
10990 54 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f  This database co
109a0 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
109b0 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75  may.** then be u
109c0 73 65 64 20 62 79 20 74 68 65 20 76 69 72 74 75  sed by the virtu
109d0 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
109e0 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73  ntation to acces
109f0 73 20 72 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a  s real tables.**
10a00 20 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61   within the data
10a10 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68  base. So that th
10a20 65 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72  ey appear as par
10a30 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73  t of the callers
10a40 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  .** transaction,
10a50 20 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20   these accesses 
10a60 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20  need to be made 
10a70 76 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74  via the same dat
10a80 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
10a90 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64  ion as that used
10aa0 20 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20   to execute SQL 
10ab0 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68  operations on th
10ac0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
10ad0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c  .**.** All VTabl
10ae0 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63  e objects that c
10af0 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73  orrespond to a s
10b00 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61  ingle table in a
10b10 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62   shared.** datab
10b20 61 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69  ase schema are i
10b30 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20  nitially stored 
10b40 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74  in a linked-list
10b50 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a   pointed to by.*
10b60 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61  * the Table.pVTa
10b70 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61  ble member varia
10b80 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ble of the corre
10b90 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f  sponding Table o
10ba0 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61  bject..** When a
10bb0 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  n sqlite3_prepar
10bc0 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  e() operation is
10bd0 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63   required to acc
10be0 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a  ess the virtual.
10bf0 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61  ** table, it sea
10c00 72 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66  rches the list f
10c10 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68  or the VTable th
10c20 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
10c30 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  o the.** databas
10c40 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69  e connection doi
10c50 6e 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67  ng the preparing
10c60 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68   so as to use th
10c70 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c  e correct.** sql
10c80 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
10c90 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65  e in the compile
10ca0 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57  d query..**.** W
10cb0 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79  hen an in-memory
10cc0 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73   Table object is
10cd0 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78   deleted (for ex
10ce0 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a  ample when the.*
10cf0 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e  * schema is bein
10d00 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73  g reloaded for s
10d10 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65  ome reason), the
10d20 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
10d30 61 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74  are not.** delet
10d40 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  ed and the sqlit
10d50 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
10d60 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e   are not xDiscon
10d70 6e 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65  nect()ed.** imme
10d80 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64  diately. Instead
10d90 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64  , they are moved
10da0 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e   from the Table.
10db0 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a  pVTable list to.
10dc0 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65  ** another linke
10dd0 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79  d list headed by
10de0 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69   the sqlite3.pDi
10df0 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20  sconnect member 
10e00 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  of the.** corres
10e10 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20  ponding sqlite3 
10e20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20  structure. They 
10e30 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64  are then deleted
10e40 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a  /xDisconnected.*
10e50 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74  * next time a st
10e60 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61  atement is prepa
10e70 72 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73  red using said s
10e80 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73  qlite3*. This is
10e90 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   done.** to avoi
10ea0 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65  d deadlock issue
10eb0 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74  s involving mult
10ec0 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74  iple sqlite3.mut
10ed0 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52  ex mutexes..** R
10ee0 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73  efer to comments
10ef0 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20   above function 
10f00 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
10f10 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a  kList() for an.*
10f20 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73  * explanation as
10f30 20 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61   to why it is sa
10f40 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74  fe to add an ent
10f50 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  ry to an sqlite3
10f60 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20  .pDisconnect.** 
10f70 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c  list without hol
10f80 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70  ding the corresp
10f90 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d  onding sqlite3.m
10fa0 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a  utex mutex..**.*
10fb0 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72  * The memory for
10fc0 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73   objects of this
10fd0 20 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20   type is always 
10fe0 61 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20  allocated by.** 
10ff0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28  sqlite3DbMalloc(
11000 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e  ), using the con
11010 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73  nection handle s
11020 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e  tored in VTable.
11030 64 62 20 61 73 0a 2a 2a 20 74 68 65 20 66 69 72  db as.** the fir
11040 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  st argument..*/.
11050 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a  struct VTable {.
11060 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
11070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
11080 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
11090 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
110a0 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  th this table */
110b0 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b  .  Module *pMod;
110c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
110d0 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c  Pointer to modul
110e0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
110f0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   */.  sqlite3_vt
11100 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20  ab *pVtab;      
11110 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74  /* Pointer to vt
11120 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20  ab instance */. 
11130 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
11140 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
11150 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
11160 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
11170 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73  re */.  u8 bCons
11180 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20  traint;         
11190 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e    /* True if con
111a0 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75 70  straints are sup
111b0 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20  ported */.  int 
111c0 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  iSavepoint;     
111d0 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f        /* Depth o
111e0 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20  f the SAVEPOINT 
111f0 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c  stack */.  VTabl
11200 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  e *pNext;       
11210 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
11220 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65  linked list (see
11230 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f   above) */.};../
11240 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20  *.** The schema 
11250 66 6f 72 20 65 61 63 68 20 53 51 4c 20 74 61 62  for each SQL tab
11260 6c 65 20 61 6e 64 20 76 69 65 77 20 69 73 20 72  le and view is r
11270 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
11280 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e  mory.** by an in
11290 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
112a0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
112b0 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62  e..*/.struct Tab
112c0 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  le {.  char *zNa
112d0 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  me;         /* N
112e0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
112f0 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f   or view */.  Co
11300 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20  lumn *aCol;     
11310 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
11320 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
11330 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  umn */.  Index *
11340 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a  pIndex;       /*
11350 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64   List of SQL ind
11360 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62  exes on this tab
11370 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  le. */.  Select 
11380 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
11390 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73   NULL for tables
113a0 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66  .  Points to def
113b0 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65  inition if a vie
113c0 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46  w. */.  FKey *pF
113d0 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Key;         /* 
113e0 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61  Linked list of a
113f0 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  ll foreign keys 
11400 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
11410 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66  .  char *zColAff
11420 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e  ;       /* Strin
11430 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
11440 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
11450 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72  column */.  Expr
11460 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20  List *pCheck;   
11470 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f   /* All CHECK co
11480 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20  nstraints */.   
11490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114a0 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73      /*   ... als
114b0 6f 20 75 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e  o used as column
114c0 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20 61 20   name list in a 
114d0 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  VIEW */.  int tn
114e0 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  um;            /
114f0 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 70 61 67  * Root BTree pag
11500 65 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65  e for this table
11510 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b   */.  i16 iPKey;
11520 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
11530 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75   not negative, u
11540 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61  se aCol[iPKey] a
11550 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20  s the rowid */. 
11560 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20   i16 nCol;      
11570 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11580 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
11590 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 31  is table */.  u1
115a0 36 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  6 nRef;         
115b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
115c0 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73  pointers to this
115d0 20 54 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45   Table */.  LogE
115e0 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20  st nRowLogEst;  
115f0 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f   /* Estimated ro
11600 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72  ws in table - fr
11610 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  om sqlite_stat1 
11620 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73  table */.  LogEs
11630 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20  t szTabRow;     
11640 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a  /* Estimated siz
11650 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20  e of each table 
11660 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  row in bytes */.
11670 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
11680 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20  ABLE_COSTMULT.  
11690 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b  LogEst costMult;
116a0 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c       /* Cost mul
116b0 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e  tiplier for usin
116c0 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  g this table */.
116d0 23 65 6e 64 69 66 0a 20 20 75 38 20 74 61 62 46  #endif.  u8 tabF
116e0 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a  lags;         /*
116f0 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61   Mask of TF_* va
11700 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 6b 65 79  lues */.  u8 key
11710 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  Conf;          /
11720 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20  * What to do in 
11730 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65  case of uniquene
11740 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69  ss conflict on i
11750 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  PKey */.#ifndef 
11760 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45  SQLITE_OMIT_ALTE
11770 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64  RTABLE.  int add
11780 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a  ColOffset;    /*
11790 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41 54   Offset in CREAT
117a0 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20  E TABLE stmt to 
117b0 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e  add a new column
117c0 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
117d0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
117e0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e  IRTUALTABLE.  in
117f0 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20  t nModuleArg;   
11800 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11810 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65  arguments to the
11820 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61   module */.  cha
11830 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b  r **azModuleArg;
11840 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31    /* 0: module 1
11850 3a 20 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62  : schema 2: vtab
11860 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73   name 3...: args
11870 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56   */.  VTable *pV
11880 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69  Table;     /* Li
11890 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a  st of VTable obj
118a0 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ects. */.#endif.
118b0 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
118c0 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  ger;   /* List o
118d0 66 20 74 72 69 67 67 65 72 73 20 73 74 6f 72 65  f triggers store
118e0 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a  d in pSchema */.
118f0 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
11900 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  a;     /* Schema
11910 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
11920 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54  his table */.  T
11930 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69  able *pNextZombi
11940 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74  e;  /* Next on t
11950 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65  he Parse.pZombie
11960 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  Tab list */.};..
11970 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
11980 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74  lues for Table.t
11990 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54  abFlags..**.** T
119a0 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c  F_OOOHidden appl
119b0 69 65 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72  ies to tables or
119c0 20 76 69 65 77 20 74 68 61 74 20 68 61 76 65 20   view that have 
119d0 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74  hidden columns t
119e0 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f  hat are.** follo
119f0 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65  wed by non-hidde
11a00 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d  n columns.  Exam
11a10 70 6c 65 3a 20 20 22 43 52 45 41 54 45 20 56 49  ple:  "CREATE VI
11a20 52 54 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53  RTUAL TABLE x US
11a30 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48  ING.** vtab1(a H
11a40 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69  IDDEN, b);".  Si
11a50 6e 63 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e  nce "b" is a non
11a60 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62  -hidden column b
11a70 75 74 20 22 61 22 20 69 73 20 68 69 64 64 65 6e  ut "a" is hidden
11a80 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48  ,.** the TF_OOOH
11a90 69 64 64 65 6e 20 61 74 74 72 69 62 75 74 65 20  idden attribute 
11aa0 77 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74  would apply in t
11ab0 68 69 73 20 63 61 73 65 2e 20 20 53 75 63 68 20  his case.  Such 
11ac0 74 61 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a  tables require.*
11ad0 2a 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69  * special handli
11ae0 6e 67 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54  ng during INSERT
11af0 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a   processing..*/.
11b00 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f  #define TF_Reado
11b10 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30 31 20  nly        0x01 
11b20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20     /* Read-only 
11b30 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a  system table */.
11b40 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d  #define TF_Ephem
11b50 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 32 20  eral       0x02 
11b60 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72     /* An ephemer
11b70 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  al table */.#def
11b80 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72  ine TF_HasPrimar
11b90 79 4b 65 79 20 20 20 30 78 30 34 20 20 20 20 2f  yKey   0x04    /
11ba0 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20 70 72  * Table has a pr
11bb0 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65  imary key */.#de
11bc0 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63 72  fine TF_Autoincr
11bd0 65 6d 65 6e 74 20 20 20 30 78 30 38 20 20 20 20  ement   0x08    
11be0 2f 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61  /* Integer prima
11bf0 72 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e  ry key is autoin
11c00 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69  crement */.#defi
11c10 6e 65 20 54 46 5f 56 69 72 74 75 61 6c 20 20 20  ne TF_Virtual   
11c20 20 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a        0x10    /*
11c30 20 49 73 20 61 20 76 69 72 74 75 61 6c 20 74 61   Is a virtual ta
11c40 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
11c50 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 20 20  F_WithoutRowid  
11c60 20 20 30 78 32 30 20 20 20 20 2f 2a 20 4e 6f 20    0x20    /* No 
11c70 72 6f 77 69 64 2e 20 20 50 52 49 4d 41 52 59 20  rowid.  PRIMARY 
11c80 4b 45 59 20 69 73 20 74 68 65 20 6b 65 79 20 2a  KEY is the key *
11c90 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4e 6f 56  /.#define TF_NoV
11ca0 69 73 69 62 6c 65 52 6f 77 69 64 20 20 30 78 34  isibleRowid  0x4
11cb0 30 20 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d  0    /* No user-
11cc0 76 69 73 69 62 6c 65 20 22 72 6f 77 69 64 22 20  visible "rowid" 
11cd0 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e  column */.#defin
11ce0 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20  e TF_OOOHidden  
11cf0 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20       0x80    /* 
11d00 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64  Out-of-Order hid
11d10 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 0a  den columns */..
11d20 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73  ./*.** Test to s
11d30 65 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ee whether or no
11d40 74 20 61 20 74 61 62 6c 65 20 69 73 20 61 20 76  t a table is a v
11d50 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54  irtual table.  T
11d60 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61  his is.** done a
11d70 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61  s a macro so tha
11d80 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74  t it will be opt
11d90 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20  imized out when 
11da0 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
11db0 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74   support is omit
11dc0 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69  ted from the bui
11dd0 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ld..*/.#ifndef S
11de0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
11df0 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e  ALTABLE.#  defin
11e00 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20  e IsVirtual(X)  
11e10 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c      (((X)->tabFl
11e20 61 67 73 20 26 20 54 46 5f 56 69 72 74 75 61 6c  ags & TF_Virtual
11e30 29 21 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20 64  )!=0).#else.#  d
11e40 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28  efine IsVirtual(
11e50 58 29 20 20 20 20 20 20 30 0a 23 65 6e 64 69 66  X)      0.#endif
11e60 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
11e70 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61  o determine if a
11e80 20 63 6f 6c 75 6d 6e 20 69 73 20 68 69 64 64 65   column is hidde
11e90 6e 2e 20 20 49 73 4f 72 64 69 6e 61 72 79 48 69  n.  IsOrdinaryHi
11ea0 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20  ddenColumn().** 
11eb0 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 6e  only works for n
11ec0 6f 6e 2d 76 69 72 74 75 61 6c 20 74 61 62 6c 65  on-virtual table
11ed0 73 20 28 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  s (ordinary tabl
11ee0 65 73 20 61 6e 64 20 76 69 65 77 73 29 20 61 6e  es and views) an
11ef0 64 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 66  d is.** always f
11f00 61 6c 73 65 20 75 6e 6c 65 73 73 20 53 51 4c 49  alse unless SQLI
11f10 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e  TE_ENABLE_HIDDEN
11f20 5f 43 4f 4c 55 4d 4e 53 20 69 73 20 64 65 66 69  _COLUMNS is defi
11f30 6e 65 64 2e 20 20 54 68 65 0a 2a 2a 20 49 73 48  ned.  The.** IsH
11f40 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61  iddenColumn() ma
11f50 63 72 6f 20 69 73 20 67 65 6e 65 72 61 6c 20 70  cro is general p
11f60 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20 64  urpose..*/.#if d
11f70 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
11f80 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55  ABLE_HIDDEN_COLU
11f90 4d 4e 53 29 0a 23 20 20 64 65 66 69 6e 65 20 49  MNS).#  define I
11fa0 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
11fb0 20 20 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e           (((X)->
11fc0 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
11fd0 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23  AG_HIDDEN)!=0).#
11fe0 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e    define IsOrdin
11ff0 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28  aryHiddenColumn(
12000 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61  X) (((X)->colFla
12010 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
12020 44 45 4e 29 21 3d 30 29 0a 23 65 6c 69 66 20 21  DEN)!=0).#elif !
12030 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
12040 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
12050 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  ).#  define IsHi
12060 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20  ddenColumn(X)   
12070 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c        (((X)->col
12080 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
12090 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64  HIDDEN)!=0).#  d
120a0 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79  efine IsOrdinary
120b0 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
120c0 30 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  0.#else.#  defin
120d0 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
120e0 28 58 29 20 20 20 20 20 20 20 20 20 30 0a 23 20  (X)         0.# 
120f0 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61   define IsOrdina
12100 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  ryHiddenColumn(X
12110 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20  ) 0.#endif.../* 
12120 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20 68  Does the table h
12130 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23  ave a rowid */.#
12140 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28  define HasRowid(
12150 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61  X)     (((X)->ta
12160 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68  bFlags & TF_With
12170 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64  outRowid)==0).#d
12180 65 66 69 6e 65 20 56 69 73 69 62 6c 65 52 6f 77  efine VisibleRow
12190 69 64 28 58 29 20 28 28 28 58 29 2d 3e 74 61 62  id(X) (((X)->tab
121a0 46 6c 61 67 73 20 26 20 54 46 5f 4e 6f 56 69 73  Flags & TF_NoVis
121b0 69 62 6c 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a  ibleRowid)==0)..
121c0 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69  /*.** Each forei
121d0 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
121e0 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  t is an instance
121f0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
12200 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
12210 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79  ** A foreign key
12220 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77   is associated w
12230 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20  ith two tables. 
12240 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c   The "from" tabl
12250 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c  e is.** the tabl
12260 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
12270 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
12280 6c 61 75 73 65 20 74 68 61 74 20 63 72 65 61 74  lause that creat
12290 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a  es the foreign.*
122a0 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22  * key.  The "to"
122b0 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 74 61   table is the ta
122c0 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65  ble that is name
122d0 64 20 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e  d in the REFEREN
122e0 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43  CES clause..** C
122f0 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65 78 61  onsider this exa
12300 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  mple:.**.**     
12310 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78 31  CREATE TABLE ex1
12320 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54  (.**       a INT
12330 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
12340 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54  ,.**       b INT
12350 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20  EGER CONSTRAINT 
12360 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20 65  fk1 REFERENCES e
12370 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a  x2(x).**     );.
12380 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67  **.** For foreig
12390 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65  n key "fk1", the
123a0 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22   from-table is "
123b0 65 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d  ex1" and the to-
123c0 74 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a  table is "ex2"..
123d0 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61  ** Equivalent na
123e0 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66  mes:.**.**     f
123f0 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69  rom-table == chi
12400 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20  ld-table.**     
12410 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61    to-table == pa
12420 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a  rent-table.**.**
12430 20 45 61 63 68 20 52 45 46 45 52 45 4e 43 45 53   Each REFERENCES
12440 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65   clause generate
12450 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
12460 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
12470 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63  tructure.** whic
12480 68 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  h is attached to
12490 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e   the from-table.
124a0 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e    The to-table n
124b0 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68  eed not exist wh
124c0 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74  en.** the from-t
124d0 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e  able is created.
124e0 20 20 54 68 65 20 65 78 69 73 74 65 6e 63 65 20    The existence 
124f0 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  of the to-table 
12500 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a  is not checked..
12510 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f  **.** The list o
12520 66 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f  f all parents fo
12530 72 20 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20  r child Table X 
12540 69 73 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b  is held at X.pFK
12550 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74  ey..**.** A list
12560 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e   of all children
12570 20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d   for a table nam
12580 65 64 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68  ed Z (which migh
12590 74 20 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74  t not even exist
125a0 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20  ).** is held in 
125b0 53 63 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20  Schema.fkeyHash 
125c0 77 69 74 68 20 61 20 68 61 73 68 20 6b 65 79 20  with a hash key 
125d0 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  of Z..*/.struct 
125e0 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a  FKey {.  Table *
125f0 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61  pFrom;     /* Ta
12600 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ble containing t
12610 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
12620 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64  ause (aka: Child
12630 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65  ) */.  FKey *pNe
12640 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74  xtFrom;  /* Next
12650 20 46 4b 65 79 20 77 69 74 68 20 74 68 65 20 73   FKey with the s
12660 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65  ame in pFrom. Ne
12670 78 74 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72  xt parent of pFr
12680 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  om */.  char *zT
12690 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  o;        /* Nam
126a0 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20  e of table that 
126b0 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74  the key points t
126c0 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20  o (aka: Parent) 
126d0 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
126e0 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77  To;    /* Next w
126f0 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f  ith the same zTo
12700 2e 20 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20  . Next child of 
12710 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  zTo. */.  FKey *
12720 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50  pPrevTo;    /* P
12730 72 65 76 69 6f 75 73 20 77 69 74 68 20 74 68 65  revious with the
12740 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69   same zTo */.  i
12750 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20  nt nCol;        
12760 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
12770 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65  lumns in this ke
12780 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d  y */.  /* EV: R-
12790 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20  30323-21917 */. 
127a0 20 75 38 20 69 73 44 65 66 65 72 72 65 64 3b 20   u8 isDeferred; 
127b0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
127c0 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63   constraint chec
127d0 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72 65 64  king is deferred
127e0 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a   till COMMIT */.
127f0 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b    u8 aAction[2];
12800 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45          /* ON DE
12810 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41  LETE and ON UPDA
12820 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70  TE actions, resp
12830 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72  ectively */.  Tr
12840 69 67 67 65 72 20 2a 61 70 54 72 69 67 67 65 72  igger *apTrigger
12850 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20  [2];/* Triggers 
12860 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63  for aAction[] ac
12870 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63  tions */.  struc
12880 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20  t sColMap {     
12890 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63   /* Mapping of c
128a0 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20  olumns in pFrom 
128b0 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54  to columns in zT
128c0 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72  o */.    int iFr
128d0 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  om;            /
128e0 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d  * Index of colum
128f0 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20  n in pFrom */.  
12900 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20    char *zCol;   
12910 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
12920 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f  of column in zTo
12930 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50  .  If NULL use P
12940 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20  RIMARY KEY */.  
12950 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20  } aCol[1];      
12960 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74        /* One ent
12970 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e  ry for each of n
12980 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d  Col columns */.}
12990 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20  ;../*.** SQLite 
129a0 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69  supports many di
129b0 66 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20  fferent ways to 
129c0 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72  resolve a constr
129d0 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20  aint.** error.  
129e0 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73  ROLLBACK process
129f0 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ing means that a
12a00 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
12a10 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20  ation.** causes 
12a20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
12a30 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c   process to fail
12a40 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72   and for the cur
12a50 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
12a60 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64  .** to be rolled
12a70 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72   back.  ABORT pr
12a80 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
12a90 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
12aa0 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73  process.** fails
12ab0 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63   and any prior c
12ac0 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74  hanges from that
12ad0 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61   one operation a
12ae0 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a  re backed out,.*
12af0 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e 73 61  * but the transa
12b00 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c  ction is not rol
12b10 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20  led back.  FAIL 
12b20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
12b30 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65   that.** the ope
12b40 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65  ration in progre
12b50 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74  ss stops and ret
12b60 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f  urns an error co
12b70 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a  de.  But prior.*
12b80 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f  * changes due to
12b90 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74   the same operat
12ba0 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b  ion are not back
12bb0 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f  ed out and no ro
12bc0 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73  llback.** occurs
12bd0 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20  .  IGNORE means 
12be0 74 68 61 74 20 74 68 65 20 70 61 72 74 69 63 75  that the particu
12bf0 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63 61 75  lar row that cau
12c00 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69  sed the constrai
12c10 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e  nt.** error is n
12c20 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75  ot inserted or u
12c30 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73  pdated.  Process
12c40 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e  ing continues an
12c50 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73  d no error.** is
12c60 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c   returned.  REPL
12c70 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70  ACE means that p
12c80 72 65 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  reexisting datab
12c90 61 73 65 20 72 6f 77 73 20 74 68 61 74 20 63 61  ase rows that ca
12ca0 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45  used.** a UNIQUE
12cb0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
12cc0 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65  ation are remove
12cd0 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65  d so that the ne
12ce0 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75  w insert or.** u
12cf0 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65  pdate can procee
12d00 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63  d.  Processing c
12d10 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20  ontinues and no 
12d20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65  error is reporte
12d30 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43  d..**.** RESTRIC
12d40 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20  T, SETNULL, and 
12d50 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20  CASCADE actions 
12d60 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f  apply only to fo
12d70 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52  reign keys..** R
12d80 45 53 54 52 49 43 54 20 69 73 20 74 68 65 20 73  ESTRICT is the s
12d90 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72  ame as ABORT for
12da0 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69   IMMEDIATE forei
12db0 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a  gn keys and the.
12dc0 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42  ** same as ROLLB
12dd0 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44  ACK for DEFERRED
12de0 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20   keys.  SETNULL 
12df0 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 66  means that the f
12e00 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73  oreign.** key is
12e10 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43   set to NULL.  C
12e20 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61  ASCADE means tha
12e30 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50  t a DELETE or UP
12e40 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72  DATE of the.** r
12e50 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20  eferenced table 
12e60 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74 65  row is propagate
12e70 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74  d into the row t
12e80 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a  hat holds the.**
12e90 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a   foreign key..**
12ea0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
12eb0 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65  g symbolic value
12ec0 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65  s are used to re
12ed0 63 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a  cord which type.
12ee0 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20  ** of action to 
12ef0 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  take..*/.#define
12f00 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20   OE_None     0  
12f10 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20   /* There is no 
12f20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68  constraint to ch
12f30 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  eck */.#define O
12f40 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f  E_Rollback 1   /
12f50 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61  * Fail the opera
12f60 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63  tion and rollbac
12f70 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  k the transactio
12f80 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
12f90 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20  Abort    2   /* 
12fa0 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73  Back out changes
12fb0 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62   but do no rollb
12fc0 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ack transaction 
12fd0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61  */.#define OE_Fa
12fe0 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74  il     3   /* St
12ff0 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  op the operation
13000 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70   but leave all p
13010 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a  rior changes */.
13020 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72  #define OE_Ignor
13030 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72  e   4   /* Ignor
13040 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20  e the error. Do 
13050 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52  not do the INSER
13060 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23  T or UPDATE */.#
13070 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63  define OE_Replac
13080 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65  e  5   /* Delete
13090 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64   existing record
130a0 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54  , then do INSERT
130b0 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23   or UPDATE */..#
130c0 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69  define OE_Restri
130d0 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f  ct 6   /* OE_Abo
130e0 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  rt for IMMEDIATE
130f0 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f  , OE_Rollback fo
13100 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64  r DEFERRED */.#d
13110 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c  efine OE_SetNull
13120 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65    7   /* Set the
13130 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
13140 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64  ue to NULL */.#d
13150 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74  efine OE_SetDflt
13160 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65    8   /* Set the
13170 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
13180 75 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c  ue to its defaul
13190 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  t */.#define OE_
131a0 43 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20  Cascade  9   /* 
131b0 43 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e  Cascade the chan
131c0 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ges */..#define 
131d0 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20  OE_Default  10  
131e0 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74  /* Do whatever t
131f0 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f  he default actio
13200 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  n is */.../*.** 
13210 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
13220 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
13230 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
13240 20 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   as the first.**
13250 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c   argument to sql
13260 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61  ite3VdbeKeyCompa
13270 72 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74  re and is used t
13280 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 0a 2a 2a  o control the.**
13290 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74   comparison of t
132a0 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79  he two index key
132b0 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68  s..**.** Note th
132c0 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20  at aSortOrder[] 
132d0 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65  and aColl[] have
132e0 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e   nField+1 slots.
132f0 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e    There.** are n
13300 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20  Field slots for 
13310 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61  the columns of a
13320 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65  n index then one
13330 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66   extra slot.** f
13340 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 74 20  or the rowid at 
13350 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
13360 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75  ct KeyInfo {.  u
13370 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  32 nRef;        
13380 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13390 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68  references to th
133a0 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63  is KeyInfo objec
133b0 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  t */.  u8 enc;  
133c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
133d0 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e  xt encoding - on
133e0 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f  e of the SQLITE_
133f0 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  UTF* values */. 
13400 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20   u16 nField;    
13410 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13420 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e  f key columns in
13430 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
13440 75 31 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20  u16 nXField;    
13450 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13460 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20   columns beyond 
13470 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20  the key columns 
13480 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
13490 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
134a0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
134b0 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  ion */.  u8 *aSo
134c0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20  rtOrder;     /* 
134d0 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65  Sort order for e
134e0 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20  ach column. */. 
134f0 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b   CollSeq *aColl[
13500 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  1];  /* Collatin
13510 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65  g sequence for e
13520 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20  ach term of the 
13530 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  key */.};../*.**
13540 20 54 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c   This object hol
13550 64 73 20 61 20 72 65 63 6f 72 64 20 77 68 69 63  ds a record whic
13560 68 20 68 61 73 20 62 65 65 6e 20 70 61 72 73 65  h has been parse
13570 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76  d out into indiv
13580 69 64 75 61 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c  idual.** fields,
13590 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   for the purpose
135a0 73 20 6f 66 20 64 6f 69 6e 67 20 61 20 63 6f 6d  s of doing a com
135b0 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41  parison..**.** A
135c0 20 72 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62   record is an ob
135d0 6a 65 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69  ject that contai
135e0 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66  ns one or more f
135f0 69 65 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a  ields of data..*
13600 2a 20 52 65 63 6f 72 64 73 20 61 72 65 20 75 73  * Records are us
13610 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
13620 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62  content of a tab
13630 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74  le row and to st
13640 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f  ore.** the key o
13650 66 20 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62  f an index.  A b
13660 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  lob encoding of 
13670 61 20 72 65 63 6f 72 64 20 69 73 20 63 72 65 61  a record is crea
13680 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50  ted by.** the OP
13690 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f  _MakeRecord opco
136a0 64 65 20 6f 66 20 74 68 65 20 56 44 42 45 20 61  de of the VDBE a
136b0 6e 64 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c  nd is disassembl
136c0 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f  ed by the.** OP_
136d0 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a  Column opcode..*
136e0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
136f0 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20   of this object 
13700 73 65 72 76 65 73 20 61 73 20 61 20 22 6b 65 79  serves as a "key
13710 22 20 66 6f 72 20 64 6f 69 6e 67 20 61 20 73 65  " for doing a se
13720 61 72 63 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e  arch on.** an in
13730 64 65 78 20 62 2b 74 72 65 65 2e 20 54 68 65 20  dex b+tree. The 
13740 67 6f 61 6c 20 6f 66 20 74 68 65 20 73 65 61 72  goal of the sear
13750 63 68 20 69 73 20 74 6f 20 66 69 6e 64 20 74 68  ch is to find th
13760 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20  e entry that.** 
13770 69 73 20 63 6c 6f 73 65 64 20 74 6f 20 74 68 65  is closed to the
13780 20 6b 65 79 20 64 65 73 63 72 69 62 65 64 20 62   key described b
13790 79 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20  y this object.  
137a0 54 68 69 73 20 6f 62 6a 65 63 74 20 6d 69 67 68  This object migh
137b0 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20 61  t hold.** just a
137c0 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b   prefix of the k
137d0 65 79 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20  ey.  The number 
137e0 6f 66 20 66 69 65 6c 64 73 20 69 73 20 67 69 76  of fields is giv
137f0 65 6e 20 62 79 0a 2a 2a 20 70 4b 65 79 49 6e 66  en by.** pKeyInf
13800 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  o->nField..**.**
13810 20 54 68 65 20 72 31 20 61 6e 64 20 72 32 20 66   The r1 and r2 f
13820 69 65 6c 64 73 20 61 72 65 20 74 68 65 20 76 61  ields are the va
13830 6c 75 65 73 20 74 6f 20 72 65 74 75 72 6e 20 69  lues to return i
13840 66 20 74 68 69 73 20 6b 65 79 20 69 73 20 6c 65  f this key is le
13850 73 73 20 74 68 61 6e 0a 2a 2a 20 6f 72 20 67 72  ss than.** or gr
13860 65 61 74 65 72 20 74 68 61 6e 20 61 20 6b 65 79  eater than a key
13870 20 69 6e 20 74 68 65 20 62 74 72 65 65 2c 20 72   in the btree, r
13880 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68  espectively.  Th
13890 65 73 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79  ese are normally
138a0 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b 31 20 72 65  .** -1 and +1 re
138b0 73 70 65 63 74 69 76 65 6c 79 2c 20 62 75 74 20  spectively, but 
138c0 6d 69 67 68 74 20 62 65 20 69 6e 76 65 72 74 65  might be inverte
138d0 64 20 74 6f 20 2b 31 20 61 6e 64 20 2d 31 20 69  d to +1 and -1 i
138e0 66 20 74 68 65 20 62 2d 74 72 65 65 0a 2a 2a 20  f the b-tree.** 
138f0 69 73 20 69 6e 20 44 45 53 43 20 6f 72 64 65 72  is in DESC order
13900 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20  ..**.** The key 
13910 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74  comparison funct
13920 69 6f 6e 73 20 61 63 74 75 61 6c 6c 79 20 72 65  ions actually re
13930 74 75 72 6e 20 64 65 66 61 75 6c 74 5f 72 63 20  turn default_rc 
13940 77 68 65 6e 20 74 68 65 79 20 66 69 6e 64 0a 2a  when they find.*
13950 2a 20 61 6e 20 65 71 75 61 6c 73 20 63 6f 6d 70  * an equals comp
13960 61 72 69 73 6f 6e 2e 20 20 64 65 66 61 75 6c 74  arison.  default
13970 5f 72 63 20 63 61 6e 20 62 65 20 2d 31 2c 20 30  _rc can be -1, 0
13980 2c 20 6f 72 20 2b 31 2e 20 20 49 66 20 74 68 65  , or +1.  If the
13990 72 65 20 61 72 65 0a 2a 2a 20 6d 75 6c 74 69 70  re are.** multip
139a0 6c 65 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  le entries in th
139b0 65 20 62 2d 74 72 65 65 20 77 69 74 68 20 74 68  e b-tree with th
139c0 65 20 73 61 6d 65 20 6b 65 79 20 28 77 68 65 6e  e same key (when
139d0 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a   only looking.**
139e0 20 61 74 20 74 68 65 20 66 69 72 73 74 20 70 4b   at the first pK
139f0 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c  eyInfo->nFields,
13a00 29 20 74 68 65 6e 20 64 65 66 61 75 6c 74 5f 72  ) then default_r
13a10 63 20 63 61 6e 20 62 65 20 73 65 74 20 74 6f 20  c can be set to 
13a20 2d 31 20 74 6f 0a 2a 2a 20 63 61 75 73 65 20 74  -1 to.** cause t
13a30 68 65 20 73 65 61 72 63 68 20 74 6f 20 66 69 6e  he search to fin
13a40 64 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68  d the last match
13a50 2c 20 6f 72 20 2b 31 20 74 6f 20 63 61 75 73 65  , or +1 to cause
13a60 20 74 68 65 20 73 65 61 72 63 68 20 74 6f 0a 2a   the search to.*
13a70 2a 20 66 69 6e 64 20 74 68 65 20 66 69 72 73 74  * find the first
13a80 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68   match..**.** Th
13a90 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e  e key comparison
13aa0 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20   functions will 
13ab0 73 65 74 20 65 71 53 65 65 6e 20 74 6f 20 74 72  set eqSeen to tr
13ac0 75 65 20 69 66 20 74 68 65 79 20 65 76 65 72 0a  ue if they ever.
13ad0 2a 2a 20 67 65 74 20 61 6e 64 20 65 71 75 61 6c  ** get and equal
13ae0 20 72 65 73 75 6c 74 73 20 77 68 65 6e 20 63 6f   results when co
13af0 6d 70 61 72 69 6e 67 20 74 68 69 73 20 73 74 72  mparing this str
13b00 75 63 74 75 72 65 20 74 6f 20 61 20 62 2d 74 72  ucture to a b-tr
13b10 65 65 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 57 68  ee record..** Wh
13b20 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 21 3d 30  en default_rc!=0
13b30 2c 20 74 68 65 20 73 65 61 72 63 68 20 6d 69 67  , the search mig
13b40 68 74 20 65 6e 64 20 75 70 20 6f 6e 20 74 68 65  ht end up on the
13b50 20 72 65 63 6f 72 64 20 69 6d 6d 65 64 69 61 74   record immediat
13b60 65 6c 79 0a 2a 2a 20 62 65 66 6f 72 65 20 74 68  ely.** before th
13b70 65 20 66 69 72 73 74 20 6d 61 74 63 68 20 6f 72  e first match or
13b80 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74   immediately aft
13b90 65 72 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63  er the last matc
13ba0 68 2e 20 20 54 68 65 0a 2a 2a 20 65 71 53 65 65  h.  The.** eqSee
13bb0 6e 20 66 69 65 6c 64 20 77 69 6c 6c 20 69 6e 64  n field will ind
13bc0 69 63 61 74 65 20 77 68 65 74 68 65 72 20 6f 72  icate whether or
13bd0 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20 6d 61   not an exact ma
13be0 74 63 68 20 65 78 69 73 74 73 20 69 6e 20 74 68  tch exists in th
13bf0 65 0a 2a 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a  e.** b-tree..*/.
13c00 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52  struct UnpackedR
13c10 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66  ecord {.  KeyInf
13c20 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a  o *pKeyInfo;  /*
13c30 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73   Collation and s
13c40 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d  ort-order inform
13c50 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ation */.  Mem *
13c60 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  aMem;          /
13c70 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31  * Values */.  u1
13c80 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  6 nField;       
13c90 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
13ca0 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b  ntries in apMem[
13cb0 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c  ] */.  i8 defaul
13cc0 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f  t_rc;      /* Co
13cd0 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20  mparison result 
13ce0 69 66 20 6b 65 79 73 20 61 72 65 20 65 71 75 61  if keys are equa
13cf0 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64  l */.  u8 errCod
13d00 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72  e;         /* Er
13d10 72 6f 72 20 64 65 74 65 63 74 65 64 20 62 79 20  ror detected by 
13d20 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28  xRecordCompare (
13d30 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d  CORRUPT or NOMEM
13d40 29 20 2a 2f 0a 20 20 69 38 20 72 31 3b 20 20 20  ) */.  i8 r1;   
13d50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
13d60 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66  lue to return if
13d70 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a   (lhs > rhs) */.
13d80 20 20 69 38 20 72 32 3b 20 20 20 20 20 20 20 20    i8 r2;        
13d90 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
13da0 6f 20 72 65 74 75 72 6e 20 69 66 20 28 72 68 73  o return if (rhs
13db0 20 3c 20 6c 68 73 29 20 2a 2f 0a 20 20 75 38 20   < lhs) */.  u8 
13dc0 65 71 53 65 65 6e 3b 20 20 20 20 20 20 20 20 20  eqSeen;         
13dd0 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 20 65   /* True if an e
13de0 71 75 61 6c 69 74 79 20 63 6f 6d 70 61 72 69 73  quality comparis
13df0 6f 6e 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e  on has been seen
13e00 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45   */.};.../*.** E
13e10 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73  ach SQL index is
13e20 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
13e30 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20  memory by an.** 
13e40 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
13e50 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
13e60 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ure..**.** The c
13e70 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61  olumns of the ta
13e80 62 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f 20  ble that are to 
13e90 62 65 20 69 6e 64 65 78 65 64 20 61 72 65 20 64  be indexed are d
13ea0 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74  escribed.** by t
13eb0 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69  he aiColumn[] fi
13ec0 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72 75  eld of this stru
13ed0 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d  cture.  For exam
13ee0 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20  ple, suppose.** 
13ef0 77 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c  we have the foll
13f00 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20  owing table and 
13f10 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  index:.**.**    
13f20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 45 78   CREATE TABLE Ex
13f30 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74  1(c1 int, c2 int
13f40 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20  , c3 text);.**  
13f50 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
13f60 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31  Ex2 ON Ex1(c3,c1
13f70 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  );.**.** In the 
13f80 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20  Table structure 
13f90 64 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20  describing Ex1, 
13fa0 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20  nCol==3 because 
13fb0 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72  there are.** thr
13fc0 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  ee columns in th
13fd0 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65  e table.  In the
13fe0 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65   Index structure
13ff0 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45   describing.** E
14000 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73  x2, nColumn==2 s
14010 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33 20  ince 2 of the 3 
14020 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61  columns of Ex1 a
14030 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54  re indexed..** T
14040 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f  he value of aiCo
14050 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20  lumn is {2, 0}. 
14060 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20   aiColumn[0]==2 
14070 62 65 63 61 75 73 65 20 74 68 65 0a 2a 2a 20 66  because the.** f
14080 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  irst column to b
14090 65 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68  e indexed (c3) h
140a0 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32  as an index of 2
140b0 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a   in Ex1.aCol[]..
140c0 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f  ** The second co
140d0 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
140e0 65 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69  ed (c1) has an i
140f0 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20  ndex of 0 in.** 
14100 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63  Ex1.aCol[], henc
14110 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31  e Ex2.aiColumn[1
14120 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ]==0..**.** The 
14130 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69  Index.onError fi
14140 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77  eld determines w
14150 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
14160 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  e indexed column
14170 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69  s.** must be uni
14180 71 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20  que and what to 
14190 64 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e  do if they are n
141a0 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e  ot.  When Index.
141b0 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c  onError=OE_None,
141c0 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69  .** it means thi
141d0 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75  s is not a uniqu
141e0 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77  e index.  Otherw
141f0 69 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71  ise it is a uniq
14200 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20  ue index.** and 
14210 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64  the value of Ind
14220 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63  ex.onError indic
14230 61 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f  ate the which co
14240 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
14250 6e 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74  n.** algorithm t
14260 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65  o employ wheneve
14270 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  r an attempt is 
14280 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61  made to insert a
14290 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65   non-unique.** e
142a0 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68  lement..**.** Wh
142b0 69 6c 65 20 70 61 72 73 69 6e 67 20 61 20 43 52  ile parsing a CR
142c0 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52  EATE TABLE or CR
142d0 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65  EATE INDEX state
142e0 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f  ment in order to
142f0 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 56 44 42  .** generate VDB
14300 45 20 63 6f 64 65 20 28 61 73 20 6f 70 70 6f 73  E code (as oppos
14310 65 64 20 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e  ed to parsing on
14320 65 20 72 65 61 64 20 66 72 6f 6d 20 61 6e 20 73  e read from an s
14330 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20  qlite_master.** 
14340 74 61 62 6c 65 20 61 73 20 70 61 72 74 20 6f 66  table as part of
14350 20 70 61 72 73 69 6e 67 20 61 6e 20 65 78 69 73   parsing an exis
14360 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 73 63  ting database sc
14370 68 65 6d 61 29 2c 20 74 72 61 6e 73 69 65 6e 74  hema), transient
14380 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66   instances.** of
14390 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
143a0 6d 61 79 20 62 65 20 63 72 65 61 74 65 64 2e 20  may be created. 
143b0 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
143c0 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76 61 72 69   Index.tnum vari
143d0 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73 65 64 20  able is.** used 
143e0 74 6f 20 73 74 6f 72 65 20 74 68 65 20 61 64 64  to store the add
143f0 72 65 73 73 20 6f 66 20 61 20 56 44 42 45 20 69  ress of a VDBE i
14400 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20  nstruction, not 
14410 61 20 64 61 74 61 62 61 73 65 20 70 61 67 65 0a  a database page.
14420 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74 20 63 61  ** number (it ca
14430 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61 74 61 62  nnot - the datab
14440 61 73 65 20 70 61 67 65 20 69 73 20 6e 6f 74 20  ase page is not 
14450 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74 69 6c 20  allocated until 
14460 74 68 65 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67  the VDBE.** prog
14470 72 61 6d 20 69 73 20 65 78 65 63 75 74 65 64 29  ram is executed)
14480 2e 20 53 65 65 20 63 6f 6e 76 65 72 74 54 6f 57  . See convertToW
14490 69 74 68 6f 75 74 52 6f 77 69 64 54 61 62 6c 65  ithoutRowidTable
144a0 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
144b0 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20  */.struct Index 
144c0 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
144e0 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64  Name of this ind
144f0 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43  ex */.  i16 *aiC
14500 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
14510 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e   /* Which column
14520 73 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  s are used by th
14530 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69  is index.  1st i
14540 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  s 0 */.  LogEst 
14550 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20  *aiRowLogEst;   
14560 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a    /* From ANALYZ
14570 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c  E: Est. rows sel
14580 65 63 74 65 64 20 62 79 20 65 61 63 68 20 63 6f  ected by each co
14590 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  lumn */.  Table 
145a0 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  *pTable;        
145b0 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61     /* The SQL ta
145c0 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65  ble being indexe
145d0 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  d */.  char *zCo
145e0 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20  lAff;           
145f0 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69  /* String defini
14600 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ng the affinity 
14610 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  of each column *
14620 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74  /.  Index *pNext
14630 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14640 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61  The next index a
14650 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
14660 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f  he same table */
14670 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
14680 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  ma;         /* S
14690 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
146a0 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
146b0 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b   u8 *aSortOrder;
146c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72            /* for
146d0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72   each column: Tr
146e0 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d  ue==DESC, False=
146f0 3d 41 53 43 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  =ASC */.  const 
14700 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20  char **azColl;  
14710 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63     /* Array of c
14720 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
14730 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65  e names for inde
14740 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61  x */.  Expr *pPa
14750 72 74 49 64 78 57 68 65 72 65 3b 20 20 20 20 20  rtIdxWhere;     
14760 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
14770 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69  for partial indi
14780 63 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  ces */.  ExprLis
14790 74 20 2a 61 43 6f 6c 45 78 70 72 3b 20 20 20 20  t *aColExpr;    
147a0 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78 70 72    /* Column expr
147b0 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  essions */.  int
147c0 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
147d0 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65        /* DB Page
147e0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74   containing root
147f0 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a   of this index *
14800 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78  /.  LogEst szIdx
14810 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Row;         /* 
14820 45 73 74 69 6d 61 74 65 64 20 61 76 65 72 61 67  Estimated averag
14830 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79  e row size in by
14840 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65  tes */.  u16 nKe
14850 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  yCol;           
14860 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
14870 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74  olumns forming t
14880 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20  he key */.  u16 
14890 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  nColumn;        
148a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
148b0 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64  f columns stored
148c0 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
148d0 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20  .  u8 onError;  
148e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
148f0 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f  E_Abort, OE_Igno
14900 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20  re, OE_Replace, 
14910 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20  or OE_None */.  
14920 75 6e 73 69 67 6e 65 64 20 69 64 78 54 79 70 65  unsigned idxType
14930 3a 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55  :2;      /* 1==U
14940 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52  NIQUE, 2==PRIMAR
14950 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45  Y KEY, 0==CREATE
14960 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69   INDEX */.  unsi
14970 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a  gned bUnordered:
14980 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73  1;   /* Use this
14990 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72   index for == or
149a0 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79   IN queries only
149b0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75   */.  unsigned u
149c0 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f  niqNotNull:1;  /
149d0 2a 20 54 72 75 65 20 69 66 20 55 4e 49 51 55 45  * True if UNIQUE
149e0 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f   and NOT NULL fo
149f0 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f  r all columns */
14a00 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65  .  unsigned isRe
14a10 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54  sized:1;    /* T
14a20 72 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64  rue if resizeInd
14a30 65 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62  exObject() has b
14a40 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
14a50 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72  unsigned isCover
14a60 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  ing:1;   /* True
14a70 20 69 66 20 74 68 69 73 20 69 73 20 61 20 63 6f   if this is a co
14a80 76 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  vering index */.
14a90 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69    unsigned noSki
14aa0 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f  pScan:1;   /* Do
14ab0 20 6e 6f 74 20 74 72 79 20 74 6f 20 75 73 65 20   not try to use 
14ac0 73 6b 69 70 2d 73 63 61 6e 20 69 66 20 74 72 75  skip-scan if tru
14ad0 65 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  e */.#ifdef SQLI
14ae0 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
14af0 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e  OR_STAT4.  int n
14b00 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20  Sample;         
14b10 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14b20 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61   elements in aSa
14b30 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  mple[] */.  int 
14b40 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20  nSampleCol;     
14b50 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
14b60 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71  IndexSample.anEq
14b70 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a  [] and so on */.
14b80 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45    tRowcnt *aAvgE
14b90 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76  q;         /* Av
14ba0 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73  erage nEq values
14bb0 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e   for keys not in
14bc0 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e   aSample */.  In
14bd0 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70  dexSample *aSamp
14be0 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65  le;    /* Sample
14bf0 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f  s of the left-mo
14c00 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77  st key */.  tRow
14c10 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20  cnt *aiRowEst;  
14c20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61       /* Non-loga
14c30 72 69 74 68 6d 69 63 20 73 74 61 74 31 20 64 61  rithmic stat1 da
14c40 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65  ta for this inde
14c50 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e  x */.  tRowcnt n
14c60 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20 20  RowEst0;        
14c70 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d  /* Non-logarithm
14c80 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  ic number of row
14c90 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  s in the index *
14ca0 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
14cb0 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
14cc0 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54  s for Index.idxT
14cd0 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ype.*/.#define S
14ce0 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50  QLITE_IDXTYPE_AP
14cf0 50 44 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a  PDEF      0   /*
14d00 20 43 72 65 61 74 65 64 20 75 73 69 6e 67 20 43   Created using C
14d10 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23  REATE INDEX */.#
14d20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
14d30 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20  XTYPE_UNIQUE    
14d40 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65    1   /* Impleme
14d50 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e  nts a UNIQUE con
14d60 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
14d70 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
14d80 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20  E_PRIMARYKEY  2 
14d90 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d    /* Is the PRIM
14da0 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20  ARY KEY for the 
14db0 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74  table */../* Ret
14dc0 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65  urn true if inde
14dd0 78 20 58 20 69 73 20 61 20 50 52 49 4d 41 52 59  x X is a PRIMARY
14de0 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64   KEY index */.#d
14df0 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b  efine IsPrimaryK
14e00 65 79 49 6e 64 65 78 28 58 29 20 20 28 28 58 29  eyIndex(X)  ((X)
14e10 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54  ->idxType==SQLIT
14e20 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52  E_IDXTYPE_PRIMAR
14e30 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e  YKEY)../* Return
14e40 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58   true if index X
14e50 20 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64   is a UNIQUE ind
14e60 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  ex */.#define Is
14e70 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20 20  UniqueIndex(X)  
14e80 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f      ((X)->onErro
14e90 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20  r!=OE_None)../* 
14ea0 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75  The Index.aiColu
14eb0 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72 65 20  mn[] values are 
14ec0 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76  normally positiv
14ed0 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74 0a  e integer.  But.
14ee0 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d  ** there are som
14ef0 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  e negative value
14f00 73 20 74 68 61 74 20 68 61 76 65 20 73 70 65 63  s that have spec
14f10 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a  ial meaning:.*/.
14f20 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44  #define XN_ROWID
14f30 20 20 20 20 20 28 2d 31 29 20 20 20 20 20 2f 2a       (-1)     /*
14f40 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20   Indexed column 
14f50 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a  is the rowid */.
14f60 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50 52 20  #define XN_EXPR 
14f70 20 20 20 20 20 28 2d 32 29 20 20 20 20 20 2f 2a       (-2)     /*
14f80 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20   Indexed column 
14f90 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  is an expression
14fa0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   */../*.** Each 
14fb0 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e  sample stored in
14fc0 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
14fd0 33 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65  3 table is repre
14fe0 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
14ff0 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75  .** using a stru
15000 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79  cture of this ty
15010 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e  pe.  See documen
15020 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f  tation at the to
15030 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c  p of the.** anal
15040 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c  yze.c source fil
15050 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
15060 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
15070 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d  .struct IndexSam
15080 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b  ple {.  void *p;
15090 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
150a0 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20  nter to sampled 
150b0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
150c0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
150d0 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20   Size of record 
150e0 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52  in bytes */.  tR
150f0 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20  owcnt *anEq;    
15100 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
15110 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68 65  f rows where the
15120 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69 73   key equals this
15130 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f   sample */.  tRo
15140 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f  wcnt *anLt;    /
15150 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
15160 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20   rows where key 
15170 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  is less than thi
15180 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
15190 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20  owcnt *anDLt;   
151a0 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
151b0 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20  f distinct keys 
151c0 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
151d0 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ample */.};../*.
151e0 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f  ** Each token co
151f0 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20  ming out of the 
15200 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74  lexer is an inst
15210 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20  ance of.** this 
15220 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65  structure.  Toke
15230 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64  ns are also used
15240 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65   as part of an e
15250 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  xpression..**.**
15260 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a   Note if Token.z
15270 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64  ==0 then Token.d
15280 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61  yn and Token.n a
15290 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e 64  re undefined and
152a0 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20  .** may contain 
152b0 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20  random values.  
152c0 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20  Do not make any 
152d0 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75  assumptions abou
152e0 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61  t Token.dyn.** a
152f0 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20  nd Token.n when 
15300 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73  Token.z==0..*/.s
15310 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20  truct Token {.  
15320 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20  const char *z;  
15330 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
15340 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55  e token.  Not NU
15350 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a  LL-terminated! *
15360 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  /.  unsigned int
15370 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72   n;    /* Number
15380 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69   of characters i
15390 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a  n this token */.
153a0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
153b0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
153c0 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
153d0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
153e0 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
153f0 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45  ** code for a SE
15400 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69  LECT that contai
15410 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
15420 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  ctions..**.** If
15430 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47   Expr.op==TK_AGG
15440 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47  _COLUMN or TK_AG
15450 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20  G_FUNCTION then 
15460 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73  Expr.pAggInfo is
15470 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f   a.** pointer to
15480 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
15490 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75    The Expr.iColu
154a0 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65 20  mn field is the 
154b0 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49  index in.** AggI
154c0 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67  nfo.aCol[] or Ag
154d0 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66  gInfo.aFunc[] of
154e0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
154f0 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
15500 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74  ** code for that
15510 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67   node..**.** Agg
15520 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e  Info.pGroupBy an
15530 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e  d AggInfo.aFunc.
15540 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66  pExpr point to f
15550 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65  ields within the
15560 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c  .** original Sel
15570 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74 68  ect structure th
15580 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65  at describes the
15590 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
155a0 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65  t.  These.** fie
155b0 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20  lds do not need 
155c0 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65 6e  to be freed when
155d0 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
155e0 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74  e AggInfo struct
155f0 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ure..*/.struct A
15600 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69  ggInfo {.  u8 di
15610 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20  rectMode;       
15620 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e     /* Direct ren
15630 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e  dering mode mean
15640 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72 65  s take data dire
15650 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20  ctly.           
15660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
15670 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61  * from source ta
15680 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61 6e  bles rather than
15690 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f   from accumulato
156a0 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f  rs */.  u8 useSo
156b0 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
156c0 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64  /* In direct mod
156d0 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68 65  e, reference the
156e0 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72   sorting index r
156f0 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 20  ather.          
15700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15710 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72  ** than the sour
15720 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  ce table */.  in
15730 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  t sortingIdx;   
15740 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
15750 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
15760 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
15770 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50   int sortingIdxP
15780 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73  Tab;     /* Curs
15790 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65  or number of pse
157a0 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69  udo-table */.  i
157b0 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d  nt nSortingColum
157c0 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  n;     /* Number
157d0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
157e0 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
157f0 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c   */.  int mnReg,
15800 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a   mxReg;       /*
15810 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74   Range of regist
15820 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f  ers allocated fo
15830 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63  r aCol and aFunc
15840 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
15850 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a  pGroupBy;     /*
15860 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c   The group by cl
15870 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74  ause */.  struct
15880 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20   AggInfo_col {  
15890 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f    /* For each co
158a0 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75  lumn used in sou
158b0 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20  rce tables */.  
158c0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
158d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f             /* So
158e0 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
158f0 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
15900 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
15910 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
15920 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
15930 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75  */.    int iColu
15940 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  mn;             
15950 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* Column number
15960 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72   within the sour
15970 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
15980 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d  int iSorterColum
15990 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75  n;       /* Colu
159a0 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65  mn number in the
159b0 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
159c0 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
159e0 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
159f0 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
15a00 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
15a10 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
15a20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
15a30 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65  e original expre
15a40 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43  ssion */.  } *aC
15a50 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d  ol;.  int nColum
15a60 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
15a70 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20   Number of used 
15a80 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b  entries in aCol[
15a90 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75  ] */.  int nAccu
15aa0 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f  mulator;       /
15ab0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
15ac0 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74 68  mns that show th
15ad0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74  rough to the out
15ae0 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20  put..           
15af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
15b00 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c  * Additional col
15b10 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e  umns are used on
15b20 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72 73  ly as parameters
15b30 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20   to.            
15b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
15b50 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
15b60 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  ions */.  struct
15b70 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20   AggInfo_func { 
15b80 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67    /* For each ag
15b90 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
15ba0 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
15bb0 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
15bc0 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65   /* Expression e
15bd0 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63  ncoding the func
15be0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63  tion */.    Func
15bf0 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20  Def *pFunc;     
15c00 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72       /* The aggr
15c10 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69  egate function i
15c20 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
15c30 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  .    int iMem;  
15c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
15c50 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   Memory location
15c60 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63   that acts as ac
15c70 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20  cumulator */.   
15c80 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20   int iDistinct; 
15c90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68            /* Eph
15ca0 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65  emeral table use
15cb0 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53  d to enforce DIS
15cc0 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46  TINCT */.  } *aF
15cd0 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63  unc;.  int nFunc
15ce0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
15cf0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
15d00 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a  ies in aFunc[] *
15d10 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
15d20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20 69  datatype ynVar i
15d30 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67  s a signed integ
15d40 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69  er, either 16-bi
15d50 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20  t or 32-bit..** 
15d60 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36  Usually it is 16
15d70 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20 53  -bits.  But if S
15d80 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
15d90 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65  LE_NUMBER is gre
15da0 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37  ater.** than 327
15db0 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61  67 we have to ma
15dc0 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31  ke it 32-bit.  1
15dd0 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72 72  6-bit is preferr
15de0 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74  ed because.** it
15df0 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72   uses less memor
15e00 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62  y in the Expr ob
15e10 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 61  ject, which is a
15e20 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72   big memory user
15e30 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77  .** in systems w
15e40 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70  ith lots of prep
15e50 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e  ared statements.
15e60 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63    And few applic
15e70 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d  ations.** need m
15e80 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31  ore than about 1
15e90 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65  0 or 20 variable
15ea0 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74  s.  But some ext
15eb0 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a  reme users want.
15ec0 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70 61  ** to have prepa
15ed0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77  red statements w
15ee0 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20 76  ith over 32767 v
15ef0 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f  ariables, and fo
15f00 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70  r them.** the op
15f10 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c  tion is availabl
15f20 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  e (at compile-ti
15f30 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  me)..*/.#if SQLI
15f40 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
15f50 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79  NUMBER<=32767.ty
15f60 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b  pedef i16 ynVar;
15f70 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69  .#else.typedef i
15f80 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66  nt ynVar;.#endif
15f90 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64  ../*.** Each nod
15fa0 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  e of an expressi
15fb0 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65 20  on in the parse 
15fc0 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61  tree is an insta
15fd0 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  nce.** of this s
15fe0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
15ff0 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f  Expr.op is the o
16000 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67  pcode. The integ
16010 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20  er parser token 
16020 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65 64  codes are reused
16030 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68  .** as opcodes h
16040 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65  ere. For example
16050 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66  , the parser def
16060 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65  ines TK_GE to be
16070 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63   an integer.** c
16080 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67  ode representing
16090 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74   the ">=" operat
160a0 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e  or. This same in
160b0 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65  teger code is re
160c0 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65  used.** to repre
160d0 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72  sent the greater
160e0 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74  -than-or-equal-t
160f0 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68  o operator in th
16100 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20  e expression.** 
16110 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tree..**.** If t
16120 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
16130 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20   an SQL literal 
16140 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f  (TK_INTEGER, TK_
16150 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a  FLOAT, TK_BLOB,.
16160 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29  ** or TK_STRING)
16170 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  , then Expr.toke
16180 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74  n contains the t
16190 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c  ext of the SQL l
161a0 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68  iteral. If.** th
161b0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
161c0 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56  a variable (TK_V
161d0 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45  ARIABLE), then E
161e0 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
161f0 6e 73 20 74 68 65 0a 2a 2a 20 76 61 72 69 61 62  ns the.** variab
16200 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79  le name. Finally
16210 2c 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  , if the express
16220 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75  ion is an SQL fu
16230 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54  nction (TK_FUNCT
16240 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78  ION),.** then Ex
16250 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
16260 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
16270 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  e function..**.*
16280 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e  * Expr.pRight an
16290 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65  d Expr.pLeft are
162a0 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69   the left and ri
162b0 67 68 74 20 73 75 62 65 78 70 72 65 73 73 69 6f  ght subexpressio
162c0 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72  ns of a.** binar
162d0 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68  y operator. Eith
162e0 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62  er or both may b
162f0 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78  e NULL..**.** Ex
16300 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20  pr.x.pList is a 
16310 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74  list of argument
16320 73 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  s if the express
16330 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75  ion is an SQL fu
16340 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53  nction,.** a CAS
16350 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20  E expression or 
16360 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e  an IN expression
16370 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c   of the form "<l
16380 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e  hs> IN (<y>, <z>
16390 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78  ...)"..** Expr.x
163a0 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73 65 64  .pSelect is used
163b0 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
163c0 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65  on is a sub-sele
163d0 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73  ct or an express
163e0 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f  ion of.** the fo
163f0 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45  rm "<lhs> IN (SE
16400 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74  LECT ...)". If t
16410 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  he EP_xIsSelect 
16420 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74 68  bit is set in th
16430 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20  e.** Expr.flags 
16440 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e  mask, then Expr.
16450 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c  x.pSelect is val
16460 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45  id. Otherwise, E
16470 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a  xpr.x.pList is.*
16480 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41  * valid..**.** A
16490 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  n expression of 
164a0 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49  the form ID or I
164b0 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61  D.ID refers to a
164c0 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62   column in a tab
164d0 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20  le..** For such 
164e0 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70  expressions, Exp
164f0 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54  r.op is set to T
16500 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70  K_COLUMN and Exp
16510 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74  r.iTable is.** t
16520 68 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f  he integer curso
16530 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44  r number of a VD
16540 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  BE cursor pointi
16550 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65  ng to that table
16560 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f   and.** Expr.iCo
16570 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75  lumn is the colu
16580 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  mn number for th
16590 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d  e specific colum
165a0 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78  n.  If the.** ex
165b0 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64  pression is used
165c0 20 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20   as a result in 
165d0 61 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c  an aggregate SEL
165e0 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ECT, then the.**
165f0 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73   value is also s
16600 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70  tored in the Exp
16610 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e  r.iAgg column in
16620 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73   the aggregate s
16630 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e  o that.** it can
16640 20 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74   be accessed aft
16650 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65  er all aggregate
16660 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a  s are computed..
16670 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
16680 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e  ression is an un
16690 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d  bound variable m
166a0 61 72 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f  arker (a questio
166b0 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63  n mark.** charac
166c0 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f  ter '?' in the o
166d0 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65  riginal SQL) the
166e0 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c  n the Expr.iTabl
166f0 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65  e holds the inde
16700 78 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20  x.** number for 
16710 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a  that variable..*
16720 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
16730 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71  ession is a subq
16740 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69  uery then Expr.i
16750 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20  Column holds an 
16760 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73  integer.** regis
16770 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61  ter number conta
16780 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  ining the result
16790 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79   of the subquery
167a0 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62  .  If the.** sub
167b0 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63 6f  query gives a co
167c0 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74  nstant result, t
167d0 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31  hen iTable is -1
167e0 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75 65  .  If the subque
167f0 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69  ry.** gives a di
16800 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61  fferent answer a
16810 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65  t different time
16820 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65  s during stateme
16830 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a  nt processing.**
16840 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20   then iTable is 
16850 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61  the address of a
16860 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74   subroutine that
16870 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75   computes the su
16880 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66  bquery..**.** If
16890 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66 20   the Expr is of 
168a0 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20  type OP_Column, 
168b0 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 74  and the table it
168c0 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72   is selecting fr
168d0 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20  om.** is a disk 
168e0 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c  table or the "ol
168f0 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c  d.*" pseudo-tabl
16900 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69  e, then pTab poi
16910 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f  nts to the.** co
16920 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c  rresponding tabl
16930 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a  e definition..**
16940 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e  .** ALLOCATION N
16950 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72  OTES:.**.** Expr
16960 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65   objects can use
16970 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79   a lot of memory
16980 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62 61   space in databa
16990 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a  se schema.  To.*
169a0 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65  * help reduce me
169b0 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74  mory requirement
169c0 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20  s, sometimes an 
169d0 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c  Expr object will
169e0 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64   be.** truncated
169f0 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65  .  And to reduce
16a00 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d   the number of m
16a10 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
16a20 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20  s, sometimes.** 
16a30 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72  two or more Expr
16a40 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65   objects will be
16a50 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e   stored in a sin
16a60 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  gle memory alloc
16a70 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68  ation,.** togeth
16a80 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f  er with Expr.zTo
16a90 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a  ken strings..**.
16aa0 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  ** If the EP_Red
16ab0 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65  uced and EP_Toke
16ac0 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20  nOnly flags are 
16ad0 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45  set when.** an E
16ae0 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72  xpr object is tr
16af0 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45  uncated.  When E
16b00 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74  P_Reduced is set
16b10 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68  , then all.** th
16b20 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a  e child Expr obj
16b30 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70 72  ects in the Expr
16b40 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e  .pLeft and Expr.
16b50 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73 0a  pRight subtrees.
16b60 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ** are contained
16b70 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
16b80 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
16b90 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76  on.  Note, howev
16ba0 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  er, that.** the 
16bb0 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70 72  subtrees in Expr
16bc0 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72  .x.pList or Expr
16bd0 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61  .x.pSelect are a
16be0 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c 79  lways separately
16bf0 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72  .** allocated, r
16c00 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
16c10 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52  ther or not EP_R
16c20 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a  educed is set..*
16c30 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a  /.struct Expr {.
16c40 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
16c50 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72           /* Oper
16c60 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20  ation performed 
16c70 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a  by this node */.
16c80 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
16c90 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
16ca0 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20  affinity of the 
16cb0 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e  column or 0 if n
16cc0 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  ot a column */. 
16cd0 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20   u32 flags;     
16ce0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f          /* Vario
16cf0 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20  us flags.  EP_* 
16d00 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75  See below */.  u
16d10 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20  nion {.    char 
16d20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20  *zToken;        
16d30 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65    /* Token value
16d40 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65  . Zero terminate
16d50 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a  d and dequoted *
16d60 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65  /.    int iValue
16d70 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
16d80 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74  Non-negative int
16d90 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45 50  eger value if EP
16da0 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d  _IntValue */.  }
16db0 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   u;..  /* If the
16dc0 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
16dd0 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  ag is set in the
16de0 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
16df0 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73  , then no.  ** s
16e00 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  pace is allocate
16e10 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73  d for the fields
16e20 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e   below this poin
16e30 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  t. An attempt to
16e40 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65  .  ** access the
16e50 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  m will result in
16e60 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d   a segfault or m
16e70 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a  alfunction..  **
16e80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16e90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16ea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16eb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16ec0 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c  ***/..  Expr *pL
16ed0 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  eft;           /
16ee0 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a  * Left subnode *
16ef0 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68 74  /.  Expr *pRight
16f00 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69  ;          /* Ri
16f10 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20  ght subnode */. 
16f20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70   union {.    Exp
16f30 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20  rList *pList;   
16f40 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58    /* op = IN, EX
16f50 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41  ISTS, SELECT, CA
16f60 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45  SE, FUNCTION, BE
16f70 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c  TWEEN */.    Sel
16f80 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
16f90 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63    /* EP_xIsSelec
16fa0 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45  t and op = IN, E
16fb0 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f  XISTS, SELECT */
16fc0 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66  .  } x;..  /* If
16fd0 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
16fe0 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74  flag is set in t
16ff0 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  he Expr.flags ma
17000 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a  sk, then no.  **
17010 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61   space is alloca
17020 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c  ted for the fiel
17030 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f  ds below this po
17040 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  int. An attempt 
17050 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74  to.  ** access t
17060 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  hem will result 
17070 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72  in a segfault or
17080 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20   malfunction..  
17090 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
170a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
170b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
170c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
170d0 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49  *****/..#if SQLI
170e0 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
170f0 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68  H>0.  int nHeigh
17100 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
17110 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74 72  Height of the tr
17120 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68 69  ee headed by thi
17130 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  s node */.#endif
17140 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20  .  int iTable;  
17150 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
17160 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e  COLUMN: cursor n
17170 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68  umber of table h
17180 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20  olding column.  
17190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171a0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47         ** TK_REG
171b0 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72 20  ISTER: register 
171c0 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20  number.         
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171e0 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31  ** TK_TRIGGER: 1
171f0 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c   -> new, 0 -> ol
17200 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d.              
17210 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50             ** EP
17220 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32  _Unlikely:  1342
17230 31 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b 65  17728 times like
17240 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56 61  lihood */.  ynVa
17250 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  r iColumn;      
17260 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
17270 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20   column index.  
17280 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20  -1 for rowid..  
17290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172a0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52         ** TK_VAR
172b0 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20  IABLE: variable 
172c0 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e  number (always >
172d0 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69  = 1). */.  i16 i
172e0 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Agg;            
172f0 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79    /* Which entry
17300 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43   in pAggInfo->aC
17310 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b  ol[] or ->aFunc[
17320 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68  ] */.  i16 iRigh
17330 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a  tJoinTable;   /*
17340 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c   If EP_FromJoin,
17350 20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65   the right table
17360 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a   of the join */.
17370 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20    u8 op2;       
17380 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52           /* TK_R
17390 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61  EGISTER: origina
173a0 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e  l value of Expr.
173b0 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  op.             
173c0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
173d0 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61  K_COLUMN: the va
173e0 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50  lue of p5 for OP
173f0 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20  _Column.        
17400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17410 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   ** TK_AGG_FUNCT
17420 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70  ION: nesting dep
17430 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20  th */.  AggInfo 
17440 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f  *pAggInfo;     /
17450 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47  * Used by TK_AGG
17460 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41  _COLUMN and TK_A
17470 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20  GG_FUNCTION */. 
17480 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
17490 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
174a0 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65   for TK_COLUMN e
174b0 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d  xpressions. */.}
174c0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
174d0 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d  lowing are the m
174e0 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20  eanings of bits 
174f0 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
17500 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
17510 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20  ine EP_FromJoin 
17520 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69   0x000001 /* Ori
17530 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53  ginates in ON/US
17540 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75  ING clause of ou
17550 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
17560 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20  ine EP_Agg      
17570 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e   0x000002 /* Con
17580 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
17590 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
175a0 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
175b0 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 30 78   EP_Resolved  0x
175c0 30 30 30 30 30 34 20 2f 2a 20 49 44 73 20 68 61  000004 /* IDs ha
175d0 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64  ve been resolved
175e0 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23   to COLUMNs */.#
175f0 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20  define EP_Error 
17600 20 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20      0x000008 /* 
17610 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61  Expression conta
17620 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
17630 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e  errors */.#defin
17640 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30  e EP_Distinct  0
17650 78 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65  x000010 /* Aggre
17660 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69  gate function wi
17670 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  th DISTINCT keyw
17680 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ord */.#define E
17690 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30  P_VarSelect 0x00
176a0 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20  0020 /* pSelect 
176b0 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e  is correlated, n
176c0 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23  ot constant */.#
176d0 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f  define EP_DblQuo
176e0 74 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20  ted 0x000040 /* 
176f0 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67  token.z was orig
17700 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20  inally in "..." 
17710 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
17720 66 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30  fixFunc 0x000080
17730 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20   /* True for an 
17740 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20  infix function: 
17750 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20  LIKE, GLOB, etc 
17760 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f  */.#define EP_Co
17770 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30  llate   0x000100
17780 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e   /* Tree contain
17790 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f  s a TK_COLLATE o
177a0 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69  perator */.#defi
177b0 6e 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20  ne EP_Generic   
177c0 30 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f  0x000200 /* Igno
177d0 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66  re COLLATE or af
177e0 66 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74  finity on this t
177f0 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ree */.#define E
17800 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30  P_IntValue  0x00
17810 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20  0400 /* Integer 
17820 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20  value contained 
17830 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23  in u.iValue */.#
17840 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c  define EP_xIsSel
17850 65 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20  ect 0x000800 /* 
17860 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c  x.pSelect is val
17870 69 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e  id (otherwise x.
17880 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65  pList is) */.#de
17890 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20  fine EP_Skip    
178a0 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f    0x001000 /* CO
178b0 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e  LLATE, AS, or UN
178c0 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e  LIKELY */.#defin
178d0 65 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30  e EP_Reduced   0
178e0 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20  x002000 /* Expr 
178f0 73 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55  struct EXPR_REDU
17900 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e  CEDSIZE bytes on
17910 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ly */.#define EP
17920 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34  _TokenOnly 0x004
17930 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75  000 /* Expr stru
17940 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ct EXPR_TOKENONL
17950 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  YSIZE bytes only
17960 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
17970 74 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30  tatic    0x00800
17980 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d  0 /* Held in mem
17990 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64  ory not obtained
179a0 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a   from malloc() *
179b0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d  /.#define EP_Mem
179c0 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20  Token  0x010000 
179d0 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74  /* Need to sqlit
179e0 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e  e3DbFree() Expr.
179f0 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  zToken */.#defin
17a00 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30  e EP_NoReduce  0
17a10 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f  x020000 /* Canno
17a20 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  t EXPRDUP_REDUCE
17a30 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64   this Expr */.#d
17a40 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c  efine EP_Unlikel
17a50 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75  y  0x040000 /* u
17a60 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b  nlikely() or lik
17a70 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69  elihood() functi
17a80 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  on */.#define EP
17a90 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30  _ConstFunc 0x080
17aa0 30 30 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f  000 /* A SQLITE_
17ab0 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72  FUNC_CONSTANT or
17ac0 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69   _SLOCHNG functi
17ad0 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  on */.#define EP
17ae0 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30  _CanBeNull 0x100
17af0 30 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75  000 /* Can be nu
17b00 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e  ll despite NOT N
17b10 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ULL constraint *
17b20 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62  /.#define EP_Sub
17b30 71 75 65 72 79 20 20 30 78 32 30 30 30 30 30 20  query  0x200000 
17b40 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73  /* Tree contains
17b50 20 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65   a TK_SELECT ope
17b60 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  rator */.#define
17b70 20 45 50 5f 41 6c 69 61 73 20 20 20 20 20 30 78   EP_Alias     0x
17b80 34 30 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20  400000 /* Is an 
17b90 61 6c 69 61 73 20 66 6f 72 20 61 20 72 65 73 75  alias for a resu
17ba0 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f  lt set column */
17bb0 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 65 63 74  .#define EP_Vect
17bc0 6f 72 4f 6b 20 20 30 78 38 30 30 30 30 30 20 2f  orOk  0x800000 /
17bd0 2a 20 54 68 69 73 20 65 78 70 72 65 73 73 69 6f  * This expressio
17be0 6e 20 6d 61 79 20 62 65 20 61 20 72 6f 77 20 76  n may be a row v
17bf0 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alue */.#define 
17c00 45 50 5f 56 65 63 74 6f 72 20 20 20 20 30 78 31  EP_Vector    0x1
17c10 30 30 30 30 30 30 2f 2a 20 54 68 69 73 20 65 78  000000/* This ex
17c20 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 72 6f  pression is a ro
17c30 77 20 76 61 6c 75 65 20 2a 2f 0a 0a 2f 2a 0a 2a  w value */../*.*
17c40 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f  * Combinations o
17c50 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 50  f two or more EP
17c60 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66  _* flags.*/.#def
17c70 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65  ine EP_Propagate
17c80 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f   (EP_Collate|EP_
17c90 53 75 62 71 75 65 72 79 29 20 2f 2a 20 50 72 6f  Subquery) /* Pro
17ca0 70 61 67 61 74 65 20 74 68 65 73 65 20 62 69 74  pagate these bit
17cb0 73 20 75 70 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a  s up tree */../*
17cc0 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
17cd0 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
17ce0 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
17cf0 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a  ear bits in the.
17d00 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  ** Expr.flags fi
17d10 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
17d20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
17d30 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e  E,P)     (((E)->
17d40 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  flags&(P))!=0).#
17d50 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c  define ExprHasAl
17d60 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  lProperty(E,P)  
17d70 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
17d80 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
17d90 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
17da0 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c  E,P)     (E)->fl
17db0 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
17dc0 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72   ExprClearProper
17dd0 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66  ty(E,P)   (E)->f
17de0 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54  lags&=~(P)../* T
17df0 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  he ExprSetVVAPro
17e00 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73  perty() macro is
17e10 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69   used for Verifi
17e20 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69  cation, Validati
17e30 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65  on,.** and Accre
17e40 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20  ditation only.  
17e50 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78  It works like Ex
17e60 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20  prSetProperty() 
17e70 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72  during VVA.** pr
17e80 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61  ocesses but is a
17e90 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76   no-op for deliv
17ea0 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ery..*/.#ifdef S
17eb0 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65  QLITE_DEBUG.# de
17ec0 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
17ed0 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45  roperty(E,P)  (E
17ee0 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65  )->flags|=(P).#e
17ef0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70  lse.# define Exp
17f00 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
17f10 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E,P).#endif../*.
17f20 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
17f30 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
17f40 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69  r of bytes requi
17f50 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20  red by a normal 
17f60 45 78 70 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20  Expr.** struct, 
17f70 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
17f80 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63  ith the EP_Reduc
17f90 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45  ed flag set in E
17fa0 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64  xpr.flags.** and
17fb0 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
17fc0 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65  with the EP_Toke
17fd0 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a  nOnly flag set..
17fe0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
17ff0 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20  FULLSIZE        
18000 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20     sizeof(Expr) 
18010 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c            /* Ful
18020 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e  l size */.#defin
18030 65 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  e EXPR_REDUCEDSI
18040 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74  ZE        offset
18050 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20  of(Expr,iTable) 
18060 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75   /* Common featu
18070 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  res */.#define E
18080 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a  XPR_TOKENONLYSIZ
18090 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28  E      offsetof(
180a0 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a  Expr,pLeft)   /*
180b0 20 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20   Fewer features 
180c0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  */../*.** Flags 
180d0 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71  passed to the sq
180e0 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
180f0 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65  unction. See the
18100 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a   header comment.
18110 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33  ** above sqlite3
18120 45 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65  ExprDup() for de
18130 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tails..*/.#defin
18140 65 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  e EXPRDUP_REDUCE
18150 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20           0x0001 
18160 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64   /* Used reduced
18170 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73  -size Expr nodes
18180 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73   */../*.** A lis
18190 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
181a0 2e 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69  .  Each expressi
181b0 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c  on may optionall
181c0 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65  y have a.** name
181d0 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20  .  An expr/name 
181e0 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20  combination can 
181f0 62 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72  be used in sever
18200 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a  al ways, such.**
18210 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20   as the list of 
18220 22 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65  "expr AS ID" fie
18230 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  lds following a 
18240 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74  "SELECT" or in t
18250 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49  he.** list of "I
18260 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20  D = expr" items 
18270 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41  in an UPDATE.  A
18280 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
18290 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f  ions can.** also
182a0 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
182b0 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75  argument to a fu
182c0 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68  nction, in which
182d0 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d   case the a.zNam
182e0 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f  e.** field is no
182f0 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79  t used..**.** By
18300 20 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70   default the Exp
18310 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f  r.zSpan field ho
18320 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64  lds a human-read
18330 61 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e  able description
18340 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   of.** the expre
18350 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73  ssion that is us
18360 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
18370 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65  tion of error me
18380 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f  ssages and.** co
18390 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e  lumn labels.  In
183a0 20 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72   this case, Expr
183b0 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61  .zSpan is typica
183c0 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20  lly the text of 
183d0 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72  a.** column expr
183e0 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69  ession as it exi
183f0 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20  sts in a SELECT 
18400 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65  statement.  Howe
18410 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62  ver, if.** the b
18420 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69  SpanIsTab flag i
18430 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61  s set, then zSpa
18440 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20  n is overloaded 
18450 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65  to mean the name
18460 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c  .** of the resul
18470 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  t column in the 
18480 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54  form: DATABASE.T
18490 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68  ABLE.COLUMN.  Th
184a0 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d  is later.** form
184b0 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d   is used for nam
184c0 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74  e resolution wit
184d0 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c  h nested FROM cl
184e0 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  auses..*/.struct
184f0 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e   ExprList {.  in
18500 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20  t nExpr;        
18510 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
18520 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e  f expressions on
18530 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73   the list */.  s
18540 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69  truct ExprList_i
18550 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63  tem { /* For eac
18560 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
18570 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20  the list */.    
18580 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
18590 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
185a0 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
185b0 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ns */.    char *
185c0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
185d0 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63    /* Token assoc
185e0 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
185f0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
18600 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20    char *zSpan;  
18610 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69            /* Ori
18620 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68  ginal text of th
18630 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  e expression */.
18640 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72      u8 sortOrder
18650 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31  ;           /* 1
18660 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66   for DESC or 0 f
18670 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e  or ASC */.    un
18680 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20  signed done :1; 
18690 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20        /* A flag 
186a0 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e  to indicate when
186b0 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66   processing is f
186c0 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75  inished */.    u
186d0 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54  nsigned bSpanIsT
186e0 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20  ab :1; /* zSpan 
186f0 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43  holds DB.TABLE.C
18700 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73  OLUMN */.    uns
18710 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a  igned reusable :
18720 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  1;   /* Constant
18730 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72   expression is r
18740 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75  eusable */.    u
18750 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74 72  nion {.      str
18760 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20 75 31  uct {.        u1
18770 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20  6 iOrderByCol;  
18780 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52      /* For ORDER
18790 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   BY, column numb
187a0 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74  er in result set
187b0 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31 36 20   */.        u16 
187c0 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  iAlias;         
187d0 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20    /* Index into 
187e0 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66  Parse.aAlias[] f
187f0 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20  or zName */.    
18800 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e 74    } x;.      int
18810 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67 3b 20   iConstExprReg; 
18820 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
18830 20 69 6e 20 77 68 69 63 68 20 45 78 70 72 20 76   in which Expr v
18840 61 6c 75 65 20 69 73 20 63 61 63 68 65 64 20 2a  alue is cached *
18850 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20 2a  /.    } u;.  } *
18860 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a;              
18870 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70      /* Alloc a p
18880 6f 77 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61  ower of two grea
18890 74 65 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  ter or equal to 
188a0 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  nExpr */.};../*.
188b0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
188c0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
188d0 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
188e0 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64  parser to record
188f0 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72   both.** the par
18900 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65  se tree for an e
18910 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68  xpression and th
18920 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20  e span of input 
18930 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65  text for an.** e
18940 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74  xpression..*/.st
18950 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a  ruct ExprSpan {.
18960 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
18970 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65          /* The e
18980 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20  xpression parse 
18990 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  tree */.  const 
189a0 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20  char *zStart;   
189b0 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61 63 74  /* First charact
189c0 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  er of input text
189d0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
189e0 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f   *zEnd;     /* O
189f0 6e 65 20 63 68 61 72 61 63 74 65 72 20 70 61 73  ne character pas
18a00 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70  t the end of inp
18a10 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f  ut text */.};../
18a20 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
18a30 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
18a40 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69  re can hold a si
18a50 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65  mple list of ide
18a60 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63  ntifiers,.** suc
18a70 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22 61  h as the list "a
18a80 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c  ,b,c" in the fol
18a90 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  lowing statement
18aa0 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e  s:.**.**      IN
18ab0 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c  SERT INTO t(a,b,
18ac0 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a  c) VALUES ...;.*
18ad0 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  *      CREATE IN
18ae0 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62  DEX idx ON t(a,b
18af0 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45  ,c);.**      CRE
18b00 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67  ATE TRIGGER trig
18b10 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f   BEFORE UPDATE O
18b20 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a  N t(a,b,c) ...;.
18b30 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74  **.** The IdList
18b40 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20  .a.idx field is 
18b50 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49 64  used when the Id
18b60 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73 20  List represents 
18b70 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63  the list of.** c
18b80 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65  olumn names afte
18b90 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  r a table name i
18ba0 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  n an INSERT stat
18bb0 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73  ement.  In the s
18bc0 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20  tatement.**.**  
18bd0 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
18be0 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a  (a,b,c) ....**.*
18bf0 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65 20  * If "a" is the 
18c00 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  k-th column of t
18c10 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49  able "t", then I
18c20 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d  dList.a[0].idx==
18c30 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c  k..*/.struct IdL
18c40 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49  ist {.  struct I
18c50 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  dList_item {.   
18c60 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
18c70 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
18c80 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a  e identifier */.
18c90 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20      int idx;    
18ca0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
18cb0 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f  n some Table.aCo
18cc0 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  l[] of a column 
18cd0 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20  named zName */. 
18ce0 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64   } *a;.  int nId
18cf0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
18d00 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65  ber of identifie
18d10 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  rs on the list *
18d20 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
18d30 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65  bitmask datatype
18d40 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69   defined below i
18d50 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f  s used for vario
18d60 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
18d70 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67  ..**.** Changing
18d80 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d   this from a 64-
18d90 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20  bit to a 32-bit 
18da0 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20  type limits the 
18db0 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62  number of.** tab
18dc0 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f  les in a join to
18dd0 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36   32 instead of 6
18de0 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20  4.  But it also 
18df0 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65  reduces the size
18e00 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61  .** of the libra
18e10 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20  ry by 738 bytes 
18e20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64  on ix86..*/.#ifd
18e30 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53  ef SQLITE_BITMAS
18e40 4b 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65 66  K_TYPE.  typedef
18e50 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f   SQLITE_BITMASK_
18e60 54 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65  TYPE Bitmask;.#e
18e70 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36  lse.  typedef u6
18e80 34 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69  4 Bitmask;.#endi
18e90 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d  f../*.** The num
18ea0 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61  ber of bits in a
18eb0 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22   Bitmask.  "BMS"
18ec0 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20   means "BitMask 
18ed0 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Size"..*/.#defin
18ee0 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69  e BMS  ((int)(si
18ef0 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29  zeof(Bitmask)*8)
18f00 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69  )../*.** A bit i
18f10 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23  n a Bitmask.*/.#
18f20 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e  define MASKBIT(n
18f30 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31  )   (((Bitmask)1
18f40 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20  )<<(n)).#define 
18f50 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28  MASKBIT32(n) (((
18f60 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c  unsigned int)1)<
18f70 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c  <(n)).#define AL
18f80 4c 42 49 54 53 20 20 20 20 20 20 28 28 42 69 74  LBITS      ((Bit
18f90 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20  mask)-1)../*.** 
18fa0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  The following st
18fb0 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65  ructure describe
18fc0 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  s the FROM claus
18fd0 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  e of a SELECT st
18fe0 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68  atement..** Each
18ff0 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65   table or subque
19000 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ry in the FROM c
19010 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61 72  lause is a separ
19020 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a  ate element of.*
19030 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b  * the SrcList.a[
19040 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57  ] array..**.** W
19050 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e  ith the addition
19060 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74   of multiple dat
19070 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74  abase support, t
19080 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
19090 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c  ucture.** can al
190a0 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64 65  so be used to de
190b0 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63 75  scribe a particu
190c0 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20 61  lar table such a
190d0 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
190e0 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20  .** is modified 
190f0 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45  by an INSERT, DE
19100 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
19110 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73  statement.  In s
19120 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20  tandard SQL,.** 
19130 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73  such a table mus
19140 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61  t be a simple na
19150 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20  me: ID.  But in 
19160 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c  SQLite, the tabl
19170 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20  e can.** now be 
19180 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
19190 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61  database name, a
191a0 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74   dot, then the t
191b0 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44  able name: ID.ID
191c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e  ..**.** The join
191d0 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74 20  type starts out 
191e0 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e  showing the join
191f0 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74 68   type between th
19200 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a  e current table.
19210 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20  ** and the next 
19220 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73  table on the lis
19230 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 62  t.  The parser b
19240 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74  uilds the list t
19250 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20  his way..** But 
19260 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68  sqlite3SrcListSh
19270 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61  iftJoinType() la
19280 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20 6a  ter shifts the j
19290 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74  ointypes so that
192a0 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70   each.** jointyp
192b0 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20  e expresses the 
192c0 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65  join between the
192d0 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70   table and the p
192e0 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a  revious table..*
192f0 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55  *.** In the colU
19300 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68  sed field, the h
19310 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62  igh-order bit (b
19320 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69 66  it 63) is set if
19330 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f   the table.** co
19340 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e  ntains more than
19350 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20   63 columns and 
19360 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74  the 64-th or lat
19370 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65  er column is use
19380 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63  d..*/.struct Src
19390 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72  List {.  int nSr
193a0 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  c;        /* Num
193b0 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72  ber of tables or
193c0 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74   subqueries in t
193d0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
193e0 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20  /.  u32 nAlloc; 
193f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
19400 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61  f entries alloca
19410 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77  ted in a[] below
19420 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63   */.  struct Src
19430 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20  List_item {.    
19440 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
19450 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77    /* Schema to w
19460 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20 69  hich this item i
19470 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63  s fixed */.    c
19480 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20  har *zDatabase; 
19490 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61   /* Name of data
194a0 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69  base holding thi
194b0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63  s table */.    c
194c0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
194d0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
194e0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61  table */.    cha
194f0 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f  r *zAlias;     /
19500 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f  * The "B" part o
19510 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72  f a "A AS B" phr
19520 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74  ase.  zName is t
19530 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61  he "A" */.    Ta
19540 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
19550 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20  /* An SQL table 
19560 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
19570 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65   zName */.    Se
19580 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
19590 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74  /* A SELECT stat
195a0 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c  ement used in pl
195b0 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e  ace of a table n
195c0 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61  ame */.    int a
195d0 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20  ddrFillSub;  /* 
195e0 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f  Address of subro
195f0 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73  utine to manifes
19600 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a  t a subquery */.
19610 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72      int regRetur
19620 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  n;    /* Registe
19630 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e  r holding return
19640 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72   address of addr
19650 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69  FillSub */.    i
19660 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20  nt regResult;   
19670 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f   /* Registers ho
19680 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66  lding results of
19690 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f   a co-routine */
196a0 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20  .    struct {.  
196b0 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b      u8 jointype;
196c0 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66        /* Type of
196d0 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
196e0 69 73 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  is table and the
196f0 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20   previous */.   
19700 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49     unsigned notI
19710 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a  ndexed :1;    /*
19720 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69   True if there i
19730 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  s a NOT INDEXED 
19740 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20  clause */.      
19750 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64 65 78  unsigned isIndex
19760 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72  edBy :1;   /* Tr
19770 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ue if there is a
19780 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61  n INDEXED BY cla
19790 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  use */.      uns
197a0 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e 63 20  igned isTabFunc 
197b0 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20  :1;     /* True 
197c0 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d  if table-valued-
197d0 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78 20  function syntax 
197e0 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
197f0 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a  d isCorrelated :
19800 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73  1;  /* True if s
19810 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72  ub-query is corr
19820 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20  elated */.      
19830 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f  unsigned viaCoro
19840 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d  utine :1;  /* Im
19850 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63  plemented as a c
19860 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20  o-routine */.   
19870 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65     unsigned isRe
19880 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a  cursive :1;   /*
19890 20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72 73   True for recurs
198a0 69 76 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e  ive reference in
198b0 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66   WITH */.    } f
198c0 67 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  g;.#ifndef SQLIT
198d0 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20  E_OMIT_EXPLAIN. 
198e0 20 20 20 75 38 20 69 53 65 6c 65 63 74 49 64 3b     u8 iSelectId;
198f0 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c 65       /* If pSele
19900 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f 66  ct!=0, the id of
19910 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20   the sub-select 
19920 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66  in EQP */.#endif
19930 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72  .    int iCursor
19940 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44  ;      /* The VD
19950 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  BE cursor number
19960 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
19970 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
19980 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20    Expr *pOn;    
19990 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c      /* The ON cl
199a0 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
199b0 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55  /.    IdList *pU
199c0 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55  sing;   /* The U
199d0 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61  SING clause of a
199e0 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74   join */.    Bit
199f0 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f  mask colUsed;  /
19a00 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73  * Bit N (1<<N) s
19a10 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f  et if column N o
19a20 66 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a  f pTab is used *
19a30 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
19a40 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78      char *zIndex
19a50 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e  edBy;    /* Iden
19a60 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44  tifier from "IND
19a70 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e  EXED BY <zIndex>
19a80 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  " clause */.    
19a90 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46 75 6e    ExprList *pFun
19aa0 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65  cArg;  /* Argume
19ab0 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c  nts to table-val
19ac0 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ued-function */.
19ad0 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e      } u1;.    In
19ae0 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b 20 20  dex *pIBIndex;  
19af0 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  /* Index structu
19b00 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  re corresponding
19b10 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64 42   to u1.zIndexedB
19b20 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20  y */.  } a[1];  
19b30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
19b40 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
19b50 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74   identifier on t
19b60 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  he list */.};../
19b70 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76  *.** Permitted v
19b80 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72 63  alues of the Src
19b90 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20  List.a.jointype 
19ba0 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65  field.*/.#define
19bb0 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78   JT_INNER     0x
19bc0 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b  0001    /* Any k
19bd0 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20  ind of inner or 
19be0 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64  cross join */.#d
19bf0 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20  efine JT_CROSS  
19c00 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20     0x0002    /* 
19c10 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20  Explicit use of 
19c20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72  the CROSS keywor
19c30 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  d */.#define JT_
19c40 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30 30 34  NATURAL   0x0004
19c50 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
19c60 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e  a "natural" join
19c70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c   */.#define JT_L
19c80 45 46 54 20 20 20 20 20 20 30 78 30 30 30 38 20  EFT      0x0008 
19c90 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72     /* Left outer
19ca0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
19cb0 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30 78   JT_RIGHT     0x
19cc0 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74  0010    /* Right
19cd0 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
19ce0 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20  define JT_OUTER 
19cf0 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a      0x0020    /*
19d00 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79   The "OUTER" key
19d10 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74 20  word is present 
19d20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52  */.#define JT_ER
19d30 52 4f 52 20 20 20 20 20 30 78 30 30 34 30 20 20  ROR     0x0040  
19d40 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20    /* unknown or 
19d50 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e  unsupported join
19d60 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a   type */.../*.**
19d70 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61   Flags appropria
19d80 74 65 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c  te for the wctrl
19d90 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72 20  Flags parameter 
19da0 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72 65 42  of sqlite3WhereB
19db0 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68  egin().** and th
19dc0 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72  e WhereInfo.wctr
19dd0 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a  lFlags member..*
19de0 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
19df0 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64  raints (enforced
19e00 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
19e10 2a 2a 20 20 20 20 20 57 48 45 52 45 5f 55 53 45  **     WHERE_USE
19e20 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f 46 69  _LIMIT  == SF_Fi
19e30 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65 66  xedLimit.*/.#def
19e40 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
19e50 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30  Y_NORMAL   0x000
19e60 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64  0 /* No-op */.#d
19e70 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
19e80 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30  RBY_MIN      0x0
19e90 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  001 /* ORDER BY 
19ea0 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
19eb0 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  in() func */.#de
19ec0 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
19ed0 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30  BY_MAX      0x00
19ee0 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  02 /* ORDER BY p
19ef0 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61  rocessing for ma
19f00 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  x() func */.#def
19f10 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53  ine WHERE_ONEPAS
19f20 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30  S_DESIRED  0x000
19f30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20  4 /* Want to do 
19f40 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f  one-pass UPDATE/
19f50 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e  DELETE */.#defin
19f60 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
19f70 4d 55 4c 54 49 52 4f 57 20 30 78 30 30 30 38 20  MULTIROW 0x0008 
19f80 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 6f 6b  /* ONEPASS is ok
19f90 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72   with multiple r
19fa0 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ows */.#define W
19fb0 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f  HERE_DUPLICATES_
19fc0 4f 4b 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20  OK    0x0010 /* 
19fd0 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72  Ok to return a r
19fe0 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63  ow more than onc
19ff0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
1a000 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55 53 45 20  RE_OR_SUBCLAUSE 
1a010 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 50 72      0x0020 /* Pr
1a020 6f 63 65 73 73 69 6e 67 20 61 20 73 75 62 2d 57  ocessing a sub-W
1a030 48 45 52 45 20 61 73 20 70 61 72 74 20 6f 66 0a  HERE as part of.
1a040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a060 20 20 20 20 20 20 2a 2a 20 74 68 65 20 4f 52 20        ** the OR 
1a070 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f  optimization  */
1a080 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47  .#define WHERE_G
1a090 52 4f 55 50 42 59 20 20 20 20 20 20 20 20 20 20  ROUPBY          
1a0a0 30 78 30 30 34 30 20 2f 2a 20 70 4f 72 64 65 72  0x0040 /* pOrder
1a0b0 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47  By is really a G
1a0c0 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69  ROUP BY */.#defi
1a0d0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1a0e0 54 42 59 20 20 20 20 20 20 20 30 78 30 30 38 30  TBY       0x0080
1a0f0 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20   /* pOrderby is 
1a100 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43  really a DISTINC
1a110 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  T clause */.#def
1a120 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44  ine WHERE_WANT_D
1a130 49 53 54 49 4e 43 54 20 20 20 20 30 78 30 31 30  ISTINCT    0x010
1a140 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20  0 /* All output 
1a150 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69 73 74  needs to be dist
1a160 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  inct */.#define 
1a170 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55  WHERE_SORTBYGROU
1a180 50 20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a  P      0x0200 /*
1a190 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33   Support sqlite3
1a1a0 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 29 20  WhereIsSorted() 
1a1b0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1a1c0 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20 20 20 20  _SEEK_TABLE     
1a1d0 20 20 30 78 30 34 30 30 20 2f 2a 20 44 6f 20 6e    0x0400 /* Do n
1a1e0 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73 20 6f  ot defer seeks o
1a1f0 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a 2f 0a  n main table */.
1a200 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1a210 44 45 52 42 59 5f 4c 49 4d 49 54 20 20 20 20 30  DERBY_LIMIT    0
1a220 78 30 38 30 30 20 2f 2a 20 4f 52 44 45 52 42 59  x0800 /* ORDERBY
1a230 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65 20 69 6e  +LIMIT on the in
1a240 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 20 20 20 20  ner loop */.    
1a250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a260 20 20 20 20 2f 2a 20 20 20 20 20 30 78 31 30 30      /*     0x100
1a270 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74  0    not current
1a280 6c 79 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 20  ly used */.     
1a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2a0 20 20 20 2f 2a 20 20 20 20 20 30 78 32 30 30 30     /*     0x2000
1a2b0 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c      not currentl
1a2c0 79 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  y used */.#defin
1a2d0 65 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49  e WHERE_USE_LIMI
1a2e0 54 20 20 20 20 20 20 20 20 30 78 34 30 30 30 20  T        0x4000 
1a2f0 2f 2a 20 55 73 65 20 74 68 65 20 4c 49 4d 49 54  /* Use the LIMIT
1a300 20 69 6e 20 63 6f 73 74 20 65 73 74 69 6d 61 74   in cost estimat
1a310 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  es */.          
1a320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a330 20 20 20 20 20 30 78 38 30 30 30 20 20 20 20 6e       0x8000    n
1a340 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65  ot currently use
1a350 64 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  d */../* Allowed
1a360 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66   return values f
1a370 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65  rom sqlite3Where
1a380 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a  IsDistinct().*/.
1a390 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1a3a0 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20  STINCT_NOOP     
1a3b0 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20   0  /* DISTINCT 
1a3c0 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64  keyword not used
1a3d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1a3e0 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55  E_DISTINCT_UNIQU
1a3f0 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75  E    1  /* No du
1a400 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66  plicates */.#def
1a410 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1a420 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20  CT_ORDERED   2  
1a430 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65  /* All duplicate
1a440 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a  s are adjacent *
1a450 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1a460 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52  DISTINCT_UNORDER
1a470 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61  ED 3  /* Duplica
1a480 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65  tes are scattere
1a490 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61  d */../*.** A Na
1a4a0 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65  meContext define
1a4b0 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77  s a context in w
1a4c0 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20  hich to resolve 
1a4d0 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
1a4e0 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20  .** names.  The 
1a4f0 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73  context consists
1a500 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61   of a list of ta
1a510 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69  bles (the pSrcLi
1a520 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a  st) field and.**
1a530 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64   a list of named
1a540 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c   expression (pEL
1a550 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64  ist).  The named
1a560 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
1a570 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e   may.** be NULL.
1a580 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65    The pSrc corre
1a590 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52  sponds to the FR
1a5a0 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
1a5b0 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74  ELECT or.** to t
1a5c0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f  he table being o
1a5d0 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e  perated on by IN
1a5e0 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72  SERT, UPDATE, or
1a5f0 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a   DELETE.  The.**
1a600 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f   pEList correspo
1a610 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c  nds to the resul
1a620 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43  t set of a SELEC
1a630 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f  T and is NULL fo
1a640 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65  r.** other state
1a650 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d  ments..**.** Nam
1a660 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65  eContexts can be
1a670 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72   nested.  When r
1a680 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20  esolving names, 
1a690 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a  the inner-most.*
1a6a0 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61  * context is sea
1a6b0 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66  rched first.  If
1a6c0 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75   no match is fou
1a6d0 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74  nd, the next out
1a6e0 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  er.** context is
1a6f0 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68   checked.  If th
1a700 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20  ere is still no 
1a710 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20  match, the next 
1a720 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68  context.** is ch
1a730 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f  ecked.  This pro
1a740 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75  cess continues u
1a750 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61  ntil either a ma
1a760 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20  tch is found.** 
1a770 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20  or all contexts 
1a780 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e  are check.  When
1a790 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
1a7a0 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62  d, the nRef memb
1a7b0 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  er of.** the con
1a7c0 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20  text containing 
1a7d0 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63  the match is inc
1a7e0 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  remented..**.** 
1a7f0 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65  Each subquery ge
1a800 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e  ts a new NameCon
1a810 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74  text.  The pNext
1a820 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f   field points to
1a830 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
1a840 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ext in the paren
1a850 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74  t query.  Thus t
1a860 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63  he process of sc
1a870 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61  anning the.** Na
1a880 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63  meContext list c
1a890 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65  orresponds to se
1a8a0 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20  arching through 
1a8b0 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74  successively out
1a8c0 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73  er.** subqueries
1a8d0 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d   looking for a m
1a8e0 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  atch..*/.struct 
1a8f0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20  NameContext {.  
1a900 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
1a910 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
1a920 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  er */.  SrcList 
1a930 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20  *pSrcList;   /* 
1a940 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c  One or more tabl
1a950 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c  es used to resol
1a960 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78  ve names */.  Ex
1a970 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
1a980 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c     /* Optional l
1a990 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65  ist of result-se
1a9a0 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41  t columns */.  A
1a9b0 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
1a9c0 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ;   /* Informati
1a9d0 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61  on about aggrega
1a9e0 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65  tes at this leve
1a9f0 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65  l */.  NameConte
1aa00 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  xt *pNext;  /* N
1aa10 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63  ext outer name c
1aa20 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f  ontext.  NULL fo
1aa30 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20  r outermost */. 
1aa40 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
1aa50 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1aa60 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65  of names resolve
1aa70 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78  d by this contex
1aa80 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  t */.  int nErr;
1aa90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1aaa0 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
1aab0 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c  encountered whil
1aac0 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  e resolving name
1aad0 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61  s */.  u16 ncFla
1aae0 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a  gs;         /* Z
1aaf0 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a  ero or more NC_*
1ab00 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62   flags defined b
1ab10 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  elow */.};../*.*
1ab20 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
1ab30 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e   for the NameCon
1ab40 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69  text, ncFlags fi
1ab50 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  eld..**.** Value
1ab60 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c   constraints (al
1ab70 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20 61 73  l checked via as
1ab80 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4e  sert()):.**    N
1ab90 43 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20 53  C_HasAgg    == S
1aba0 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 4e  F_HasAgg.**    N
1abb0 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53  C_MinMaxAgg == S
1abc0 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53  F_MinMaxAgg == S
1abd0 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
1abe0 58 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  X.**.*/.#define 
1abf0 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30  NC_AllowAgg  0x0
1ac00 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74  001  /* Aggregat
1ac10 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
1ac20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a  allowed here */.
1ac30 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49  #define NC_PartI
1ac40 64 78 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20  dx   0x0002  /* 
1ac50 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
1ac60 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65  g a partial inde
1ac70 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69  x WHERE */.#defi
1ac80 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20  ne NC_IsCheck   
1ac90 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20  0x0004  /* True 
1aca0 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  if resolving nam
1acb0 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f  es in a CHECK co
1acc0 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
1acd0 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63  ine NC_InAggFunc
1ace0 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65   0x0008  /* True
1acf0 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72   if analyzing ar
1ad00 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67  guments to an ag
1ad10 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  g func */.#defin
1ad20 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30  e NC_HasAgg    0
1ad30 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f 72  x0010  /* One or
1ad40 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
1ad50 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a  functions seen *
1ad60 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64 78  /.#define NC_Idx
1ad70 45 78 70 72 20 20 20 30 78 30 30 32 30 20 20 2f  Expr   0x0020  /
1ad80 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
1ad90 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 43  ing columns of C
1ada0 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23  REATE INDEX */.#
1adb0 64 65 66 69 6e 65 20 4e 43 5f 56 61 72 53 65 6c  define NC_VarSel
1adc0 65 63 74 20 30 78 30 30 34 30 20 20 2f 2a 20 41  ect 0x0040  /* A
1add0 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71   correlated subq
1ade0 75 65 72 79 20 68 61 73 20 62 65 65 6e 20 73 65  uery has been se
1adf0 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  en */.#define NC
1ae00 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30  _MinMaxAgg 0x100
1ae10 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67  0  /* min/max ag
1ae20 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20  gregates seen.  
1ae30 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a  See note above *
1ae40 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
1ae50 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1ae60 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1ae70 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66  contains all inf
1ae80 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64  ormation.** need
1ae90 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63  ed to generate c
1aea0 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  ode for a single
1aeb0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1aec0 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20  t..**.** nLimit 
1aed0 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20  is set to -1 if 
1aee0 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49  there is no LIMI
1aef0 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73  T clause.  nOffs
1af00 65 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a  et is set to 0..
1af10 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61  ** If there is a
1af20 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
1af30 68 65 20 70 61 72 73 65 72 20 73 65 74 73 20 6e  he parser sets n
1af40 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c  Limit to the val
1af50 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d  ue of the.** lim
1af60 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74  it and nOffset t
1af70 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
1af80 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20  he offset (or 0 
1af90 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a  if there is not.
1afa0 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74  ** offset).  But
1afb0 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69   later on, nLimi
1afc0 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65  t and nOffset be
1afd0 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  come the memory 
1afe0 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20  locations.** in 
1aff0 74 68 65 20 56 44 42 45 20 74 68 61 74 20 72 65  the VDBE that re
1b000 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61  cord the limit a
1b010 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65  nd offset counte
1b020 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70  rs..**.** addrOp
1b030 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73  enEphm[] entries
1b040 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64   contain the add
1b050 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45  ress of OP_OpenE
1b060 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73  phemeral opcodes
1b070 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65  ..** These addre
1b080 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f  sses must be sto
1b090 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63  red so that we c
1b0a0 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66  an go back and f
1b0b0 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34  ill in.** the P4
1b0c0 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20  _KEYINFO and P2 
1b0d0 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72  parameters later
1b0e0 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b  .  Neither the K
1b0f0 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68  eyInfo nor.** th
1b100 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1b110 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65  mns in P2 can be
1b120 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65   computed at the
1b130 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73   same time.** as
1b140 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d   the OP_OpenEphm
1b150 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
1b160 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f  coded because no
1b170 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f  t.** enough info
1b180 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
1b190 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  e compound query
1b1a0 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61   is known at tha
1b1b0 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20  t point..** The 
1b1c0 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
1b1d0 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20  OpenTran[0] and 
1b1e0 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [1] contains col
1b1f0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
1b200 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75  .** for the resu
1b210 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79  lt set.  The Key
1b220 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
1b230 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e  nEphm[2] contain
1b240 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73  s collating.** s
1b250 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65  equences for the
1b260 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1b270 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
1b280 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20  ct {.  ExprList 
1b290 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a  *pEList;      /*
1b2a0 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74   The fields of t
1b2b0 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75  he result */.  u
1b2c0 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
1b2d0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a        /* One of:
1b2e0 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c   TK_UNION TK_ALL
1b2f0 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b   TK_INTERSECT TK
1b300 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f 67  _EXCEPT */.  Log
1b310 45 73 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20  Est nSelectRow; 
1b320 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
1b330 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c   number of resul
1b340 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32 20  t rows */.  u32 
1b350 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20  selFlags;       
1b360 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46     /* Various SF
1b370 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69  _* values */.  i
1b380 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73  nt iLimit, iOffs
1b390 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20  et;   /* Memory 
1b3a0 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e  registers holdin
1b3b0 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54  g LIMIT & OFFSET
1b3c0 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66   counters */.#if
1b3d0 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
1b3e0 42 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c  BLED.  char zSel
1b3f0 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a  Name[12];     /*
1b400 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f   Symbolic name o
1b410 66 20 74 68 69 73 20 53 45 4c 45 43 54 20 75 73  f this SELECT us
1b420 65 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20  e for debugging 
1b430 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
1b440 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b  addrOpenEphm[2];
1b450 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68     /* OP_OpenEph
1b460 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74  em opcodes relat
1b470 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
1b480 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  t */.  SrcList *
1b490 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  pSrc;         /*
1b4a0 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   The FROM clause
1b4b0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1b4c0 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  re;          /* 
1b4d0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1b4e0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1b4f0 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20  pGroupBy;    /* 
1b500 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  The GROUP BY cla
1b510 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
1b520 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20  Having;         
1b530 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c  /* The HAVING cl
1b540 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
1b550 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20  st *pOrderBy;   
1b560 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59   /* The ORDER BY
1b570 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c   clause */.  Sel
1b580 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20  ect *pPrior;    
1b590 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c      /* Prior sel
1b5a0 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  ect in a compoun
1b5b0 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  d select stateme
1b5c0 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  nt */.  Select *
1b5d0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
1b5e0 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f  * Next select to
1b5f0 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63   the left in a c
1b600 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70  ompound */.  Exp
1b610 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20  r *pLimit;      
1b620 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70      /* LIMIT exp
1b630 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
1b640 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
1b650 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74  .  Expr *pOffset
1b660 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46  ;         /* OFF
1b670 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  SET expression. 
1b680 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75  NULL means not u
1b690 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a  sed. */.  With *
1b6a0 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20  pWith;          
1b6b0 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20   /* WITH clause 
1b6c0 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73  attached to this
1b6d0 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c   select. Or NULL
1b6e0 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  . */.};../*.** A
1b6f0 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
1b700 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67  r Select.selFlag
1b710 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65  s.  The "SF" pre
1b720 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a  fix stands for.*
1b730 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e  * "Select Flag".
1b740 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
1b750 73 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68  straints (all ch
1b760 65 63 6b 65 64 20 76 69 61 20 61 73 73 65 72 74  ecked via assert
1b770 28 29 29 0a 2a 2a 20 20 20 20 20 53 46 5f 48 61  ()).**     SF_Ha
1b780 73 41 67 67 20 20 20 20 20 3d 3d 20 4e 43 5f 48  sAgg     == NC_H
1b790 61 73 41 67 67 0a 2a 2a 20 20 20 20 20 53 46 5f  asAgg.**     SF_
1b7a0 4d 69 6e 4d 61 78 41 67 67 20 20 3d 3d 20 4e 43  MinMaxAgg  == NC
1b7b0 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 3d  _MinMaxAgg     =
1b7c0 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49  = SQLITE_FUNC_MI
1b7d0 4e 4d 41 58 0a 2a 2a 20 20 20 20 20 53 46 5f 46  NMAX.**     SF_F
1b7e0 69 78 65 64 4c 69 6d 69 74 20 3d 3d 20 57 48 45  ixedLimit == WHE
1b7f0 52 45 5f 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a  RE_USE_LIMIT.*/.
1b800 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69  #define SF_Disti
1b810 6e 63 74 20 20 20 20 20 20 20 30 78 30 30 30 30  nct       0x0000
1b820 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f  1  /* Output sho
1b830 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20  uld be DISTINCT 
1b840 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c  */.#define SF_Al
1b850 6c 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30  l            0x0
1b860 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65  0002  /* Include
1b870 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72  s the ALL keywor
1b880 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  d */.#define SF_
1b890 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 30  Resolved       0
1b8a0 78 30 30 30 30 34 20 20 2f 2a 20 49 64 65 6e 74  x00004  /* Ident
1b8b0 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e  ifiers have been
1b8c0 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65   resolved */.#de
1b8d0 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74  fine SF_Aggregat
1b8e0 65 20 20 20 20 20 20 30 78 30 30 30 30 38 20 20  e      0x00008  
1b8f0 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 20  /* Contains agg 
1b900 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20 47  functions or a G
1b910 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69  ROUP BY */.#defi
1b920 6e 65 20 53 46 5f 48 61 73 41 67 67 20 20 20 20  ne SF_HasAgg    
1b930 20 20 20 20 20 30 78 30 30 30 31 30 20 20 2f 2a       0x00010  /*
1b940 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   Contains aggreg
1b950 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
1b960 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73  .#define SF_Uses
1b970 45 70 68 65 6d 65 72 61 6c 20 20 30 78 30 30 30  Ephemeral  0x000
1b980 32 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20  20  /* Uses the 
1b990 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
1b9a0 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  code */.#define 
1b9b0 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20  SF_Expanded     
1b9c0 20 20 30 78 30 30 30 34 30 20 20 2f 2a 20 73 71    0x00040  /* sq
1b9d0 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e  lite3SelectExpan
1b9e0 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68  d() called on th
1b9f0 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  is */.#define SF
1ba00 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20  _HasTypeInfo    
1ba10 30 78 30 30 30 38 30 20 20 2f 2a 20 46 52 4f 4d  0x00080  /* FROM
1ba20 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65   subqueries have
1ba30 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20   Table metadata 
1ba40 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f  */.#define SF_Co
1ba50 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 30 78 30  mpound       0x0
1ba60 30 31 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0100  /* Part of
1ba70 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72   a compound quer
1ba80 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  y */.#define SF_
1ba90 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 30  Values         0
1baa0 78 30 30 32 30 30 20 20 2f 2a 20 53 79 6e 74 68  x00200  /* Synth
1bab0 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55  esized from VALU
1bac0 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  ES clause */.#de
1bad0 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c  fine SF_MultiVal
1bae0 75 65 20 20 20 20 20 30 78 30 30 34 30 30 20 20  ue     0x00400  
1baf0 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45 53  /* Single VALUES
1bb00 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74 69   term with multi
1bb10 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66  ple rows */.#def
1bb20 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f  ine SF_NestedFro
1bb30 6d 20 20 20 20 20 30 78 30 30 38 30 30 20 20 2f  m     0x00800  /
1bb40 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65  * Part of a pare
1bb50 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63  nthesized FROM c
1bb60 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
1bb70 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20   SF_MinMaxAgg   
1bb80 20 20 20 30 78 30 31 30 30 30 20 20 2f 2a 20 41     0x01000  /* A
1bb90 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e  ggregate contain
1bba0 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78  ing min() or max
1bbb0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
1bbc0 5f 52 65 63 75 72 73 69 76 65 20 20 20 20 20 20  _Recursive      
1bbd0 30 78 30 32 30 30 30 20 20 2f 2a 20 54 68 65 20  0x02000  /* The 
1bbe0 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20 6f  recursive part o
1bbf0 66 20 61 20 72 65 63 75 72 73 69 76 65 20 43 54  f a recursive CT
1bc00 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  E */.#define SF_
1bc10 46 69 78 65 64 4c 69 6d 69 74 20 20 20 20 20 30  FixedLimit     0
1bc20 78 30 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c 65  x04000  /* nSele
1bc30 63 74 52 6f 77 20 73 65 74 20 62 79 20 61 20 63  ctRow set by a c
1bc40 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a 2f  onstant LIMIT */
1bc50 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62  .#define SF_Mayb
1bc60 65 43 6f 6e 76 65 72 74 20 20 20 30 78 30 38 30  eConvert   0x080
1bc70 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76  00  /* Need conv
1bc80 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63  ertCompoundSelec
1bc90 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f  tToSubquery() */
1bca0 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76  .#define SF_Conv
1bcb0 65 72 74 65 64 20 20 20 20 20 20 30 78 31 30 30  erted      0x100
1bcc0 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72  00  /* By conver
1bcd0 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
1bce0 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23  oSubquery() */.#
1bcf0 64 65 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64  define SF_Includ
1bd00 65 48 69 64 64 65 6e 20 20 30 78 32 30 30 30 30  eHidden  0x20000
1bd10 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69 64    /* Include hid
1bd20 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f  den columns in o
1bd30 75 74 70 75 74 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  utput */.../*.**
1bd40 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   The results of 
1bd50 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20  a SELECT can be 
1bd60 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73  distributed in s
1bd70 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20  everal ways, as 
1bd80 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e  defined.** by on
1bd90 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1bda0 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20  ng macros.  The 
1bdb0 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61  "SRT" prefix mea
1bdc0 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c  ns "SELECT Resul
1bdd0 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a  t.** Type"..**.*
1bde0 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20  *     SRT_Union 
1bdf0 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
1be00 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20  lts as a key in 
1be10 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  a temporary inde
1be20 78 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  x.**            
1be30 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66           identif
1be40 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53  ied by pDest->iS
1be50 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
1be60 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
1be70 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20   Remove results 
1be80 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61  from the tempora
1be90 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e  ry index pDest->
1bea0 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20  iSDParm..**.**  
1beb0 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20     SRT_Exists   
1bec0 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20     Store a 1 in 
1bed0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73  memory cell pDes
1bee0 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68  t->iSDParm if th
1bef0 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20  e result.**     
1bf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf10 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  set is not empty
1bf20 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1bf30 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f  Discard     Thro
1bf40 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77  w the results aw
1bf50 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65  ay.  This is use
1bf60 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20  d by SELECT.**  
1bf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf80 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69     statements wi
1bf90 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68  thin triggers wh
1bfa0 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65  ose only purpose
1bfb0 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   is.**          
1bfc0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
1bfd0 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66  ide-effects of f
1bfe0 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
1bff0 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  All of the above
1c000 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e   are free to ign
1c010 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20  ore their ORDER 
1c020 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65  BY clause. Those
1c030 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20   that.** follow 
1c040 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f  must honor the O
1c050 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1c060 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75  **.**     SRT_Ou
1c070 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61  tput      Genera
1c080 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70  te a row of outp
1c090 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50  ut (using the OP
1c0a0 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20  _ResultRow.**   
1c0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0c0 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61    opcode) for ea
1c0d0 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65  ch row in the re
1c0e0 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  sult set..**.** 
1c0f0 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20      SRT_Mem     
1c100 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69      Only valid i
1c110 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
1c120 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
1c130 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1c140 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68          Store th
1c150 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f  e first column o
1c160 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75  f the first resu
1c170 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20  lt row.**       
1c180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1c190 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
1c1a0 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62  >iSDParm then ab
1c1b0 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a  andon the rest.*
1c1c0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1c1d0 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65        of the que
1c1e0 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e  ry.  This destin
1c1f0 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c  ation implies "L
1c200 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20  IMIT 1"..**.**  
1c210 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20     SRT_Set      
1c220 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75     The result mu
1c230 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63  st be a single c
1c240 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61  olumn.  Store ea
1c250 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ch.**           
1c260 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66            row of
1c270 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b   result as the k
1c280 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73  ey in table pDes
1c290 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1c2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2b0 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66     Apply the aff
1c2c0 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66  inity pDest->aff
1c2d0 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72  Sdst before stor
1c2e0 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ing.**          
1c2f0 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1c300 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70  ts.  Used to imp
1c310 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45  lement "IN (SELE
1c320 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20  CT ...)"..**.** 
1c330 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62      SRT_EphemTab
1c340 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65      Create an te
1c350 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
1c360 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64  est->iSDParm and
1c370 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20   store.**       
1c380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1c390 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20  e result there. 
1c3a0 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65  The cursor is le
1c3b0 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a  ft open after.**
1c3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3d0 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20       returning. 
1c3e0 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
1c3f0 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74  T_Table except t
1c400 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  hat.**          
1c410 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
1c420 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73  destination uses
1c430 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1c440 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20  l to create.**  
1c450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c460 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72     the table fir
1c470 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  st..**.**     SR
1c480 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65  T_Coroutine   Ge
1c490 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74  nerate a co-rout
1c4a0 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73  ine that returns
1c4b0 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a   a new row of.**
1c4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4d0 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63       results eac
1c4e0 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76  h time it is inv
1c4f0 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79  oked.  The entry
1c500 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20   point.**       
1c510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
1c520 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20   the co-routine 
1c530 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
1c540 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44  ister pDest->iSD
1c550 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20  Parm.**         
1c560 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20              and 
1c570 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69  the result row i
1c580 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73  s stored in pDes
1c590 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65  t->nDest registe
1c5a0 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  rs.**           
1c5b0 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69            starti
1c5c0 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69  ng with pDest->i
1c5d0 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Sdst..**.**     
1c5e0 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
1c5f0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1c600 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1c610 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1c620 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f  .**     SRT_Fifo
1c630 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20          This is 
1c640 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61  like SRT_EphemTa
1c650 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  b except that th
1c660 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20  e table.**      
1c670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1c680 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72  s assumed to alr
1c690 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53  eady be open.  S
1c6a0 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20  RT_Fifo has.**  
1c6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6c0 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61     the additiona
1c6d0 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65  l property of be
1c6e0 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f  ing able to igno
1c6f0 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  re.**           
1c700 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52            the OR
1c710 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1c720 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
1c730 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72  tFifo    Store r
1c740 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70  esults in a temp
1c750 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1c760 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1c770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c780 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20     But also use 
1c790 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1c7a0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
1c7b0 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   as.**          
1c7c0 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63             a rec
1c7d0 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72  ord of all prior
1c7e0 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e   results and ign
1c7f0 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74  ore any duplicat
1c800 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1c810 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20           rows.  
1c820 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69  Name means:  "Di
1c830 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a  stinct Fifo"..**
1c840 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75  .**     SRT_Queu
1c850 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  e       Store re
1c860 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
1c870 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
1c880 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a  SDParm (really.*
1c890 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1c8a0 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e        an index).
1c8b0 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65    Append a seque
1c8c0 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68  nce number so th
1c8d0 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a  at all entries.*
1c8e0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1c8f0 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e        are distin
1c900 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  ct..**.**     SR
1c910 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74  T_DistQueue   St
1c920 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
1c930 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44  riority queue pD
1c940 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c  est->iSDParm onl
1c950 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  y if.**         
1c960 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1c970 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20  same record has 
1c980 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65  never been store
1c990 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a  d before.  The.*
1c9a0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1c9b0 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70        index at p
1c9c0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
1c9d0 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73  hold all prior s
1c9e0 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tores..*/.#defin
1c9f0 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20  e SRT_Union     
1ca00 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72     1  /* Store r
1ca10 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e  esult as keys in
1ca20 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
1ca30 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20  fine SRT_Except 
1ca40 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f        2  /* Remo
1ca50 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61  ve result from a
1ca60 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a   UNION index */.
1ca70 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73  #define SRT_Exis
1ca80 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53  ts       3  /* S
1ca90 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65  tore 1 if the re
1caa0 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74  sult is not empt
1cab0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
1cac0 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20  _Discard      4 
1cad0 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20   /* Do not save 
1cae0 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77  the results anyw
1caf0 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  here */.#define 
1cb00 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20  SRT_Fifo        
1cb10 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   5  /* Store res
1cb20 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
1cb30 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
1cb40 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wid */.#define S
1cb50 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20  RT_DistFifo     
1cb60 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46  6  /* Like SRT_F
1cb70 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20  ifo, but unique 
1cb80 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a  results only */.
1cb90 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75  #define SRT_Queu
1cba0 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53  e        7  /* S
1cbb0 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
1cbc0 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69  n queue */.#defi
1cbd0 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65  ne SRT_DistQueue
1cbe0 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53      8  /* Like S
1cbf0 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e  RT_Queue, but un
1cc00 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
1cc10 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44  y */../* The ORD
1cc20 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
1cc30 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20  ignored for all 
1cc40 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a  of the above */.
1cc50 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c  #define Ignorabl
1cc60 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d  eOrderby(X) ((X-
1cc70 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73  >eDest)<=SRT_Dis
1cc80 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65  tQueue)..#define
1cc90 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
1cca0 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65    9  /* Output e
1ccb0 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  ach row of resul
1ccc0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
1ccd0 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20  _Mem         10 
1cce0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1ccf0 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   in a memory cel
1cd00 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  l */.#define SRT
1cd10 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20  _Set         11 
1cd20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1cd30 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  s as keys in an 
1cd40 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1cd50 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20   SRT_EphemTab   
1cd60 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74   12  /* Create t
1cd70 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64  ransient tab and
1cd80 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f   store like SRT_
1cd90 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Table */.#define
1cda0 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
1cdb0 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65   13  /* Generate
1cdc0 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a single row of
1cdd0 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
1cde0 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20  ne SRT_Table    
1cdf0 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20     14  /* Store 
1ce00 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
1ce10 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
1ce20 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   rowid */../*.**
1ce30 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1ce40 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63  this object desc
1ce50 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70  ribes where to p
1ce60 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ut of the result
1ce70 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54  s of.** a SELECT
1ce80 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
1ce90 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
1cea0 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20   {.  u8 eDest;  
1ceb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77            /* How
1cec0 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74   to dispose of t
1ced0 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20  he results.  On 
1cee0 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20  of SRT_* above. 
1cef0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 53  */.  char *zAffS
1cf00 64 73 74 3b 20 20 20 20 20 20 2f 2a 20 41 66 66  dst;      /* Aff
1cf10 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20  inity used when 
1cf20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a  eDest==SRT_Set *
1cf30 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b  /.  int iSDParm;
1cf40 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61           /* A pa
1cf50 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20  rameter used by 
1cf60 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73  the eDest dispos
1cf70 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69  al method */.  i
1cf80 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20  nt iSdst;       
1cf90 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
1cfa0 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c  ster where resul
1cfb0 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a  ts are written *
1cfc0 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20  /.  int nSdst;  
1cfd0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1cfe0 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
1cff0 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45  allocated */.  E
1d000 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
1d010 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d  y;  /* Key colum
1d020 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65  ns for SRT_Queue
1d030 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65   and SRT_DistQue
1d040 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ue */.};../*.** 
1d050 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65  During code gene
1d060 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d  ration of statem
1d070 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73  ents that do ins
1d080 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e  erts into AUTOIN
1d090 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c 65  CREMENT.** table
1d0a0 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  s, the following
1d0b0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
1d0c0 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
1d0d0 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e  Table.u.autoInc.
1d0e0 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20  p.** pointer of 
1d0f0 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65  each autoincreme
1d100 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f  nt table to reco
1d110 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66  rd some side inf
1d120 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a  ormation that.**
1d130 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
1d140 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68  tor needs.  We h
1d150 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d  ave to keep per-
1d160 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d  table autoincrem
1d170 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ent.** informati
1d180 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72  on in case inser
1d190 74 73 20 61 72 65 20 64 6f 6e 65 20 77 69 74 68  ts are done with
1d1a0 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72  in triggers.  Tr
1d1b0 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a  iggers do not.**
1d1c0 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69   normally coordi
1d1d0 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76  nate their activ
1d1e0 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f  ities, but we do
1d1f0 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e   need to coordin
1d200 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69  ate the.** loadi
1d210 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66  ng and saving of
1d220 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69   autoincrement i
1d230 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
1d240 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
1d250 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  o {.  AutoincInf
1d260 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e  o *pNext;   /* N
1d270 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69  ext info block i
1d280 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d  n a list of them
1d290 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20   all */.  Table 
1d2a0 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
1d2b0 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e  /* Table this in
1d2c0 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20  fo block refers 
1d2d0 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  to */.  int iDb;
1d2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d2f0 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65   Index in sqlite
1d300 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62  3.aDb[] of datab
1d310 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62  ase holding pTab
1d320 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72   */.  int regCtr
1d330 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
1d340 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68  emory register h
1d350 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64  olding the rowid
1d360 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a   counter */.};..
1d370 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68  /*.** Size of th
1d380 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a  e column cache.*
1d390 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1d3a0 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65  _N_COLCACHE.# de
1d3b0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  fine SQLITE_N_CO
1d3c0 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66  LCACHE 10.#endif
1d3d0 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74  ../*.** At least
1d3e0 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66   one instance of
1d3f0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1d400 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61  tructure is crea
1d410 74 65 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20  ted for each.** 
1d420 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79  trigger that may
1d430 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20   be fired while 
1d440 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52  parsing an INSER
1d450 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
1d460 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ETE.** statement
1d470 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63  . All such objec
1d480 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
1d490 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1d4a0 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61   headed at.** Pa
1d4b0 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1d4c0 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65  and deleted once
1d4d0 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69   statement compi
1d4e0 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a  lation has been.
1d4f0 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a  ** completed..**
1d500 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70  .** A Vdbe sub-p
1d510 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c  rogram that impl
1d520 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20  ements the body 
1d530 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20  and WHEN clause 
1d540 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72  of trigger.** Tr
1d550 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65  iggerPrg.pTrigge
1d560 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65  r, assuming a de
1d570 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1d580 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54  T clause of.** T
1d590 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66  riggerPrg.orconf
1d5a0 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  , is stored in t
1d5b0 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50  he TriggerPrg.pP
1d5c0 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e  rogram variable.
1d5d0 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54  .** The Parse.pT
1d5e0 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e  riggerPrg list n
1d5f0 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77  ever contains tw
1d600 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74  o entries with t
1d610 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65  he same.** value
1d620 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67  s for both pTrig
1d630 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a  ger and orconf..
1d640 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65  **.** The Trigge
1d650 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d  rPrg.aColmask[0]
1d660 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
1d670 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c   to a mask of ol
1d680 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61  d.* columns.** a
1d690 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20  ccessed (or set 
1d6a0 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72  to 0 for trigger
1d6b0 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73  s fired as a res
1d6c0 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a 2a  ult of INSERT.**
1d6d0 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69   statements). Si
1d6e0 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69  milarly, the Tri
1d6f0 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
1d700 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [1] variable is 
1d710 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b  set to.** a mask
1d720 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e   of new.* column
1d730 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  s used by the pr
1d740 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74  ogram..*/.struct
1d750 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20   TriggerPrg {.  
1d760 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
1d770 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67  r;      /* Trigg
1d780 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20  er this program 
1d790 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a  was coded from *
1d7a0 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a  /.  TriggerPrg *
1d7b0 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
1d7c0 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72  ext entry in Par
1d7d0 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c  se.pTriggerPrg l
1d7e0 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67  ist */.  SubProg
1d7f0 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20  ram *pProgram;  
1d800 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c   /* Program impl
1d810 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65  ementing pTrigge
1d820 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e  r/orconf */.  in
1d830 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  t orconf;       
1d840 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
1d850 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c   ON CONFLICT pol
1d860 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f  icy */.  u32 aCo
1d870 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20  lmask[2];       
1d880 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64   /* Masks of old
1d890 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e  .*, new.* column
1d8a0 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b  s accessed */.};
1d8b0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d  ../*.** The yDbM
1d8c0 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72  ask datatype for
1d8d0 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20   the bitmask of 
1d8e0 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
1d8f0 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53  abases..*/.#if S
1d900 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
1d910 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20  ED>30.  typedef 
1d920 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79 44  unsigned char yD
1d930 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41  bMask[(SQLITE_MA
1d940 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38 5d  X_ATTACHED+9)/8]
1d950 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ;.# define DbMas
1d960 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28  kTest(M,I)    ((
1d970 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28  (M)[(I)/8]&(1<<(
1d980 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20 64  (I)&7)))!=0).# d
1d990 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f  efine DbMaskZero
1d9a0 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74 28  (M)      memset(
1d9b0 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29  (M),0,sizeof(M))
1d9c0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1d9d0 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29  Set(M,I)     (M)
1d9e0 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49  [(I)/8]|=(1<<((I
1d9f0 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20 44  )&7)).# define D
1da00 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20  bMaskAllZero(M) 
1da10 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41    sqlite3DbMaskA
1da20 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66 69  llZero(M).# defi
1da30 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f  ne DbMaskNonZero
1da40 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44 62  (M)   (sqlite3Db
1da50 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d  MaskAllZero(M)==
1da60 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  0).#else.  typed
1da70 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  ef unsigned int 
1da80 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e  yDbMask;.# defin
1da90 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49  e DbMaskTest(M,I
1daa0 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79 44  )    (((M)&(((yD
1dab0 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29 21  bMask)1)<<(I)))!
1dac0 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  =0).# define DbM
1dad0 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20  askZero(M)      
1dae0 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20 44  (M)=0.# define D
1daf0 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20  bMaskSet(M,I)   
1db00 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73    (M)|=(((yDbMas
1db10 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65 66  k)1)<<(I)).# def
1db20 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ine DbMaskAllZer
1db30 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20  o(M)   (M)==0.# 
1db40 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e  define DbMaskNon
1db50 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30  Zero(M)   (M)!=0
1db60 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1db70 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e  n SQL parser con
1db80 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66  text.  A copy of
1db90 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
1dba0 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75 67  is passed throug
1dbb0 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20  h.** the parser 
1dbc0 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c  and down into al
1dbd0 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63 74  l the parser act
1dbe0 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f  ion routine in o
1dbf0 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79  rder to.** carry
1dc00 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74   around informat
1dc10 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62  ion that is glob
1dc20 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65  al to the entire
1dc30 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   parse..**.** Th
1dc40 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20 64  e structure is d
1dc50 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20  ivided into two 
1dc60 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65  parts.  When the
1dc70 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65   parser and code
1dc80 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c  .** generate cal
1dc90 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63  l themselves rec
1dca0 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69  ursively, the fi
1dcb0 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20  rst part of the 
1dcc0 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20  structure.** is 
1dcd0 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65  constant but the
1dce0 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20   second part is 
1dcf0 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65 67  reset at the beg
1dd00 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f  inning and end o
1dd10 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73  f.** each recurs
1dd20 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e  ion..**.** The n
1dd30 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54  TableLock and aT
1dd40 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c  ableLock variabl
1dd50 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64  es are only used
1dd60 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d 63   if the shared-c
1dd70 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72 65 20  ache.** feature 
1dd80 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73  is enabled (if s
1dd90 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65  qlite3Tsd()->use
1dda0 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74 72  SharedData is tr
1ddb0 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a  ue). They are.**
1ddc0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1ddd0 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d  he set of table-
1dde0 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20 62  locks required b
1ddf0 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  y the statement 
1de00 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65  being.** compile
1de10 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69  d. Function sqli
1de20 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69  te3TableLock() i
1de30 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e  s used to add en
1de40 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20  tries to the.** 
1de50 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  list..*/.struct 
1de60 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65  Parse {.  sqlite
1de70 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f  3 *db;         /
1de80 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * The main datab
1de90 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  ase structure */
1dea0 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67  .  char *zErrMsg
1deb0 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72  ;       /* An er
1dec0 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
1ded0 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20   Vdbe *pVdbe;   
1dee0 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69        /* An engi
1def0 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67  ne for executing
1df00 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63 6f   database byteco
1df10 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  de */.  int rc; 
1df20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1df30 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
1df40 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20   execution */.  
1df50 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20  u8 colNamesSet; 
1df60 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74       /* TRUE aft
1df70 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65  er OP_ColumnName
1df80 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65 64   has been issued
1df90 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75   to pVdbe */.  u
1dfa0 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20  8 checkSchema;  
1dfb0 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63      /* Causes sc
1dfc0 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63  hema cookie chec
1dfd0 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  k after an error
1dfe0 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b   */.  u8 nested;
1dff0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1e000 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
1e010 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73  alls to the pars
1e020 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  er/code generato
1e030 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52  r */.  u8 nTempR
1e040 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  eg;         /* N
1e050 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61  umber of tempora
1e060 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e 20  ry registers in 
1e070 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20  aTempReg[] */.  
1e080 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b  u8 isMultiWrite;
1e090 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1e0a0 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f  statement may mo
1e0b0 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74  dify/insert mult
1e0c0 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75  iple rows */.  u
1e0d0 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20  8 mayAbort;     
1e0e0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73      /* True if s
1e0f0 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72  tatement may thr
1e100 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65  ow an ABORT exce
1e110 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61  ption */.  u8 ha
1e120 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20  sCompound;      
1e130 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b  /* Need to invok
1e140 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  e convertCompoun
1e150 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
1e160 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f  y() */.  u8 okCo
1e170 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a  nstFactor;    /*
1e180 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f 75   OK to factor ou
1e190 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20  t constants */. 
1e1a0 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61   u8 disableLooka
1e1b0 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72 20  side; /* Number 
1e1c0 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73 69  of times lookasi
1e1d0 64 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 61  de has been disa
1e1e0 62 6c 65 64 20 2a 2f 0a 20 20 75 38 20 6e 43 6f  bled */.  u8 nCo
1e1f0 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20 20 2f  lCache;        /
1e200 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
1e210 69 65 73 20 69 6e 20 61 43 6f 6c 43 61 63 68 65  ies in aColCache
1e220 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d  [] */.  int aTem
1e230 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20  pReg[8];     /* 
1e240 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72  Holding area for
1e250 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
1e260 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ters */.  int nR
1e270 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f  angeReg;       /
1e280 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65  * Size of the te
1e290 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1e2a0 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   block */.  int 
1e2b0 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  iRangeReg;      
1e2c0 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74   /* First regist
1e2d0 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  er in temporary 
1e2e0 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a  register block *
1e2f0 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
1e300 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1e310 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65  er of errors see
1e320 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b  n */.  int nTab;
1e330 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1e340 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75  umber of previou
1e350 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44  sly allocated VD
1e360 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20  BE cursors */.  
1e370 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20  int nMem;       
1e380 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1e390 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75  f memory cells u
1e3a0 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
1e3b0 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20 20  int nSet;       
1e3c0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1e3d0 66 20 73 65 74 73 20 75 73 65 64 20 73 6f 20 66  f sets used so f
1e3e0 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63  ar */.  int nOnc
1e3f0 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
1e400 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63  Number of OP_Onc
1e410 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 73  e instructions s
1e420 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
1e430 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  OpAlloc;        
1e440 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f  /* Number of slo
1e450 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  ts allocated for
1e460 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20   Vdbe.aOp[] */. 
1e470 20 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20   int szOpAlloc; 
1e480 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f        /* Bytes o
1e490 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 61  f memory space a
1e4a0 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62  llocated for Vdb
1e4b0 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  e.aOp[] */.  int
1e4c0 20 69 46 69 78 65 64 4f 70 3b 20 20 20 20 20 20   iFixedOp;      
1e4d0 20 20 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b 20    /* Never back 
1e4e0 6f 75 74 20 6f 70 63 6f 64 65 73 20 69 46 69 78  out opcodes iFix
1e4f0 65 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69 65  edOp-1 or earlie
1e500 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73  r */.  int ckBas
1e510 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42  e;          /* B
1e520 61 73 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  ase register of 
1e530 64 61 74 61 20 64 75 72 69 6e 67 20 63 68 65 63  data during chec
1e540 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
1e550 0a 20 20 69 6e 74 20 69 53 65 6c 66 54 61 62 3b  .  int iSelfTab;
1e560 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
1e570 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 77 68 6f   of an index who
1e580 73 65 20 65 78 70 72 73 20 61 72 65 20 62 65 69  se exprs are bei
1e590 6e 67 20 63 6f 64 65 64 20 2a 2f 0a 20 20 69 6e  ng coded */.  in
1e5a0 74 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20  t iCacheLevel;  
1e5b0 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76     /* ColCache v
1e5c0 61 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61  alid when aColCa
1e5d0 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43  che[].iLevel<=iC
1e5e0 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69  acheLevel */.  i
1e5f0 6e 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20  nt iCacheCnt;   
1e600 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75      /* Counter u
1e610 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  sed to generate 
1e620 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20  aColCache[].lru 
1e630 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  values */.  int 
1e640 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20  nLabel;         
1e650 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61   /* Number of la
1e660 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69  bels used */.  i
1e670 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20  nt *aLabel;     
1e680 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20      /* Space to 
1e690 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20  hold the labels 
1e6a0 2a 2f 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c  */.  struct yCol
1e6b0 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20  Cache {.    int 
1e6c0 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
1e6d0 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f    /* Table curso
1e6e0 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  r number */.    
1e6f0 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  i16 iColumn;    
1e700 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63        /* Table c
1e710 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a  olumn number */.
1e720 20 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20      u8 tempReg; 
1e730 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65            /* iRe
1e740 67 20 69 73 20 61 20 74 65 6d 70 20 72 65 67 69  g is a temp regi
1e750 73 74 65 72 20 74 68 61 74 20 6e 65 65 64 73 20  ster that needs 
1e760 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20  to be freed */. 
1e770 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20     int iLevel;  
1e780 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74           /* Nest
1e790 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20  ing level */.   
1e7a0 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20   int iReg;      
1e7b0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69         /* Reg wi
1e7c0 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  th value of this
1e7d0 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73   column. 0 means
1e7e0 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e   none. */.    in
1e7f0 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20  t lru;          
1e800 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63      /* Least rec
1e810 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79  ently used entry
1e820 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73   has the smalles
1e830 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61  t value */.  } a
1e840 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f  ColCache[SQLITE_
1e850 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a  N_COLCACHE];  /*
1e860 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f   One for each co
1e870 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79  lumn cache entry
1e880 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1e890 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f  pConstExpr;/* Co
1e8a0 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
1e8b0 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f  ns */.  Token co
1e8c0 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20  nstraintName;/* 
1e8d0 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73  Name of the cons
1e8e0 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79  traint currently
1e8f0 20 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f   being parsed */
1e900 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65  .  yDbMask write
1e910 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74  Mask;   /* Start
1e920 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63   a write transac
1e930 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61  tion on these da
1e940 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62  tabases */.  yDb
1e950 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b  Mask cookieMask;
1e960 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20    /* Bitmask of 
1e970 73 63 68 65 6d 61 20 76 65 72 69 66 69 65 64 20  schema verified 
1e980 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69  databases */.  i
1e990 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53  nt cookieValue[S
1e9a0 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
1e9b0 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65  ED+2];  /* Value
1e9c0 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20  s of cookies to 
1e9d0 76 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e 74 20  verify */.  int 
1e9e0 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20  regRowid;       
1e9f0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
1ea00 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52  ding rowid of CR
1ea10 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79  EATE TABLE entry
1ea20 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f   */.  int regRoo
1ea30 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  t;         /* Re
1ea40 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
1ea50 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
1ea60 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20  for new objects 
1ea70 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67  */.  int nMaxArg
1ea80 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78  ;         /* Max
1ea90 20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f 20   args passed to 
1eaa0 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79  user function by
1eab0 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
1eac0 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f  #if SELECTTRACE_
1ead0 45 4e 41 42 4c 45 44 0a 20 20 69 6e 74 20 6e 53  ENABLED.  int nS
1eae0 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f  elect;         /
1eaf0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45  * Number of SELE
1eb00 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 73 65  CT statements se
1eb10 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c  en */.  int nSel
1eb20 65 63 74 49 6e 64 65 6e 74 3b 20 20 20 2f 2a 20  ectIndent;   /* 
1eb30 48 6f 77 20 66 61 72 20 74 6f 20 69 6e 64 65 6e  How far to inden
1eb40 74 20 53 45 4c 45 43 54 54 52 41 43 45 28 29 20  t SELECTTRACE() 
1eb50 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66  output */.#endif
1eb60 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1eb70 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
1eb80 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f  E.  int nTableLo
1eb90 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ck;        /* Nu
1eba0 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e  mber of locks in
1ebb0 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20   aTableLock */. 
1ebc0 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62   TableLock *aTab
1ebd0 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69  leLock; /* Requi
1ebe0 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20  red table locks 
1ebf0 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65  for shared-cache
1ec00 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a   mode */.#endif.
1ec10 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70    AutoincInfo *p
1ec20 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d  Ainc;  /* Inform
1ec30 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f  ation about AUTO
1ec40 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65  INCREMENT counte
1ec50 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f  rs */..  /* Info
1ec60 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69  rmation used whi
1ec70 6c 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65  le coding trigge
1ec80 72 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20  r programs. */. 
1ec90 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65   Parse *pTopleve
1eca0 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73  l;    /* Parse s
1ecb0 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69  tructure for mai
1ecc0 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55  n program (or NU
1ecd0 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  LL) */.  Table *
1ece0 70 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a  pTriggerTab;  /*
1ecf0 20 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20   Table triggers 
1ed00 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20  are being coded 
1ed10 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64  for */.  int add
1ed20 72 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a  rCrTab;       /*
1ed30 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43   Address of OP_C
1ed40 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64  reateTable opcod
1ed50 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c  e on CREATE TABL
1ed60 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72  E */.  u32 nQuer
1ed70 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45  yLoop;      /* E
1ed80 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65  st number of ite
1ed90 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65  rations of a que
1eda0 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20  ry (10*log2(N)) 
1edb0 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b  */.  u32 oldmask
1edc0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
1edd0 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
1ede0 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
1edf0 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20  .  u32 newmask; 
1ee00 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
1ee10 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  of new.* columns
1ee20 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20   referenced */. 
1ee30 20 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20   u8 eTriggerOp; 
1ee40 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41        /* TK_UPDA
1ee50 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72  TE, TK_INSERT or
1ee60 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20   TK_DELETE */.  
1ee70 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20  u8 eOrconf;     
1ee80 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1ee90 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69  ON CONFLICT poli
1eea0 63 79 20 66 6f 72 20 74 72 69 67 67 65 72 20 73  cy for trigger s
1eeb0 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73  teps */.  u8 dis
1eec0 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f  ableTriggers;  /
1eed0 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c  * True to disabl
1eee0 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20  e triggers */.. 
1eef0 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   /**************
1ef00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ef10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ef20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ef30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20  **********.  ** 
1ef40 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e  Above is constan
1ef50 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72 73  t between recurs
1ef60 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20  ions.  Below is 
1ef70 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64  reset before and
1ef80 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68   after.  ** each
1ef90 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68 65   recursion.  The
1efa0 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65 65   boundary betwee
1efb0 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65 67 69  n these two regi
1efc0 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ons is determine
1efd0 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66  d.  ** using off
1efe0 73 65 74 6f 66 28 50 61 72 73 65 2c 6e 56 61 72  setof(Parse,nVar
1eff0 29 20 73 6f 20 74 68 65 20 6e 56 61 72 20 66 69  ) so the nVar fi
1f000 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68 65 20  eld must be the 
1f010 66 69 72 73 74 20 66 69 65 6c 64 0a 20 20 2a 2a  first field.  **
1f020 20 69 6e 20 74 68 65 20 72 65 63 75 72 73 69 76   in the recursiv
1f030 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a  e region..  ****
1f040 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f050 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f060 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f070 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f080 2a 2a 2a 2a 2f 0a 0a 20 20 79 6e 56 61 72 20 6e  ****/..  ynVar n
1f090 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Var;            
1f0a0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1f0b0 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73 65  '?' variables se
1f0c0 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f  en in the SQL so
1f0d0 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a   far */.  int nz
1f0e0 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Var;            
1f0f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f100 20 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f 74 73   available slots
1f110 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20   in azVar[] */. 
1f120 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64 65 72   u8 iPkSortOrder
1f130 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 53  ;          /* AS
1f140 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20 49 4e  C or DESC for IN
1f150 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
1f160 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69  Y */.  u8 explai
1f170 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
1f180 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
1f190 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20  EXPLAIN flag is 
1f1a0 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65  found on the que
1f1b0 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ry */.#ifndef SQ
1f1c0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
1f1d0 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c  LTABLE.  u8 decl
1f1e0 61 72 65 56 74 61 62 3b 20 20 20 20 20 20 20 20  areVtab;        
1f1f0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e     /* True if in
1f200 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63  side sqlite3_dec
1f210 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20  lare_vtab() */. 
1f220 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20   int nVtabLock; 
1f230 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f240 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20  mber of virtual 
1f250 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a  tables to lock *
1f260 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e  /.#endif.  int n
1f270 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20  Alias;          
1f280 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f290 66 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74  f aliased result
1f2a0 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a   set columns */.
1f2b0 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20    int nHeight;  
1f2c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
1f2d0 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68  xpression tree h
1f2e0 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74  eight of current
1f2f0 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23   sub-select */.#
1f300 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1f310 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74  IT_EXPLAIN.  int
1f320 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20   iSelectId;     
1f330 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66 20         /* ID of 
1f340 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20 66  current select f
1f350 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
1f360 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74  t */.  int iNext
1f370 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20  SelectId;       
1f380 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61 62   /* Next availab
1f390 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f 72  le select ID for
1f3a0 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20   EXPLAIN output 
1f3b0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61 72  */.#endif.  char
1f3c0 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20 20   **azVar;       
1f3d0 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
1f3e0 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61  s to names of pa
1f3f0 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56 64  rameters */.  Vd
1f400 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20  be *pReprepare; 
1f410 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65          /* VM be
1f420 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28  ing reprepared (
1f430 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
1f440 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ()) */.  const c
1f450 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20  har *zTail;     
1f460 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65     /* All SQL te
1f470 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  xt past the last
1f480 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65   semicolon parse
1f490 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  d */.  Table *pN
1f4a0 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  ewTable;        
1f4b0 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e   /* A table bein
1f4c0 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  g constructed by
1f4d0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
1f4e0 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77  .  Trigger *pNew
1f4f0 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20  Trigger;     /* 
1f500 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f  Trigger under co
1f510 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45  nstruct by a CRE
1f520 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20  ATE TRIGGER */. 
1f530 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
1f540 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68  thContext; /* Th
1f550 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72 20  e 6th parameter 
1f560 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c  to db->xAuth cal
1f570 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65  lbacks */.  Toke
1f580 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20  n sNameToken;   
1f590 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77        /* Token w
1f5a0 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20  ith unqualified 
1f5b0 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61  schema object na
1f5c0 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c  me */.  Token sL
1f5d0 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20  astToken;       
1f5e0 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f    /* The last to
1f5f0 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23 69  ken parsed */.#i
1f600 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1f610 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
1f620 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20   Token sArg;    
1f630 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
1f640 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61  mplete text of a
1f650 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74   module argument
1f660 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70   */.  Table **ap
1f670 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20  VtabLock;       
1f680 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69  /* Pointer to vi
1f690 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65  rtual tables nee
1f6a0 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a  ding locking */.
1f6b0 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a  #endif.  Table *
1f6c0 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20  pZombieTab;     
1f6d0 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61     /* List of Ta
1f6e0 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64  ble objects to d
1f6f0 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64 65  elete after code
1f700 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65   gen */.  Trigge
1f710 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50 72  rPrg *pTriggerPr
1f720 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69  g;  /* Linked li
1f730 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67  st of coded trig
1f740 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a  gers */.  With *
1f750 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20  pWith;          
1f760 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57      /* Current W
1f770 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e  ITH clause, or N
1f780 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ULL */.  With *p
1f790 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20 20 20  WithToFree;     
1f7a0 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69 73 20     /* Free this 
1f7b0 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74 20 74  WITH object at t
1f7c0 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61  he end of the pa
1f7d0 72 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  rse */.};../*.**
1f7e0 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
1f7f0 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65  currently inside
1f800 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c   an sqlite3_decl
1f810 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e  are_vtab() call.
1f820 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
1f830 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
1f840 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  BLE.  #define IN
1f850 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a  _DECLARE_VTAB 0.
1f860 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
1f870 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20  IN_DECLARE_VTAB 
1f880 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65  (pParse->declare
1f890 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  Vtab).#endif../*
1f8a0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1f8b0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1f8c0 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 62   structure can b
1f8d0 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20  e declared on a 
1f8e0 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a  stack and used.*
1f8f0 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20 50 61  * to save the Pa
1f900 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74  rse.zAuthContext
1f910 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69   value so that i
1f920 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65  t can be restore
1f930 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75  d later..*/.stru
1f940 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b  ct AuthContext {
1f950 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1f960 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f  AuthContext;   /
1f970 2a 20 50 75 74 20 73 61 76 65 64 20 50 61 72 73  * Put saved Pars
1f980 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68  e.zAuthContext h
1f990 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  ere */.  Parse *
1f9a0 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20  pParse;         
1f9b0 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73       /* The Pars
1f9c0 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d  e structure */.}
1f9d0 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c  ;../*.** Bitfiel
1f9e0 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76  d flags for P5 v
1f9f0 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20  alue in various 
1fa00 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56  opcodes..**.** V
1fa10 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
1fa20 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61   (enforced via a
1fa30 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
1fa40 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
1fa50 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55      == SQLITE_FU
1fa60 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20 20 20  NC_LENGTH.**    
1fa70 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
1fa80 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55      == SQLITE_FU
1fa90 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a 20 20 20 20  NC_TYPEOF.**    
1faa0 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20  OPFLAG_BULKCSR  
1fab0 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 42 55 4c      == BTREE_BUL
1fac0 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f 50 46 4c  KLOAD.**    OPFL
1fad0 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20  AG_SEEKEQ       
1fae0 3d 3d 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  == BTREE_SEEK_EQ
1faf0 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 46 4f  .**    OPFLAG_FO
1fb00 52 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54  RDELETE    == BT
1fb10 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 0a 2a 2a  REE_FORDELETE.**
1fb20 20 20 20 20 4f 50 46 4c 41 47 5f 53 41 56 45 50      OPFLAG_SAVEP
1fb30 4f 53 49 54 49 4f 4e 20 3d 3d 20 42 54 52 45 45  OSITION == BTREE
1fb40 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a  _SAVEPOSITION.**
1fb50 20 20 20 20 4f 50 46 4c 41 47 5f 41 55 58 44 45      OPFLAG_AUXDE
1fb60 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45  LETE    == BTREE
1fb70 5f 41 55 58 44 45 4c 45 54 45 0a 2a 2f 0a 23 64  _AUXDELETE.*/.#d
1fb80 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48  efine OPFLAG_NCH
1fb90 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20  ANGE       0x01 
1fba0 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74 3a     /* OP_Insert:
1fbb0 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64   Set to update d
1fbc0 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20 20  b->nChange */.  
1fbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbf0 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64 20     /* Also used 
1fc00 69 6e 20 50 32 20 28 6e 6f 74 20 50 35 29 20 6f  in P2 (not P5) o
1fc10 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 23  f OP_Delete */.#
1fc20 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50  define OPFLAG_EP
1fc30 48 45 4d 20 20 20 20 20 20 20 20 20 30 78 30 31  HEM         0x01
1fc40 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
1fc50 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70  : Ephemeral outp
1fc60 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66  ut is ok */.#def
1fc70 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  ine OPFLAG_LASTR
1fc80 4f 57 49 44 20 20 20 20 20 30 78 30 32 20 20 20  OWID     0x02   
1fc90 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74   /* Set to updat
1fca0 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20  e db->lastRowid 
1fcb0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1fcc0 47 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20  G_ISUPDATE      
1fcd0 30 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20  0x04    /* This 
1fce0 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20  OP_Insert is an 
1fcf0 73 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64  sql UPDATE */.#d
1fd00 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50  efine OPFLAG_APP
1fd10 45 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20  END        0x08 
1fd20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69     /* This is li
1fd30 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70  kely to be an ap
1fd40 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  pend */.#define 
1fd50 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
1fd60 53 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20  SULT 0x10    /* 
1fd70 54 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73  Try to avoid a s
1fd80 65 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65  eek in BtreeInse
1fd90 72 74 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53  rt() */.#ifdef S
1fda0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
1fdb0 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 64 65 66  UPDATE_HOOK.#def
1fdc0 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f  ine OPFLAG_ISNOO
1fdd0 50 20 20 20 20 20 20 20 20 30 78 34 30 20 20 20  P        0x40   
1fde0 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20 64 6f   /* OP_Delete do
1fdf0 65 73 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f  es pre-update-ho
1fe00 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 65 6e 64 69  ok only */.#endi
1fe10 66 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  f.#define OPFLAG
1fe20 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30  _LENGTHARG     0
1fe30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x40    /* OP_Col
1fe40 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
1fe50 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64  r length() */.#d
1fe60 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50  efine OPFLAG_TYP
1fe70 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20  EOFARG     0x80 
1fe80 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
1fe90 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79  only used for ty
1fea0 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e  peof() */.#defin
1feb0 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  e OPFLAG_BULKCSR
1fec0 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
1fed0 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64  * OP_Open** used
1fee0 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75   to open bulk cu
1fef0 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rsor */.#define 
1ff00 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20  OPFLAG_SEEKEQ   
1ff10 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
1ff20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72  OP_Open** cursor
1ff30 20 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e   uses EQ seek on
1ff40 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ly */.#define OP
1ff50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20  FLAG_FORDELETE  
1ff60 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 4f 50     0x08    /* OP
1ff70 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75 73 65  _Open should use
1ff80 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45   BTREE_FORDELETE
1ff90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1ffa0 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20 20  AG_P2ISREG      
1ffb0 20 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20 74   0x10    /* P2 t
1ffc0 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61  o OP_Open** is a
1ffd0 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
1ffe0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1fff0 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20  AG_PERMUTE      
20000 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43   0x01    /* OP_C
20010 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65 20  ompare: use the 
20020 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23  permutation */.#
20030 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41  define OPFLAG_SA
20040 56 45 50 4f 53 49 54 49 4f 4e 20 20 30 78 30 32  VEPOSITION  0x02
20050 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65      /* OP_Delete
20060 3a 20 6b 65 65 70 20 63 75 72 73 6f 72 20 70 6f  : keep cursor po
20070 73 69 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  sition */.#defin
20080 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  e OPFLAG_AUXDELE
20090 54 45 20 20 20 20 20 30 78 30 34 20 20 20 20 2f  TE     0x04    /
200a0 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e 64  * OP_Delete: ind
200b0 65 78 20 69 6e 20 61 20 44 45 4c 45 54 45 20 6f  ex in a DELETE o
200c0 70 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68  p */../*. * Each
200d0 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74   trigger present
200e0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
200f0 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65   schema is store
20100 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  d as an instance
20110 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72   of. * struct Tr
20120 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69  igger.. *. * Poi
20130 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63  nters to instanc
20140 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
20150 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64 20  gger are stored 
20160 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20  in two ways.. * 
20170 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67 48  1. In the "trigH
20180 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65 20  ash" hash table 
20190 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c  (part of the sql
201a0 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72 65  ite3* that repre
201b0 73 65 6e 74 73 20 74 68 65 0a 20 2a 20 20 20 20  sents the. *    
201c0 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73 20  database). This 
201d0 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73  allows Trigger s
201e0 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65 20  tructures to be 
201f0 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d  retrieved by nam
20200 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69  e.. * 2. All tri
20210 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65 64  ggers associated
20220 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74   with a single t
20230 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b  able form a link
20240 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74  ed list, using t
20250 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d  he. *    pNext m
20260 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74 20  ember of struct 
20270 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74  Trigger. A point
20280 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
20290 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20  element of the. 
202a0 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74  *    linked list
202b0 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74 68   is stored as th
202c0 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d  e "pTrigger" mem
202d0 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63  ber of the assoc
202e0 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75  iated. *    stru
202f0 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20  ct Table.. *. * 
20300 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  The "step_list" 
20310 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f  member points to
20320 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
20330 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c  nt of a linked l
20340 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e  ist. * containin
20350 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  g the SQL statem
20360 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 61  ents specified a
20370 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  s the trigger pr
20380 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63  ogram.. */.struc
20390 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68  t Trigger {.  ch
203a0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
203b0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d        /* The nam
203c0 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  e of the trigger
203d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203e0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61          */.  cha
203f0 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20  r *table;       
20400 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c       /* The tabl
20410 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69  e or view to whi
20420 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 61  ch the trigger a
20430 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f  pplies */.  u8 o
20440 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
20450 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
20460 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
20470 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20  TE, TK_INSERT   
20480 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72        */.  u8 tr
20490 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  _tm;            
204a0 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49     /* One of TRI
204b0 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49  GGER_BEFORE, TRI
204c0 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20  GGER_AFTER */.  
204d0 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20  Expr *pWhen;    
204e0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
204f0 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68  HEN clause of th
20500 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61  e expression (ma
20510 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20  y be NULL) */.  
20520 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73  IdList *pColumns
20530 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ;       /* If th
20540 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45 20  is is an UPDATE 
20550 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  OF <column-list>
20560 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20   trigger,.      
20570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20580 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75         the <colu
20590 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72  mn-list> is stor
205a0 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  ed here */.  Sch
205b0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
205c0 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
205d0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
205e0 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d  igger */.  Schem
205f0 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20  a *pTabSchema;  
20600 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
20610 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c  taining the tabl
20620 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  e */.  TriggerSt
20630 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f  ep *step_list; /
20640 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74  * Link list of t
20650 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73  rigger program s
20660 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20 20  teps            
20670 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
20680 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
20690 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61 73   Next trigger as
206a0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
206b0 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e table */.};../
206c0 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69  *.** A trigger i
206d0 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f 52  s either a BEFOR
206e0 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72  E or an AFTER tr
206f0 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c  igger.  The foll
20700 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a  owing constants.
20710 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  ** determine whi
20720 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ch..**.** If the
20730 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20  re are multiple 
20740 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69  triggers, you mi
20750 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f  ght of some BEFO
20760 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45  RE and some AFTE
20770 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61  R..** In that ca
20780 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e  ses, the constan
20790 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20  ts below can be 
207a0 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a  ORed together..*
207b0 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  /.#define TRIGGE
207c0 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66  R_BEFORE  1.#def
207d0 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54 45  ine TRIGGER_AFTE
207e0 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20  R   2../*. * An 
207f0 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75  instance of stru
20800 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 69  ct TriggerStep i
20810 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
20820 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61  a single SQL sta
20830 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69  tement. * that i
20840 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74 72  s a part of a tr
20850 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20  igger-program.. 
20860 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f  *. * Instances o
20870 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
20880 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20  Step are stored 
20890 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b  in a singly link
208a0 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a  ed list (linked.
208b0 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e   * using the "pN
208c0 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66  ext" member) ref
208d0 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22  erenced by the "
208e0 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
208f0 72 20 6f 66 20 74 68 65 0a 20 2a 20 61 73 73 6f  r of the. * asso
20900 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72  ciated struct Tr
20910 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20  igger instance. 
20920 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
20930 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20  t of the linked 
20940 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66  list is. * the f
20950 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65  irst step of the
20960 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
20970 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70 22  .. *. * The "op"
20980 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65   member indicate
20990 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69  s whether this i
209a0 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49  s a "DELETE", "I
209b0 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45 22  NSERT", "UPDATE"
209c0 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20   or. * "SELECT" 
209d0 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d  statement. The m
209e0 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f  eanings of the o
209f0 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20  ther members is 
20a00 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
20a10 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f  e. * value of "o
20a20 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20  p" as follows:. 
20a30 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49  *. * (op == TK_I
20a40 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66  NSERT). * orconf
20a50 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68      -> stores th
20a60 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
20a70 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65  gorithm. * pSele
20a80 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  ct   -> If this 
20a90 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
20aa0 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e  O ... SELECT ...
20ab0 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
20ac0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
20ad0 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70   this stores a p
20ae0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45  ointer to the SE
20af0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
20b00 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
20b10 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
20b20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
20b30 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e   the table to in
20b40 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45  sert into.. * pE
20b50 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68  xprList -> If th
20b60 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
20b70 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20  INTO ... VALUES 
20b80 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
20b90 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
20ba0 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
20bb0 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73  values to be ins
20bc0 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  erted. Otherwise
20bd0 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73   NULL.. * pIdLis
20be0 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
20bf0 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
20c00 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61   ... (<column-na
20c10 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e  mes>) VALUES ...
20c20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
20c30 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
20c40 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68 65   this stores the
20c50 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f   column-names to
20c60 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20   be. *          
20c70 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74      inserted int
20c80 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20  o.. *. * (op == 
20c90 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54  TK_DELETE). * zT
20ca0 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f  arget   -> Dequo
20cb0 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
20cc0 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20  table to delete 
20cd0 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20  from.. * pWhere 
20ce0 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
20cf0 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45  clause of the DE
20d00 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
20d10 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
20d20 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
20d30 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
20d40 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  LL.. *. * (op ==
20d50 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a   TK_UPDATE). * z
20d60 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
20d70 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
20d80 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65   table to update
20d90 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
20da0 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
20db0 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  se of the UPDATE
20dc0 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
20dd0 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
20de0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
20df0 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
20e00 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
20e10 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f  A list of the co
20e20 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20  lumns to update 
20e30 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69  and the expressi
20e40 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a  ons to update. *
20e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
20e60 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74  em to. See sqlit
20e70 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d  e3Update() docum
20e80 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68  entation of "pCh
20e90 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20  anges". *       
20ea0 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e         argument.
20eb0 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  . *. */.struct T
20ec0 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75  riggerStep {.  u
20ed0 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
20ee0 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
20ef0 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
20f00 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54  TE, TK_INSERT, T
20f10 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38  K_SELECT */.  u8
20f20 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
20f30 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63     /* OE_Rollbac
20f40 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67  k etc. */.  Trig
20f50 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20  ger *pTrig;     
20f60 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20   /* The trigger 
20f70 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69  that this step i
20f80 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20  s a part of */. 
20f90 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
20fa0 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20  ;     /* SELECT 
20fb0 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48 53  statement or RHS
20fc0 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   of INSERT INTO 
20fd0 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20  SELECT ... */.  
20fe0 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20 20  char *zTarget;  
20ff0 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74       /* Target t
21000 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c  able for DELETE,
21010 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20   UPDATE, INSERT 
21020 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
21030 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  e;        /* The
21040 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
21050 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  r DELETE or UPDA
21060 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78  TE steps */.  Ex
21070 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73  prList *pExprLis
21080 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65  t; /* SET clause
21090 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f 0a   for UPDATE. */.
210a0 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73    IdList *pIdLis
210b0 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  t;     /* Column
210c0 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52   names for INSER
210d0 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  T */.  TriggerSt
210e0 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  ep *pNext;  /* N
210f0 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d  ext in the link-
21100 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65  list */.  Trigge
21110 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f  rStep *pLast;  /
21120 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69  * Last element i
21130 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c  n link-list. Val
21140 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20  id for 1st elem 
21150 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  only */.};../*.*
21160 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
21170 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
21180 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  ns information u
21190 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  sed by the sqlit
211a0 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69  eFix....** routi
211b0 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b  nes as they walk
211c0 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
211d0 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65  to make database
211e0 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65   references.** e
211f0 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79 70 65  xplicit..*/.type
21200 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78  def struct DbFix
21210 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75  er DbFixer;.stru
21220 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50  ct DbFixer {.  P
21230 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
21240 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e     /* The parsin
21250 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f  g context.  Erro
21260 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74  r messages writt
21270 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  en here */.  Sch
21280 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
21290 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f   /* Fix items to
212a0 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a   this schema */.
212b0 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20    int bVarOnly; 
212c0 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66        /* Check f
212d0 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65 66 65  or variable refe
212e0 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20  rences only */. 
212f0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
21300 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;    /* Make sur
21310 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72  e all objects ar
21320 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  e contained in t
21330 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
21340 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
21350 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66  ype;  /* Type of
21360 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
21370 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
21380 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f  messages */.  co
21390 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65  nst Token *pName
213a0 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  ; /* Name of the
213b0 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
213c0 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
213d0 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ages */.};../*.*
213e0 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73  * An objected us
213f0 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65  ed to accumulate
21400 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73   the text of a s
21410 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a  tring where we.*
21420 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61  * do not necessa
21430 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69  rily know how bi
21440 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c  g the string wil
21450 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e  l be in the end.
21460 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41 63  .*/.struct StrAc
21470 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  cum {.  sqlite3 
21480 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  *db;         /* 
21490 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73  Optional databas
214a0 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e  e for lookaside.
214b0 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f    Can be NULL */
214c0 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20  .  char *zBase; 
214d0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 61 73          /* A bas
214e0 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e  e allocation.  N
214f0 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20  ot from malloc. 
21500 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74  */.  char *zText
21510 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
21520 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65   string collecte
21530 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33  d so far */.  u3
21540 32 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20  2  nChar;       
21550 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20     /* Length of 
21560 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61  the string so fa
21570 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c  r */.  u32  nAll
21580 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  oc;         /* A
21590 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61  mount of space a
215a0 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78  llocated in zTex
215b0 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c  t */.  u32  mxAl
215c0 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  loc;        /* M
215d0 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61  aximum allowed a
215e0 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f  llocation.  0 fo
215f0 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67  r no malloc usag
21600 65 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45  e */.  u8   accE
21610 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53  rror;       /* S
21620 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72  TRACCUM_NOMEM or
21630 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47   STRACCUM_TOOBIG
21640 20 2a 2f 0a 20 20 75 38 20 20 20 70 72 69 6e 74   */.  u8   print
21650 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53 51  fFlags;    /* SQ
21660 4c 49 54 45 5f 50 52 49 4e 54 46 20 66 6c 61 67  LITE_PRINTF flag
21670 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64  s below */.};.#d
21680 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e  efine STRACCUM_N
21690 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e 65  OMEM   1.#define
216a0 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47   STRACCUM_TOOBIG
216b0 20 20 32 0a 23 64 65 66 69 6e 65 20 53 51 4c 49    2.#define SQLI
216c0 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e  TE_PRINTF_INTERN
216d0 41 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e 74 65  AL 0x01  /* Inte
216e0 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f  rnal-use-only co
216f0 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f 77 65 64  nverters allowed
21700 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
21710 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e  TE_PRINTF_SQLFUN
21720 43 20 20 30 78 30 32 20 20 2f 2a 20 53 51 4c 20  C  0x02  /* SQL 
21730 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e  function argumen
21740 74 73 20 74 6f 20 56 58 50 72 69 6e 74 66 20 2a  ts to VXPrintf *
21750 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
21760 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44  _PRINTF_MALLOCED
21770 20 30 78 30 34 20 20 2f 2a 20 54 72 75 65 20 69   0x04  /* True i
21780 66 20 78 54 65 78 74 20 69 73 20 61 6c 6c 6f 63  f xText is alloc
21790 61 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a 23  ated space */..#
217a0 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63 65  define isMalloce
217b0 64 28 58 29 20 20 28 28 28 58 29 2d 3e 70 72 69  d(X)  (((X)->pri
217c0 6e 74 66 46 6c 61 67 73 20 26 20 53 51 4c 49 54  ntfFlags & SQLIT
217d0 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45  E_PRINTF_MALLOCE
217e0 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41  D)!=0).../*.** A
217f0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
21800 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
21810 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74  ed to communicat
21820 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  e information.**
21830 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69   from sqlite3Ini
21840 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63  t and OP_ParseSc
21850 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71  hema into the sq
21860 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
21870 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  k..*/.typedef st
21880 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33  ruct {.  sqlite3
21890 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
218a0 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69  The database bei
218b0 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
218c0 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  /.  char **pzErr
218d0 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72  Msg;    /* Error
218e0 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20   message stored 
218f0 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44  here */.  int iD
21900 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
21910 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61   0 for main data
21920 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d  base.  1 for TEM
21930 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43  P, 2.. for ATTAC
21940 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  Hed */.  int rc;
21950 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21960 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72  Result code stor
21970 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69  ed here */.} Ini
21980 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74  tData;../*.** St
21990 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69  ructure containi
219a0 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67  ng global config
219b0 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72  uration data for
219c0 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
219d0 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ary..**.** This 
219e0 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63  structure also c
219f0 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61  ontains some sta
21a00 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  te information..
21a10 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65  */.struct Sqlite
21a20 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20  3Config {.  int 
21a30 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20  bMemstat;       
21a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21a50 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
21a60 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f  memory status */
21a70 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65  .  int bCoreMute
21a80 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
21a90 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
21aa0 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65  enable core mute
21ab0 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46  xing */.  int bF
21ac0 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20  ullMutex;       
21ad0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
21ae0 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75  rue to enable fu
21af0 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  ll mutexing */. 
21b00 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20   int bOpenUri;  
21b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e     /* True to in
21b30 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65  terpret filename
21b40 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69  s as URIs */.  i
21b50 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20 20  nt bUseCis;     
21b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b70 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67   /* Use covering
21b80 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c   indices for ful
21b90 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74  l-scans */.  int
21ba0 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20   mxStrlen;      
21bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21bc0 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67  * Maximum string
21bd0 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74   length */.  int
21be0 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20   neverCorrupt;  
21bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21c00 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 61 6c  * Database is al
21c10 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  ways well-formed
21c20 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b   */.  int szLook
21c30 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
21c40 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
21c50 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
21c60 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e  fer size */.  in
21c70 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20  t nLookaside;   
21c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c90 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
21ca0 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e  side buffer coun
21cb0 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 6d 74  t */.  int nStmt
21cc0 53 70 69 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  Spill;          
21cd0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 6d 74           /* Stmt
21ce0 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c 6c 2d 74  -journal spill-t
21cf0 6f 2d 64 69 73 6b 20 74 68 72 65 73 68 6f 6c 64  o-disk threshold
21d00 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65   */.  sqlite3_me
21d10 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20  m_methods m;    
21d20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c          /* Low-l
21d30 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  evel memory allo
21d40 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65  cation interface
21d50 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
21d60 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65  tex_methods mute
21d70 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c  x;      /* Low-l
21d80 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72  evel mutex inter
21d90 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
21da0 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73  3_pcache_methods
21db0 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c  2 pcache2;  /* L
21dc0 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61  ow-level page-ca
21dd0 63 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  che interface */
21de0 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20  .  void *pHeap; 
21df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e00 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f       /* Heap sto
21e10 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20  rage space */.  
21e20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20  int nHeap;      
21e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e40 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65    /* Size of pHe
21e50 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ap[] */.  int mn
21e60 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20  Req, mxReq;     
21e70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
21e80 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20  in and max heap 
21e90 72 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a  requests sizes *
21ea0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
21eb0 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
21ec0 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20        /* mmap() 
21ed0 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66  space per open f
21ee0 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ile */.  sqlite3
21ef0 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20  _int64 mxMmap;  
21f00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
21f10 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20  ximum value for 
21f20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64  szMmap */.  void
21f30 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20 20   *pScratch;     
21f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21f50 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20   Scratch memory 
21f60 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74  */.  int szScrat
21f70 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
21f80 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
21f90 66 20 65 61 63 68 20 73 63 72 61 74 63 68 20 62  f each scratch b
21fa0 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  uffer */.  int n
21fb0 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
21fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21fd0 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63  Number of scratc
21fe0 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76  h buffers */.  v
21ff0 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20  oid *pPage;     
22000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22010 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d   /* Page cache m
22020 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
22030 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  zPage;          
22040 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22050 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67  Size of each pag
22060 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  e in pPage[] */.
22070 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20    int nPage;    
22080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22090 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
220a0 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b   pages in pPage[
220b0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72  ] */.  int mxPar
220c0 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20  serStack;       
220d0 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69           /* maxi
220e0 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65  mum depth of the
220f0 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f   parser stack */
22100 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63  .  int sharedCac
22110 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20  heEnabled;      
22120 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20       /* true if 
22130 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
22140 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75  e enabled */.  u
22150 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20 20  32 szPma;       
22160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22170 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74   /* Maximum Sort
22180 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20  er PMA size */. 
22190 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69   /* The above mi
221a0 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ght be initializ
221b0 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  ed to non-zero. 
221c0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e   The following n
221d0 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20  eed to always.  
221e0 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20  ** initially be 
221f0 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a  zero, however. *
22200 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20  /.  int isInit; 
22210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22220 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
22230 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ter initializati
22240 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20  on has finished 
22250 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72  */.  int inProgr
22260 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ess;            
22270 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77         /* True w
22280 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  hile initializat
22290 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
222a0 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78  */.  int isMutex
222b0 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
222c0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
222d0 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65  fter mutexes are
222e0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
222f0 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e    int isMallocIn
22300 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
22310 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
22320 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
22330 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
22340 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20   isPCacheInit;  
22350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22360 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
22370 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
22380 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ed */.  int nRef
22390 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
223a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
223b0 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20  ber of users of 
223c0 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20  pInitMutex */.  
223d0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70  sqlite3_mutex *p
223e0 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
223f0 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20    /* Mutex used 
22400 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  by sqlite3_initi
22410 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69  alize() */.  voi
22420 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c  d (*xLog)(void*,
22430 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
22440 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f  ; /* Function fo
22450 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76  r logging */.  v
22460 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20  oid *pLogArg;   
22470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22480 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
22490 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20  ument to xLog() 
224a0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
224b0 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20  _ENABLE_SQLLOG. 
224c0 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28   void(*xSqllog)(
224d0 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
224e0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
224f0 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f  ;.  void *pSqllo
22500 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66  gArg;.#endif.#if
22510 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f  def SQLITE_VDBE_
22520 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68  COVERAGE.  /* Th
22530 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
22540 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c  back (if not NUL
22550 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e  L) is invoked on
22560 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61 6e   every VDBE bran
22570 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f  ch.  ** operatio
22580 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c  n.  Set the call
22590 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54  back using SQLIT
225a0 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f  E_TESTCTRL_VDBE_
225b0 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20  COVERAGE..  */. 
225c0 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61   void (*xVdbeBra
225d0 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69  nch)(void*,int i
225e0 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73  SrcLine,u8 eThis
225f0 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61  ,u8 eMx);  /* Ca
22600 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
22610 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72 67   *pVdbeBranchArg
22620 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22640 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67        /* 1st arg
22650 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  ument */.#endif.
22660 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
22670 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
22680 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61  .  int (*xTestCa
22690 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20  llback)(int);   
226a0 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20       /* Invoked 
226b0 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  by sqlite3FaultS
226c0 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  im() */.#endif. 
226d0 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46   int bLocaltimeF
226e0 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20  ault;           
226f0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61     /* True to fa
22700 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63  il localtime() c
22710 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  alls */.};../*.*
22720 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20  * This macro is 
22730 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61  used inside of a
22740 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
22750 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74  ts to indicate t
22760 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72  hat.** the asser
22770 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20  t is only valid 
22780 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  on a well-formed
22790 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74   database.  Inst
227a0 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20  ead of:.**.**   
227b0 20 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a    assert( X );.*
227c0 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a  *.** One writes:
227d0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72  .**.**     asser
227e0 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f  t( X || CORRUPT_
227f0 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52  DB );.**.** CORR
22800 55 50 54 5f 44 42 20 69 73 20 74 72 75 65 20 64  UPT_DB is true d
22810 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65  uring normal ope
22820 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54  ration.  CORRUPT
22830 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64  _DB does not ind
22840 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68  icate.** that th
22850 65 20 64 61 74 61 62 61 73 65 20 69 73 20 64 65  e database is de
22860 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74  finitely corrupt
22870 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d  , only that it m
22880 69 67 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e  ight be corrupt.
22890 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73  .** For most tes
228a0 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54  t cases, CORRUPT
228b0 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20 66 61  _DB is set to fa
228c0 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70 65 63  lse using a spec
228d0 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  ial.** sqlite3_t
228e0 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20  est_control().  
228f0 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73  This enables ass
22900 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
22910 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69   to prove.** thi
22920 6e 67 73 20 74 68 61 74 20 61 72 65 20 61 6c 77  ngs that are alw
22930 61 79 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c  ays true for wel
22940 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
22950 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  es..*/.#define C
22960 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69  ORRUPT_DB  (sqli
22970 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43  te3Config.neverC
22980 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a  orrupt==0)../*.*
22990 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65  * Context pointe
229a0 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68  r passed down th
229b0 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d 77  rough the tree-w
229c0 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  alk..*/.struct W
229d0 61 6c 6b 65 72 20 7b 0a 20 20 50 61 72 73 65 20  alker {.  Parse 
229e0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
229f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a00 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f      /* Parser co
22a10 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74  ntext.  */.  int
22a20 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b   (*xExprCallback
22a30 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a  )(Walker*, Expr*
22a40 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61  );     /* Callba
22a50 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f  ck for expressio
22a60 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53  ns */.  int (*xS
22a70 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57  electCallback)(W
22a80 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b  alker*,Select*);
22a90 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f    /* Callback fo
22aa0 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76  r SELECTs */.  v
22ab0 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c  oid (*xSelectCal
22ac0 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c  lback2)(Walker*,
22ad0 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f  Select*);/* Seco
22ae0 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  nd callback for 
22af0 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 69 6e 74  SELECTs */.  int
22b00 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20   walkerDepth;   
22b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
22b30 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20 2a   of subqueries *
22b40 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20 20  /.  u8 eCode;   
22b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22b70 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73   A small process
22b80 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e  ing code */.  un
22b90 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20  ion {           
22ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bb0 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61          /* Extra
22bc0 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61   data for callba
22bd0 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f  ck */.    NameCo
22be0 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20  ntext *pNC;     
22bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c00 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63       /* Naming c
22c10 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e  ontext */.    in
22c20 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  t n;            
22c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c40 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 6f           /* A co
22c50 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  unter */.    int
22c60 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20   iCur;          
22c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c80 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72          /* A cur
22c90 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  sor number */.  
22ca0 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c    SrcList *pSrcL
22cb0 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ist;            
22cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22cd0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
22ce0 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f 75     struct SrcCou
22cf0 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20  nt *pSrcCount;  
22d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22d10 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e   Counting column
22d20 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20   references */. 
22d30 20 20 20 73 74 72 75 63 74 20 43 43 75 72 48 69     struct CCurHi
22d40 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20 20  nt *pCCurHint;  
22d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22d60 20 55 73 65 64 20 62 79 20 63 6f 64 65 43 75 72   Used by codeCur
22d70 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20  sorHint() */.   
22d80 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20   int *aiCol;    
22d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22da0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61              /* a
22db0 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  rray of column i
22dc0 6e 64 65 78 65 73 20 2a 2f 0a 20 20 7d 20 75 3b  ndexes */.  } u;
22dd0 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20  .};../* Forward 
22de0 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a  declarations */.
22df0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
22e00 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  xpr(Walker*, Exp
22e10 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
22e20 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c  WalkExprList(Wal
22e30 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ker*, ExprList*)
22e40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
22e50 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c  kSelect(Walker*,
22e60 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
22e70 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
22e80 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Expr(Walker*, Se
22e90 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
22ea0 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f  te3WalkSelectFro
22eb0 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  m(Walker*, Selec
22ec0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
22ed0 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c  ExprWalkNoop(Wal
22ee0 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 2f  ker*, Expr*);../
22ef0 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65  *.** Return code
22f00 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d   from the parse-
22f10 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69  tree walking pri
22f20 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65 69  mitives and thei
22f30 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  r.** callbacks..
22f40 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43  */.#define WRC_C
22f50 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f  ontinue    0   /
22f60 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20  * Continue down 
22f70 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f  into children */
22f80 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75  .#define WRC_Pru
22f90 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20  ne       1   /* 
22fa0 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75  Omit children bu
22fb0 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69  t continue walki
22fc0 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23  ng siblings */.#
22fd0 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74  define WRC_Abort
22fe0 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62         2   /* Ab
22ff0 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77  andon the tree w
23000 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  alk */../*.** An
23010 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
23020 73 20 73 74 72 75 63 74 75 72 65 20 72 65 70 72  s structure repr
23030 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20  esents a set of 
23040 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73  one or more CTEs
23050 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c  .** (common tabl
23060 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63  e expressions) c
23070 72 65 61 74 65 64 20 62 79 20 61 20 73 69 6e 67  reated by a sing
23080 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a  le WITH clause..
23090 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b  */.struct With {
230a0 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20  .  int nCte;    
230b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
230d0 43 54 45 73 20 69 6e 20 74 68 65 20 57 49 54 48  CTEs in the WITH
230e0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74   clause */.  Wit
230f0 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20  h *pOuter;      
23100 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23110 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20  Containing WITH 
23120 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20  clause, or NULL 
23130 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74 65 20  */.  struct Cte 
23140 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
23150 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68       /* For each
23160 20 43 54 45 20 69 6e 20 74 68 65 20 57 49 54 48   CTE in the WITH
23170 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20   clause.... */. 
23180 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
23190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231a0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
231b0 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78  is CTE */.    Ex
231c0 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20  prList *pCols;  
231d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
231e0 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69   List of explici
231f0 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20  t column names, 
23200 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53  or NULL */.    S
23210 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
23220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23230 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e  * The definition
23240 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
23250 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
23260 7a 43 74 65 45 72 72 3b 20 20 20 20 20 20 20 20  zCteErr;        
23270 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73      /* Error mes
23280 73 61 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61  sage for circula
23290 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a  r references */.
232a0 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69    } a[1];.};..#i
232b0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
232c0 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  G./*.** An insta
232d0 6e 63 65 20 6f 66 20 74 68 65 20 54 72 65 65 56  nce of the TreeV
232e0 69 65 77 20 6f 62 6a 65 63 74 20 69 73 20 75 73  iew object is us
232f0 65 64 20 66 6f 72 20 70 72 69 6e 74 69 6e 67 20  ed for printing 
23300 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
23310 2a 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  * data structure
23320 73 20 6f 6e 20 73 71 6c 69 74 65 33 44 65 62 75  s on sqlite3Debu
23330 67 50 72 69 6e 74 66 28 29 20 75 73 69 6e 67 20  gPrintf() using 
23340 61 20 74 72 65 65 2d 6c 69 6b 65 20 76 69 65 77  a tree-like view
23350 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 65 65  ..*/.struct Tree
23360 56 69 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65  View {.  int iLe
23370 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  vel;            
23380 20 2f 2a 20 57 68 69 63 68 20 6c 65 76 65 6c 20   /* Which level 
23390 6f 66 20 74 68 65 20 74 72 65 65 20 77 65 20 61  of the tree we a
233a0 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62  re on */.  u8  b
233b0 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20 20  Line[100];      
233c0 20 20 20 2f 2a 20 44 72 61 77 20 76 65 72 74 69     /* Draw verti
233d0 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20  cal in column i 
233e0 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74  if bLine[i] is t
233f0 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66  rue */.};.#endif
23400 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
23410 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d   */../*.** Assum
23420 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74  ing zIn points t
23430 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
23440 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61 72   of a UTF-8 char
23450 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63  acter,.** advanc
23460 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74  e zIn to point t
23470 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
23480 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54 46   of the next UTF
23490 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f  -8 character..*/
234a0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
234b0 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b  SKIP_UTF8(zIn) {
234c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234d0 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20          \.  if( 
234e0 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30  (*(zIn++))>=0xc0
234f0 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20   ){             
23500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23510 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a   \.    while( (*
23520 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38  zIn & 0xc0)==0x8
23530 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20  0 ){ zIn++; }   
23540 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20            \.  } 
23550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23580 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68     \.}../*.** Th
23590 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20  e SQLITE_*_BKPT 
235a0 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62 73 74  macros are subst
235b0 69 74 75 74 65 73 20 66 6f 72 20 74 68 65 20 65  itutes for the e
235c0 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a  rror codes with.
235d0 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  ** the same name
235e0 20 62 75 74 20 77 69 74 68 6f 75 74 20 74 68 65   but without the
235f0 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20   _BKPT suffix.  
23600 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76  These macros inv
23610 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  oke.** routines 
23620 74 68 61 74 20 72 65 70 6f 72 74 20 74 68 65 20  that report the 
23630 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77  line-number on w
23640 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f  hich the error o
23650 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69  riginated.** usi
23660 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29  ng sqlite3_log()
23670 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20  .  The routines 
23680 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63  also provide a c
23690 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a  onvenient place.
236a0 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62 75  ** to set a debu
236b0 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e  gger breakpoint.
236c0 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  .*/.int sqlite3C
236d0 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29  orruptError(int)
236e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73  ;.int sqlite3Mis
236f0 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69  useError(int);.i
23700 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70  nt sqlite3Cantop
23710 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64  enError(int);.#d
23720 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52  efine SQLITE_COR
23730 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65  RUPT_BKPT sqlite
23740 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f  3CorruptError(__
23750 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
23760 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b  SQLITE_MISUSE_BK
23770 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65  PT sqlite3Misuse
23780 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
23790 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
237a0 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c  ANTOPEN_BKPT sql
237b0 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f  ite3CantopenErro
237c0 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64  r(__LINE__).#ifd
237d0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
237e0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d    int sqlite3Nom
237f0 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20  emError(int);.  
23800 69 6e 74 20 73 71 6c 69 74 65 33 49 6f 65 72 72  int sqlite3Ioerr
23810 6e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b  nomemError(int);
23820 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
23830 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69  _NOMEM_BKPT sqli
23840 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f  te3NomemError(__
23850 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65  LINE__).# define
23860 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f   SQLITE_IOERR_NO
23870 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  MEM_BKPT sqlite3
23880 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28  IoerrnomemError(
23890 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6c 73 65 0a  __LINE__).#else.
238a0 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
238b0 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54  NOMEM_BKPT SQLIT
238c0 45 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65  E_NOMEM.# define
238d0 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f   SQLITE_IOERR_NO
238e0 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f  MEM_BKPT SQLITE_
238f0 49 4f 45 52 52 5f 4e 4f 4d 45 4d 0a 23 65 6e 64  IOERR_NOMEM.#end
23900 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20 61  if../*.** FTS3 a
23910 6e 64 20 46 54 53 34 20 62 6f 74 68 20 72 65 71  nd FTS4 both req
23920 75 69 72 65 20 76 69 72 74 75 61 6c 20 74 61 62  uire virtual tab
23930 6c 65 20 73 75 70 70 6f 72 74 0a 2a 2f 0a 23 69  le support.*/.#i
23940 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
23950 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
23960 4c 45 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  LE).# undef SQLI
23970 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23  TE_ENABLE_FTS3.#
23980 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
23990 41 42 4c 45 5f 46 54 53 34 0a 23 65 6e 64 69 66  ABLE_FTS4.#endif
239a0 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20  ../*.** FTS4 is 
239b0 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73  really an extens
239c0 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49  ion for FTS3.  I
239d0 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69  t is enabled usi
239e0 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45  ng the.** SQLITE
239f0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63  _ENABLE_FTS3 mac
23a00 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69  ro.  But to avoi
23a10 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61  d confusion we a
23a20 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20  lso call.** the 
23a30 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
23a40 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76  S4 macro to serv
23a50 65 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  e as an alias fo
23a60 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
23a70 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  FTS3..*/.#if def
23a80 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
23a90 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65 66  LE_FTS4) && !def
23aa0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
23ab0 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e  LE_FTS3).# defin
23ac0 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
23ad0 46 54 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  FTS3 1.#endif../
23ae0 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68  *.** The ctype.h
23af0 20 68 65 61 64 65 72 20 69 73 20 6e 65 65 64 65   header is neede
23b00 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20  d for non-ASCII 
23b10 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20  systems.  It is 
23b20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62  also.** needed b
23b30 79 20 46 54 53 33 20 77 68 65 6e 20 46 54 53 33  y FTS3 when FTS3
23b40 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20   is included in 
23b50 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e  the amalgamation
23b60 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
23b70 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20  d(SQLITE_ASCII) 
23b80 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
23b90 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
23ba0 46 54 53 33 29 20 26 26 20 64 65 66 69 6e 65 64  FTS3) && defined
23bb0 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41  (SQLITE_AMALGAMA
23bc0 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65  TION)).# include
23bd0 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69   <ctype.h>.#endi
23be0 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
23bf0 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69  lowing macros mi
23c00 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61 72 64  mic the standard
23c10 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f   library functio
23c20 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a  ns toupper(),.**
23c30 20 69 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c   isspace(), isal
23c40 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29  num(), isdigit()
23c50 20 61 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c   and isxdigit(),
23c60 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54   respectively. T
23c70 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72  he.** sqlite ver
23c80 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20  sions only work 
23c90 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63  for ASCII charac
23ca0 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73  ters, regardless
23cb0 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23   of locale..*/.#
23cc0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43  ifdef SQLITE_ASC
23cd0 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  II.# define sqli
23ce0 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 28  te3Toupper(x)  (
23cf0 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79  (x)&~(sqlite3Cty
23d00 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
23d10 63 68 61 72 29 28 78 29 5d 26 30 78 32 30 29 29  char)(x)]&0x20))
23d20 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23d30 33 49 73 73 70 61 63 65 28 78 29 20 20 20 28 73  3Isspace(x)   (s
23d40 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
23d50 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
23d60 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e  )]&0x01).# defin
23d70 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
23d80 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
23d90 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
23da0 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 36 29   char)(x)]&0x06)
23db0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23dc0 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 28 73  3Isalpha(x)   (s
23dd0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
23de0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
23df0 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e  )]&0x02).# defin
23e00 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
23e10 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
23e20 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
23e30 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 34 29   char)(x)]&0x04)
23e40 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23e50 33 49 73 78 64 69 67 69 74 28 78 29 20 20 28 73  3Isxdigit(x)  (s
23e60 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
23e70 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
23e80 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e  )]&0x08).# defin
23e90 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
23ea0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 55 70  (x)   (sqlite3Up
23eb0 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69  perToLower[(unsi
23ec0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a  gned char)(x)]).
23ed0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23ee0 49 73 71 75 6f 74 65 28 78 29 20 20 20 28 73 71  Isquote(x)   (sq
23ef0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
23f00 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
23f10 5d 26 30 78 38 30 29 0a 23 65 6c 73 65 0a 23 20  ]&0x80).#else.# 
23f20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
23f30 75 70 70 65 72 28 78 29 20 20 20 74 6f 75 70 70  upper(x)   toupp
23f40 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
23f50 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
23f60 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
23f70 29 20 20 20 69 73 73 70 61 63 65 28 28 75 6e 73  )   isspace((uns
23f80 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
23f90 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23fa0 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61  Isalnum(x)   isa
23fb0 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63  lnum((unsigned c
23fc0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
23fd0 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
23fe0 28 78 29 20 20 20 69 73 61 6c 70 68 61 28 28 75  (x)   isalpha((u
23ff0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
24000 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24010 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 69  e3Isdigit(x)   i
24020 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  sdigit((unsigned
24030 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
24040 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69  ine sqlite3Isxdi
24050 67 69 74 28 78 29 20 20 69 73 78 64 69 67 69 74  git(x)  isxdigit
24060 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
24070 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
24080 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
24090 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67    tolower((unsig
240a0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
240b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
240c0 71 75 6f 74 65 28 78 29 20 20 20 28 28 78 29 3d  quote(x)   ((x)=
240d0 3d 27 22 27 7c 7c 28 78 29 3d 3d 27 5c 27 27 7c  ='"'||(x)=='\''|
240e0 7c 28 78 29 3d 3d 27 5b 27 7c 7c 28 78 29 3d 3d  |(x)=='['||(x)==
240f0 27 60 27 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e  '`').#endif.#ifn
24100 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
24110 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49  COMPILEOPTION_DI
24120 41 47 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  AGS.int sqlite3I
24130 73 49 64 43 68 61 72 28 75 38 29 3b 0a 23 65 6e  sIdChar(u8);.#en
24140 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72  dif../*.** Inter
24150 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f  nal function pro
24160 74 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73  totypes.*/.int s
24170 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 63 6f  qlite3StrICmp(co
24180 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
24190 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
241a0 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73  te3Strlen30(cons
241b0 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a  t char*);.char *
241c0 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70  sqlite3ColumnTyp
241d0 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29  e(Column*,char*)
241e0 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ;.#define sqlite
241f0 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65  3StrNICmp sqlite
24200 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20  3_strnicmp..int 
24210 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69  sqlite3MallocIni
24220 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  t(void);.void sq
24230 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76  lite3MallocEnd(v
24240 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  oid);.void *sqli
24250 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a  te3Malloc(u64);.
24260 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
24270 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f  locZero(u64);.vo
24280 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
24290 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a  locZero(sqlite3*
242a0 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
242b0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
242c0 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b  (sqlite3*, u64);
242d0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
242e0 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69  MallocRawNN(sqli
242f0 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72  te3*, u64);.char
24300 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75   *sqlite3DbStrDu
24310 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
24320 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73   char*);.char *s
24330 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28  qlite3DbStrNDup(
24340 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
24350 68 61 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  har*, u64);.void
24360 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63   *sqlite3Realloc
24370 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f  (void*, u64);.vo
24380 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
24390 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74  llocOrFree(sqlit
243a0 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36  e3 *, void *, u6
243b0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
243c0 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74  3DbRealloc(sqlit
243d0 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36  e3 *, void *, u6
243e0 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  4);.void sqlite3
243f0 44 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  DbFree(sqlite3*,
24400 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c   void*);.int sql
24410 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76  ite3MallocSize(v
24420 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
24430 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73  e3DbMallocSize(s
24440 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
24450 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63  .void *sqlite3Sc
24460 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29  ratchMalloc(int)
24470 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
24480 72 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29  ratchFree(void*)
24490 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  ;.void *sqlite3P
244a0 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  ageMalloc(int);.
244b0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65  void sqlite3Page
244c0 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
244d0 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44  d sqlite3MemSetD
244e0 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69  efault(void);.#i
244f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
24500 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 76  T_BUILTIN_TEST.v
24510 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67  oid sqlite3Benig
24520 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69  nMallocHooks(voi
24530 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69  d (*)(void), voi
24540 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65  d (*)(void));.#e
24550 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
24560 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76  HeapNearlyFull(v
24570 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20  oid);../*.** On 
24580 73 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70  systems with amp
24590 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65 20 61  le stack space a
245a0 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72 74 20  nd that support 
245b0 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a  alloca(), make.*
245c0 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28  * use of alloca(
245d0 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63  ) to obtain spac
245e0 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f  e for large auto
245f0 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20  matic objects.  
24600 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f  By default,.** o
24610 62 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d  btain space from
24620 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a   malloc()..**.**
24630 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f   The alloca() ro
24640 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75  utine never retu
24650 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20  rns NULL.  This 
24660 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20  will cause code 
24670 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65  paths.** that de
24680 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33 53  al with sqlite3S
24690 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c  tackAlloc() fail
246a0 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61  ures to be unrea
246b0 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  chable..*/.#ifde
246c0 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c  f SQLITE_USE_ALL
246d0 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  OCA.# define sql
246e0 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
246f0 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28  w(D,N)   alloca(
24700 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
24710 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72  te3StackAllocZer
24720 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61  o(D,N)  memset(a
24730 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a  lloca(N), 0, N).
24740 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24750 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 0a 23  StackFree(D,P).#
24760 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
24770 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52  lite3StackAllocR
24780 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65  aw(D,N)   sqlite
24790 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e  3DbMallocRaw(D,N
247a0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
247b0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f  e3StackAllocZero
247c0 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62  (D,N)  sqlite3Db
247d0 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a  MallocZero(D,N).
247e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
247f0 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20  StackFree(D,P)  
24800 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
24810 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ee(D,P).#endif..
24820 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
24830 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e  ABLE_MEMSYS3.con
24840 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  st sqlite3_mem_m
24850 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d  ethods *sqlite3M
24860 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69  emGetMemsys3(voi
24870 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  d);.#endif.#ifde
24880 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
24890 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71  MEMSYS5.const sq
248a0 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
248b0 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
248c0 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23  Memsys5(void);.#
248d0 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20  endif...#ifndef 
248e0 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49  SQLITE_MUTEX_OMI
248f0 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  T.  sqlite3_mute
24900 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20  x_methods const 
24910 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d  *sqlite3DefaultM
24920 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
24930 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
24940 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74  ods const *sqlit
24950 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64  e3NoopMutex(void
24960 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
24970 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78  ex *sqlite3Mutex
24980 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e  Alloc(int);.  in
24990 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e  t sqlite3MutexIn
249a0 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20  it(void);.  int 
249b0 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28  sqlite3MutexEnd(
249c0 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69  void);.#endif.#i
249d0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
249e0 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 20 26 26  E_MUTEX_OMIT) &&
249f0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
24a00 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a 20 20 76  _MUTEX_NOOP).  v
24a10 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72  oid sqlite3Memor
24a20 79 42 61 72 72 69 65 72 28 76 6f 69 64 29 3b 0a  yBarrier(void);.
24a30 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
24a40 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72  qlite3MemoryBarr
24a50 69 65 72 28 29 0a 23 65 6e 64 69 66 0a 0a 73 71  ier().#endif..sq
24a60 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69  lite3_int64 sqli
24a70 74 65 33 53 74 61 74 75 73 56 61 6c 75 65 28 69  te3StatusValue(i
24a80 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24a90 33 53 74 61 74 75 73 55 70 28 69 6e 74 2c 20 69  3StatusUp(int, i
24aa0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24ab0 33 53 74 61 74 75 73 44 6f 77 6e 28 69 6e 74 2c  3StatusDown(int,
24ac0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
24ad0 74 65 33 53 74 61 74 75 73 48 69 67 68 77 61 74  te3StatusHighwat
24ae0 65 72 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 2f  er(int, int);../
24af0 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75 74 65  * Access to mute
24b00 78 65 73 20 75 73 65 64 20 62 79 20 73 71 6c 69  xes used by sqli
24b10 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a  te3_status() */.
24b20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
24b30 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d 75 74  qlite3Pcache1Mut
24b40 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65  ex(void);.sqlite
24b50 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
24b60 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64  MallocMutex(void
24b70 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
24b80 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
24b90 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c  _POINT.  int sql
24ba0 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65  ite3IsNaN(double
24bb0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
24bc0 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58  e sqlite3IsNaN(X
24bd0 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  )  0.#endif../*.
24be0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
24bf0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
24c00 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
24c10 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
24c20 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f  t SQL.** functio
24c30 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61  ns arguments tha
24c40 74 20 61 72 65 20 74 68 65 20 70 61 72 61 6d 65  t are the parame
24c50 74 65 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e  ters to the prin
24c60 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  tf() function..*
24c70 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66 41  /.struct PrintfA
24c80 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74  rguments {.  int
24c90 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   nArg;          
24ca0 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e        /* Total n
24cb0 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
24cc0 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65  ts */.  int nUse
24cd0 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
24ce0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
24cf0 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20  guments used so 
24d00 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  far */.  sqlite3
24d10 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20  _value **apArg; 
24d20 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e    /* The argumen
24d30 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a  t values */.};..
24d40 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50 72  void sqlite3VXPr
24d50 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20  intf(StrAccum*, 
24d60 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
24d70 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  list);.void sqli
24d80 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41 63  te3XPrintf(StrAc
24d90 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  cum*, const char
24da0 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73  *, ...);.char *s
24db0 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71  qlite3MPrintf(sq
24dc0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
24dd0 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a  r*, ...);.char *
24de0 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28  sqlite3VMPrintf(
24df0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
24e00 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a  har*, va_list);.
24e10 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
24e20 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
24e30 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45  ined(SQLITE_HAVE
24e40 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69  _OS_TRACE).  voi
24e50 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  d sqlite3DebugPr
24e60 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a  intf(const char*
24e70 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23  , ...);.#endif.#
24e80 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
24e90 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a  E_TEST).  void *
24ea0 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54  sqlite3TestTextT
24eb0 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a  oPtr(const char*
24ec0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  );.#endif..#if d
24ed0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
24ee0 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  BUG).  void sqli
24ef0 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72 28  te3TreeViewExpr(
24f00 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
24f10 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76   Expr*, u8);.  v
24f20 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
24f30 69 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65  iewExprList(Tree
24f40 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70  View*, const Exp
24f50 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73  rList*, u8, cons
24f60 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
24f70 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
24f80 53 65 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a  Select(TreeView*
24f90 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c  , const Select*,
24fa0 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c   u8);.  void sql
24fb0 69 74 65 33 54 72 65 65 56 69 65 77 57 69 74 68  ite3TreeViewWith
24fc0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
24fd0 74 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65  t With*, u8);.#e
24fe0 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69  ndif...void sqli
24ff0 74 65 33 53 65 74 53 74 72 69 6e 67 28 63 68 61  te3SetString(cha
25000 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20  r **, sqlite3*, 
25010 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
25020 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d  id sqlite3ErrorM
25030 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  sg(Parse*, const
25040 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
25050 69 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74  id sqlite3Dequot
25060 65 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  e(char*);.void s
25070 71 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28  qlite3TokenInit(
25080 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69  Token*,char*);.i
25090 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72  nt sqlite3Keywor
250a0 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69  dCode(const unsi
250b0 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29  gned char*, int)
250c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
250d0 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63  Parser(Parse*, c
250e0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
250f0 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
25100 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50  e3FinishCoding(P
25110 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
25120 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61  te3GetTempReg(Pa
25130 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
25140 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65  te3ReleaseTempRe
25150 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69  g(Parse*,int);.i
25160 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
25170 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  pRange(Parse*,in
25180 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25190 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65  ReleaseTempRange
251a0 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29  (Parse*,int,int)
251b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c  ;.void sqlite3Cl
251c0 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28  earTempRegCache(
251d0 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20  Parse*);.#ifdef 
251e0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74  SQLITE_DEBUG.int
251f0 20 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49   sqlite3NoTempsI
25200 6e 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  nRange(Parse*,in
25210 74 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45  t,int);.#endif.E
25220 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
25230 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
25240 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c  nt,const Token*,
25250 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
25260 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a  te3Expr(sqlite3*
25270 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
25280 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
25290 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65  xprAttachSubtree
252a0 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  s(sqlite3*,Expr*
252b0 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45  ,Expr*,Expr*);.E
252c0 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70  xpr *sqlite3PExp
252d0 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45  r(Parse*, int, E
252e0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e  xpr*, Expr*, con
252f0 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  st Token*);.void
25300 20 73 71 6c 69 74 65 33 50 45 78 70 72 41 64 64   sqlite3PExprAdd
25310 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45  Select(Parse*, E
25320 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xpr*, Select*);.
25330 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
25340 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78  rAnd(sqlite3*,Ex
25350 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
25360 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75  r *sqlite3ExprFu
25370 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78  nction(Parse*,Ex
25380 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  prList*, Token*)
25390 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
253a0 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
253b0 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  r(Parse*, Expr*)
253c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
253d0 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  prDelete(sqlite3
253e0 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  *, Expr*);.ExprL
253f0 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
25400 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
25410 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
25420 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25430 45 78 70 72 4c 69 73 74 53 65 74 53 6f 72 74 4f  ExprListSetSortO
25440 72 64 65 72 28 45 78 70 72 4c 69 73 74 2a 2c 69  rder(ExprList*,i
25450 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25460 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65  3ExprListSetName
25470 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
25480 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76  *,Token*,int);.v
25490 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
254a0 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65  istSetSpan(Parse
254b0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
254c0 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
254d0 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65  ite3ExprListDele
254e0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
254f0 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c  rList*);.u32 sql
25500 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c 61 67  ite3ExprListFlag
25510 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74  s(const ExprList
25520 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
25530 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68  nit(sqlite3*, ch
25540 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar**);.int sqlit
25550 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76  e3InitCallback(v
25560 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a  oid*, int, char*
25570 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64  *, char**);.void
25580 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50   sqlite3Pragma(P
25590 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
255a0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  en*,Token*,int);
255b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
255c0 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
255d0 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  nnection(sqlite3
255e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
255f0 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73  ResetOneSchema(s
25600 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
25610 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70  id sqlite3Collap
25620 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79 28  seDatabaseArray(
25630 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
25640 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74  sqlite3CommitInt
25650 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c  ernalChanges(sql
25660 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
25670 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e  ite3DeleteColumn
25680 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c 54  Names(sqlite3*,T
25690 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
256a0 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78  te3ColumnsFromEx
256b0 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45 78  prList(Parse*,Ex
256c0 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c  prList*,i16*,Col
256d0 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  umn**);.void sql
256e0 69 74 65 33 53 65 6c 65 63 74 41 64 64 43 6f 6c  ite3SelectAddCol
256f0 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74  umnTypeAndCollat
25700 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ion(Parse*,Table
25710 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c  *,Select*);.Tabl
25720 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74  e *sqlite3Result
25730 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73  SetOfSelect(Pars
25740 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69  e*,Select*);.voi
25750 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73  d sqlite3OpenMas
25760 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a  terTable(Parse *
25770 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73  , int);.Index *s
25780 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79  qlite3PrimaryKey
25790 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69  Index(Table*);.i
257a0 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  16 sqlite3Column
257b0 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20  OfIndex(Index*, 
257c0 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  i16);.void sqlit
257d0 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72  e3StartTable(Par
257e0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
257f0 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
25800 74 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 45  t);.#if SQLITE_E
25810 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c  NABLE_HIDDEN_COL
25820 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c 69  UMNS.  void sqli
25830 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74  te3ColumnPropert
25840 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c  iesFromName(Tabl
25850 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65  e*, Column*);.#e
25860 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
25870 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72  ite3ColumnProper
25880 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43  tiesFromName(T,C
25890 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65  ) /* no-op */.#e
258a0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
258b0 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  3AddColumn(Parse
258c0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29  *,Token*,Token*)
258d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
258e0 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c  dNotNull(Parse*,
258f0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
25900 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79  te3AddPrimaryKey
25910 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
25920 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  t*, int, int, in
25930 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25940 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69  AddCheckConstrai
25950 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  nt(Parse*, Expr*
25960 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
25970 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50  ddDefaultValue(P
25980 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29  arse*,ExprSpan*)
25990 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
259a0 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72  dCollateType(Par
259b0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
259c0 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62  id sqlite3EndTab
259d0 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
259e0 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63  ,Token*,u8,Selec
259f0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
25a00 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63  ParseUri(const c
25a10 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
25a20 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a  ,unsigned int*,.
25a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a40 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a      sqlite3_vfs*
25a50 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a  *,char**,char **
25a60 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65  );.Btree *sqlite
25a70 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73  3DbNameToBtree(s
25a80 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
25a90 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
25aa0 33 43 6f 64 65 4f 6e 63 65 28 50 61 72 73 65 20  3CodeOnce(Parse 
25ab0 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  *);..#ifdef SQLI
25ac0 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
25ad0 54 45 53 54 0a 23 20 64 65 66 69 6e 65 20 73 71  TEST.# define sq
25ae0 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29  lite3FaultSim(X)
25af0 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65   SQLITE_OK.#else
25b00 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61  .  int sqlite3Fa
25b10 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e  ultSim(int);.#en
25b20 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c  dif..Bitvec *sql
25b30 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65  ite3BitvecCreate
25b40 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (u32);.int sqlit
25b50 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74  e3BitvecTest(Bit
25b60 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  vec*, u32);.int 
25b70 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73  sqlite3BitvecTes
25b80 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a  tNotNull(Bitvec*
25b90 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
25ba0 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74  te3BitvecSet(Bit
25bb0 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  vec*, u32);.void
25bc0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c   sqlite3BitvecCl
25bd0 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32  ear(Bitvec*, u32
25be0 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  , void*);.void s
25bf0 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74  qlite3BitvecDest
25c00 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33  roy(Bitvec*);.u3
25c10 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  2 sqlite3BitvecS
25c20 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69  ize(Bitvec*);.#i
25c30 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
25c40 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 69  T_BUILTIN_TEST.i
25c50 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
25c60 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c  BuiltinTest(int,
25c70 69 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52  int*);.#endif..R
25c80 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f  owSet *sqlite3Ro
25c90 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33  wSetInit(sqlite3
25ca0 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e  *, void*, unsign
25cb0 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ed int);.void sq
25cc0 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72  lite3RowSetClear
25cd0 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20  (RowSet*);.void 
25ce0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
25cf0 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ert(RowSet*, i64
25d00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
25d10 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a  wSetTest(RowSet*
25d20 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36  , int iBatch, i6
25d30 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
25d40 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74  owSetNext(RowSet
25d50 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20  *, i64*);..void 
25d60 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65  sqlite3CreateVie
25d70 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  w(Parse*,Token*,
25d80 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  Token*,Token*,Ex
25d90 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c  prList*,Select*,
25da0 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21  int,int);..#if !
25db0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
25dc0 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65  MIT_VIEW) || !de
25dd0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
25de0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
25df0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65    int sqlite3Vie
25e00 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
25e10 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
25e20 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
25e30 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
25e40 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a  umnNames(A,B) 0.
25e50 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49  #endif..#if SQLI
25e60 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
25e70 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  30.  int sqlite3
25e80 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44  DbMaskAllZero(yD
25e90 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76  bMask);.#endif.v
25ea0 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
25eb0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
25ec0 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
25ed0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
25ee0 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  deDropTable(Pars
25ef0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
25f00 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
25f10 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73  te3DeleteTable(s
25f20 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
25f30 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
25f40 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
25f50 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ENT.  void sqlit
25f60 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
25f70 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72  egin(Parse *pPar
25f80 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  se);.  void sqli
25f90 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
25fa0 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73  End(Parse *pPars
25fb0 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
25fc0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
25fd0 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a  crementBegin(X).
25fe0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25ff0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
26000 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  (X).#endif.void 
26010 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61  sqlite3Insert(Pa
26020 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
26030 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a  Select*, IdList*
26040 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
26050 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61  lite3ArrayAlloca
26060 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64  te(sqlite3*,void
26070 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29  *,int,int*,int*)
26080 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
26090 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71  3IdListAppend(sq
260a0 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c  lite3*, IdList*,
260b0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
260c0 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78  lite3IdListIndex
260d0 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  (IdList*,const c
260e0 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  har*);.SrcList *
260f0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e  sqlite3SrcListEn
26100 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20  large(sqlite3*, 
26110 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  SrcList*, int, i
26120 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
26130 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65  lite3SrcListAppe
26140 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  nd(sqlite3*, Src
26150 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
26160 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20  oken*);.SrcList 
26170 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
26180 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61  ppendFromTerm(Pa
26190 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
261a0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a  Token*, Token*,.
261b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261d0 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65        Token*, Se
261e0 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64  lect*, Expr*, Id
261f0 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
26200 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78  ite3SrcListIndex
26210 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72  edBy(Parse *, Sr
26220 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a  cList *, Token *
26230 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
26240 72 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50  rcListFuncArgs(P
26250 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
26260 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
26270 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42   sqlite3IndexedB
26280 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c  yLookup(Parse *,
26290 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
262a0 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71  item *);.void sq
262b0 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
262c0 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73  tJoinType(SrcLis
262d0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
262e0 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75  3SrcListAssignCu
262f0 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72  rsors(Parse*, Sr
26300 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
26310 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74  lite3IdListDelet
26320 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  e(sqlite3*, IdLi
26330 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
26340 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28  e3SrcListDelete(
26350 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
26360 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  t*);.Index *sqli
26370 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78  te3AllocateIndex
26380 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c  Object(sqlite3*,
26390 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b  i16,int,char**);
263a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
263b0 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
263c0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72  Token*,Token*,Sr
263d0 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  cList*,ExprList*
263e0 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20  ,int,Token*,.   
263f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26400 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e         Expr*, in
26410 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69  t, int, u8);.voi
26420 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64  d sqlite3DropInd
26430 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  ex(Parse*, SrcLi
26440 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
26450 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72  qlite3Select(Par
26460 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65  se*, Select*, Se
26470 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65  lectDest*);.Sele
26480 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
26490 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72  tNew(Parse*,Expr
264a0 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  List*,SrcList*,E
264b0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a  xpr*,ExprList*,.
264c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264d0 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45           Expr*,E
264e0 78 70 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70  xprList*,u32,Exp
264f0 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  r*,Expr*);.void 
26500 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c  sqlite3SelectDel
26510 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65  ete(sqlite3*, Se
26520 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  lect*);.Table *s
26530 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f  qlite3SrcListLoo
26540 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  kup(Parse*, SrcL
26550 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
26560 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72  e3IsReadOnly(Par
26570 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
26580 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
26590 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  penTable(Parse*,
265a0 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69   int iCur, int i
265b0 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  Db, Table*, int)
265c0 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
265d0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
265e0 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29  TE_DELETE_LIMIT)
265f0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
26600 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52  ITE_OMIT_SUBQUER
26610 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  Y).Expr *sqlite3
26620 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65  LimitWhere(Parse
26630 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
26640 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
26650 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23  ,Expr*,char*);.#
26660 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
26670 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72  e3DeleteFrom(Par
26680 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
26690 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
266a0 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a  te3Update(Parse*
266b0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
266c0 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  List*, Expr*, in
266d0 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73  t);.WhereInfo *s
266e0 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
266f0 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
26700 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
26710 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69  ,ExprList*,u16,i
26720 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26730 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49  3WhereEnd(WhereI
26740 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71  nfo*);.LogEst sq
26750 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74  lite3WhereOutput
26760 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e  RowCount(WhereIn
26770 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
26780 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
26790 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
267a0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
267b0 4f 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66  Ordered(WhereInf
267c0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
267d0 57 68 65 72 65 4f 72 64 65 72 65 64 49 6e 6e 65  WhereOrderedInne
267e0 72 4c 6f 6f 70 28 57 68 65 72 65 49 6e 66 6f 2a  rLoop(WhereInfo*
267f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
26800 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72  ereIsSorted(Wher
26810 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
26820 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75  ite3WhereContinu
26830 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  eLabel(WhereInfo
26840 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
26850 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57  hereBreakLabel(W
26860 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
26870 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e  sqlite3WhereOkOn
26880 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a  ePass(WhereInfo*
26890 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65  , int*);.#define
268a0 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20 20 20   ONEPASS_OFF    
268b0 20 20 30 20 20 20 20 20 20 20 20 2f 2a 20 55 73    0        /* Us
268c0 65 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74  e of ONEPASS not
268d0 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66   allowed */.#def
268e0 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47  ine ONEPASS_SING
268f0 4c 45 20 20 20 31 20 20 20 20 20 20 20 20 2f 2a  LE   1        /*
26900 20 4f 4e 45 50 41 53 53 20 76 61 6c 69 64 20 66   ONEPASS valid f
26910 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  or a single row 
26920 75 70 64 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e  update */.#defin
26930 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20  e ONEPASS_MULTI 
26940 20 20 20 32 20 20 20 20 20 20 20 20 2f 2a 20 4f     2        /* O
26950 4e 45 50 41 53 53 20 69 73 20 76 61 6c 69 64 20  NEPASS is valid 
26960 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  for multiple row
26970 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  s */.void sqlite
26980 33 45 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64  3ExprCodeLoadInd
26990 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  exColumn(Parse*,
269a0 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e   Index*, int, in
269b0 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
269c0 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
269d0 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61  olumn(Parse*, Ta
269e0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
269f0 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  int, u8);.void s
26a00 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
26a10 74 43 6f 6c 75 6d 6e 54 6f 52 65 67 28 50 61 72  tColumnToReg(Par
26a20 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
26a30 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
26a40 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
26a50 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
26a60 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c  e(Vdbe*, Table*,
26a70 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
26a80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
26a90 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a  rCodeMove(Parse*
26aa0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
26ab0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
26ac0 70 72 43 61 63 68 65 53 74 6f 72 65 28 50 61 72  prCacheStore(Par
26ad0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  se*, int, int, i
26ae0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26af0 33 45 78 70 72 43 61 63 68 65 50 75 73 68 28 50  3ExprCachePush(P
26b00 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
26b10 69 74 65 33 45 78 70 72 43 61 63 68 65 50 6f 70  ite3ExprCachePop
26b20 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
26b30 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 52  qlite3ExprCacheR
26b40 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  emove(Parse*, in
26b50 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
26b60 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c  lite3ExprCacheCl
26b70 65 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ear(Parse*);.voi
26b80 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
26b90 68 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  heAffinityChange
26ba0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
26bb0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26bc0 45 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c  ExprCode(Parse*,
26bd0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
26be0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
26bf0 64 65 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45  deCopy(Parse*, E
26c00 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
26c10 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
26c20 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65  Factorable(Parse
26c30 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
26c40 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
26c50 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65  CodeAtInit(Parse
26c60 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75  *, Expr*, int, u
26c70 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  8);.int sqlite3E
26c80 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73  xprCodeTemp(Pars
26c90 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29  e*, Expr*, int*)
26ca0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
26cb0 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73  rCodeTarget(Pars
26cc0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
26cd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
26ce0 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61  rCodeAndCache(Pa
26cf0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
26d00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
26d10 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50  prCodeExprList(P
26d20 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
26d30 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
26d40 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
26d50 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78  ECEL_DUP      0x
26d60 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74  01  /* Deep, not
26d70 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20   shallow copies 
26d80 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
26d90 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20  E_ECEL_FACTOR   
26da0 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20  0x02  /* Factor 
26db0 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72  out constant ter
26dc0 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ms */.#define SQ
26dd0 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20  LITE_ECEL_REF   
26de0 20 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20     0x04  /* Use 
26df0 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72  ExprList.u.x.iOr
26e00 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64  derByCol */.void
26e10 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72   sqlite3ExprIfTr
26e20 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ue(Parse*, Expr*
26e30 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
26e40 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46  d sqlite3ExprIfF
26e50 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70  alse(Parse*, Exp
26e60 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
26e70 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
26e80 66 46 61 6c 73 65 44 75 70 28 50 61 72 73 65 2a  fFalseDup(Parse*
26e90 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
26ea0 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  t);.Table *sqlit
26eb0 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69  e3FindTable(sqli
26ec0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
26ed0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
26ee0 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 56  #define LOCATE_V
26ef0 49 45 57 20 20 20 20 30 78 30 31 0a 23 64 65 66  IEW    0x01.#def
26f00 69 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f 45 52 52  ine LOCATE_NOERR
26f10 20 20 20 30 78 30 32 0a 54 61 62 6c 65 20 2a 73     0x02.Table *s
26f20 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
26f30 65 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61  e(Parse*,u32 fla
26f40 67 73 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  gs,const char*, 
26f50 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
26f60 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
26f70 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73  teTableItem(Pars
26f80 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 73 74 72  e*,u32 flags,str
26f90 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
26fa0 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69   *);.Index *sqli
26fb0 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c  te3FindIndex(sql
26fc0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
26fd0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
26fe0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c  .void sqlite3Unl
26ff0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c  inkAndDeleteTabl
27000 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  e(sqlite3*,int,c
27010 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
27020 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
27030 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71  ndDeleteIndex(sq
27040 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
27050 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
27060 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72 73  lite3Vacuum(Pars
27070 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
27080 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a  RunVacuum(char**
27090 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61  , sqlite3*);.cha
270a0 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72  r *sqlite3NameFr
270b0 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a  omToken(sqlite3*
270c0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
270d0 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72  qlite3ExprCompar
270e0 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  e(Expr*, Expr*, 
270f0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
27100 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65  3ExprListCompare
27110 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72  (ExprList*, Expr
27120 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  List*, int);.int
27130 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c   sqlite3ExprImpl
27140 69 65 73 45 78 70 72 28 45 78 70 72 2a 2c 20 45  iesExpr(Expr*, E
27150 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
27160 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
27170 79 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61  yzeAggregates(Na
27180 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
27190 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
271a0 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69  ExprAnalyzeAggLi
271b0 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  st(NameContext*,
271c0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
271d0 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55  sqlite3FunctionU
271e0 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72 2a  sesThisSrc(Expr*
271f0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62  , SrcList*);.Vdb
27200 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62  e *sqlite3GetVdb
27210 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64  e(Parse*);.#ifnd
27220 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
27230 55 49 4c 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64  UILTIN_TEST.void
27240 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65   sqlite3PrngSave
27250 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69  State(void);.voi
27260 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73  d sqlite3PrngRes
27270 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b  toreState(void);
27280 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
27290 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
272a0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
272b0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56  oid sqlite3CodeV
272c0 65 72 69 66 79 53 63 68 65 6d 61 28 50 61 72 73  erifySchema(Pars
272d0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
272e0 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
272f0 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73  NamedSchema(Pars
27300 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
27310 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  zDb);.void sqlit
27320 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69  e3BeginTransacti
27330 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  on(Parse*, int);
27340 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
27350 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  mitTransaction(P
27360 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
27370 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e  ite3RollbackTran
27380 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b  saction(Parse*);
27390 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76  .void sqlite3Sav
273a0 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  epoint(Parse*, i
273b0 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  nt, Token*);.voi
273c0 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61  d sqlite3CloseSa
273d0 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33  vepoints(sqlite3
273e0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
273f0 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c  3LeaveMutexAndCl
27400 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65  oseZombie(sqlite
27410 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
27420 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45  ExprIsConstant(E
27430 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
27440 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
27450 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a  NotJoin(Expr*);.
27460 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
27470 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74  sConstantOrFunct
27480 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a  ion(Expr*, u8);.
27490 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
274a0 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45  sTableConstant(E
274b0 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65  xpr*,int);.#ifde
274c0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
274d0 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74  CURSOR_HINTS.int
274e0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6e 74   sqlite3ExprCont
274f0 61 69 6e 73 53 75 62 71 75 65 72 79 28 45 78 70  ainsSubquery(Exp
27500 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  r*);.#endif.int 
27510 73 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74  sqlite3ExprIsInt
27520 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a  eger(Expr*, int*
27530 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
27540 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73  prCanBeNull(cons
27550 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t Expr*);.int sq
27560 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f  lite3ExprNeedsNo
27570 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63  AffinityChange(c
27580 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72  onst Expr*, char
27590 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
275a0 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72  Rowid(const char
275b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
275c0 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74  GenerateRowDelet
275d0 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 54 61  e(.    Parse*,Ta
275e0 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e  ble*,Trigger*,in
275f0 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38  t,int,int,i16,u8
27600 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69  ,u8,u8,int);.voi
27610 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
27620 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28  eRowIndexDelete(
27630 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
27640 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
27650 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
27660 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65  3GenerateIndexKe
27670 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  y(Parse*, Index*
27680 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
27690 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74   int*,Index*,int
276a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
276b0 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62  esolvePartIdxLab
276c0 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  el(Parse*,int);.
276d0 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
276e0 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68  rateConstraintCh
276f0 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ecks(Parse*,Tabl
27700 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c  e*,int*,int,int,
27710 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20  int,int,.       
27720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 38                u8
27740 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74  ,u8,int,int*,int
27750 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27760 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f  CompleteInsertio
27770 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  n(Parse*,Table*,
27780 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a  int,int,int,int*
27790 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69  ,int,int,int);.i
277a0 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61  nt sqlite3OpenTa
277b0 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61  bleAndIndices(Pa
277c0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
277d0 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75 38 2a 2c  t, u8, int, u8*,
277e0 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f   int*, int*);.vo
277f0 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57  id sqlite3BeginW
27800 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61  riteOperation(Pa
27810 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
27820 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c  .void sqlite3Mul
27830 74 69 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b  tiWrite(Parse*);
27840 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79  .void sqlite3May
27850 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76  Abort(Parse*);.v
27860 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43  oid sqlite3HaltC
27870 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
27880 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72  , int, int, char
27890 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64  *, i8, u8);.void
278a0 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f   sqlite3UniqueCo
278b0 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
278c0 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76   int, Index*);.v
278d0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64  oid sqlite3Rowid
278e0 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
278f0 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b  *, int, Table*);
27900 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
27910 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  prDup(sqlite3*,E
27920 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c  xpr*,int);.ExprL
27930 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
27940 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
27950 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b  ,ExprList*,int);
27960 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
27970 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69  3SrcListDup(sqli
27980 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e  te3*,SrcList*,in
27990 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69  t);.IdList *sqli
279a0 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c  te3IdListDup(sql
279b0 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a  ite3*,IdList*);.
279c0 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53  Select *sqlite3S
279d0 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65 33  electDup(sqlite3
279e0 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a  *,Select*,int);.
279f0 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f  #if SELECTTRACE_
27a00 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73 71 6c  ENABLED.void sql
27a10 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d  ite3SelectSetNam
27a20 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74 20  e(Select*,const 
27a30 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  char*);.#else.# 
27a40 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
27a50 6c 65 63 74 53 65 74 4e 61 6d 65 28 41 2c 42 29  lectSetName(A,B)
27a60 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
27a70 69 74 65 33 49 6e 73 65 72 74 42 75 69 6c 74 69  ite3InsertBuilti
27a80 6e 46 75 6e 63 73 28 46 75 6e 63 44 65 66 2a 2c  nFuncs(FuncDef*,
27a90 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73  int);.FuncDef *s
27aa0 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69  qlite3FindFuncti
27ab0 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  on(sqlite3*,cons
27ac0 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38 2c 75  t char*,int,u8,u
27ad0 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
27ae0 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46  RegisterBuiltinF
27af0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
27b00 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
27b10 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63  sterDateTimeFunc
27b20 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
27b30 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
27b40 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e 42 75  rPerConnectionBu
27b50 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73  iltinFunctions(s
27b60 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
27b70 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
27b80 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  Ok(sqlite3*);.in
27b90 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
27ba0 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c  heckSickOrOk(sql
27bb0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
27bc0 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65  ite3ChangeCookie
27bd0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a  (Parse*, int);..
27be0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
27bf0 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26  ITE_OMIT_VIEW) &
27c00 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
27c10 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
27c20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65  void sqlite3Mate
27c30 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73  rializeView(Pars
27c40 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
27c50 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  *, int);.#endif.
27c60 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
27c70 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76  OMIT_TRIGGER.  v
27c80 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
27c90 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
27ca0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
27cb0 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72  t,int,IdList*,Sr
27cc0 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  cList*,.        
27cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ce0 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e     Expr*,int, in
27cf0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
27d00 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28  e3FinishTrigger(
27d10 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53  Parse*, TriggerS
27d20 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20  tep*, Token*);. 
27d30 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
27d40 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  pTrigger(Parse*,
27d50 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
27d60 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
27d70 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61  ropTriggerPtr(Pa
27d80 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  rse*, Trigger*);
27d90 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
27da0 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
27db0 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a  (Parse *, Table*
27dc0 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
27dd0 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20  , int *pMask);. 
27de0 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
27df0 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72  3TriggerList(Par
27e00 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a  se *, Table *);.
27e10 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
27e20 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72  deRowTrigger(Par
27e30 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  se*, Trigger *, 
27e40 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
27e50 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20  int, Table *,.  
27e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e70 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69            int, i
27e80 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
27e90 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
27ea0 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72  riggerDirect(Par
27eb0 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  se *, Trigger *,
27ec0 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
27ed0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
27ee0 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67   sqliteViewTrigg
27ef0 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ers(Parse*, Tabl
27f00 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
27f10 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f  ExprList*);.  vo
27f20 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
27f30 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69  TriggerStep(sqli
27f40 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65  te3*, TriggerSte
27f50 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  p*);.  TriggerSt
27f60 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
27f70 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c  erSelectStep(sql
27f80 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  ite3*,Select*);.
27f90 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
27fa0 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73  qlite3TriggerIns
27fb0 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ertStep(sqlite3*
27fc0 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a  ,Token*, IdList*
27fd0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
27fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ff0 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74            Select
28000 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72  *,u8);.  Trigger
28010 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
28020 67 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73  ggerUpdateStep(s
28030 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45  qlite3*,Token*,E
28040 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  xprList*, Expr*,
28050 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53   u8);.  TriggerS
28060 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
28070 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71  gerDeleteStep(sq
28080 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45  lite3*,Token*, E
28090 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  xpr*);.  void sq
280a0 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
280b0 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69  er(sqlite3*, Tri
280c0 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  gger*);.  void s
280d0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
280e0 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
280f0 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
28100 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71  char*);.  u32 sq
28110 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
28120 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67  ask(Parse*,Trigg
28130 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  er*,ExprList*,in
28140 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74  t,int,Table*,int
28150 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  );.# define sqli
28160 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
28170 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65  (p) ((p)->pTople
28180 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c  vel ? (p)->pTopl
28190 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 20 64 65  evel : (p)).# de
281a0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f  fine sqlite3IsTo
281b0 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
281c0 70 54 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a 23 65  pToplevel==0).#e
281d0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
281e0 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
281f0 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23  t(B,C,D,E,F) 0.#
28200 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
28210 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
28220 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
28230 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
28240 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
28250 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
28260 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
28270 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,C).# define sql
28280 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
28290 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  er(A,B,C,D,E,F,G
282a0 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73  ,H,I).# define s
282b0 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
282c0 67 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43  ggerDirect(A,B,C
282d0 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65  ,D,E,F).# define
282e0 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c   sqlite3TriggerL
282f0 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65  ist(X, Y) 0.# de
28300 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
28310 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23  eToplevel(p) p.#
28320 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
28330 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 31 0a 23  sToplevel(p) 1.#
28340 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
28350 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c  riggerColmask(A,
28360 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23  B,C,D,E,F,G) 0.#
28370 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
28380 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65  e3JoinType(Parse
28390 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
283a0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
283b0 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f   sqlite3CreateFo
283c0 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
283d0 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65   ExprList*, Toke
283e0 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  n*, ExprList*, i
283f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28400 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79  3DeferForeignKey
28410 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
28420 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
28430 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
28440 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
28450 75 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45  uthRead(Parse*,E
28460 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63  xpr*,Schema*,Src
28470 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  List*);.  int sq
28480 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50  lite3AuthCheck(P
28490 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  arse*,int, const
284a0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
284b0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
284c0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
284d0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
284e0 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e  (Parse*, AuthCon
284f0 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  text*, const cha
28500 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
28510 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
28520 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b  p(AuthContext*);
28530 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
28540 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a  thReadCol(Parse*
28550 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
28560 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
28570 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  t);.#else.# defi
28580 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  ne sqlite3AuthRe
28590 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65  ad(a,b,c,d).# de
285a0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
285b0 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29  Check(a,b,c,d,e)
285c0 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20      SQLITE_OK.# 
285d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
285e0 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c  thContextPush(a,
285f0 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71  b,c).# define sq
28600 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
28610 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28  Pop(a)  ((void)(
28620 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  a)).#endif.void 
28630 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61  sqlite3Attach(Pa
28640 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  rse*, Expr*, Exp
28650 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  r*, Expr*);.void
28660 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50   sqlite3Detach(P
28670 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
28680 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e  oid sqlite3FixIn
28690 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72  it(DbFixer*, Par
286a0 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  se*, int, const 
286b0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  char*, const Tok
286c0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
286d0 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69  3FixSrcList(DbFi
286e0 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xer*, SrcList*);
286f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
28700 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20  elect(DbFixer*, 
28710 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
28720 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46  lite3FixExpr(DbF
28730 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  ixer*, Expr*);.i
28740 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70  nt sqlite3FixExp
28750 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  rList(DbFixer*, 
28760 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
28770 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65  sqlite3FixTrigge
28780 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20  rStep(DbFixer*, 
28790 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69  TriggerStep*);.i
287a0 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63  nt sqlite3AtoF(c
287b0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f  onst char *z, do
287c0 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  uble*, int, u8);
287d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49  .int sqlite3GetI
287e0 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20  nt32(const char 
287f0 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
28800 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20  lite3Atoi(const 
28810 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
28820 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28  te3Utf16ByteLen(
28830 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74  const void *pDat
28840 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69  a, int nChar);.i
28850 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43 68  nt sqlite3Utf8Ch
28860 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72  arLen(const char
28870 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79   *pData, int nBy
28880 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  te);.u32 sqlite3
28890 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75  Utf8Read(const u
288a0 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  8**);.LogEst sql
288b0 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b  ite3LogEst(u64);
288c0 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
288d0 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c  ogEstAdd(LogEst,
288e0 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66  LogEst);.#ifndef
288f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
28900 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74  TUALTABLE.LogEst
28910 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72   sqlite3LogEstFr
28920 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29  omDouble(double)
28930 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
28940 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
28950 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
28960 55 53 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66  US) || \.    def
28970 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
28980 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
28990 34 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69  4) || \.    defi
289a0 6e 65 64 28 53 51 4c 49 54 45 5f 45 58 50 4c 41  ned(SQLITE_EXPLA
289b0 49 4e 5f 45 53 54 49 4d 41 54 45 44 5f 52 4f 57  IN_ESTIMATED_ROW
289c0 53 29 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f  S).u64 sqlite3Lo
289d0 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74  gEstToInt(LogEst
289e0 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
289f0 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61   Routines to rea
28a00 64 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69  d and write vari
28a10 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65  able-length inte
28a20 67 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65  gers.  These use
28a30 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e  d to.** be defin
28a40 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20  ed locally, but 
28a50 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76  now we use the v
28a60 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69  arint routines i
28a70 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20  n the util.c.** 
28a80 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  file..*/.int sql
28a90 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e  ite3PutVarint(un
28aa0 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36  signed char*, u6
28ab0 34 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  4);.u8 sqlite3Ge
28ac0 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e  tVarint(const un
28ad0 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75  signed char *, u
28ae0 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65  64 *);.u8 sqlite
28af0 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e  3GetVarint32(con
28b00 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
28b10 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20   *, u32 *);.int 
28b20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
28b30 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20  (u64 v);../*.** 
28b40 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  The common case 
28b50 69 73 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20  is for a varint 
28b60 74 6f 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62  to be a single b
28b70 79 74 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f  yte.  They follo
28b80 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68  wing.** macros h
28b90 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e  andle the common
28ba0 20 63 61 73 65 20 77 69 74 68 6f 75 74 20 61 20   case without a 
28bb0 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20  procedure call, 
28bc0 62 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a  but then call.**
28bd0 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 66   the procedure f
28be0 6f 72 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74  or larger varint
28bf0 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65  s..*/.#define ge
28c00 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
28c10 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28  \.  (u8)((*(A)<(
28c20 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75  u8)0x80)?((B)=(u
28c30 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74  32)*(A)),1:sqlit
28c40 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 28 41  e3GetVarint32((A
28c50 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a  ),(u32 *)&(B))).
28c60 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e  #define putVarin
28c70 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75  t32(A,B)  \.  (u
28c80 38 29 28 28 28 75 33 32 29 28 42 29 3c 28 75 33  8)(((u32)(B)<(u3
28c90 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75  2)0x80)?(*(A)=(u
28ca0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 42 29  nsigned char)(B)
28cb0 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50  ),1:\.  sqlite3P
28cc0 75 74 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29  utVarint((A),(B)
28cd0 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61  )).#define getVa
28ce0 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47  rint    sqlite3G
28cf0 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65  etVarint.#define
28d00 20 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71   putVarint    sq
28d10 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a  lite3PutVarint..
28d20 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
28d30 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
28d40 79 53 74 72 28 73 71 6c 69 74 65 33 2a 2c 20 49  yStr(sqlite3*, I
28d50 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
28d60 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74  ite3TableAffinit
28d70 79 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c  y(Vdbe*, Table*,
28d80 20 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69   int);.char sqli
28d90 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69  te3CompareAffini
28da0 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20  ty(Expr *pExpr, 
28db0 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20  char aff2);.int 
28dc0 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
28dd0 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78  nityOk(Expr *pEx
28de0 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66  pr, char idx_aff
28df0 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c  inity);.char sql
28e00 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74 79  ite3ExprAffinity
28e10 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69  (Expr *pExpr);.i
28e20 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34  nt sqlite3Atoi64
28e30 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36  (const char*, i6
28e40 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  4*, int, u8);.in
28e50 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65  t sqlite3DecOrHe
28e60 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68 61  xToI64(const cha
28e70 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20  r*, i64*);.void 
28e80 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68  sqlite3ErrorWith
28e90 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  Msg(sqlite3*, in
28ea0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  t, const char*,.
28eb0 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
28ec0 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c  3Error(sqlite3*,
28ed0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28ee0 65 33 53 79 73 74 65 6d 45 72 72 6f 72 28 73 71  e3SystemError(sq
28ef0 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
28f00 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42  d *sqlite3HexToB
28f10 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  lob(sqlite3*, co
28f20 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
28f30 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48   n);.u8 sqlite3H
28f40 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a  exToInt(int h);.
28f50 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61  int sqlite3TwoPa
28f60 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  rtName(Parse *, 
28f70 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
28f80 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69  , Token **);..#i
28f90 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
28fa0 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a  _NEED_ERR_NAME).
28fb0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
28fc0 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b  te3ErrName(int);
28fd0 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63  .#endif..const c
28fe0 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53  har *sqlite3ErrS
28ff0 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  tr(int);.int sql
29000 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 50  ite3ReadSchema(P
29010 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43  arse *pParse);.C
29020 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46  ollSeq *sqlite3F
29030 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74  indCollSeq(sqlit
29040 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73  e3*,u8 enc, cons
29050 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f  t char*,int);.Co
29060 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f  llSeq *sqlite3Lo
29070 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  cateCollSeq(Pars
29080 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74  e *pParse, const
29090 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f   char*zName);.Co
290a0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78  llSeq *sqlite3Ex
290b0 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  prCollSeq(Parse 
290c0 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
290d0 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c  Expr);.Expr *sql
290e0 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61  ite3ExprAddColla
290f0 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70  teToken(Parse *p
29100 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f  Parse, Expr*, co
29110 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  nst Token*, int)
29120 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
29130 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72  xprAddCollateStr
29140 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ing(Parse*,Expr*
29150 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45  ,const char*);.E
29160 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
29170 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72  SkipCollate(Expr
29180 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
29190 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73  heckCollSeq(Pars
291a0 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b  e *, CollSeq *);
291b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
291c0 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73  kObjectName(Pars
291d0 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  e *, const char 
291e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
291f0 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 73  VdbeSetChanges(s
29200 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a  qlite3 *, int);.
29210 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e  int sqlite3AddIn
29220 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
29230 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74  nt sqlite3SubInt
29240 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
29250 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  t sqlite3MulInt6
29260 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
29270 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32   sqlite3AbsInt32
29280 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51  (int);.#ifdef SQ
29290 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f  LITE_ENABLE_8_3_
292a0 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74  NAMES.void sqlit
292b0 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f  e3FileSuffix3(co
292c0 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a  nst char*, char*
292d0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
292e0 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  e sqlite3FileSuf
292f0 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66  fix3(X,Y).#endif
29300 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f  .u8 sqlite3GetBo
29310 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72  olean(const char
29320 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20   *z,u8);..const 
29330 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c  void *sqlite3Val
29340 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76  ueText(sqlite3_v
29350 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20  alue*, u8);.int 
29360 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65  sqlite3ValueByte
29370 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  s(sqlite3_value*
29380 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
29390 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73  te3ValueSetStr(s
293a0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69  qlite3_value*, i
293b0 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  nt, const void *
293c0 2c 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ,u8,.           
293d0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69               voi
293e0 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f  d(*)(void*));.vo
293f0 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  id sqlite3ValueS
29400 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76  etNull(sqlite3_v
29410 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  alue*);.void sql
29420 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71  ite3ValueFree(sq
29430 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73  lite3_value*);.s
29440 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71  qlite3_value *sq
29450 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71  lite3ValueNew(sq
29460 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a  lite3 *);.char *
29470 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28  sqlite3Utf16to8(
29480 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
29490 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29   void*, int, u8)
294a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  ;.int sqlite3Val
294b0 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74  ueFromExpr(sqlit
294c0 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38  e3 *, Expr *, u8
294d0 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61  , u8, sqlite3_va
294e0 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  lue **);.void sq
294f0 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41  lite3ValueApplyA
29500 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f  ffinity(sqlite3_
29510 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29  value *, u8, u8)
29520 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
29530 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78  _AMALGAMATION.ex
29540 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
29550 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
29560 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  OpcodeProperty[]
29570 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63  ;.extern const c
29580 68 61 72 20 73 71 6c 69 74 65 33 53 74 72 42 49  har sqlite3StrBI
29590 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  NARY[];.extern c
295a0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
295b0 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54  ar sqlite3UpperT
295c0 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e  oLower[];.extern
295d0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
295e0 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70  char sqlite3Ctyp
295f0 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  eMap[];.extern c
29600 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74  onst Token sqlit
29610 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65  e3IntTokens[];.e
29620 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44  xtern SQLITE_WSD
29630 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43   struct Sqlite3C
29640 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
29650 66 69 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63  fig;.extern Func
29660 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 42  DefHash sqlite3B
29670 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b  uiltinFunctions;
29680 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29690 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20  OMIT_WSD.extern 
296a0 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69  int sqlite3Pendi
296b0 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23  ngByte;.#endif.#
296c0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
296d0 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
296e0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
296f0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
29700 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61  qlite3Reindex(Pa
29710 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
29720 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
29730 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e  te3AlterFunction
29740 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
29750 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65  lite3AlterRename
29760 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
29770 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  cList*, Token*);
29780 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
29790 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67  oken(const unsig
297a0 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20  ned char *, int 
297b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
297c0 4e 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73  NestedParse(Pars
297d0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
297e0 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69   ...);.void sqli
297f0 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
29800 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69  dStatements(sqli
29810 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
29820 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28  e3CodeSubselect(
29830 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
29840 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
29850 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72   sqlite3SelectPr
29860 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ep(Parse*, Selec
29870 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  t*, NameContext*
29880 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
29890 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72  electWrongNumTer
298a0 6d 73 45 72 72 6f 72 28 50 61 72 73 65 20 2a 70  msError(Parse *p
298b0 50 61 72 73 65 2c 20 53 65 6c 65 63 74 20 2a 70  Parse, Select *p
298c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  );.int sqlite3Ma
298d0 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73  tchSpanName(cons
298e0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
298f0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
29900 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
29910 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
29920 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d  lveExprNames(Nam
29930 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a  eContext*, Expr*
29940 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
29950 73 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e 61 6d  solveExprListNam
29960 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
29970 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69   ExprList*);.voi
29980 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
29990 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73  SelectNames(Pars
299a0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
299b0 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64  eContext*);.void
299c0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
299d0 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72  elfReference(Par
299e0 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45  se*,Table*,int,E
299f0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  xpr*,ExprList*);
29a00 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
29a10 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28  lveOrderGroupBy(
29a20 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
29a30 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
29a40 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
29a50 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61  qlite3ColumnDefa
29a60 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c  ult(Vdbe *, Tabl
29a70 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
29a80 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
29a90 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e  rFinishAddColumn
29aa0 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
29ab0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29ac0 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c  AlterBeginAddCol
29ad0 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63  umn(Parse *, Src
29ae0 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71  List *);.CollSeq
29af0 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c   *sqlite3GetColl
29b00 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20  Seq(Parse*, u8, 
29b10 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74  CollSeq *, const
29b20 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71   char*);.char sq
29b30 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70  lite3AffinityTyp
29b40 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75  e(const char*, u
29b50 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
29b60 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c  3Analyze(Parse*,
29b70 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
29b80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76  ;.int sqlite3Inv
29b90 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42  okeBusyHandler(B
29ba0 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e  usyHandler*);.in
29bb0 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28  t sqlite3FindDb(
29bc0 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
29bd0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
29be0 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33  ndDbName(sqlite3
29bf0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
29c00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e  );.int sqlite3An
29c10 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74  alysisLoad(sqlit
29c20 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f  e3*,int iDB);.vo
29c30 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
29c40 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c  IndexSamples(sql
29c50 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76  ite3*,Index*);.v
29c60 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75  oid sqlite3Defau
29c70 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29  ltRowEst(Index*)
29c80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
29c90 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69  gisterLikeFuncti
29ca0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ons(sqlite3*, in
29cb0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  t);.int sqlite3I
29cc0 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71  sLikeFunction(sq
29cd0 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
29ce0 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  *,char*);.void s
29cf0 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61  qlite3SchemaClea
29d00 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d  r(void *);.Schem
29d10 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61  a *sqlite3Schema
29d20 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42  Get(sqlite3 *, B
29d30 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  tree *);.int sql
29d40 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65  ite3SchemaToInde
29d50 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53  x(sqlite3 *db, S
29d60 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66  chema *);.KeyInf
29d70 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
29d80 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  oAlloc(sqlite3*,
29d90 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
29da0 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72  qlite3KeyInfoUnr
29db0 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65  ef(KeyInfo*);.Ke
29dc0 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
29dd0 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f  yInfoRef(KeyInfo
29de0 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
29df0 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64  ite3KeyInfoOfInd
29e00 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78  ex(Parse*, Index
29e10 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
29e20 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69  E_DEBUG.int sqli
29e30 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74  te3KeyInfoIsWrit
29e40 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b  eable(KeyInfo*);
29e50 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
29e60 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71  te3CreateFunc(sq
29e70 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
29e80 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  har *, int, int,
29e90 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20   void *,.  void 
29ea0 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
29eb0 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
29ec0 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f  _value **),.  vo
29ed0 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
29ee0 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
29ef0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76  te3_value **), v
29f00 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
29f10 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e  context*),.  Fun
29f20 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65  cDestructor *pDe
29f30 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64  structor.);.void
29f40 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74   sqlite3OomFault
29f50 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
29f60 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65 61 72   sqlite3OomClear
29f70 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
29f80 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 73  sqlite3ApiExit(s
29f90 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29  qlite3 *db, int)
29fa0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
29fb0 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 50 61  nTempDatabase(Pa
29fc0 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71  rse *);..void sq
29fd0 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69  lite3StrAccumIni
29fe0 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c  t(StrAccum*, sql
29ff0 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e  ite3*, char*, in
2a000 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2a010 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70  lite3StrAccumApp
2a020 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f  end(StrAccum*,co
2a030 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
2a040 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
2a050 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74  ccumAppendAll(St
2a060 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68  rAccum*,const ch
2a070 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2a080 65 33 41 70 70 65 6e 64 43 68 61 72 28 53 74 72  e3AppendChar(Str
2a090 41 63 63 75 6d 2a 2c 69 6e 74 2c 63 68 61 72 29  Accum*,int,char)
2a0a0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53  ;.char *sqlite3S
2a0b0 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74  trAccumFinish(St
2a0c0 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73  rAccum*);.void s
2a0d0 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 65  qlite3StrAccumRe
2a0e0 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a  set(StrAccum*);.
2a0f0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
2a100 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63  ctDestInit(Selec
2a110 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  tDest*,int,int);
2a120 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72  .Expr *sqlite3Cr
2a130 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73  eateColumnExpr(s
2a140 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73  qlite3 *, SrcLis
2a150 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  t *, int, int);.
2a160 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63  .void sqlite3Bac
2a170 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c 69 74  kupRestart(sqlit
2a180 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f  e3_backup *);.vo
2a190 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
2a1a0 55 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62  Update(sqlite3_b
2a1b0 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63  ackup *, Pgno, c
2a1c0 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66  onst u8 *);..#if
2a1d0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2a1e0 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
2a1f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
2a200 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f  lyzeFunctions(vo
2a210 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  id);.int sqlite3
2a220 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c  Stat4ProbeSetVal
2a230 75 65 28 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a  ue(Parse*,Index*
2a240 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  ,UnpackedRecord*
2a250 2a 2c 45 78 70 72 2a 2c 75 38 2c 69 6e 74 2c 69  *,Expr*,u8,int,i
2a260 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
2a270 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45  3Stat4ValueFromE
2a280 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72  xpr(Parse*, Expr
2a290 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76  *, u8, sqlite3_v
2a2a0 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  alue**);.void sq
2a2b0 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 46  lite3Stat4ProbeF
2a2c0 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f  ree(UnpackedReco
2a2d0 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  rd*);.int sqlite
2a2e0 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c  3Stat4Column(sql
2a2f0 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69  ite3*, const voi
2a300 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71  d*, int, int, sq
2a310 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
2a320 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
2a330 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
2a340 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74  he LEMON-generat
2a350 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69  ed parser.*/.voi
2a360 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72  d *sqlite3Parser
2a370 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75  Alloc(void*(*)(u
2a380 36 34 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  64));.void sqlit
2a390 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69  e3ParserFree(voi
2a3a0 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64  d*, void(*)(void
2a3b0 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *));.void sqlite
2a3c0 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69  3Parser(void*, i
2a3d0 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65  nt, Token, Parse
2a3e0 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41  *);.#ifdef YYTRA
2a3f0 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a  CKMAXSTACKDEPTH.
2a400 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72    int sqlite3Par
2a410 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69  serStackPeak(voi
2a420 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  d*);.#endif..voi
2a430 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61  d sqlite3AutoLoa
2a440 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69  dExtensions(sqli
2a450 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  te3*);.#ifndef S
2a460 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f  QLITE_OMIT_LOAD_
2a470 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64  EXTENSION.  void
2a480 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
2a490 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  ensions(sqlite3*
2a4a0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2a4b0 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78  e sqlite3CloseEx
2a4c0 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64  tensions(X).#end
2a4d0 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
2a4e0 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
2a4f0 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69  ACHE.  void sqli
2a500 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72  te3TableLock(Par
2a510 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  se *, int, int, 
2a520 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  u8, const char *
2a530 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
2a540 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  ne sqlite3TableL
2a550 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23  ock(v,w,x,y,z).#
2a560 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2a570 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20  LITE_TEST.  int 
2a580 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75  sqlite3Utf8To8(u
2a590 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a  nsigned char*);.
2a5a0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
2a5b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2a5c0 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e  ALTABLE.#  defin
2a5d0 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65  e sqlite3VtabCle
2a5e0 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20  ar(Y).#  define 
2a5f0 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
2a600 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  X,Y) SQLITE_OK.#
2a610 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2a620 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a  VtabRollback(X).
2a630 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2a640 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23  3VtabCommit(X).#
2a650 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2a660 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30  VtabInSync(db) 0
2a670 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2a680 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20  e3VtabLock(X).# 
2a690 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2a6a0 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20  tabUnlock(X).#  
2a6b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2a6c0 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a  abUnlockList(X).
2a6d0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2a6e0 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58  3VtabSavepoint(X
2a6f0 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f  , Y, Z) SQLITE_O
2a700 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
2a710 74 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59  te3GetVTable(X,Y
2a720 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a  )  ((VTable*)0).
2a730 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71  #else.   void sq
2a740 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73  lite3VtabClear(s
2a750 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
2a760 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  e*);.   void sql
2a770 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65  ite3VtabDisconne
2a780 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ct(sqlite3 *db, 
2a790 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e  Table *p);.   in
2a7a0 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  t sqlite3VtabSyn
2a7b0 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56  c(sqlite3 *db, V
2a7c0 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  dbe*);.   int sq
2a7d0 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
2a7e0 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  k(sqlite3 *db);.
2a7f0 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2a800 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33  abCommit(sqlite3
2a810 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73   *db);.   void s
2a820 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56  qlite3VtabLock(V
2a830 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69  Table *);.   voi
2a840 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  d sqlite3VtabUnl
2a850 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
2a860 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2a870 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c  abUnlockList(sql
2a880 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73  ite3*);.   int s
2a890 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
2a8a0 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69  int(sqlite3 *, i
2a8b0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69  nt, int);.   voi
2a8c0 64 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70  d sqlite3VtabImp
2a8d0 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c  ortErrmsg(Vdbe*,
2a8e0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b   sqlite3_vtab*);
2a8f0 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69  .   VTable *sqli
2a900 74 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c  te3GetVTable(sql
2a910 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
2a920 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2a930 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20  3VtabInSync(db) 
2a940 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30  ((db)->nVTrans>0
2a950 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e   && (db)->aVTran
2a960 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74  s==0).#endif.int
2a970 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e   sqlite3VtabEpon
2a980 79 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74 28 50  ymousTableInit(P
2a990 61 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a  arse*,Module*);.
2a9a0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2a9b0 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c  EponymousTableCl
2a9c0 65 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64  ear(sqlite3*,Mod
2a9d0 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ule*);.void sqli
2a9e0 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61  te3VtabMakeWrita
2a9f0 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ble(Parse*,Table
2aa00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2aa10 56 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50  VtabBeginParse(P
2aa20 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
2aa30 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69  oken*, Token*, i
2aa40 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2aa50 33 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65  3VtabFinishParse
2aa60 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
2aa70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2aa80 61 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a  abArgInit(Parse*
2aa90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2aaa0 74 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72  tabArgExtend(Par
2aab0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  se*, Token*);.in
2aac0 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
2aad0 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a  lCreate(sqlite3*
2aae0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
2aaf0 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69  r *, char **);.i
2ab00 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
2ab10 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a  llConnect(Parse*
2ab20 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73  , Table*);.int s
2ab30 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65  qlite3VtabCallDe
2ab40 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20  stroy(sqlite3*, 
2ab50 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
2ab60 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2ab70 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33  tabBegin(sqlite3
2ab80 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46   *, VTable *);.F
2ab90 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56  uncDef *sqlite3V
2aba0 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74  tabOverloadFunct
2abb0 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75  ion(sqlite3 *,Fu
2abc0 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67  ncDef*, int nArg
2abd0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
2abe0 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e  qlite3InvalidFun
2abf0 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f  ction(sqlite3_co
2ac00 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
2ac10 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c  e3_value**);.sql
2ac20 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74  ite3_int64 sqlit
2ac30 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d  e3StmtCurrentTim
2ac40 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e(sqlite3_contex
2ac50 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2ac60 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64  VdbeParameterInd
2ac70 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20  ex(Vdbe*, const 
2ac80 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  char*, int);.int
2ac90 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72   sqlite3Transfer
2aca0 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33  Bindings(sqlite3
2acb0 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33  _stmt *, sqlite3
2acc0 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73  _stmt *);.void s
2acd0 71 6c 69 74 65 33 50 61 72 73 65 72 52 65 73 65  qlite3ParserRese
2ace0 74 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  t(Parse*);.int s
2acf0 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28  qlite3Reprepare(
2ad00 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Vdbe*);.void sql
2ad10 69 74 65 33 45 78 70 72 4c 69 73 74 43 68 65 63  ite3ExprListChec
2ad20 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20  kLength(Parse*, 
2ad30 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
2ad40 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71   char*);.CollSeq
2ad50 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43   *sqlite3BinaryC
2ad60 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61  ompareCollSeq(Pa
2ad70 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45  rse *, Expr *, E
2ad80 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  xpr *);.int sqli
2ad90 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28  te3TempInMemory(
2ada0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b  const sqlite3*);
2adb0 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2adc0 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e  ite3JournalModen
2add0 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65  ame(int);.#ifnde
2ade0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
2adf0 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43  L.  int sqlite3C
2ae00 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65  heckpoint(sqlite
2ae10 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  3*, int, int, in
2ae20 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74  t*, int*);.  int
2ae30 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75   sqlite3WalDefau
2ae40 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c  ltHook(void*,sql
2ae50 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
2ae60 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23  *,int);.#endif.#
2ae70 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2ae80 49 54 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73  IT_CTE.  With *s
2ae90 71 6c 69 74 65 33 57 69 74 68 41 64 64 28 50 61  qlite3WithAdd(Pa
2aea0 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e  rse*,With*,Token
2aeb0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65  *,ExprList*,Sele
2aec0 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ct*);.  void sql
2aed0 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 73  ite3WithDelete(s
2aee0 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a  qlite3*,With*);.
2aef0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69    void sqlite3Wi
2af00 74 68 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57  thPush(Parse*, W
2af10 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65  ith*, u8);.#else
2af20 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
2af30 57 69 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a  WithPush(x,y,z).
2af40 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57  #define sqlite3W
2af50 69 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23  ithDelete(x,y).#
2af60 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72  endif../* Declar
2af70 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74  ations for funct
2af80 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20  ions in fkey.c. 
2af90 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65  All of these are
2afa0 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20   replaced by.** 
2afb0 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20  no-op macros if 
2afc0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2afd0 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20   is defined. In 
2afe0 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72  this case no for
2aff0 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63  eign.** key func
2b000 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61  tionality is ava
2b010 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f  ilable. If OMIT_
2b020 54 52 49 47 47 45 52 20 69 73 20 64 65 66 69 6e  TRIGGER is defin
2b030 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46  ed but.** OMIT_F
2b040 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f  OREIGN_KEY is no
2b050 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20  t, only some of 
2b060 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  the functions ar
2b070 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a  e no-oped. In.**
2b080 20 74 68 69 73 20 63 61 73 65 20 66 6f 72 65 69   this case forei
2b090 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72 73  gn keys are pars
2b0a0 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72  ed, but no other
2b0b0 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69   functionality i
2b0c0 73 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65  s.** provided (e
2b0d0 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b  nforcement of FK
2b0e0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71   constraints req
2b0f0 75 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65  uires the trigge
2b100 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a  rs sub-system)..
2b110 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2b120 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
2b130 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66  IGN_KEY) && !def
2b140 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2b150 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64  _TRIGGER).  void
2b160 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28   sqlite3FkCheck(
2b170 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2b180 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
2b190 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
2b1a0 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
2b1b0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20  Parse*, SrcList 
2b1c0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f  *, Table*);.  vo
2b1d0 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69  id sqlite3FkActi
2b1e0 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ons(Parse*, Tabl
2b1f0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
2b200 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
2b210 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52    int sqlite3FkR
2b220 65 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20  equired(Parse*, 
2b230 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e  Table*, int*, in
2b240 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  t);.  u32 sqlite
2b250 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65  3FkOldmask(Parse
2b260 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b  *, Table*);.  FK
2b270 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66  ey *sqlite3FkRef
2b280 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29  erences(Table *)
2b290 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
2b2a0 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  e sqlite3FkActio
2b2b0 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a  ns(a,b,c,d,e,f).
2b2c0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2b2d0 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64  3FkCheck(a,b,c,d
2b2e0 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20  ,e,f).  #define 
2b2f0 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62  sqlite3FkDropTab
2b300 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66  le(a,b,c).  #def
2b310 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64  ine sqlite3FkOld
2b320 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20  mask(a,b)       
2b330 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71    0.  #define sq
2b340 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28  lite3FkRequired(
2b350 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 23 65  a,b,c,d)    0.#e
2b360 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
2b370 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2b380 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  _KEY.  void sqli
2b390 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69  te3FkDelete(sqli
2b3a0 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  te3 *, Table*);.
2b3b0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c    int sqlite3FkL
2b3c0 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65  ocateIndex(Parse
2b3d0 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49  *,Table*,FKey*,I
2b3e0 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23  ndex**,int**);.#
2b3f0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2b400 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61  qlite3FkDelete(a
2b410 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,b).  #define sq
2b420 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
2b430 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65  ex(a,b,c,d,e).#e
2b440 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61  ndif.../*.** Ava
2b450 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a  ilable fault inj
2b460 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20  ectors.  Should 
2b470 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69  be numbered begi
2b480 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f  nning with 0..*/
2b490 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2b4a0 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41  FAULTINJECTOR_MA
2b4b0 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69  LLOC     0.#defi
2b4c0 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
2b4d0 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20  NJECTOR_COUNT   
2b4e0 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
2b4f0 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
2b500 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63   code in fault.c
2b510 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69   used for identi
2b520 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a  fying "benign".*
2b530 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  * malloc failure
2b540 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20  s. This is only 
2b550 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54  present if SQLIT
2b560 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
2b570 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65  EST.** is not de
2b580 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  fined..*/.#ifnde
2b590 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
2b5a0 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69  ILTIN_TEST.  voi
2b5b0 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65  d sqlite3BeginBe
2b5c0 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29  nignMalloc(void)
2b5d0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2b5e0 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
2b5f0 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23  void);.#else.  #
2b600 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65  define sqlite3Be
2b610 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
2b620 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2b630 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
2b640 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  oc().#endif../*.
2b650 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72  ** Allowed retur
2b660 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71  n values from sq
2b670 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
2b680 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  ().*/.#define IN
2b690 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20  _INDEX_ROWID    
2b6a0 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63      1   /* Searc
2b6b0 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  h the rowid of t
2b6c0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  he table */.#def
2b6d0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48  ine IN_INDEX_EPH
2b6e0 20 20 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a            2   /*
2b6f0 20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d   Search an ephem
2b700 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23  eral b-tree */.#
2b710 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2b720 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20 20  INDEX_ASC    3  
2b730 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64   /* Existing ind
2b740 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a  ex ASCENDING */.
2b750 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2b760 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20  _INDEX_DESC   4 
2b770 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e    /* Existing in
2b780 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a  dex DESCENDING *
2b790 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2b7a0 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20  EX_NOOP         
2b7b0 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20  5   /* No table 
2b7c0 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63  available. Use c
2b7d0 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a  omparisons */./*
2b7e0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67  .** Allowed flag
2b7f0 73 20 66 6f 72 20 74 68 65 20 33 72 64 20 70 61  s for the 3rd pa
2b800 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
2b810 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e  e3FindInIndex().
2b820 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  .*/.#define IN_I
2b830 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20  NDEX_NOOP_OK    
2b840 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74   0x0001  /* OK t
2b850 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45  o return IN_INDE
2b860 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e  X_NOOP */.#defin
2b870 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45  e IN_INDEX_MEMBE
2b880 52 53 48 49 50 20 20 30 78 30 30 30 32 20 20 2f  RSHIP  0x0002  /
2b890 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73  * IN operator us
2b8a0 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69  ed for membershi
2b8b0 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e  p test */.#defin
2b8c0 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20  e IN_INDEX_LOOP 
2b8d0 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
2b8e0 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73  * IN operator us
2b8f0 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a  ed as a loop */.
2b900 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49  int sqlite3FindI
2b910 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20  nIndex(Parse *, 
2b920 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74  Expr *, u32, int
2b930 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73  *, int*);..int s
2b940 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65  qlite3JournalOpe
2b950 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c  n(sqlite3_vfs *,
2b960 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73   const char *, s
2b970 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69  qlite3_file *, i
2b980 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
2b990 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65  lite3JournalSize
2b9a0 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b  (sqlite3_vfs *);
2b9b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2b9c0 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49  NABLE_ATOMIC_WRI
2b9d0 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  TE.  int sqlite3
2b9e0 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71  JournalCreate(sq
2b9f0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23  lite3_file *);.#
2ba00 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
2ba10 65 33 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65 6d  e3JournalIsInMem
2ba20 6f 72 79 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ory(sqlite3_file
2ba30 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   *p);.void sqlit
2ba40 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e  e3MemJournalOpen
2ba50 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
2ba60 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  ;..void sqlite3E
2ba70 78 70 72 53 65 74 48 65 69 67 68 74 41 6e 64 46  xprSetHeightAndF
2ba80 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50 61 72  lags(Parse *pPar
2ba90 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69  se, Expr *p);.#i
2baa0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
2bab0 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20  R_DEPTH>0.  int 
2bac0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
2bad0 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a  rHeight(Select *
2bae0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2baf0 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
2bb00 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65  Parse*, int);.#e
2bb10 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2bb20 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
2bb30 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65  eight(x) 0.  #de
2bb40 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
2bb50 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29  CheckHeight(x,y)
2bb60 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c  .#endif..u32 sql
2bb70 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e  ite3Get4byte(con
2bb80 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  st u8*);.void sq
2bb90 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38  lite3Put4byte(u8
2bba0 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66  *, u32);..#ifdef
2bbb0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
2bbc0 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76  NLOCK_NOTIFY.  v
2bbd0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
2bbe0 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c  ctionBlocked(sql
2bbf0 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20  ite3 *, sqlite3 
2bc00 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2bc10 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
2bc20 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  cked(sqlite3 *db
2bc30 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2bc40 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
2bc50 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
2bc60 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2bc70 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2bc80 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20  nBlocked(x,y).  
2bc90 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
2bca0 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
2bcb0 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73  d(x).  #define s
2bcc0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2bcd0 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66  Closed(x).#endif
2bce0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2bcf0 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
2bd00 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28  ite3ParserTrace(
2bd10 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a  FILE*, char *);.
2bd20 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
2bd30 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
2bd40 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74  LE IOTRACE exist
2bd50 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61  s then the globa
2bd60 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71  l variable.** sq
2bd70 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20  lite3IoTrace is 
2bd80 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70  a pointer to a p
2bd90 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69  rintf-like routi
2bda0 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72  ne used to.** pr
2bdb0 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20  int I/O tracing 
2bdc0 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69 66  messages..*/.#if
2bdd0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2bde0 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69  E_IOTRACE.# defi
2bdf0 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69  ne IOTRACE(A)  i
2be00 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  f( sqlite3IoTrac
2be10 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72  e ){ sqlite3IoTr
2be20 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20  ace A; }.  void 
2be30 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
2be40 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51  ceSql(Vdbe*);.SQ
2be50 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45 5f  LITE_API SQLITE_
2be60 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51 4c  EXTERN void (SQL
2be70 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74  ITE_CDECL *sqlit
2be80 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74  e3IoTrace)(const
2be90 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c   char*,...);.#el
2bea0 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  se.# define IOTR
2beb0 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20  ACE(A).# define 
2bec0 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
2bed0 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a  ceSql(X).#endif.
2bee0 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75  ./*.** These rou
2bef0 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61  tines are availa
2bf00 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32  ble for the mem2
2bf10 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d  .c debugging mem
2bf20 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a  ory allocator.**
2bf30 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65   only.  They are
2bf40 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20   used to verify 
2bf50 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22  that different "
2bf60 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79  types" of memory
2bf70 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  .** allocations 
2bf80 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61  are properly tra
2bf90 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74  cked by the syst
2bfa0 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  em..**.** sqlite
2bfb0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
2bfc0 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70  () sets the "typ
2bfd0 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74  e" of an allocat
2bfe0 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a  ion to one of.**
2bff0 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d   the MEMTYPE_* m
2c000 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65  acros defined be
2c010 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d  low.  The type m
2c020 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b  ust be a bitmask
2c030 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c   with.** a singl
2c040 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  e bit set..**.**
2c050 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2c060 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e  HasType() return
2c070 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66  s true if any of
2c080 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73   the bits in its
2c090 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d   second.** argum
2c0a0 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79  ent match the ty
2c0b0 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72  pe set by the pr
2c0c0 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65  evious sqlite3Me
2c0d0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e  mdebugSetType().
2c0e0 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
2c0f0 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20  bugHasType() is 
2c100 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65  intended for use
2c110 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29   inside assert()
2c120 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
2c130 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
2c140 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72  ugNoType() retur
2c150 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20  ns true if none 
2c160 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
2c170 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
2c180 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
2c190 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
2c1a0 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
2c1b0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
2c1c0 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73  )..**.** Perhaps
2c1d0 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74   the most import
2c1e0 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65  ant point is the
2c1f0 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
2c200 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50  een MEMTYPE_HEAP
2c210 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f  .** and MEMTYPE_
2c220 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61  LOOKASIDE.  If a
2c230 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20  n allocation is 
2c240 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
2c250 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a  E, that means.**
2c260 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62   it might have b
2c270 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  een allocated by
2c280 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65   lookaside, exce
2c290 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f  pt the allocatio
2c2a0 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72  n was.** too lar
2c2b0 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20  ge or lookaside 
2c2c0 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c  was already full
2c2d0 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61  .  It is importa
2c2e0 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  nt to verify.** 
2c2f0 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  that allocations
2c300 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
2c310 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20   been satisfied 
2c320 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65  by lookaside are
2c330 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62   not.** passed b
2c340 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61  ack to non-looka
2c350 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
2c360 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73  ines.  Asserts s
2c370 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78  uch as the.** ex
2c380 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20  ample above are 
2c390 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f  placed on the no
2c3a0 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
2c3b0 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76  () routines to v
2c3c0 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f  erify.** this co
2c3d0 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20  nstraint..**.** 
2c3e0 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e  All of this is n
2c3f0 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75  o-op for a produ
2c400 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74  ction build.  It
2c410 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f   only comes into
2c420 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68  .** play when th
2c430 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
2c440 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
2c450 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a  ption is used..*
2c460 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
2c470 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20  MEMDEBUG.  void 
2c480 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2c490 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  etType(void*,u8)
2c4a0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
2c4b0 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76  emdebugHasType(v
2c4c0 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
2c4d0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
2c4e0 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  oType(void*,u8);
2c4f0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2c500 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2c510 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20  etType(X,Y)  /* 
2c520 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e  no-op */.# defin
2c530 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
2c540 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31  gHasType(X,Y)  1
2c550 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2c560 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
2c570 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  X,Y)   1.#endif.
2c580 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
2c590 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20  HEAP       0x01 
2c5a0 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70   /* General heap
2c5b0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
2c5c0 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
2c5d0 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20  LOOKASIDE  0x02 
2c5e0 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69   /* Heap that mi
2c5f0 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f  ght have been lo
2c600 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69  okaside */.#defi
2c610 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52 41 54  ne MEMTYPE_SCRAT
2c620 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a 20 53  CH    0x04  /* S
2c630 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f  cratch allocatio
2c640 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
2c650 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20  MTYPE_PCACHE    
2c660 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65 20 63   0x08  /* Page c
2c670 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ache allocations
2c680 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61   */../*.** Threa
2c690 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a  ding interface.*
2c6a0 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
2c6b0 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e  _WORKER_THREADS>
2c6c0 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72  0.int sqlite3Thr
2c6d0 65 61 64 43 72 65 61 74 65 28 53 51 4c 69 74 65  eadCreate(SQLite
2c6e0 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a  Thread**,void*(*
2c6f0 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b  )(void*),void*);
2c700 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65  .int sqlite3Thre
2c710 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72  adJoin(SQLiteThr
2c720 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23  ead*, void**);.#
2c730 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
2c740 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
2c750 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20 7c 7c  _DBSTAT_VTAB) ||
2c760 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2c770 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65  TEST).int sqlite
2c780 33 44 62 73 74 61 74 52 65 67 69 73 74 65 72 28  3DbstatRegister(
2c790 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69  sqlite3*);.#endi
2c7a0 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  f..int sqlite3Ex
2c7b0 70 72 56 65 63 74 6f 72 53 69 7a 65 28 45 78 70  prVectorSize(Exp
2c7c0 72 20 2a 70 45 78 70 72 29 3b 0a 0a 23 65 6e 64  r *pExpr);..#end
2c7d0 69 66 20 2f 2a 20 53 51 4c 49 54 45 49 4e 54 5f  if /* SQLITEINT_
2c7e0 48 20 2a 2f 0a                                   H */.